随機森林
鑒于決策樹容易過拟合的缺點,随機森林采用多個決策樹的投票機制來改善決策樹,我們假設随機森林使用了m棵決策樹,那麼就需要産生m個一定數量的樣本集來訓練每一棵樹,如果用全樣本去訓練m棵決策樹顯然是不可取的,全樣本訓練忽視了局部樣本的規律,對于模型的泛化能力是有害的
産生n個樣本的方法采用Bootstraping法,這是一種有放回的抽樣方法,産生n個樣本
而最終結果采用Bagging的政策來獲得,即多數投票機制
随機森林的生成方法:
1.從樣本集中通過重采樣的方式産生n個樣本
2.假設樣本特征數目為a,對n個樣本選擇a中的k個特征,用建立決策樹的方式獲得最佳分割點
3.重複m次,産生m棵決策樹
4.多數投票機制來進行預測
(需要注意的一點是,這裡m是指循環的次數,n是指樣本的數目,n個樣本構成訓練的樣本集,而m次循環中又會産生m個這樣的樣本集)
随機森林模型的總結
随機森林是一個比較優秀的模型,在我的項目的使用效果上來看,它對于多元特征的資料集分類有很高的效率,還可以做特征重要性的選擇。運作效率和準确率較高,實作起來也比較簡單。但是在資料噪音比較大的情況下會過拟合,過拟合的缺點對于随機森林來說還是較為緻命的。
sklearn中的參數調整
一、代碼怎麼寫
-
class sklearn.ensemble.RandomForestClassifier(n_estimators=10, crite-rion=’gini’, max_depth=None,
-
min_samples_split=2, min_samples_leaf=1,
-
min_weight_fraction_leaf=0.0,
-
max_features=’auto’,
-
max_leaf_nodes=None, bootstrap=True,
-
oob_score=False, n_jobs=1, ran-dom_state=None, verbose=0,
-
warm_start=False, class_weight=None)
二、關于參數
其中關于決策樹的參數:
criterion: ”gini” or “entropy”(default=”gini”)是計算屬性的gini(基尼不純度)還是entropy(資訊增益),來選擇最合适的節點。
splitter: ”best” or “random”(default=”best”)随機選擇屬性還是選擇不純度最大的屬性,建議用預設。
max_features: 選擇最适屬性時劃分的特征不能超過此值。
當為整數時,即最大特征數;當為小數時,訓練集特征數*小數;
if “auto”, then max_features=sqrt(n_features).
If “sqrt”, thenmax_features=sqrt(n_features).
If “log2”, thenmax_features=log2(n_features).
If None, then max_features=n_features.
max_depth: (default=None)設定樹的最大深度,預設為None,這樣建樹時,會使每一個葉節點隻有一個類别,或是達到min_samples_split。
min_samples_split:根據屬性劃分節點時,每個劃分最少的樣本數。
min_samples_leaf:葉子節點最少的樣本數。
max_leaf_nodes: (default=None)葉子樹的最大樣本數。
min_weight_fraction_leaf: (default=0) 葉子節點所需要的最小權值
verbose:(default=0) 是否顯示任務程序
關于随機森林特有的參數:
n_estimators=10:決策樹的個數,越多越好,但是性能就會越差,至少100左右(具體數字忘記從哪裡來的了)可以達到可接受的性能和誤差率。
bootstrap=True:是否有放回的采樣。
oob_score=False:oob(out of band,帶外)資料,即:在某次決策樹訓練中沒有被bootstrap選中的資料。多單個模型的參數訓練,我們知道可以用cross validation(cv)來進行,但是特别消耗時間,而且對于随機森林這種情況也沒有大的必要,是以就用這個資料對決策樹模型進行驗證,算是一個簡單的交叉驗證。性能消耗小,但是效果不錯。
n_jobs=1:并行job個數。這個在ensemble算法中非常重要,尤其是bagging(而非boosting,因為boosting的每次疊代之間有影響,是以很難進行并行化),因為可以并行進而提高性能。1=不并行;n:n個并行;-1:CPU有多少core,就啟動多少job
warm_start=False:熱啟動,決定是否使用上次調用該類的結果然後增加新的。
class_weight=None:各個label的權重。
進行預測可以有幾種形式:
predict_proba(x):給出帶有機率值的結果。每個點在所有label的機率和為1.
predict(x):直接給出預測結果。内部還是調用的predict_proba(),根據機率的結果看哪個類型的預測值最高就是哪個類型。
predict_log_proba(x):和predict_proba基本上一樣,隻是把結果給做了log()處理。
原文:
https://blog.csdn.net/u012102306/article/details/52228516