預測任務是創建一個模型來找到一個數值變量和一組解釋變量的關係。tcp
注意:函數
多元線性迴歸模型給出了一個有關目標變量和一組解釋變量關係的線性函數。測試
首先須要處理數據集中的缺失值。code
library(DMwR) data(algae) algae <- algae[-manyNAs(algae), ] clean.algae <- knnImputation(algae, k = 10)
對處理完數據缺失值後的數據集應用線性計算函數。ip
lm.a1 <- lm(a1 ~ ., data = clean.algae[, 1:12]) summary(lm.a1) # 查看數據集線性特性
咱們能夠經過查看數據集的線性特性,來判斷當前數據集後續應該如何處理。若是計算出的置信水平很高,那麼就說明當前計算出的線性模型是可使用的。若是計算出的置信水平很低,並且通過不斷的消元后,仍然沒法獲得預期置信水平的數據集的話,那麼就應該考慮更換數學模型來完成後續的預測。數學
置信水平:指整體參數值落在樣本統計值某一區內的機率。it
置信區間:指在某一置信水平下,樣本統計值與整體參數值間偏差範圍。一般狀況下,置信水平越高,置信區間越寬。io
示例:class
- 某人有95%的可能性(置信水平)有50%~60%的機率(置信區間)獲選美國總統。
- 某件事情50%~60%機率(置信區間)發生的可信性爲90%(置信水平)。
- 有80%的機率(置信水平),10%~30%(置信區間)的情侶在結婚後離婚。
注:樣本值越多,置信區間越窄。在樣本值恆定的狀況下,置信水平越高,置信區間越寬。變量
Residuals - 殘差,應該是均值爲0且服從正態分佈。(應儘量的小)
Estimate - 估計值
Std. Error - 標準差。(越小越好)
t value - t值,定義爲估計值與其標準差的比。(|t|值越大越好)
Pr(>|t|) - {1 - Pr}表示置信水平(若是Pr爲0.0001,則置信水平爲99.99%。若是置信水平低於80%,即pr>0.1,則檢驗結果無心義)
Residual standard error - 殘差標準差
Multiple R-squared - 多元R^2,代表模型與數據的吻合度,越趨近於1,則吻合度越高。
Adjusted R-squared - 調整R^2,代表模型與數據的吻合度,越趨近於1,則吻合度越高。
F-statistic - F統計值
p-value - {1 - p}表示拒絕原假設的置信水平(p值爲0.0001表示99.99%原假設是錯誤的),若是p值過大(通常指p > 0.1)則單個係數的t檢驗沒有意義。(p值越小越好)
咱們可使用anova()
函數來精簡數據集線性特性的概覽,從而找到須要被「消元」的數據屬性。這個函數提供一個模型擬合的方差序貫分析。隨着公式中項數的增長,模型的殘差平方和減小對創建的模型進行方差分析。
anova(lm.a1)
根據精簡數據線性特性概覽,能夠看到season
對減小模型擬合偏差的貢獻最小(Pr = 0.965)。咱們可使用update()
函數對數據集的數據進行微調,將season
從數據集中摘除。
lm2.a1 <- update(lm.a1, . ~ . - season) summary(lm2.a1)
在獲得新的精簡數據集以後,咱們能夠嘗試對新舊數據集進行比較,經過對新舊數據集「不一樣的可能性」來判斷是否須要進一步消元。
anova(lm.a1, lm2.a1)
1-Pr
爲顯著性機率新舊模型差別的顯著性機率爲30%,說明二者的差距並不顯著。
咱們可使用step()
函數來快速的完成線性消元的過程。
final.lm <- step(lm.a1)
Df
較大的值Sum of Sq
較小的值(本例中,消除了小於600的屬性)summary(final.lm)
咱們能夠看到Adjusted R-squared值(調整R^2)的值仍然達不到預期(越接近1,模型與數據越吻合),說明當前數據集不適合使用多元線性模型。
咱們可使用R的添加包rpart
來快速計算一個數據集的「迴歸樹」。
若是咱們想創建一個迴歸樹來預測結果,只要從根節點開始根據檢驗的結果,追蹤某個分支,直到葉節點。葉節點目標變量的平均值就是樹的預測值。
library(DMwR) library(rpart) data(algae) algae <- algae[-manyNAs(algae), ] rt.a1 <- rpart(a1 ~ ., data = algae[ , 1:12]) rt.a1
按照從左到右的順序來觀察生成的迴歸樹:
咱們可使用prettyTree()
函數來美化迴歸樹的輸出結果
prettyTree(rt.a1)
注意:
查看回歸樹的基本參數
printcp(rt.a1)
咱們能夠根據「偏差越小越好」的原則,來選擇想要使用的CP值。
rt2.a1 <- prune(rt.a1, cp = 0.08) rt2.a1