使用Scikit-Learn和Pandas学习线性回归模型优化

2025-11-20 21:30:31

1、首先我么需要下载公开的数据(循环发电厂的数据)供我们跑机器学习的线性模型,该数据的属性主要有以下5个列属性:

1)AT(温度),

2) V(压力),

3) AP(湿度),

4) RH(压强),

5)PE(输出电力)。

使用Scikit-Learn和Pandas学习线性回归模型优化

使用Scikit-Learn和Pandas学习线性回归模型优化

使用Scikit-Learn和Pandas学习线性回归模型优化

2、其次,明确我们的研究目的,就是使用这些数据得到一个线性的关系,对应PE是样本输出,利用AT/V/AP/RH这4个是样本特征属性, 得到一个线性回归模型,即:PE=θ_0+θ_1*AT+θ_2*V+θ_3*AP+θ_4*RH,我们需要通过数据学习的θ_0、θ_1、θ_2、θ_3、θ_4这5个参数。

3、现在我们需要对下载的数据进行整理

1)对数据文件进行解压缩

2)将xls文件另存为csv文件供我们进行下一步的处理

使用Scikit-Learn和Pandas学习线性回归模型优化

4、导入相关的Python依赖库,读取数据文件

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

from sklearn import datasets, linear_model

# read_csv里面的参数是csv在你电脑上的路径

data = pd.read_csv('F:\ML\CCPP\CCPP\Folds5x2_pp.csv')

#测试打印前5行数据

print(data.head())

使用Scikit-Learn和Pandas学习线性回归模型优化

5、识别数据的维度信息,通过 data.shape可以识别出数据为(9568, 5):

说明数据有9568个样本,每个样本数据有5列。

使用Scikit-Learn和Pandas学习线性回归模型优化

6、构建数据的样本特征

我们用AT, V,AP和RH这4个列作为样本特征属性,PE作为特征输出:

#样本特征

x = data[['AT', 'V', 'AP', 'RH']]

print(x.head())

#样本输出

y = data[['PE']]

print(y.head())

使用Scikit-Learn和Pandas学习线性回归模型优化

7、划分数据模型的训练集和测试集

我们把x和y的数据样本分为两部分数据集,A部分模型训练集,B部分是模型测试集,如下:

from sklearn.cross_validation import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1)

print(x_train.shape)

print(y_train.shape)

print(x_test.shape)

print(y_test.shape)

输出结果为:

(7176, 4)

(7176, 1)

(2392, 4)

(2392, 1)

可以看到大概75%的数据到训练集,25%的数据到测试集

使用Scikit-Learn和Pandas学习线性回归模型优化

8、用scikit-learn的线性模型来拟合我们需要求解的问题,scikit-learn的线性回归算法使用的是最小二乘法来实现的。

#运行线性回归模型进行训练集数据的拟合训练

from sklearn.linear_model import LinearRegression

linearReg = LinearRegression() 

linearReg.fit(x_train, y_train)

#拟合后可以得到模型系数结果:

print(linearReg.intercept_)

print(linearReg.coef_)

最后输出的结果如下:

intercept_:[460.05727267]

coef_:[[-1.96865472 -0.2392946   0.0568509  -0.15861467]]

这样我们就得到了在步骤2里面的需要求得的5个系数值:

PE=θ_0+θ_1*AT+θ_2*V+θ_3*AP+θ_4*RH   

也就是说PE和其他4个变量的关系如下:

PE=460.05727267-1.96865472∗AT-0.2392946∗V+0.0568509∗AP-0.15861467∗RH

使用Scikit-Learn和Pandas学习线性回归模型优化

9、有了我们的训练集输出模型,我么需要评估我们的模型的好坏程度,对于线性回归来说,我们用均方差(Mean Squared Error, MSE)或者均方根差(Root Mean Squared Error, RMSE)在测试集上的表现来评价模型的好坏。

我么需要根据测试集的x特征数据预预测的y数据,最后根据测试集y特征值与预测的特征值进行比对,输出我们模型的MSE和RMSE,MSE说明了我们的模型预测值和测试集y的差异。

------------------

#模型拟合测试集

y_pred = linearReg.predict(x_test)

from sklearn import metrics

# 用scikit-learn计算MSE

print("MSE:")

print(metrics.mean_squared_error(y_test, y_pred))

# 用scikit-learn计算RMSE

print("RMSE")

print(np.sqrt(metrics.mean_squared_error(y_test, y_pred)))

使用Scikit-Learn和Pandas学习线性回归模型优化

10、如何优化我们的模型

我们可以使用AT, V,AP和RH中的2个或3个进行交叉验证,看看使用2个或3个特征属性值得到的拟合模型,最后的MSE的值差别 ,MSE值越小说明该模型越准确,这样我们就可以进行模型的优化,获得到最好的模型。

11、最后我们通过画图的方式显示真实值和预测值的变化关系,离中间的直线y=x直接越近的点代表预测损失越低。

将测量值和预测值进行图表展现:

y_pred = linearReg.predict(x)

plt.figure()

plt.title("Model Star")

plt.xlabel("Measured")

plt.ylabel("Predicted")

plt.grid(True)

plt.plot(y,y_pred,'r.')

plt.show()

使用Scikit-Learn和Pandas学习线性回归模型优化

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