在發電場中電力輸出(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
