1. 程式人生 > >python包sk-learn中的隨機森林

python包sk-learn中的隨機森林

最近在學習機器學習,學習到了隨機森林演算法,想做一個demo,閱讀了python的sk-learn包中隨機森林的程式碼實現,做了一些筆記。
sk-learn中的隨機森林是基於RandomForestClassifier類實現的,它的原型是
class RandomForestClassifier(ForestClassifier)
繼承了一個抽象類ForestClassifier,也就是分類樹
RandomForestClassifier有若干個引數,下面我們一個個來看

n_estimators 隨機森林中樹的個數 預設為10

criterion 每一次分裂的標準,有兩個可選項,預設的基尼係數("gini")和熵(“entropy”)

max_features 每一次生成樹時使用的特徵數量,預設為“auto”。若為int則為對應的數量;若為float則對應n_estimators*max_features,即此時max_features對應的一個百分比;若為“auto”或“sqrt”,max_features=sqrt(總的特徵數);若為“log2”,則為log2(總的特徵數);若為None,則為總的特徵數。

max_depth決策樹的最大深度,預設為None

min_samples_split每次分裂節點是最小的分裂個數,即最小被分裂為幾個,預設為2

min_samples_leaf若某一次分裂時一個葉子節點上的樣本數小於這個值,則會被剪枝,預設為1

max_leaf_nodes最大的葉子節點的個數,預設為None,如果不為None,max_depth引數將被忽略

min_weight_fraction_leaf
The minimum weighted fraction of the input samples required to be at a leaf node.(這個沒看懂)

oob_score、bootstrap這個兩個引數決定是否使用out-of-bag進行誤差度量和是否使用bootstrap進行抽樣,預設都是False

n_jobs平行計算的個數,預設為1,若為-1,則選擇為cores的個數

random_state 預設使用np.random

verbose
Controls the verbosity of the tree building process.

warm_start 是否熱啟動,預設為True

class_weight權重 預設全為1

首先把標籤和特徵分離
from sklearn.cross_validation import train_test_split
feature_train, feature_test, target_train, target_test =
train_test_split(feature, target, test_size=0.1, random_state=42)

主要的方法有
model = RandomForestClassifier(n_estimators=1000)
model.fit(feature_train , target_train) # 建立一個隨機森林
predict=predict(Z) # 對新的樣本Z做預測
score = model.score(feature_test , target_test) # 評估正確率