閱讀了Python的sklearn包中隨機森林的代碼實現,做了一些筆記。
sklearn中的隨機森林是基於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 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
首先把標簽和特征分離
1 from sklearn.cross_validation import train_test_split 2 feature_train, feature_test, target_train, target_test = train_test_split(feature, target, test_size=0.1, random_state=42)
主要的方法有
1 model = RandomForestClassifier(n_estimators=1000) 2 model.fit(feature_train , target_train) # 創建一個隨機森林 3 predict=predict(Z) # 對新的樣本Z做預測 4 score = model.score(feature_test , target_test) # 評估正確率