熱線電話:13121318867

登錄
首頁精彩閱讀如何使用線性回歸分析來預測發電廠的發電量
如何使用線性回歸分析來預測發電廠的發電量
2016-10-17
收藏

如何使用線性回歸分析來預測發電廠的發電量

在這篇文章中,我將會教大家如何通過擬合一個線性回歸模型來預測聯合循環發電廠(CCPP)的發電量。這個數據集則來自于UCI Machine Learning Repository。這個數據集包含5列,也就是說,它包含環境溫度(AT)、環境壓力(AP)、相對濕度(RH)、抽真空(EV)已經發電廠的電網每小時的發電量。前面4個變量作為屬性,最后一個則作為因變量。

讀取和分解數據

由于數據是xlsx格式,我們需要xlsx包。我們將提取數據文件中的第一個表格。

  1. library(xlsx)
  2. powerData <- read.xlsx('Folds5x2_pp.xlsx', 1)
  3. head(powerData)
  4. AT V AP RH PE
  5. 1 14.96 41.76 1024.07 73.17 463.26
  6. 2 25.18 62.96 1020.04 59.08 444.37
  7. 3 5.11 39.40 1012.16 92.14 488.56
  8. 4 20.86 57.32 1010.24 76.64 446.48
  9. 5 10.82 37.50 1009.23 96.62 473.90
  10. 6 26.27 59.44 1012.23 58.77 443.67

接下來,我們需要把數據集分成訓練數據集和測試數據集。就像它們的名字所暗示的那樣,訓練數據集用于訓練和建立模型,然后使用測試數據集對模型進行測試?,F在,我們把75%的數據集作為訓練數據集,和25%的數據作為測試數據集。我們可以按照下面的步驟操作:

  1. set.seed(123)
  2. split <- sample(nrow(powerData), size = floor(0.75 * nrow(powerData)))
  3. trainData <- powerData[split, ]
  4. testData <- powerData[-split, ]
  5. head(trainData)
  6. head(testdata)
  7. AT V AP RH PE
  8. 2752 29.14 67.45 1015.51 46.47 433.34
  9. 7542 24.67 70.94 1007.99 75.64 443.51
  10. 3913 20.84 51.19 1008.63 84.11 448.98
  11. 8447 31.73 74.67 1016.38 44.51 425.34
  12. 8995 4.44 38.44 1016.14 75.35 486.53
  13. 436 9.43 37.14 1013.03 74.99 473.57
  14. rating age yearsmarried religiousness prob
  15. 1 3.93178 17 8.177696 3.116473 0.3350834
  16. 2 3.93178 27 8.177696 3.116473 0.2615373
  17. 3 3.93178 37 8.177696 3.116473 0.1992953
  18. 4 3.93178 47 8.177696 3.116473 0.1488796
  19. 5 3.93178 57 8.177696 3.116473 0.1094738

現在,讓我解釋一下上面每一條指令所代表的含義。

第一,我們使用set.seed()函數使得數據具有可重復性。

然后,我們創建一個序列,使得它整個的長度等于數據集的行數。這些數字則作為這個數據集的索引。我們隨機的從序列中選擇75%的數據并把它存放到變量split中。

最后,我們把索引數組里所隱含的所有的行都復制到訓練數據集中,把剩下的數據則放到測試數據集中。

建立預測模型

現在,讓我們預測一下這個模型。我們會使用lm()函數。

  1. predictionModel <- lm(PE ~ AT + V + AP + RH, data = trainData)

上面的這個函數將會嘗試從AP、V、AP和RH來推測PE。由于我們使用了數據集里的所有變量,一個更簡短的代碼為(如果這個數據集的變量非常多,這樣寫效果會很不錯):

  1. predictionModel <- lm(PE ~ ., data = trainData)

我們現在用summary()來匯總一下這個模型:

  1. summary(predictionModel)
  2. Call:
  3. lm(formula = PE ~ ., data = trainData)
  4. Residuals:
  5. Min 1Q Median 3Q Max
  6. -43.363 -3.148 -0.140 3.162 17.763
  7. Coefficients:
  8. Estimate Std. Error t value Pr(>|t|)
  9. (Intercept) 450.764756 11.331102 39.781 < 2e-16 ***
  10. AT -1.978787 0.017599 -112.435 < 2e-16 ***
  11. V -0.232049 0.008415 -27.575 < 2e-16 ***
  12. AP 0.065590 0.010993 5.967 2.54e-09 ***
  13. RH -0.155561 0.004829 -32.214 < 2e-16 ***
  14. ---
  15. Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
  16. Residual standard error: 4.574 on 7171 degrees of freedom
  17. Multiple R-squared: 0.9284, Adjusted R-squared: 0.9284
  18. F-statistic: 2.326e+04 on 4 and 7171 DF, p-value: < 2.2e-16

