Python线性回归应用举例
在发电场中电力输出(PE)与温度(AT)、压力(V)、湿度(AP)、压强(RH)有关。
(1)利用线性回归分析命令,求出其之间的线性回归关系数向量(包括常数项)和拟合优度
(2)AT=28.4,V=50.6,AP=1011.9,RH=80.54 预测PE值
1、读取数据,确定自变量x、因变量y
import pandas as pd
data = pd.read_excel('发电场数据.xlsx')
data
AT | V | AP | RH | PE | |
---|---|---|---|---|---|
0 | 14.96 | 41.76 | 1024.07 | 73.17 | 463.26 |
1 | 25.18 | 62.96 | 1020.04 | 59.08 | 444.37 |
2 | 5.11 | 39.40 | 1012.16 | 92.14 | 488.56 |
3 | 20.86 | 57.32 | 1010.24 | 76.64 | 446.48 |
4 | 10.82 | 37.50 | 1009.23 | 96.62 | 473.90 |
... | ... | ... | ... | ... | ... |
9563 | 16.65 | 49.69 | 1014.01 | 91.00 | 460.03 |
9564 | 13.19 | 39.18 | 1023.67 | 66.78 | 469.62 |
9565 | 31.32 | 74.33 | 1012.92 | 36.48 | 429.57 |
9566 | 24.48 | 69.45 | 1013.86 | 62.39 | 435.74 |
9567 | 21.60 | 62.52 | 1017.23 | 67.87 | 453.28 |
9568 rows × 5 columns
#dataframe.values将Dataframe的表格型数据转换成数组
x = data.iloc[:,0:4].values
x
array([[ 14.96, 41.76, 1024.07, 73.17],
[ 25.18, 62.96, 1020.04, 59.08],
[ 5.11, 39.4 , 1012.16, 92.14],
...,
[ 31.32, 74.33, 1012.92, 36.48],
[ 24.48, 69.45, 1013.86, 62.39],
[ 21.6 , 62.52, 1017.23, 67.87]])
y = data.iloc[:,4].values
y
array([463.26, 444.37, 488.56, ..., 429.57, 435.74, 453.28])
2、线性回归分析
#导入线性回归模块(LR)
from sklearn.linear_model import LinearRegression as LR
#利用LR创建线性回归对象lr
lr = LR()
#调用lr对象中的fit()方法,对数据进行拟合训练
lr.fit(x,y)
LinearRegression()
#调用lr对象中的score()方法,返回其拟合优度(判定系数),观察线性关系是否显著
Slr = lr.score(x,y) #判定系数R²
Slr
0.9286960898122536
#取lr对象中的coef_、intercept_属性,返回x对象的回归系数和回归系数常数项
c_x = lr.coef_
print('回归系数:{}'.format(c_x))
c_b = lr.intercept_
print('回归系数常数项:{}'.format(c_b))
回归系数:[-1.97751311 -0.23391642 0.06208294 -0.1580541 ]
回归系数常数项:454.60927431531076
3、利用线性回归模型进行预测
#可以利用lr对象中的predict()方法进行预测
import numpy as np
x1 = np.array([28.4,50.6,1011.9,80.54])
x1
array([ 28.4 , 50.6 , 1011.9 , 80.54])
#升维
x1 = x1.reshape(1,4)
x1
array([[ 28.4 , 50.6 , 1011.9 , 80.54]])
R1 = lr.predict(x1)
R1
array([436.70378447])
#当然,也可以利用线性回归方程进行预测
r1 = x1*c_x
r1
array([[-56.16137223, -11.83617098, 62.82173081, -12.72967745]])
r1.sum()
-17.905489848159824
R2 = r1.sum()+c_b
R2
436.7037844671509