參考自【數據挖掘與R語言】
rpart包可實現回歸樹。通常分為兩步建立回歸樹:1.生成一棵較大的樹 2.通過統計估計刪除一些結點來對樹進行修剪。
回歸樹基礎實現
library(rpart)
rpart(y~.,data=data1) 參數形式與lm()函數的參數形式相同
圖形化展示:
plot(rm) text(rm)
rpart()函數構建樹時,滿足下列條件,樹構建過程將結束:
1、偏差的減少小於某一個給定界限值時;
2、當結點中的樣本數量小於某個給定界限時;
3、當樹的深度大於一個給定的界限值
這3個界限值由rpart()函數中的三個參數(cp、minsplit、maxdepth)來確定。默認值為0.01、20、30
修剪方法
rpart包中實現了一種復雜度損失修剪的修剪方法
這個方法使用R在每個樹結點計算的參數值cp,這種修剪方法試圖估計cp值以確保達到預測的准確性和樹的大小之間的最佳折中。
可用printcp()函數可生成回歸樹的一些子樹,並估計這些樹的性能。
plotcp(rm)
由rpart()函數建立的回歸樹是上面列表中的最后一個樹(樹9)。這個樹的cp值是0.01(cp的默認值),該樹包括九個測試和一個相對誤差值(與根結點相比)0.354。
R應用10折交叉驗證的內部過程,評估該樹的平均相對誤差為0.70241+0.11523
根據這些更穩健的性能估計信息,可以避免過度擬合問題。
可以看到,8號樹的預測相對誤差(0.67733)最小。
選擇好的回歸樹的准則:
1、以估計的cp值為准則;
2、1-SE規則;這包括檢查交叉驗證的估計誤差(xerror列)以及標准誤差(xstd列)。
在這個案例中,1-SE規則樹是最小的樹,誤差小於0.67733+0.10892=0.78625,而由1檢驗的2號樹的估計誤差為0.73358.
若想要選擇不是R建議的樹,可通過使用不同的cp值來建立這棵樹:
rm2=prune(rm,cp=0.08)
交互的對樹進行修剪:snip.rpart()
兩種方式:
1、指出需要修剪的那個地方的結點號(可以通過輸出樹對象來得到樹的結點號),返回樹對象
2、首先在圖形窗口畫出回歸樹,然后調用沒有第二參數的函數。點擊結點,即在這個結點對樹進行修剪。可持續執行,直到右擊結束。