這樣幫助我們決定哪些變量在這個模型中具有相關性。一個線性模型的表達式可以寫成 y_i = β_1 x_i1 + β_2 x_i2 + β_3 x_i3 + ? + ε,其中y_i代表模型的預測輸出,即因變量(PE)的預測值,而x_i則代表各個變量屬性(AT、V、AP和RH),而β則代表系數,ε代表一個常數項。

summary的第一行,它列舉了一些預測值。第一個值與ε有關,而剩下的則為各種屬性變量的系數,如果這些系數為0或者接近0,說明這幾個變量對預測幾乎沒有什么影響。因此, 我們需要把它們剔除掉。表示殘差的那一列給出了一些估計值,表明了這些系數的變化幅度有多大。t值通過劃分標準差列而計算出來的估計值。最后一列則預測這些系數(p(>|t|)的可能性,它與t值成反比。預測,一個屬性計算出較高的t值或是較低的Pr(>|t|)的絕對值是可以接受的。

想要判斷哪些變量具有較強的相關性,我們則可以通過觀察它們的星星數進行判斷。后面帶三顆星的表明這種變量相關性最強。接下來是兩顆星,最不想關的則為一顆星。變量的特征本身是否重要則通常沒有被包含到預測模型的預測當中,如何這個變量與其它毫不相干,則這些變量都不重要了。

在我們的模型中,我們可以看到所有變量都重要。當你要處理一個數據集,這里含有多個不想關的變量的時候,建議在此同時先把無關變量刪去。這時因為變量之間是高度相關的,其它則可能是顯著的。這就歸于它的多重共線性。你可以在這里找到更多關于多重共線性的內容。

想要知道模型的精度,最簡單的方法就是查看它的判定系數。summary里提供了兩個判定系數,即多重判定系數和調整判定系數。多重判定系數的計算過程如下:
多元判定系數=1-SSE/SST,其中:

SSE代表殘差平方和。殘差就是預測值與真實值之間的差,并可以由predictionModel$residuals來估算。

SST就是總平方和。它可以由真實值和均值之差的平方和計算出來。

比如說,我們有5、6、7和8這4個數,而模型的預測值分別為4.5,6.3,7.2和7.9。

然后,SSE可以這樣計算:SSE = (5 – 4.5) ^ 2 + (6 – 6.3) ^ 2 + (7 – 7.2) ^ 2 + (8 – 7.9) ^ 2,而SST則要這樣計算:mean = (5 + 6 + 7 + 8) / 4 = 6.5; SST = (5 – 6.5) ^ 2 + (6 – 6.5) ^ 2 + (7 – 6.5) ^ 2 + (8 – 6.5) ^ 2。

調整判定系數和多重判定系數很相似,但是它由變量的個數來決定。這意味著,在預測模型中,每增加一個變量,其調整判定系數也隨之增加。但是,如果一個變量在預測模型中顯示不相關,調整判定系數也會下降。關于更多判定系數的信息,請看這里。

調整判定系數為1的時候意味著,這是一個完美的預測模型;如果它為0,說明它沒有在基準模型上有任何提高(基準模型就是預測它總與均值相等)。從summary來看,我們看到判定系數為0.9284,相當高了

測試預測模型

現在,我們使用測試數據集來預測模型了。

  1. prediction <- predict(predictionModel, newdata = testData)

現在,觀察一下最初幾個預測值,并與測試數據集上的PE的真實值作比較:

  1. head(prediction)
  2. 2 4 12 13 14 17
  3. 444.0433 450.5260 456.5837 438.7872 443.1039 463.7809
  4. head(testData$PE)[1] 444.37 446.48 453.99 440.29 451.28 467.54

對于PE的真實值為444.37,我們的預測值為440.0433,而對于446.48,其預測值為450.5260,以此類推。

我們可以基于上面的利用測試數據集而模擬出的模型來計算其判定系數:

  1. SSE <- sum((testData$PE - prediction) ^ 2)
  2. SST <- sum((testData$PE - mean(testData$PE)) ^ 2)
  3. 1 - SSE/SST
  4. 0.9294734

這里,我們來到了文章的末尾。我希望你能在此感到很享受,找到了它的價值。

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