在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