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() # 显示图形
结合数据隔离对温度预测实战(多项式特征优化模型)
最新推荐文章于 2024-06-02 16:48:54 发布