为什么这种具有梯度下降的简单线性回归不起作用?

时间:2014-09-20 10:19:13

标签: python machine-learning linear-regression

我是机器学习的新手,我试图通过渐变下降对f(x)= kx进行线性回归。 并且

d(f(x)-y)^2 / dk 

=2(f(x)-y) * d(kx-y) / dk

=2x(f(x)-y)

=2x(kx-y)

因此,按k = k - rate * 2x(kx-y)按渐变下降更新k。

这正是它在教科书上的表达方式,所以我认为这样可行: - (

from random import uniform
k,k0=uniform(-100,100),uniform(-100,100)
for _ in range(10):
    x=uniform(-100,100)
    k=k-0.01*x*(k*x-k0*x)
    print k,k0

可悲的是,输出:

-2639.75970458 -72.294275335
56444.9277867 -72.294275335
-350533.559366 -72.294275335
-315222.824967 -72.294275335
26481249.7869 -72.294275335
25795070.4808 -72.294275335
-329558179.012 -72.294275335
22212688252.9 -72.294275335
-2.2317104093e+11 -72.294275335
1.61788553661e+12 -72.294275335

k以沮丧的速度偏离k0: - (

我已经阅读了维基,谷歌以及本页右侧推荐的问题,但不知道:-(Tnanks很多

1 个答案:

答案 0 :(得分:2)

让您的“学习率”(例如0.01)变小,迭代次数N变大:

from random import uniform
learning_rate = 0.0001
N = 100
k, k0 = uniform(-100, 100), uniform(-100, 100)
for _ in range(N):
    x = uniform(-100, 100)
    k = k - learning_rate * x * (k * x - k0 * x)
    print k, k0