R語言基於樹的方法:決策樹,隨機森林,套袋Bagging,增強樹

2021-01-10 網易

  摘要:本文有關 基於樹的回歸和分類方法。樹方法簡單易懂,對於解釋非常有用,但就預測準確性而言,它們通常無法與最佳監督學習方法競爭。因此,我們還介紹了裝袋,隨機森林和增強樹。這些示例中 我們看到,合併大量的樹可以大大提高預測準確性,但代價是損失解釋能力。

  決策樹基礎:回歸

  我們預測棒球運動員的Salary。

  結果將是一系列拆分規則。第一個分割會將數據分割Years < 4.5為左側的分支,其餘的為右側。如果我們對此模型進行編碼,我們會發現關係最終變得稍微複雜一些。

  library(tree)library(ISLR)attach(Hitters)# Remove NA dataHitters<- na.omit(Hitters)# log transform Salary to make it a bit more normally distributedhist(Hitters$Salary)

  Hitters$Salary <- log(Hitters$Salary)hist(Hitters$Salary)
summary(tree.fit)#### Regression tree:## tree(formula = Salary ~ Hits + Years, data = Hitters)## Number of terminal nodes: 8## Residual mean deviance: 0.271 = 69.1 / 255## Distribution of residuals:## Min. 1st Qu. Median Mean 3rd Qu. Max.## -2.2400 -0.2980 -0.0365 0.0000 0.3230 2.1500

  現在,我們討論通過對特徵空間進行分層來構建預測樹。通常,有兩個步驟。

  

  找到最能分隔響應變量的變量/拆分,從而產生最低的RSS。

  

  將數據分為兩個在第一個標識的節點上的葉子。

  

  在每片葉子中,找到分隔結果的最佳變量/分割。

  

  目標是找到最小化RSS的區域數。但是,考慮將每個可能的分區劃分為J個區域在計算上是不可行的 。為此,我們採取了 自上而下的, 貪婪 的方法。它是自頂向下的,因為我們從所有觀測值都屬於一個區域的點開始。貪婪是因為在樹構建過程的每個步驟中,都會在該特定步驟中選擇最佳拆分,而不是向前看會在將來的某個步驟中生成更好樹的拆分。

  一旦創建了所有區域,我們將使用每個區域中訓練觀察的平均值預測給定測試觀察的響應。

  
剪枝

  儘管上面的模型可以對訓練數據產生良好的預測,但是基本的樹方法可能會過度擬合數據,從而導致測試性能不佳。這是因為生成的樹往往過於複雜。具有較少拆分的較小樹通常以較小的偏差為代價,從而導致方差較低,易於解釋且測試錯誤較低。實現此目的的一種可能方法是僅在每次拆分導致的RSS減少量超過某個(高)閾值時,才構建一棵樹。

  因此,更好的策略是生長一棵大樹,然後 修剪 回去以獲得更好的子樹。

  成本複雜性修剪 -也稱為最弱連結修剪為我們提供了解決此問題的方法。而不是考慮每個可能的子樹,我們考慮由非負調整參數索引的樹序列alpha。

  
trees <- tree(Salary~., train)plot(trees)text(trees, pretty=0)

plot(cv.trees)

  似乎第7棵樹的偏差最小。然後我們可以修剪樹。但是,這並不能真正修剪模型,因此我們可以選擇較小的尺寸來改善偏差平穩狀態。這大約是在第四次分裂。

  prune.trees <- prune.tree(trees, best=4)plot(prune.trees)text(prune.trees, pretty=0)

  使用修剪的樹對測試集進行預測。

  mean((yhat - test$Salary)^2)## [1] 0.3531
