结合数据隔离对温度预测实战(多项式特征优化模型)

import pandas as pd  # 导入Pandas库,用于数据处理和分析
import numpy as np  # 导入NumPy库,用于数值计算
from matplotlib import pyplot as plt  # 导入Matplotlib库,用于绘图
from sklearn.linear_model import LinearRegression  # 导入线性回归模型
from sklearn.metrics import r2_score  # 导入R2评分指标
from sklearn.preprocessing import PolynomialFeatures  # 导入多项式特征转换器

# 1. 读取数据进行预览
data_train = pd.read_csv("D:/pythonDATA/T-R-train.csv")  # 读取训练数据集
print(data_train.head())  # 打印训练数据集的前几行,进行预览
X_train = data_train.loc[:, 'T']  # 提取训练集中的特征列'T'
y_train = data_train.loc[:, 'rate']  # 提取训练集中的标签列'rate'

data_test = pd.read_csv("D:/pythonDATA/T-R-test.csv")  # 读取测试数据集
print(data_test.head())  # 打印测试数据集的前几行,进行预览
X_test = data_test.loc[:, 'T']  # 提取测试集中的特征列'T'
y_test = data_test.loc[:, 'rate']  # 提取测试集中的标签列'rate'

# 2. 绘图
fig1 = plt.figure(figsize=(5, 5))  # 创建绘图窗口
plt.scatter(X_train, y_train)  # 绘制散点图,展示训练数据的分布
plt.title('raw data')  # 设置图表标题
plt.xlabel('temperature')  # 设置X轴标签
plt.ylabel('rate')  # 设置Y轴标签
plt.show()  # 显示图形

# 3. 将X_train转为一维数组(因为不转换的话会因为纬度的问题无法建立下面的线性回归模型)
X_train = np.array(X_train).reshape(-1, 1)  # 将训练集特征转换为二维数组
X_test = np.array(X_test).reshape(-1, 1)  # 将测试集特征转换为二维数组

# 4. 基于训练集建立线性回归模型
lr1 = LinearRegression()  # 创建线性回归模型对象
lr1.fit(X_train, y_train)  # 使用训练数据拟合线性回归模型

# 5. 做出预测
y_train_predict = lr1.predict(X_train)  # 对训练集进行预测
y_test_predict = lr1.predict(X_test)  # 对测试集进行预测

# 6. 根据y_train和y_test标签进行模型的评估
r2_train = r2_score(y_train, y_train_predict)  # 计算训练集的R2评分
r2_test = r2_score(y_test, y_test_predict)  # 计算测试集的R2评分
print('training r2:', r2_train)  # 打印训练集的R2评分
print('test r2:', r2_test)  # 打印测试集的R2评分

# 7. 生成新数据
X_range = np.linspace(40, 90, 300).reshape(-1, 1)  # 创建新的特征数据
y_range_predict = lr1.predict(X_range)  # 对新数据进行预测

# 8. 可视化新数据
fig2 = plt.figure(figsize=(10, 10))  # 创建绘图窗口
plt.plot(X_range, y_range_predict)  # 绘制预测曲线
plt.scatter(X_train, y_train)  # 绘制训练数据散点图
plt.title('prediction data')  # 设置图表标题
plt.xlabel('temperature')  # 设置X轴标签
plt.ylabel('rate')  # 设置Y轴标签
plt.show()  # 显示图形

# 9. 加入多项式特征
poly2 = PolynomialFeatures(degree=2)  # 创建2次多项式特征转换器
X_2_train = poly2.fit_transform(X_train)  # 对训练集特征进行多项式转换
X_2_test = poly2.fit_transform(X_test)  # 对测试集特征进行多项式转换
poly5 = PolynomialFeatures(degree=5)  # 创建5次多项式特征转换器
X_5_train = poly5.fit_transform(X_train)  # 对训练集特征进行多项式转换
X_5_test = poly5.fit_transform(X_test)  # 对测试集特征进行多项式转换
print(X_2_train.shape)  # 打印转换后的特征维度
print(X_5_train.shape)  # 打印转换后的特征维度

# 10. 训练以及评估模型
lr2 = LinearRegression()  # 创建线性回归模型对象
lr2.fit(X_2_train, y_train)  # 使用2次多项式特征拟合线性回归模型
y_2_train_predict = lr2.predict(X_2_train)  # 对训练集进行预测
y_2_test_predict = lr2.predict(X_2_test)  # 对测试集进行预测
r2_2_train = r2_score(y_train, y_2_train_predict)  # 计算2次多项式模型的训练集R2评分
r2_2_test = r2_score(y_test, y_2_test_predict)  # 计算2次多项式模型的测试集R2评分

lr5 = LinearRegression()  # 创建线性回归模型对象
lr5.fit(X_5_train, y_train)  # 使用5次多项式特征拟合线性回归模型
y_5_train_predict = lr5.predict(X_5_train)  # 对训练集进行预测
y_5_test_predict = lr5.predict(X_5_test)  # 对测试集进行预测
r2_5_train = r2_score(y_test, y_5_test_predict)  # 计算5次多项式模型的训练集R2评分
r2_5_test = r2_score(y_test, y_5_test_predict)  # 计算5次多项式模型的测试集R2评分

print('training r2_2:', r2_2_train)  # 打印2次多项式模型的训练集R2评分
print('test r2_2:', r2_2_test)  # 打印2次多项式模型的测试集R2评分
print('training r2_5:', r2_5_train)  # 打印5次多项式模型的训练集R2评分
print('test r2_5:', r2_5_test)  # 打印5次多项式模型的测试集R2评分

# 11. 生成新数据并进行预测
X_2_range = np.linspace(40, 90, 300).reshape(-1, 1)  # 创建新的特征数据
X_2_range = poly2.transform(X_2_range)  # 对新数据进行多项式转换
y_2_range_predict = lr2.predict(X_2_range)  # 对新数据进行预测

X_5_range = np.linspace(40, 90, 300).reshape(-1, 1)  # 创建新的特征数据
X_5_range = poly5.transform(X_5_range)  # 对新数据进行多项式转换
y_5_range_predict = lr5.predict(X_5_range)  # 对新数据进行预测

# 12. 可视化二阶数据
fig3 = plt.figure(figsize=(10, 10))  # 创建绘图窗口
plt.plot(X_range, y_2_range_predict)  # 绘制预测曲线
plt.scatter(X_train, y_train)  # 绘制训练数据散点图
plt.scatter(X_test, y_test)  # 绘制测试数据散点图
plt.title('polynomial prediction result (2)')  # 设置图表标题
plt.xlabel('temperature')  # 设置X轴标签
plt.ylabel('rate')  # 设置Y轴标签
plt.show()  # 显示图形

# 13. 可视化五阶数据
fig4 = plt.figure(figsize=(10, 10))  # 创建绘图窗口
plt.plot(X_range, y_5_range_predict)  # 绘制预测曲线
plt.scatter(X_train, y_train)  # 绘制训练数据散点图
plt.scatter(X_test, y_test)  # 绘制测试数据散点图
plt.title('polynomial prediction result (5)')  # 设置图表标题
plt.xlabel('temperature')  # 设置X轴标签
plt.ylabel('rate')  # 设置Y轴标签
plt.show()  # 显示图形

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fairy要carry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值