天天看點

sklearn中的random_forest随機森林随機森林模型的總結一、代碼怎麼寫二、關于參數n_estimators=10:決策樹的個數,越多越好,但是性能就會越差,至少100左右(具體數字忘記從哪裡來的了)可以達到可接受的性能和誤差率。 bootstrap=True:是否有放回的采樣。

随機森林

鑒于決策樹容易過拟合的缺點,随機森林采用多個決策樹的投票機制來改善決策樹,我們假設随機森林使用了m棵決策樹,那麼就需要産生m個一定數量的樣本集來訓練每一棵樹,如果用全樣本去訓練m棵決策樹顯然是不可取的,全樣本訓練忽視了局部樣本的規律,對于模型的泛化能力是有害的

産生n個樣本的方法采用Bootstraping法,這是一種有放回的抽樣方法,産生n個樣本

而最終結果采用Bagging的政策來獲得,即多數投票機制

随機森林的生成方法:

1.從樣本集中通過重采樣的方式産生n個樣本

2.假設樣本特征數目為a,對n個樣本選擇a中的k個特征,用建立決策樹的方式獲得最佳分割點

3.重複m次,産生m棵決策樹

4.多數投票機制來進行預測

(需要注意的一點是,這裡m是指循環的次數,n是指樣本的數目,n個樣本構成訓練的樣本集,而m次循環中又會産生m個這樣的樣本集)

随機森林模型的總結

随機森林是一個比較優秀的模型,在我的項目的使用效果上來看,它對于多元特征的資料集分類有很高的效率,還可以做特征重要性的選擇。運作效率和準确率較高,實作起來也比較簡單。但是在資料噪音比較大的情況下會過拟合,過拟合的缺點對于随機森林來說還是較為緻命的。

sklearn中的參數調整

一、代碼怎麼寫

  1. class sklearn.ensemble.RandomForestClassifier(n_estimators=10, crite-rion=’gini’, max_depth=None,

  2. min_samples_split=2, min_samples_leaf=1,

  3. min_weight_fraction_leaf=0.0,

  4. max_features=’auto’,

  5. max_leaf_nodes=None, bootstrap=True,

  6. oob_score=False, n_jobs=1, ran-dom_state=None, verbose=0,

  7. 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