关于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回答

liuyubobobo

2019-01-27

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个元素的向量。


在这里,要注意。向量就是向量。向量本身是没有行列的区别的。向量就是一个一维数组。就是一个含有若干个元素的有序数列。行向量和列向量是在二维空间才有的概念。只是我们在手写公式的时候,喜欢把向量写成列的样子,但是向量就是向量,他是一维的。

0
1
伊利札洛夫
明白了 又返回去把numpy的概念过了一下,感谢bobo老师!
2019-01-27
共1条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5893 学习 · 2455 问题

查看课程