关于dJ_sgd
来源:6-7 scikit-learn中的随机梯度下降法

伊利札洛夫
2019-01-27
def dJ_sgd(theta, X_b_i, y_i):
return X_b_i *(X_b_i.dot(theta) - y_i) * 2.
在之前一个问题中也看到了, 但还是不理解这里的dJ_sgd 怎么返回一个n+1的列向量的?
左边的X_b_i 不需要转置吗?
gradient = dJ_sgd(theta, X_b_new[i], y_new[i])
theta = theta - learning_rate(i_iter * m + i) * gradient
下面的gradient与theta又是什么shape呢?
写回答
1回答
-
X_b_i 是一个含有n + 1个元素的向量;
X_b_i.dot(theta)是一个数;
(X_b_i.dot(theta) - y_i) 是一个数(y_i也是一个数);
(X_b_i.dot(theta) - y_i) * 2是一个数;
因为X_b_i是一个含有n+1个元素的向量,这个向量乘以一个数,还是一个含有n+1个元素的向量;
X_b_i *(X_b_i.dot(theta) - y_i) * 2 是一个含有n+1个元素的向量。
所以gradient是一个含有n+1个元素的向量。
theta也是一个含有n+1个元素的向量。
theta = theta - learning_rate(i_iter * m + i) * gradient还是一个含有n+1个元素的向量。
在这里,要注意。向量就是向量。向量本身是没有行列的区别的。向量就是一个一维数组。就是一个含有若干个元素的有序数列。行向量和列向量是在二维空间才有的概念。只是我们在手写公式的时候,喜欢把向量写成列的样子,但是向量就是向量,他是一维的。
012019-01-27
相似问题