R

如何使隨機森林樹投票十進製而不是二進制

  • July 25, 2018

我的問題是關於二元分類,比如區分好客戶和壞客戶,而不是回歸或非二元分類。在這種情況下,隨機森林是分類樹的集合。對於每次觀察,每棵樹都投一個“是”或“否”,所有樹的平均投票就是最終的森林概率。

我的問題是關於修改底層樹的行為:我們如何修改 randomForest 函數(R 的 randomForest 包),以便每棵樹投票一個十進製而不是二進制是/否。為了更好地理解我所說的十進制,讓我們考慮一下決策樹是如何工作的。

一棵成熟的決策樹在其終端節點中有 1 個好實例或 1 個壞實例。假設我將終端節點大小限制為 100。那麼終端節點將如下所示:

節點 1 = 80 壞,20 好

Node2 = 51 壞,49 好

Node3 = 10 壞,90 好

請注意,即使 Node1 和 Node2 投票“差”,它們的“差的強度”也大不相同。這就是我所追求的。不是讓他們產生 1 或 0(這是默認行為),而是可以修改 R 包,以便他們投票 80/100、51/100、10/100 等?

這是一個微妙的點,因軟件而異。我知道有兩種主要方法:

  1. 二進制葉子 - 每個葉子都以多數票投票。這就是randomForestR 中的工作原理,即使在使用時也是如此predict(..., type="prob")
  2. 比例葉子 - 每個葉子返回屬於每個類的訓練樣本的比例。這是如何sklearn.ensemble.RandomForestClassifier.predict_proba工作的。在另一個答案中,@usεr11852 指出 R 的ranger包也提供了這個功能。令人高興的是,我可以證明,從我有限的使用情況來看,ranger它也比randomForest.

我不認為有一種簡單的方法可以randomForest使用比例葉法,因為 R 軟件實際上只是 C 和 FORTRAN 程序的一個掛鉤。除非你喜歡修改別人的代碼,否則你要么自己寫,要么找其他軟件實現。

引用自:https://stats.stackexchange.com/questions/358948

comments powered by Disqus