【发布时间】: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
k 与k0 的镦粗速度有偏差 :-(
我已经阅读了 wiki、google 和此页面右侧推荐的问题,但不知道 :-( Tnanks 很多
【问题讨论】:
-
我看到 unutbu 很好地回答了你的问题,但我只想补充一点,它对
seed()随机数生成器很有用。当数字不断变化时,尝试调试使用随机数的程序可能会很烦人。 :) 您可以为random.seed()提供任何可散列对象作为种子,例如数字或字符串;如果您省略种子或提供None,则它会以系统时间(这是默认种子)为种子。
标签: python machine-learning linear-regression