Introduction
隨機森林是非常具有代表性的Bagging集成演算法
- 所有的基評估器(base estimator)都是決策樹
- 單個決策樹的準確率越高,隨機森林的準確率也會越高
- Bagging是依賴於平均值或多數決原則來決定集成結果的
DecisionTreeClassifier
1 | class sklearn.ensemble.RandomForestClassifier(n_estimators=’warn’, criterion=’gini’, |
- 其大部分的參數幾乎與決策樹一致
重要參數
- 其是使用bagging的集成算法都會有的重要參數
n_estimators
森林中樹木的數量(base estimator的數量)
- 通常此值越大,模型效果往往越好
- 任何模型都有決策邊界,其值達到一定程度時,精確性往往不在上升或開始波動
- 其值越大,計算量與內存消耗量越大,訓練時間越長
- 渴望在訓練難度和模型效果之間取得平衡
random_state
- 隨機森林中的
random_state
,其控制的是森林生成的模式(生成一片固定的森林),而非讓一個森林之中只有一棵樹- 固定生成的每棵樹的
random_state
;但是森林中樹跟樹之間還是不一樣
- 固定生成的每棵樹的
- 不像決策樹的
random_state
都是生成同一棵樹
bootstrap
bagging是通過樣本抽取後有放回的隨機抽樣技術來型成不同的訓練集
bootstrap
就是用來控制抽樣技術的參數
- 參數默認為
True
:有放回的隨機採樣技術- 通常這個參數不會被我們設置為
False
- 通常這個參數不會被我們設置為
- 由於是有放回的抽樣技術,樣本可能在新的自助集中出現多次,其他樣本可能被忽略
- 自助集大約平均會包含 63% 的原始數據
- 表示會有37%的數據集被浪費掉,沒有參與建模,其被稱為袋外數據(out of bag data;oob)
- 亦可以被用來作為集成算法的測試集使用
- 亦指在使用隨機森林時,我們可以不劃分測試集和訓練集,只需要用袋外數據來測試模型
- 當原始樣本數及
n_estimators
不夠大的時候,也很可能沒有數據落在袋外,便無法使用oob數據來測試模型
- 表示會有37%的數據集被浪費掉,沒有參與建模,其被稱為袋外數據(out of bag data;oob)
oob_score
- 若希望用袋外數據測試,實例化時將
oob_score
設為True
RF_classifier = RandomForestClassifier(n_estimators=25,random_state=2,oob_score=True)
- 為
True
時無須再劃分訓練集及測試集
重要屬性
estimators_
- 使用
estimator.estimators_
查看森林中所有樹的狀況 - 其返回每棵樹對象構建的參數,為一列表
- 可以發現每棵樹只有
random_state
不同
- 可以發現每棵樹只有
- 可使用列表的方式取出某棵樹,再利用
.屬性
的方式查看該樹的屬性estimator.estimators_[0].random_state
- 查看
estimator
模型裡第0顆樹的random_state
之值
- 查看
oobscore
- 要是建模
oob_score
為True
時,可使用其屬性查看使用袋外數據測試的結果
重要接口
和其他演算法模型一樣,隨機森林仍有apply
、fit
、predict
、score
等接口
predict_proba (predict probability)
返回每個測試樣本對應被分到每一類標籤的概率
- 標籤有幾種不一樣的分類就會返回幾個概率
- 二分類問題:數值大於0.5被分為1,小於0.5被分為0
傳統隨機森林是利用bagging規則,平均或多數決集成結果
sklearn
中隨機森林是平均每個樣本對應的predict_proba返回的概率,得到一個平均概率,從而決定樣本的分類