【簡(jiǎn)介:】書籍有人民郵電出版社的《無(wú)人機(jī)玩家DIY指南》,清華大學(xué)出版社《玩轉(zhuǎn)四軸飛行器》。網(wǎng)站有(5imx我愛(ài)模型玩家論壇),(5irc模型愛(ài)好者網(wǎng)論壇),(天使遙控模型論壇),(模型中國(guó)論壇),里面都有
書籍有人民郵電出版社的《無(wú)人機(jī)玩家DIY指南》,清華大學(xué)出版社《玩轉(zhuǎn)四軸飛行器》。網(wǎng)站有(5imx我愛(ài)模型玩家論壇),(5irc模型愛(ài)好者網(wǎng)論壇),(天使遙控模型論壇),(模型中國(guó)論壇),里面都有有關(guān)無(wú)人機(jī)的文章可供參考。
算法原理集成學(xué)習(xí)(ensemble leaning)通過(guò)構(gòu)建并結(jié)合多個(gè)學(xué)習(xí)器來(lái)完成學(xué)習(xí)任務(wù),通過(guò)將多個(gè)學(xué)習(xí)器結(jié)合,常??梢垣@得比單一學(xué)習(xí)器顯著優(yōu)越的效果和泛化能力。集成學(xué)習(xí)中的基學(xué)習(xí)器可以是同質(zhì)的,也可以是異質(zhì)的。根據(jù)個(gè)體學(xué)習(xí)器的生成方式,目前的集成學(xué)習(xí)方法大致可分為三大類:一類是Bagging,個(gè)體學(xué)習(xí)器之間不存在強(qiáng)依賴關(guān)系,可以同時(shí)并行化訓(xùn)練和生成,最終結(jié)果通常通過(guò)投票機(jī)制產(chǎn)出,隨機(jī)森林是這一類型的代表;另一類是Boosting,個(gè)體學(xué)習(xí)器之間存在強(qiáng)依賴關(guān)系,后一學(xué)習(xí)器依賴前一學(xué)習(xí)器的結(jié)果,,因此必須以序列化形式串行生成,我們下節(jié)會(huì)講到的Adaboost和GBDT是這一類型的代表;其實(shí)還有第三類,叫Stacking,即將初級(jí)學(xué)習(xí)器的輸出次級(jí)學(xué)習(xí)器的輸入特征,深層神經(jīng)網(wǎng)絡(luò)甚至可以理解為Stacking集成學(xué)習(xí)的變種。
隨機(jī)森林(Random Forest)是以決策樹(shù)為基學(xué)習(xí)器構(gòu)建的Bagging集成學(xué)習(xí)算法,其實(shí)現(xiàn)簡(jiǎn)單、計(jì)算開(kāi)銷小、并且在很多現(xiàn)實(shí)任務(wù)中表現(xiàn)出搶眼的效果。其主要通過(guò)樣本擾動(dòng)和屬性擾動(dòng)使得集成學(xué)習(xí)的泛化性顯著提高。樣本擾動(dòng)是指通過(guò)對(duì)初始訓(xùn)練集采樣構(gòu)建每一棵決策樹(shù);屬性擾動(dòng)是指對(duì)基決策樹(shù)的每個(gè)節(jié)點(diǎn),分裂時(shí)從該節(jié)點(diǎn)的屬性集合中隨機(jī)選擇k個(gè)屬性(k一般去log(d,2),d為屬性數(shù)量)。
模型訓(xùn)練代碼地址:
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...)
# 處理測(cè)試數(shù)據(jù)
test_feature, test_target = process_file(test_dir, word_to_id, cat_to_id)
# test_predict = model.predict(test_feature) # 返回預(yù)測(cè)類別
test_predict_proba = model.predict_proba(test_feature) # 返回屬于各個(gè)類別的概率
test_predict = np.argmax(test_predict_proba, 1) # 返回概率最大的類別標(biāo)簽
# 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ù)的數(shù)量,一般越大效果越好直至趨于收斂
train()
test()運(yùn)行結(jié)果:
ead_category...
read_vocab...
start training...
start testing...
accuracy is 0.875000
precision recall f1-score support
娛樂(lè) 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
時(shí)政 0.78 0.79 0.78 94
時(shí)尚 0.94 0.89 0.92 91
體育 0.98 0.97 0.97 116
財(cái)經(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
了解更多干貨文章可以關(guān)注小程序八斗問(wèn)答