分類樹

  分類樹與回歸樹非常相似,不同之處在於分類樹用於預測定性而不是定量。

  為了增長分類樹,我們使用相同的遞歸二進位拆分,但是現在RSS不能用作拆分標準。替代方法是使用 分類錯誤率。雖然很直觀,但事實證明,此方法對於樹木生長不夠敏感。

  實際上,另外兩種方法是可取的,儘管它們在數值上非常相似:

  __Gini index_是K個 類之間總方差的度量 。

  如果給定類別中的訓練觀測值的比例都接近零或一,則__cross-entropy_的值將接近零。

  修剪樹時,首選這兩種方法,但如果以最終修剪模型的預測精度為目標,則規則分類錯誤率是優選的。

  為了證明這一點,我們將使用Heart數據集。這些數據包含AHD303名胸痛患者的二進位結果變量 。結果被編碼為Yes或No存在心臟病。

  

  dim(Heart)
[1] 303 15

  到目前為止,這是一棵非常複雜的樹。讓我們確定是否可以通過使用錯過分類評分方法的交叉驗證來使用修剪後的版本改善擬合度。

  cv.trees## $size## [1] 16 9 5 3 2 1#### $dev## [1] 44 45 42 41 41 81#### $k## [1] -Inf 0.0 1.0 2.5 5.0 37.0#### $method## [1] "misclass"#### attr(,"class")## [1] "prune" "tree.sequence"

  看起來4棵分裂樹的偏差最小。讓我們看看這棵樹是什麼樣子。同樣,我們使用

  prune.misclass 分類設置。prune.trees <- prune.misclass(trees, best=4)plot(prune.trees)text(prune.trees, pretty=0)

  ## Confusion Matrix and Statistics#### Reference## Prediction No Yes## No 72 24## Yes 10 45#### Accuracy : 0.775## 95% CI : (0.7, 0.839)## No Information Rate : 0.543## P-Value [Acc > NIR] : 2.86e-09#### Kappa : 0.539## Mcnemar's Test P-Value : 0.0258#### Sensitivity : 0.878## Specificity : 0.652## Pos Pred Value : 0.750## Neg Pred Value : 0.818## Prevalence : 0.543## Detection Rate : 0.477## Detection Prevalence : 0.636## Balanced Accuracy : 0.765#### 'Positive' Class : No##

  在這裡,我們獲得了約76%的精度。

  那麼為什麼要進行拆分呢?拆分導致節點純度提高 ,這可能會在使用測試數據時有更好的預測。

  樹與線性模型

  最好的模型始終取決於當前的問題。如果可以通過線性模型近似該關係,則線性回歸將很可能佔主導地位。相反,如果我們在特徵和y之間具有複雜的,高度非線性的關係,則決策樹可能會勝過傳統方法。

  優點/缺點

  優點

  

  樹比線性回歸更容易解釋。

  

  更緊密地反映了人類的決策。

  

  易於以圖形方式顯示。

  

  可以處理沒有偽變量的定性預測變量。

  

  缺點

  


例子

  

  樹結構中實際使用的變量:[1]「價格」「 CompPrice」「年齡」「收入」「 ShelveLoc」
