采用线性回归实现训练和预测(Python)
已知测得某块地,当温度处于15至40度之间时,数得某块草地上小花朵的数量和温度值的数据如下表所示。现在要来找出这些数据中蕴含的规律,用来预测其它未测温度时的小花朵的数量。
测得数据如下图所示:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression # 导入线性回归模型
from sklearn.model_selection import train_test_split # 导入模型训练和测试的划分工具
# 定义温度和花朵数量的数据
temperatures = [15, 20, 25, 30, 35, 40] # 温度数据
flowers = [136, 140, 155, 160, 157, 175] # 相应的花朵数量数据
# 将数据转换为numpy数组并调整形状
# temperatures 需要转换为二维数组以适应 sklearn 的输入要求
temperatures = np.array(temperatures).reshape(-1, 1)
flowers = np.array(flowers) # flowers 数据保持一维
# 创建线性回归模型
model = LinearRegression() # 实例化线性回归模型
# 拟合模型
model.fit(temperatures, flowers) # 用温度和花朵数量拟合模型
# 输出模型参数
# 截距和系数是线性回归模型的结果
print(f"截距: {model.intercept_}") # 输出截距
print(f"系数: {model.coef_[0]}") # 输出温度的系数
# 用模型进行预测
predicted_flowers = model.predict(temperatures) # 根据温度数据预测花朵数量
# 可视化结果
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体以支持中文
plt.rcParams['axes.unicode_minus'] = False # 支持负号显示
plt.scatter(temperatures, flowers, color='blue', label='实际数据') # 绘制实际数据的散点图
plt.plot(temperatures, predicted_flowers, color='red', label='拟合线') # 绘制模型拟合的直线
plt.xlabel('温度') # x轴标签
plt.ylabel('花朵数量') # y轴标签
plt.title('温度与花朵数量的线性回归') # 图表标题
plt.legend() # 显示图例
plt.show() # 显示图表
# 预测新数据点(例如,温度=27)
new_temperatures = np.array([[27]]) # 创建一个新的温度数据点,形状为二维数组
predicted_new_flowers = model.predict(new_temperatures) # 用模型预测此温度下的花朵数量
print(f"当温度为27度时,预测的花朵数量为: {predicted_new_flowers[0]:.2f}") # 输出预测结果,保留两位小数