【數據挖掘與R語言筆記】預測海藻數量(二)線性模型和迴歸樹模型

獲取預測模型

預測任務是創建一個模型來找到一個數值變量和一組解釋變量的關係。tcp

注意:函數

  • R中的線性迴歸不能使用有缺失值的數據集,於是在使用線性迴歸以前,須要對對數據集中的缺失值進行填充。
  • 迴歸樹模型能夠很天然地處理帶有缺失值的數據集,所以若是沒有很好的辦法可以填充缺失值的時候,採用迴歸樹模型是一種很好的辦法。

多元線性迴歸

多元線性迴歸模型給出了一個有關目標變量和一組解釋變量關係的線性函數。測試

首先須要處理數據集中的缺失值。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

  1. 某人有95%的可能性(置信水平)有50%~60%的機率(置信區間)獲選美國總統。
  2. 某件事情50%~60%機率(置信區間)發生的可信性爲90%(置信水平)。
  3. 有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)
  • Pr - 針對參數F的置信水平,用以標明當前數據屬性對「擬合偏差」的貢獻,越小越好。

根據精簡數據線性特性概覽,能夠看到season對減小模型擬合偏差的貢獻最小(Pr = 0.965)。咱們可使用update()函數對數據集的數據進行微調,將season從數據集中摘除。

lm2.a1 <- update(lm.a1, . ~ . - season)

summary(lm2.a1)

在獲得新的精簡數據集以後,咱們能夠嘗試對新舊數據集進行比較,經過對新舊數據集「不一樣的可能性」來判斷是否須要進一步消元。

anova(lm.a1, lm2.a1)
  • Sum of Sq - 偏差平方和
  • Pr - 顯著性值,1-Pr爲顯著性機率

新舊模型差別的顯著性機率爲30%,說明二者的差距並不顯著。

咱們可使用step()函數來快速的完成線性消元的過程。

final.lm <- step(lm.a1)
  1. 消除Df較大的值
  2. 消除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

按照從左到右的順序來觀察生成的迴歸樹:

  • 整棵樹共有198個觀測實例
  • 相對平均值的誤差爲90401.290,不一樣值與平均值之差的平方和
  • 平均值爲16.996460

咱們可使用prettyTree()函數來美化迴歸樹的輸出結果

prettyTree(rt.a1)

注意:

  • 預測模型的過分擬合會致使陷入原始數據集的「虛假關係」當中
  • R中裁剪樹枝的方法,使用生成樹函數的限制條件參數
    • 誤差的減小小於某一個給定界限值時,cp
    • 當節點中的樣本數量小於某個給定值時,minsplit
    • 當樹的深度大於一個給定的界限值時,maxdepth

查看回歸樹的基本參數

printcp(rt.a1)
  • CP - 臨界參數
  • nsplit - 測試次數
  • rel error - 相對偏差值
  • xerror - 預測相對偏差/估計偏差,用於交叉驗證
  • xstd - 標準偏差
  • xerror ± xstd - 平均相對偏差,使用隨機抽樣計算,‘和’越小越好

咱們能夠根據「偏差越小越好」的原則,來選擇想要使用的CP值。

rt2.a1 <- prune(rt.a1, cp = 0.08)
rt2.a1
相關文章
相關標籤/搜索