最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

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

2021-03-05 09:58 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=9859

?

概觀

本文是有關??基于樹的??回歸和分類方法的。

樹方法簡單易懂,但對于解釋卻非常有用,但就預測準確性而言,它們通常無法與最佳監(jiān)督學習方法競爭。因此,我們還介紹了Bagging(自助法),隨機森林和增強樹。這些示例中的每一個都涉及產(chǎn)生多個樹,然后將其合并以產(chǎn)生單個共識預測。我們看到,合并大量的樹可以大大提高預測準確性,但代價是損失解釋能力。

決策樹可以應用于回歸和分類問題。我們將首先考慮回歸。

決策樹基礎:回歸

我們從一個簡單的例子開始:

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

結果將是一系列分裂規(guī)則。第一個分支會將數(shù)據(jù)分割??Years < 4.5?為左側的分支,其余的為右側。如果我們對此模型進行編碼,我們會發(fā)現(xiàn)關系最終變得稍微復雜一些。

  1. library(tree)

  2. library(ISLR)

  3. attach(Hitters)

  4. # 刪除NA數(shù)據(jù)

  5. Hitters<- na.omit(Hitters)

  6. # log轉換Salary使其更正態(tài)分布

  7. hist(Hitters$Salary)

  1. Hitters$Salary <- log(Hitters$Salary)

  2. hist(Hitters$Salary)

summary(tree.fit)

  1. ##

  2. ## Regression tree:

  3. ## tree(formula = Salary ~ Hits + Years, data = Hitters)

  4. ## Number of terminal nodes: ?8

  5. ## Residual mean deviance: ?0.271 = 69.1 / 255

  6. ## Distribution of residuals:

  7. ## ? ?Min. 1st Qu. ?Median ? ?Mean 3rd Qu. ? ?Max.

  8. ## -2.2400 -0.2980 -0.0365 ?0.0000 ?0.3230 ?2.1500

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

  1. 找到最能分隔因變量的變量/拆分,從而產(chǎn)生最低的RSS。

  2. 將數(shù)據(jù)分為兩個在第一個標識的節(jié)點上的葉子。

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

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

一旦創(chuàng)建了所有區(qū)域,我們將使用每個區(qū)域中訓練觀察的平均值預測給定測試觀察的因變量。

剪枝

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

因此,更好的策略是生成一棵樹,然后??修剪??回去以獲得更好的子樹。

成本復雜度剪枝算法-也稱為最弱鏈接修剪為我們提供了解決此問題的方法。而不是考慮每個可能的子樹,我們考慮由非負調(diào)整參數(shù)索引的樹序列??alpha

?


  1. trees <- tree(Salary~., train)

  2. plot(trees)

  3. text(trees, pretty=0)


  1. plot(cv.trees)

似乎第7棵樹的偏差最小。然后我們可以剪枝樹。但是,這并不能真正剪枝模型,因此我們可以選擇較小的樹來改善偏差狀態(tài)。這大約是在第四個分支。

  1. prune.trees <- prune.tree(trees, best=4)

  2. plot(prune.trees)

  3. text(prune.trees, pretty=0)

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

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

分類樹

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

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

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

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

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

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

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

  1. dim(Heart)

  2. [1] 303 15

?

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

cv.trees

  1. ## $size

  2. ## [1] 16 ?9 ?5 ?3 ?2 ?1

  3. ##

  4. ## $dev

  5. ## [1] 44 45 42 41 41 81

  6. ##

  7. ## $k

  8. ## [1] -Inf ?0.0 ?1.0 ?2.5 ?5.0 37.0

  9. ##

  10. ## $method

  11. ## [1] "misclass"

  12. ##

  13. ## attr(,"class")

  14. ## [1] "prune" ? ? ? ? "tree.sequence"

