[機器學習二部曲] Python實作—Ensemble Learning: 如何結合不同類型的弱學習器? Voting!

在Bagging單元中,我們分享到樣本可以透過Bootstrap的方式重複抽取後,進行不同弱學習器的建模。然而,在python執行中,細心的讀者會發現到,當我們採用sklearn套件裡面的Bagging方法時,這些弱學習器雖然可以自行選擇,但只能選一種,沒辦法交錯使用。比方說我們選擇了SVM當我們的弱學習器,那所有的弱學習器都是SVM,沒有辦法有些用SVM, 有些用決策樹或貝氏分類器等等。因此,今天我們要來分享,如何用Voting將這些”不同類型”的弱學習器結合在一起!

Python 運行

想要結合不同類型的弱學習器時,我們可以透過sklear.ensemble套件裡所提供的voting方法來運行。其中VotingClassifier適合用在分類問題,VotingRegressor則適合用在連續型資料。

引入套件及資料

from sklearn.ensemble import VotingClassifier
from sklearn import datasets
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
%matplotlib inline

在這邊,我們一樣採用sklearn所提供的鳶尾花資料集來演示,因鳶尾花屬於分類問題,故我們這邊引入VotingClassifier。大家手邊有資料的話也可以採用自己的資料進行,如果是連續型問題,可以改為引入VotingRegressor。下載好資料後,我們將樣本區分為訓練集以及測試集。

iris=datasets.load_iris()
X=iris.data
y=iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.3,random_state=0)

Voting

進行Voting主要有三個步驟,第一步引入我們想要使用的子模型套件,第二步將這些模型存成一個list,最後只要依照我們所熟悉的建模方式進行就完成了!詳細過程歡迎參考影片。

引入子模型套件:
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB

將子模型存成list:
model_list=[]
m1=SVC()
model_list.append(('svm',m1))
m2=DecisionTreeClassifier()
model_list.append(('DT',m2))
m3=GaussianNB()
model_list.append(('NB',m3))
vc=VotingClassifier(model_list)

建模:
vc.fit(X_train,y_train)

預測:
vc.predict(X_test)

準確度評比:
vc.score(X_test,y_test)

延伸閱讀

Ensemble Learning: 三個臭皮匠,勝過一個諸葛亮! Bagging!

Ensemble Learning: 一步步的修正, Boosting!

程式檔案,歡迎下載Github

Share

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *