问题描述
我想对等式ax²+ bx + c应用梯度下降,以查看其在样本数据集上是否具有更好的精度。 我已经使用了代码
cost = (1/2) * (sum(((y - y_current)**2)))
a_gradient = -sum(mul(X,X)*(y - y_current))
b_gradient = -sum(X * (y - y_current))
c_gradient = -sum(y - y_current)
其中,y当前是预测的Y。 我认为问题出在未知变量(a,b,c)的微分,因为在使用此代码时遇到此错误。
<ipython-input-73-3e57c8f474a1>:11: RuntimeWarning: invalid value encountered in double_scalars
a_current = a_current - (learning_rate * a_gradient)
,成本函数的值趋于无穷大。
请告诉我您可以想到的正确区分或任何其他解决方案 谢谢
解决方法
的派生词
ax 2 + bx + c
是
2 a x + b
要应用梯度下降,您需要减去导数 2 a x + b 乘以学习率,根据每个步骤计算出的新值
Y 上一个 = Y 预测的
Y 预测的 = Y 预测的-l r (2aY 上一个 + b)
其中 lr 是学习率,Y previous 是初始值。
例如,函数 3x 2 + 4x + 1 的根是 -1 和 -1/3 ,而导数为 6x + 4 。将起点设置为 3.0
y0=3.0
lr=0.01
y=lr*(6*y0+4)
while abs(y-y0)>0.00000001:
y0=y
y=y-lr*(6*y0+4)
print(y)
-0.6666666622832803
是最小值。