我是机器学习的新手,我正在尝试通过梯度下降对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
安定的速度偏离:-(
我已经读过维基,谷歌和本页右边建议的问题,但不知道:-(非常感谢
减小您的“学习率”(例如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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句