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