使用最小二乘法进行线性回归(Python)

已知测得某块地,当温度处于15至40度之间时,数得某块草地上小花朵的数量和温度值的数据如下表所示。现在要来找出这些数据中蕴含的规律,用来预测其它未测温度时的小花朵的数量。
测得数据如下图所示:



import matplotlib.pyplot as plt
import numpy as np
temperatures = [15, 20, 25, 30, 35, 40] 
flowers = [136, 140, 155, 160, 157, 175]
def least_square(X, Y):
 '''
 计算最小二乘法的回归系数
 para X: 矩阵,样本特征矩阵,通常包含自变量
 para Y: 矩阵,标签向量,通常包含因变量
 return: 矩阵,回归系数
 '''
 # 使用最小二乘法公式计算回归系数 W
 # W = (X^T * X)^-1 * X^T * Y
 W = (X * X.T).I * X * Y.T
 return W
# 创建包含样本的特征矩阵 X
# 第一行是全1的数组,用于截距项,第二行是 temperatures 列表中的元素
X = np.mat([[1, 1, 1, 1, 1, 1], temperatures])
# 创建标签矩阵 Y,包含花朵数量数据
Y = np.mat(flowers)
# 计算回归系数 W
W = least_square(X, Y)
import matplotlib.pyplot as plt
# 设置 Matplotlib 的字体样式,以支持中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 绘制散点图,显示温度与花朵数量之间的关系
plt.scatter(temperatures, flowers, color="green", label="花朵数量", linewidth=2)
# 绘制数据点形成的线条
plt.plot(temperatures, flowers, linewidth=1)
# 创建 x1 数据,用于生成拟合直线
# linspace 生成15到40之间的100个均匀分布的值
x1 = np.linspace(15, 40, 100)
# 根据回归系数 W 计算对应的 y1 值
y1 = W[1, 0] * x1 + W[0, 0]
# W[1, 0]为w,W[0, 0]为b,y1= w*x1 + b
# 绘制拟合直线
plt.plot(x1, y1, color="red", label="拟合直线", linewidth=2, linestyle='-.')
# 添加图例,并设置位置
plt.legend(loc='lower right')
# 显示图形
plt.show()

作者:你这过氧化氢掺水了原文地址:https://www.cnblogs.com/h4o3/p/18515048

%s 个评论

要回复文章请先登录注册