【发布时间】:2018-10-24 00:13:07
【问题描述】:
我正在通过考虑偏导数 (df/dm) 和 (df/db) 手动实现线性回归的随机梯度下降
目标是我们必须随机选择 w0(权重)然后收敛它们。 由于这是随机的,我们必须在每次运行时抽取数据集的样本
学习率最初应该是 1,每次运行后它应该减少 2 所以当 wK+1 等于 wK (k=1,2,3,......) 那么循环应该停止
这是在 Sklearn 中的波士顿数据集上实现的
因为我是 python 新手,所以没有使用函数 下面是代码:
r= 1
m_deriv = 0
b_deriv = 0
learning_rate = 1
it = 1
w0_random = np.random.rand(13)
w0 = np.asmatrix(w0_random).T
b = np.random.rand()
b0 = np.random.rand()
while True:
df_sample = bos.sample(100)
price = df_sample['price']
price = np.asmatrix(price)
xi = np.asmatrix(df_sample.drop('price',axis=1))
N = len(xi)
for i in range(N):
# -2x * (y-(mx +b))
m_deriv += np.dot(-2*xi[i].T , (price[:,i] - np.dot(xi[i] , w0_random) + b))
# -2(y - (mx + b))
b_deriv += -2*(price[:,i] - (np.dot(xi[i] , w0_random) + b))
w0_new = m_deriv * learning_rate
b0_new = b_deriv * learning_rate
w1 = w0 - w0_new
b1 = b0 - b0_new
it += 1
if (w0==w1).all():
break
else:
w0 = w1
b0 = b1
learning_rate = learning_rate/2
当循环运行时,w 和 b 的值都很大。他们没有正确收敛 循环哪里出错了,所以它导致了更高的值以及如何解决它。
【问题讨论】:
标签: python pandas numpy gradient-descent