线性回归的模型是对存在线性关系的x,y进行拟合。同时时候一个有监督的学习。
线性回归算法原理
运算过程
1.设定模型
𝜃的值是随机创建
2.计算代价 cost mse 均方误差
3.计算梯度下降过程
3.1计算𝜃的导数
3.2更新𝜃的值
import numpy as np
import matplotlib.pyplot as plt
数据预处理的过程
x = np.array([4, 3, 3, 4, 2, 2, 0, 1, 2, 5, 1, 2, 5, 1, 3])
y = np.array([8, 6, 6, 7, 4, 4, 2, 4, 5, 9, 3, 4, 8, 3, 6])
m = len(x)#获取样本的数量
#x增加一列1
x = np.c_[np.ones([m, 1]), x]
print(x)
print(x.shape)
#为了后续维度对应,y也做维度变化
y = y.reshape(15, 1)
print(y.shape)
print(y)
𝜃的值是随机创建
theta = np.zeros([2, 1])
print(theta)
1.设定模型
2.计算代价 cost mse 均方误差
3.计算梯度下降过程
3.1计算𝜃的导数 Δ𝜃=1/𝑚𝑥𝑇𝑒𝑟𝑟𝑜𝑟
3.2更新𝜃的值
𝜃:=𝜃−𝛼Δ𝜃
# 超参数alpha 学习率 步长
alpha = 0.01
#迭代次数
m_iter = 1000
#定义一个数组,存储所有的代价数据
cost = np.zeros([m_iter])
for i in range(m_iter):
y_hat = x.dot(theta)#求预测值
error = y_hat - y #误差值
cost_val = 1 / 2 * m *error.T.dot(error)#代价值
cost[i] = cost_val#记录代价值
delta_theta = 1 / m * x.T.dot(error)#求导数
theta = theta - alpha * delta_theta#更新参数
print(theta)
#使用图形进行演示
plt.scatter(x[:,1], y, c='blue')# x有两列数据
plt.plot(x[:, 1], y_hat, 'r-')#预测模型
plt.show()
#代价值的显示
plt.plot(cost)
plt.show()
其实这个效果并不好,后面的变化并不大,所以不需要迭代1000次,应该尽早结束!!