【问题标题】:Why won't this simple linear regression with gradient descend works?为什么这种带有梯度下降的简单线性回归不起作用?
【发布时间】:2014-09-20 10:19:13
【问题描述】:

我是机器学习的新手,我正在尝试通过梯度下降对 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

kk0 的镦粗速度有偏差 :-(

我已经阅读了 wiki、google 和此页面右侧推荐的问题,但不知道 :-( Tnanks 很多

【问题讨论】:

  • 我看到 unutbu 很好地回答了你的问题,但我只想补充一点,它对seed() 随机数生成器很有用。当数字不断变化时,尝试调试使用随机数的程序可能会很烦人。 :) 您可以为random.seed() 提供任何可散列对象作为种子,例如数字或字符串;如果您省略种子或提供None,则它会以系统时间(这是默认种子)为种子。

标签: python machine-learning linear-regression


【解决方案1】:

使您的“学习率”(例如 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

【讨论】:

    猜你喜欢
    • 2016-10-31
    • 2021-06-24
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多