全排列算法的原理是什么?
算法原理集成學習(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...
---------------------
了解更多干貨文章可以關注小程序八斗問答