找到目标函数(损失函数). 最小二乘法.
1
2
m
∑
i
=
1
m
(
y
i
−
y
^
)
\frac{1}{2m}\sum_{i=1}^m(y^i - \hat{y})
2m1i=1∑m(yi−y^)
使用梯度下降找到损失函数取的最小值的时候对应的系数.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.linspace(0,10,20)+ np.random.randn(20)
y = np.linspace(0,10,20)+ np.random.randn(20)
plt.plot(x,y)from sklearn.linear_model import LinearRegression
linear = LinearRegression()
linear.fit(x.reshape(-1,1),y)# 定义预测函数deflinear_model(w, b):return w * x + b
# 定义损失函数defloss(y_true, y_pred):return np.sum((y_true - y_pred)**2)/(2*20)# 使用梯度下降求损失取的最小值的时候,w,b是多少# 先初始化w,b# w一般为一个比较小的数.np.random.randn() * 0.01
w = np.random.randn()*0.01# b 一般初始化为0.
b =0# 定义学习率
learning_rate =0.01
max_iter =10000
i =0
y_true = y
whileTrue:
y_pred = linear_model(w, b)# 更新w,b# (20, ), (20, )
dw =-np.dot((y_true - y_pred), x)/20
db =-np.sum(y_true - y_pred)/20
w = w - learning_rate * dw
b = b - learning_rate * db
# 打印输出中间的训练过程# 每100次打印.if i %100==0:
y_pred = linear_model(w, b)
cost = loss(y_true, y_pred)print(f'W: {w}, B: {b}, 损失: {cost}')# 退出条件.
i +=1if i > max_iter:break
手动实现算法的步骤.找到预测函数. y = wx + b /θX找到目标函数(损失函数). 最小二乘法.12m∑i=1m(yi−y^)\frac{1}{2m}\sum_{i=1}^m(y^i - \hat{y})2m1i=1∑m(yi−y^)使用梯度下降找到损失函数取的最小值的时候对应的系数.import numpy as npimport pandas as pdimport matplotlib.pyplot as pltx = np.linspace(0,10,20)