算法工程師的發(fā)展前景如何?
算法原理集成學(xué)習(ensemble leaning)通過構(gòu)建并結(jié)合多個學(xué)習器來完成學(xué)習任務(wù),通過將多個學(xué)習器結(jié)合,常常可以獲得比單一學(xué)習器顯著優(yōu)越的效果和泛化能力。集成學(xué)習中的基學(xué)習器可以是同質(zhì)的,也可以是異質(zhì)的。根據(jù)個體學(xué)習器的生成方式,目前的集成學(xué)習方法大致可分為三大類:一類是Bagging,個體學(xué)習器之間不存在強依賴關(guān)系,可以同時并行化訓(xùn)練和生成,最終結(jié)果通常通過投票機制產(chǎn)出,隨機森林是這一類型的代表;另一類是Boosting,個體學(xué)習器之間存在強依賴關(guān)系,后一學(xué)習器依賴前一學(xué)習器的結(jié)果,,因此必須以序列化形式串行生成,我們下節(jié)會講到的Adaboost和GBDT是這一類型的代表;其實還有第三類,叫Stacking,即將初級學(xué)習器的輸出次級學(xué)習器的輸入特征,深層神經(jīng)網(wǎng)絡(luò)甚至可以理解為Stacking集成學(xué)習的變種。
隨機森林(Random Forest)是以決策樹為基學(xué)習器構(gòu)建的Bagging集成學(xué)習算法,其實現(xiàn)簡單、計算開銷小、并且在很多現(xiàn)實任務(wù)中表現(xiàn)出搶眼的效果。其主要通過樣本擾動和屬性擾動使得集成學(xué)習的泛化性顯著提高。樣本擾動是指通過對初始訓(xùn)練集采樣構(gòu)建每一棵決策樹;屬性擾動是指對基決策樹的每個節(jié)點,分裂時從該節(jié)點的屬性集合中隨機選擇k個屬性(k一般去log(d,2),d為屬性數(shù)量)。
模型訓(xùn)練代碼地址:https://github.com/qianshuang/ml-exp
def train():
print("start training...")
# 處理訓(xùn)練數(shù)據(jù)
train_feature, train_target = process_file(train_dir, word_to_id, cat_to_id)
# 模型訓(xùn)練
model.fit(train_feature, train_target)
def test():
print("start testing...")
# 處理測試數(shù)據(jù)
test_feature, test_target = process_file(test_dir, word_to_id, cat_to_id)
# test_predict = model.predict(test_feature) # 返回預(yù)測類別
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):
# 構(gòu)建詞典表
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為基決策樹的數(shù)量,一般越大效果越好直至趨于收斂
train()
test()運行結(jié)果:
ead_category...
read_vocab...
start training...
start testing...
accuracy is 0.875000
precision recall f1-score support
娛樂 0.83 0.91 0.87 89
房產(chǎn) 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
財經(jīng) 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...
--------------------- 了解更多干貨文章可以關(guān)注小程序八斗問答