我试图在我根据随机数创建的数据帧上实现梯度下降。
X_b
是具有拦截项(x0 = 1
)和另一个特征的扩展特征矩阵,因此X_b是(80,2)ndarray。
我从train_set
数据帧中提取了y-vector,并将其转换为ndarray,它的尺寸为(80,)
在将特征矩阵与theta向量相乘后,我得到了(80,1)向量,我打算从中减去y向量,但最终却得到了我不理解的(80,80)矩阵。
相反,当我用y.reshape(80, 1)
重塑y向量时,它给了我预期的尺寸为(80,1)的差向量,而没有汗水。
第一种情况出了什么问题?我刚刚开始学习机器学习和Numpy,因此对任何愚蠢的错误表示歉意。谢谢。
X = np.random.rand(100, 1)
y = 4 + 3 * x + np.random.randn(100, 1)
def train_test_split_df(dataframe, test_ratio):
shuffled_indices = np.random.permutation(len(dataframe))
test_set_size = int(len(dataframe) * test_ratio)
test_indices = shuffled_indices[:test_set_size]
train_indices = shuffled_indices[test_set_size:]
return dataframe.iloc[train_indices] , dataframe.iloc[test_indices]
train_set, test_set = train_test_split_df(X_df, 0.2)
theta = np.random.rand(2, 1)
X_b = np.c_[np.ones((len(train_set), 1)), train_set.iloc[:, :-1]]
#X_b.shape = (80, 2)
y = np.array(train_set.iloc[:, -1])
#y.shape is (80,)
#(X_b.dot(theta) - y).shape = (80, 80)