1. 程式人生 > >機器學習演算法之隨機森林

機器學習演算法之隨機森林

演算法原理整合學習(ensemble leaning)通過構建並結合多個學習器來完成學習任務,通過將多個學習器結合,常常可以獲得比單一學習器顯著優越的效果和泛化能力。整合學習中的基學習器可以是同質的,也可以是異質的。根據個體學習器的生成方式,目前的整合學習方法大致可分為三大類:一類是Bagging,個體學習器之間不存在強依賴關係,可以同時並行化訓練和生成,最終結果通常通過投票機制產出,隨機森林是這一型別的代表;另一類是Boosting,個體學習器之間存在強依賴關係,後一學習器依賴前一學習器的結果,,因此必須以序列化形式序列生成,我們下節會講到的Adaboost和GBDT是這一型別的代表;其實還有第三類,叫Stacking,即將初級學習器的輸出次級學習器的輸入特徵,深層神經網路甚至可以理解為Stacking整合學習的變種。

隨機森林(Random Forest)是以決策樹為基學習器構建的Bagging整合學習演算法,其實現簡單、計算開銷小、並且在很多現實任務中表現出搶眼的效果。其主要通過樣本擾動和屬性擾動使得整合學習的泛化性顯著提高。樣本擾動是指通過對初始訓練集取樣構建每一棵決策樹;屬性擾動是指對基決策樹的每個節點,分裂時從該節點的屬性集合中隨機選擇k個屬性(k一般去log(d,2),d為屬性數量)。


模型訓練程式碼地址:https://github.com/qianshuang/ml-exp
def train():
   print("start training...")
   # 處理訓練資料
   train_feature, train_target = process_file(train_dir, word_to_id, cat_to_id)
   # 模型訓練
   model.fit(train_feature, train_target)
def test():
   print("start testing...")
   # 處理測試資料
   test_feature, test_target = process_file(test_dir, word_to_id, cat_to_id)
   # test_predict = model.predict(test_feature)  # 返回預測類別
   test_predict_proba = model.predict_proba(test_feature)    # 返回屬於各個類別的概率
   test_predict = np.argmax(test_predict_proba, 1)  # 返回概率最大的類別標籤
   # accuracy
   true_false = (test_predict == test_target)
   accuracy = np.count_nonzero(true_false) / float(len(test_target))
   print()
   print("accuracy is %f" % accuracy)
   # precision    recall  f1-score
   print()
   print(metrics.classification_report(test_target, test_predict, target_names=categories))
   # 混淆矩陣
   print("Confusion Matrix...")
   print(metrics.confusion_matrix(test_target, test_predict))
if not os.path.exists(vocab_dir):
   # 構建詞典表
   build_vocab(train_dir, vocab_dir)
categories, cat_to_id = read_category()
words, word_to_id = read_vocab(vocab_dir)
# kNN
# model = neighbors.KNeighborsClassifier()
# decision tree
# model = tree.DecisionTreeClassifier()
# random forest
model = ensemble.RandomForestClassifier(n_estimators=10)    # n_estimators為基決策樹的數量,一般越大效果越好直至趨於收斂
train()
test()執行結果:
ead_category...
read_vocab...
start training...
start testing...
accuracy is 0.875000
            precision    recall  f1-score   support
        娛樂       0.83      0.91      0.87        89
        房產       0.78      0.83      0.80       104
        教育       0.81      0.81      0.81       104
        家居       0.75      0.71      0.73        89
        遊戲       0.93      0.95      0.94       104
        時政       0.78      0.79      0.78        94
        時尚       0.94      0.89      0.92        91
        體育       0.98      0.97      0.97       116
        財經       0.95      0.91      0.93       115
        科技       0.99      0.96      0.97        94
avg / total       0.88      0.88      0.88      1000
Confusion Matrix...

文章轉載八斗問答