如何对方程ax²+ bx + c应用梯度下降?

问题描述

我想对等式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)

,成本函数的值趋于无穷大。

成本函数与迭代次数的关系图:

cost function vs number of iteration graph

请告诉我您可以想到的正确区分或任何其他解决方案 谢谢

解决方法

的派生词

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

是最小值。

enter image description here