SKlearn機器學習入門(6集成模型(分類))

本文知乎鏈接:zhuanlan.zhihu.com/p/33

常言道:「一個籬笆三個樁,一個好漢三個幫」。集成(Ensemble)分類模型便是綜合考慮多個分類器的預測結果,從而做出決策。只是這種「綜合考量」的方式大體上分為兩種:

一種是利用相同的訓練數據同時搭建多個獨立的分類模型,然後通過投票的方式,以少數服從多數的原則做出最終的分類決策。比較具有代表性的模型為隨機森林分類器(Random Forest Classifier),即在相同訓練數據上同時搭建多棵決策樹(Decision Tree)。然而一株標準的決策樹會根據每一維特徵對預測結果的影響程度進行排序,進而決定不同特徵從上而下構建分裂節點的順序;如此一來,所有在隨機森林中的決策樹都會受到這一策略影響而構建的完全一致,從而喪失了多樣性。因此,隨機森林分類器在構建的過程中,每一棵決策樹都會放棄這一固定的排序演算法,轉而隨機選取特徵。

另一種則是按照一定次序搭建多個分類模型。這些模型之間彼此存在依賴關係。一般而言,每一個後續模型的加入都需要對現有集成模型的綜合性能有所貢獻,進而不斷提升更新後的集成模型的性能,並最終期望藉助整合多個分類能力較弱的分類器,搭建初步具有更強分類能力的模型。比較具有代表性的當屬梯度提升決策樹(Gradient Tree Boosting)。與構建隨機森林分類器不同,這裡每一刻決策樹在生成過程中都會儘可能降低整體集成模型在訓練集上的擬合誤差。

為了對比單一決策樹(Decision Tree)與集成模型中隨機森林分類器(Random Forest Classifier)以及梯度提升決策樹(Gradient Tree Boosting)的性能差異,下面依舊使用泰坦尼克號的乘客數據。

在以下代碼中,使用相同的訓練數據與測試數據,並利用單一決策樹、隨機森林分類以及梯度上升決策樹,3種模型各自的默認配置進行初始化,從事預測活動。

#導入pndas並且重命名為pdimport pandas as pd#通過互聯網讀取泰坦尼克乘客檔案,並存儲在變數titanic中titanic=pd.read_csv(http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt)#人工選取pclass,age以及sex作為判別乘客是否能夠生還的特徵X=titanic[[pclass,age,sex]]y=titanic[survived]#對於缺失的年齡信息,我們使用全體乘客的平均年齡代替,這樣可以在保證順利訓練模型的同時,#儘可能不影響預測任務X[age].fillna(X[age].mean(),inplace=True)#對原始數據進行分割,25%的乘客用於測試from sklearn.cross_validation import train_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33)#對類別型特徵進行轉化,成為特徵向量from sklearn.feature_extraction import DictVectorizervec=DictVectorizer(sparse=False)X_train=vec.fit_transform(X_train.to_dict(orient=record))X_test=vec.transform(X_test.to_dict(orient=record))#使用單一決策樹進行模型訓練以及預測分析from sklearn.tree import DecisionTreeClassifierdtc=DecisionTreeClassifier()dtc.fit(X_train,y_train)dtc_y_pred=dtc.predict(X_test)#使用隨機森林分類器進行集成模型的訓練以及預測分析from sklearn.ensemble import RandomForestClassifierrfc=RandomForestClassifier()rfc.fit(X_train,y_train)rfc_y_pred=rfc.predict(X_test)#使用梯度提升決策樹進行集成模型的訓練以及預測分析from sklearn.ensemble import GradientBoostingClassifiergbc=GradientBoostingClassifier()gbc.fit(X_train,y_train)gbc_y_pred=gbc.predict(X_test)

以上代碼使用多種評價分類任務性能的指標,在測試數據集上對比單一決策樹(Decision Tree)、隨機森林分類器(Random Forest Classifier)以及梯度提升決策樹(Gradient Tree Boosting)的性能差異。

#從sklearn.metrics導入classification_reportfrom sklearn.metrics import classification_report#輸出單一決策樹在測試集上的分類準確性,以及更加詳細的精確率,召回率和F1指標print(The accuracy of decision tree is,dtc.score(X_test,y_test))print(classification_report(dtc_y_pred,y_test))#輸出隨機森林分類器在測試集上的分類準確性,以及更加詳細的精確率,召回率,F1指標print(The accuracy of random forest classifier is,rfc.score(X_test,y_test))print(classification_report(rfc_y_pred,y_test))#輸出梯度提升決策樹在測試集上的分類準確率,以及更加詳細的精確率,召回率,F1指標print(The accuracy of gradient tree boosting is,gbc.score(X_test,y_test))print(classification_report(gbc_y_pred,y_test))

以上結果表明:在相同的訓練和測試數據條件下,僅僅使用模型的默認配置,梯度上升決策樹具有最佳的預測性能,其次是隨機森林分類器,最後是單一決策樹。大量在其他數據上的模型時間也證明了上述結論的普適性。一般而言,工業界為了追求更加強勁的預測性能,經常使用隨機森林分類模型作為基線系統(Baseline System)。

集成模型也可以說事實戰應用中最常見的。相比於其他單一的學習模型,集成模型可以整合多種模型,或者多次就一種模型進行建模。由於模型估計參數的過程也同樣受到概率的影響,具有一定的不確定性;因此,集成模型雖然在訓練過程中要耗費更多的時間,但是得到的綜合模型往往具有更高的表現性能和更好的穩定性。

參考文獻《python機器學習及實踐》、《機器學習》西瓜書等。

本文知乎鏈接:zhuanlan.zhihu.com/p/33

推薦閱讀:

透明化體驗身臨其境——工博會系列之一
人工智慧背後的數據科學
百年奧運是一部科技史,智能奧運在平昌冬奧會浮出水面
人工智慧會使哪些行業受益?
中國智能製造行業市場前瞻與投資戰略規劃分析

TAG:人工智慧 | 機器學習 | 人工智慧演算法 |