[6]「廣告」終端節點數:19殘差平均偏差:0.414 = 92/222錯誤分類錯誤率:0.0996 = 24/241

  在這裡,我們看到訓練誤差約為9%。我們plot()用來顯示樹結構和text()顯示節點標籤。

  plot(sales.tree)text(sales.tree, pretty=0)

  讓我們看看完整的樹如何處理測試數據。

  ## Confusion Matrix and Statistics#### Reference## Prediction High Low## High 56 12## Low 23 68#### Accuracy : 0.78## 95% CI : (0.707, 0.842)## No Information Rate : 0.503## P-Value [Acc > NIR] : 6.28e-13#### Kappa : 0.559## Mcnemar's Test P-Value : 0.091#### Sensitivity : 0.709## Specificity : 0.850## Pos Pred Value : 0.824## Neg Pred Value : 0.747## Prevalence : 0.497## Detection Rate : 0.352## Detection Prevalence : 0.428## Balanced Accuracy : 0.779#### 'Positive' Class : High##

  約74%的測試錯誤率相當不錯!但是我們可以通過交叉驗證來改善它。

  在這裡,我們看到最低/最簡單的錯誤分類錯誤是針對4模型的。現在我們可以將樹修剪為4模型。

  ## Confusion Matrix and Statistics#### Reference## Prediction High Low## High 52 20## Low 27 60#### Accuracy : 0.704## 95% CI : (0.627, 0.774)## No Information Rate : 0.503## P-Value [Acc > NIR] : 2.02e-07#### Kappa : 0.408## Mcnemar's Test P-Value : 0.381#### Sensitivity : 0.658## Specificity : 0.750## Pos Pred Value : 0.722## Neg Pred Value : 0.690## Prevalence : 0.497## Detection Rate : 0.327## Detection Prevalence : 0.453## Balanced Accuracy : 0.704#### 'Positive' Class : High##

  這並不能真正改善我們的分類,但是我們大大簡化了模型。

  ## CART#### 241 samples## 10 predictors## 2 classes: 'High', 'Low'#### No pre-processing## Resampling: Cross-Validated (10 fold)#### Summary of sample sizes: 217, 217, 216, 217, 217, 217, ...#### Resampling results across tuning parameters:#### cp ROC Sens Spec ROC SD Sens SD Spec SD## 0.06 0.7 0.7 0.7 0.1 0.2 0.1## 0.1 0.6 0.7 0.6 0.2 0.2 0.2## 0.4 0.5 0.3 0.8 0.09 0.3 0.3#### ROC was used to select the optimal model using the largest value.## The final value used for the model was cp = 0.06.

  

  ## Confusion Matrix and Statistics#### Reference## Prediction High Low## High 56 21## Low 23 59#### Accuracy : 0.723## 95% CI : (0.647, 0.791)## No Information Rate : 0.503## P-Value [Acc > NIR] : 1.3e-08#### Kappa : 0.446## Mcnemar's Test P-Value : 0.88#### Sensitivity : 0.709## Specificity : 0.738## Pos Pred Value : 0.727## Neg Pred Value : 0.720## Prevalence : 0.497## Detection Rate : 0.352## Detection Prevalence : 0.484## Balanced Accuracy : 0.723#### 'Positive' Class : High##

  選擇了更簡單的樹,預測精度有所降低。

  介紹:我們是數據挖掘團隊,分享結合實際業務的理論應用和心得體會。歡迎大家關注我們的微信公眾號,關注數據挖掘文章;您也可以在公眾號中直接發送想說的話,與我們聯繫交流。

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關焦點

  • 基於樹的機器學習模型的演化
    決策樹是一種不要求數據集服從正態分布的非參數方法。它們能夠容忍數據質量問題和異常值,例如,它們需要較少的數據準備,比如在實現之前的縮放和標準化。此外,它對分類變量和連續變量都很有效。它們可以在數據探索階段用於快速識別重要的變量。問題決策樹容易發生過擬合,當函數過於接近訓練數據時發生過擬合。當決策樹模型在訓練數據中學習到顆粒狀的細節和噪音時,就會影響到它對新數據做出預測的能力。
  • 進化決策樹:當機器學習從生物學中汲取靈感時
    但是,此類指標有兩個主要缺點:1.可能取到次優解;2.可能生成過於複雜的決策樹,以至於在訓練數據中泛化效果不好,導致過擬合。目前已有幾種方法可用於克服這些問題:剪枝:首先,構建一顆完整的決策樹,即每片葉子中的所有實例都屬於同一類。然後刪除「不重要」的節點或子樹,以減小樹的大小。
  • 深度神經決策樹:深度神經網絡和樹模型結合的新模型
    深度神經決策樹:深度神經網絡和樹模型結合的新模型 工程師郭婷 發表於 2018-08-19 09:14:44 近日,來自愛丁堡大學的研究人員提出了一種結合深度神經網絡和樹模型的新型模型——深度神經決策樹(Deep
  • 決策樹模型
    決策樹,便是一種把決策連接點畫成樹的輔助決策專用工具,一種找尋最優化計劃方案的繪圖法。它用圖型的方法, 列舉某一決策很有可能導向性的多種多樣結果。決策樹需要概率一起用來做決策,所以有兩個分支類型:方案枝,概率枝下邊大家再次上邊的例子表明下決策樹如何融合概率變為概率樹的方法來做決策的。決策樹只是是給了很有可能的全部回答,而且是用0分或是一百分來判斷結果,較為不光滑。
  • 如何用決策樹模型做數據分析?
    簡單:邏輯相對簡單,整個算法沒有更複雜的邏輯,只是對節點進行分叉;高效:模型訓練速度較快;強解釋性:模型的判斷邏輯可以用語言清晰的表達出來,比如上述決策樹案例中的判斷,就可以直接用語言表述成:脫離水不能生存的沒有腳蹼的動物,我們判斷它是魚
  • 不要小看樹模型
    而另一方面,基於樹的方法並未得到同等重視,主要原因在於這類算法看起來很簡單。然而,這兩種算法看似不同,卻像一枚硬幣的正反面,都很重要。樹模型 VS 神經網絡基於樹的方法通常優於神經網絡。本質上,將基於樹的方法和基於神經網絡的方法放在同一個類別中是因為,它們都通過逐步解構來處理問題,而不是像支持向量機或 Logistic 回歸那樣通過複雜邊界來分割整個數據集。
  • 機器學習:不要低估樹模型的威力
    樹模型 VS 神經網絡 基於樹的方法通常優於神經網絡。本質上,將基於樹的方法和基於神經網絡的方法放在同一個類別中是因為,它們都通過逐步解構來處理問題,而不是像支持向量機或 Logistic 回歸那樣通過複雜邊界來分割整個數據集。
  • 每天學習一個《查理芒格的100個思維模型》之決策樹思維模型
    但是,這並不改變查理芒格的多元思維方法的本質,其本質依然是,一個人需要有大量的不同思維模型,才能發展出超常的思維能力。我的能力遠不及查理芒格,我也無法像他那樣精通各個學科,但我依然可以學習他的思維發展路徑——通過大量思維模型來提高自己的思維能力。芒格學院對思維模型進行了匯總。希望能夠讓讀者有一個學習的綱領性認知。這裡主要研究思維方法及學習策略。
  • 漫畫:什麼是 「哈夫曼樹」?
    下圖左側的這棵樹就是一顆哈夫曼樹,它的WPL是46,小於之前例子當中的53:需要注意的是,同樣葉子結點所構成的哈夫曼樹可能不止一顆,下面這幾棵樹都是哈夫曼樹:假設有6個葉子結點,權重依次是2,3,7,9,18,25,如何構建一顆哈夫曼樹,也就是帶權路徑長度最小的樹呢?
  • Google雲計算AI平臺內置TabNet表格模型,可替代傳統決策樹算法
    Google提到,雖然表格資料是人工智慧應用中,最常見的資料類型,但是將表格資料應用於深度學習中,並沒有獲得充分的研究,目前大多數應用程式,仍然使用決策樹算法,Google進一步解釋其中的原因,因為決策樹很適合用於表格資料,而且具有很好的可解釋性,這在金融服務這類高風險的實際應用中非常重要,另外一個原因則是,過去的深度學習架構並不適合用於表格資料。
  • 《樹的秘密語言》:樹木是大地寫上天空的詩,生命的奇蹟樹知道
    作者說:「樹幹是樹的名片,樹葉是樹的眼睛,樹根是樹的心臟,樹木能夠與其它所有的樹木對話。」我曾嘗試讀懂樹的語言,試圖從樹的形象中讀懂生命。《樹的秘密語言》,帶給我的是無與倫比的親切感,是的,這就是我想讀了很久的書。看著一棵樹,就像看著一個人。這本書寫的不僅是樹,更多寫的是人與樹之間的連結。
  • 決策樹模型怎麼畫?詳細圖文教程解讀模型圖畫法
    決策樹是一種解決分類問題的算法,本文將介紹什麼是決策樹模型,常見的用途,以及如何使用「億圖圖示」軟體繪製決策樹模型。決策樹模型(decision tree) 是一種簡單高效、具有強解釋性的預測模型,一般是自上而下的來生成的,每個決策或事件(即自然狀態)都可能引出兩個或多個事件並導致不同的結果,把這種決策分支畫成圖形後很像一棵樹的枝幹,故稱決策樹。換種表達就是運用樹狀圖表示各決策的期望值,通過計算,最終選出效益最大、成本最小的決策方法。目前這種模型廣泛應用於數據分析領域。
  • Dom樹 CSS樹 渲染樹(render樹) 規則、原理
    2.上面的操作為了演示,採用的方法是從根結點一直到文本結點的遍歷,在DOM 方法上,有更簡潔的方法,這些以後會有更多示例加以說明。 你還可以這樣理解 dom 樹: 1.DOM樹揭示了DOM對象之間的層次關係,這樣就方便動態地對html文檔進行增刪改查。
  • 機器學習十大經典算法之隨機森林
    隨機森林簡介隨機森林是機器學習一種常用的方法。它是以決策樹為基礎,用隨機的方式排列建立的,森林裡每個決策樹之間都是沒有關聯的。 在得到森林之後,當有一個新的輸入樣本進入的時候,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬於哪一類(對於分類算法),然後看看哪一類被選擇最多,就預測這個樣本為那一類。隨機森林可以用來進行無監督學習聚類和異常點檢測。決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。
  • 從拍腦袋下決定到科學做選擇——決策樹模型-TY聊思維5
    百度百科對於決策樹的定義如下:「決策樹分析法是一種運用概率與圖論中的樹對決策中的不同方案進行比較,從而獲得最優方案的風險型決策方法。」通過這個模型,大家可以在面對未來不確定事件時,能夠基於一定的規則,通過系統與合理的方式給出最佳決策方案(而不是拍腦袋)。決策樹長什麼樣?如圖,這就是一個最基礎的決策樹模型了。
  • 支付寶螞蟻森林是真的嗎?樹被種在了哪?網友:我的樹都長大了!
    1大家都知道在支付寶裡面有一個小的選項,叫做螞蟻森林。那麼什麼是所謂的螞蟻森林呢?螞蟻森林就是我們要使用支付寶進行消費,消費之後會產生一定的能量,這些我們可以用這些能量去種樹。人類可以利用的土地也越來越少,馬雲通過螞蟻森林的方式來做公益,何樂而不為呢?
  • 常用的模型集成方法介紹:bagging、boosting、stacking
    本文將討論一些眾所周知的概念,如自助法、自助聚合(bagging)、隨機森林、提升法(boosting)、堆疊法(stacking)以及許多其它的基礎集成學習模型。為了使所有這些方法之間的聯繫儘可能清晰,我們將嘗試在一個更廣闊和邏輯性更強的框架中呈現它們,希望這樣會便於讀者理解和記憶。何為集成方法?集成學習是一種機器學習範式。
  • 《怪物獵人世界冰原》古代樹森林全寶箱位置一覽 古代樹森林寶箱都...
    怪物獵人世界冰原古代樹森林寶箱都在哪?想來很多朋友都還不是很清楚吧,所以呢小編今天給大家帶來的就是怪物獵人世界冰原古代樹森林全寶箱位置一覽,需要的朋友不妨進來看看。 怪物獵人世界冰原古代樹森林寶箱都在哪?
  • 動物森友會樹種類有哪些 獲取樹方法
    在遊戲動物森友會中無論是樹還是樹枝對我們來講都是十分重要的,而遊戲中樹的種類有很多,那我們如何儘可能多的獲取樹呢?小編帶來了動物森友會樹的獲取方法及分類介紹,感興趣的玩家快來看看吧!