看起來4棵分裂樹的偏差最小。讓我們看看這棵樹是什么樣子。同樣,我們使用??prune.misclass?分類設置。

  1. prune.trees <- prune.misclass(trees, best=4)

  2. plot(prune.trees)

  3. text(prune.trees, pretty=0)

  1. ## Confusion Matrix and Statistics

  2. ##

  3. ## ? ? ? ? ? Reference

  4. ## Prediction No Yes

  5. ## ? ? ? ?No ?72 ?24

  6. ## ? ? ? ?Yes 10 ?45

  7. ##

  8. ## ? ? ? ? ? ? ? ?Accuracy : 0.775

  9. ## ? ? ? ? ? ? ? ? ?95% CI : (0.7, 0.839)

  10. ## ? ? No Information Rate : 0.543

  11. ## ? ? P-Value [Acc > NIR] : 2.86e-09

  12. ##

  13. ## ? ? ? ? ? ? ? ? ? Kappa : 0.539

  14. ## ?Mcnemar's Test P-Value : 0.0258

  15. ##

  16. ## ? ? ? ? ? ? Sensitivity : 0.878

  17. ## ? ? ? ? ? ? Specificity : 0.652

  18. ## ? ? ? ? ?Pos Pred Value : 0.750

  19. ## ? ? ? ? ?Neg Pred Value : 0.818

  20. ## ? ? ? ? ? ? ?Prevalence : 0.543

  21. ## ? ? ? ? ?Detection Rate : 0.477

  22. ## ? ?Detection Prevalence : 0.636

  23. ## ? ? ? Balanced Accuracy : 0.765

  24. ##

  25. ## ? ? ? ?'Positive' Class : No

  26. ##

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

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

樹與線性模型

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

優(yōu)點/缺點

優(yōu)點

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

  • 更能反映了人類的決策。

  • 易于以圖形方式顯示。

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

缺點

  • 樹木通常不具有與傳統(tǒng)方法相同的預測準確性,但是,諸如??Bagging,隨機森林和增強等方法??可以提高性能。

其他例子

?

樹結構中實際使用的變量:“價格”、“ CompPrice”、“年齡”、“收入”、“?ShelveLoc”、“廣告”,終端節(jié)點數(shù):19,殘差平均偏差:0.414 = 92/222,錯誤分類錯誤率:0.0996 = 24/241

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

  1. plot(sales.tree)

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

讓我們看看完整的樹如何處理測試數(shù)據(jù)。

  1. ## Confusion Matrix and Statistics

  2. ##

  3. ## ? ? ? ? ? Reference

  4. ## Prediction High Low

  5. ## ? ? ? High ? 56 ?12

  6. ## ? ? ? Low ? ?23 ?68

  7. ##

  8. ## ? ? ? ? ? ? ? ?Accuracy : 0.78

  9. ## ? ? ? ? ? ? ? ? ?95% CI : (0.707, 0.842)

  10. ## ? ? No Information Rate : 0.503

  11. ## ? ? P-Value [Acc > NIR] : 6.28e-13

  12. ##

  13. ## ? ? ? ? ? ? ? ? ? Kappa : 0.559

  14. ## ?Mcnemar's Test P-Value : 0.091

  15. ##

  16. ## ? ? ? ? ? ? Sensitivity : 0.709

  17. ## ? ? ? ? ? ? Specificity : 0.850

  18. ## ? ? ? ? ?Pos Pred Value : 0.824

  19. ## ? ? ? ? ?Neg Pred Value : 0.747

  20. ## ? ? ? ? ? ? ?Prevalence : 0.497

  21. ## ? ? ? ? ?Detection Rate : 0.352

  22. ## ? ?Detection Prevalence : 0.428

  23. ## ? ? ? Balanced Accuracy : 0.779

  24. ##

  25. ## ? ? ? ?'Positive' Class : High

  26. ##

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

