这里为了更好的记录梯度下降法的逻辑,用简单的二元线性回归方程来模拟梯度下降法来找到最小值,然后以后也可以将这个逻辑来寻找最小最优算法
1、通过一点点的向最小值靠近,然后判断跟下一个点对应的损失函数的值是否相等或者低于某一个值,来判断是否已经处于一个不再下降的点![](https://i-blog.csdnimg.cn/blog_migrate/7f10e7e329bedbfaa136a70da62fd105.png)
所以得出线性回归的损失函数是MSE,也就是均方误差,然后对均方误差求导,就能得到梯度值,具体实现代码如下,以简单线性回归方程为例
import numpy as np
from matplotlib import pyplot as plt
def J(x):
return (x - 3) ** 2 + 1
def dJ(x):
return 2*(x-3)
x = np.linspace(-1, 7, 140)
y = J(x)
plt.plot(x, y)
def find(num) :
theta = 0.0
n = 0.5
e = 1e-8
thetaList = [theta]
while num >= 0:
lastTheta = theta
theta = lastTheta - n*dJ(theta)
thetaList.append(theta)
if abs(J(lastTheta) - J(theta)) < e:
break
num -= 1
return np.array(thetaList)
thetas = find(100)
yFind = J(thetas)
print(yFind)
#return False
plt.plot(thetas, yFind, color='r', marker = '+')
plt.show()
结果: