用线性回归方程来模拟梯度下降法

这里为了更好的记录梯度下降法的逻辑,用简单的二元线性回归方程来模拟梯度下降法来找到最小值,然后以后也可以将这个逻辑来寻找最小最优算法

1、通过一点点的向最小值靠近,然后判断跟下一个点对应的损失函数的值是否相等或者低于某一个值,来判断是否已经处于一个不再下降的点用线性回归方程来模拟梯度下降法_第1张图片

用线性回归方程来模拟梯度下降法_第2张图片

用线性回归方程来模拟梯度下降法_第3张图片

用线性回归方程来模拟梯度下降法_第4张图片

所以得出线性回归的损失函数是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()        

结果:

用线性回归方程来模拟梯度下降法_第5张图片

你可能感兴趣的:(python,机器学习)