在這里,我們看到最低的錯誤分類錯誤是模型4的。現(xiàn)在我們可以將樹修剪為4模型。

  1. ## Confusion Matrix and Statistics

  2. ##

  3. ## ? ? ? ? ? Reference

  4. ## Prediction High Low

  5. ## ? ? ? High ? 52 ?20

  6. ## ? ? ? Low ? ?27 ?60

  7. ##

  8. ## ? ? ? ? ? ? ? ?Accuracy : 0.704

  9. ## ? ? ? ? ? ? ? ? ?95% CI : (0.627, 0.774)

  10. ## ? ? No Information Rate : 0.503

  11. ## ? ? P-Value [Acc > NIR] : 2.02e-07

  12. ##

  13. ## ? ? ? ? ? ? ? ? ? Kappa : 0.408

  14. ## ?Mcnemar's Test P-Value : 0.381

  15. ##

  16. ## ? ? ? ? ? ? Sensitivity : 0.658

  17. ## ? ? ? ? ? ? Specificity : 0.750

  18. ## ? ? ? ? ?Pos Pred Value : 0.722

  19. ## ? ? ? ? ?Neg Pred Value : 0.690

  20. ## ? ? ? ? ? ? ?Prevalence : 0.497

  21. ## ? ? ? ? ?Detection Rate : 0.327

  22. ## ? ?Detection Prevalence : 0.453

  23. ## ? ? ? Balanced Accuracy : 0.704

  24. ##

  25. ## ? ? ? ?'Positive' Class : High

  26. ##

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

  1. ## CART

  2. ##

  3. ## 241 samples

  4. ## ?10 predictors

  5. ## ? 2 classes: 'High', 'Low'

  6. ##

  7. ## No pre-processing

  8. ## Resampling: Cross-Validated (10 fold)

  9. ##

  10. ## Summary of sample sizes: 217, 217, 216, 217, 217, 217, ...

  11. ##

  12. ## Resampling results across tuning parameters:

  13. ##

  14. ## ? cp ? ?ROC ?Sens ?Spec ?ROC SD ?Sens SD ?Spec SD

  15. ## ? 0.06 ?0.7 ?0.7 ? 0.7 ? 0.1 ? ? 0.2 ? ? ?0.1

  16. ## ? 0.1 ? 0.6 ?0.7 ? 0.6 ? 0.2 ? ? 0.2 ? ? ?0.2

  17. ## ? 0.4 ? 0.5 ?0.3 ? 0.8 ? 0.09 ? ?0.3 ? ? ?0.3

  18. ##

  19. ## ROC was used to select the optimal model using ?the largest value.

  20. ## The final value used for the model was cp = 0.06.

  1. ## Confusion Matrix and Statistics

  2. ##

  3. ## ? ? ? ? ? Reference

  4. ## Prediction High Low

  5. ## ? ? ? High ? 56 ?21

  6. ## ? ? ? Low ? ?23 ?59

  7. ##

  8. ## ? ? ? ? ? ? ? ?Accuracy : 0.723

  9. ## ? ? ? ? ? ? ? ? ?95% CI : (0.647, 0.791)

  10. ## ? ? No Information Rate : 0.503

  11. ## ? ? P-Value [Acc > NIR] : 1.3e-08

  12. ##

  13. ## ? ? ? ? ? ? ? ? ? Kappa : 0.446

  14. ## ?Mcnemar's Test P-Value : 0.88

  15. ##

  16. ## ? ? ? ? ? ? Sensitivity : 0.709

  17. ## ? ? ? ? ? ? Specificity : 0.738

  18. ## ? ? ? ? ?Pos Pred Value : 0.727

  19. ## ? ? ? ? ?Neg Pred Value : 0.720

  20. ## ? ? ? ? ? ? ?Prevalence : 0.497

  21. ## ? ? ? ? ?Detection Rate : 0.352

  22. ## ? ?Detection Prevalence : 0.484

  23. ## ? ? ? Balanced Accuracy : 0.723

  24. ##

  25. ## ? ? ? ?'Positive' Class : High

  26. ##

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

最受歡迎的見解

1.從決策樹模型看員工為什么離職

2.R語言基于樹的方法:決策樹,隨機森林

3.python中使用scikit-learn和pandas決策樹

4.機器學習:在SAS中運行隨機森林數(shù)據(jù)分析報告

5.R語言用隨機森林和文本挖掘提高航空公司客戶滿意度

6.機器學習助推快時尚精準銷售時間序列

7.用機器學習識別不斷變化的股市狀況——隱馬爾可夫模型的應用

8.python機器學習:推薦系統(tǒng)實現(xiàn)(以矩陣分解來協(xié)同過濾)

9.python中用pytorch機器學習分類預測銀行客戶流失


R語言基于樹的方法:決策樹,隨機森林,Bagging,增強樹的評論 (共 條)

分享到微博請遵守國家法律
临清市| 伊宁县| 长岛县| 汽车| 阳原县| 洛隆县| 舞阳县| 乌拉特中旗| 营口市| 紫阳县| 枣庄市| 广水市| 饶平县| 孟津县| 刚察县| 贵定县| 湘潭市| 太和县| 和平区| 新竹县| 屏山县| 利津县| 宜良县| 巨野县| 会泽县| 蓬莱市| 仁怀市| 德清县| 宁陕县| 新营市| 平原县| 嘉禾县| 长治县| 永兴县| 丽江市| 荣昌县| 辛集市| 黎川县| 永德县| 新津县| 固安县|