[機器學習二部曲] Python實作—Ensemble Learning: 三個臭皮匠,勝過一個諸葛亮! Bagging!

Ensemble Learning(集成學習)主要是透過結合多個機器學習器而成的大模型。在機器學習首部曲系列中,我們分享了很多機器學習模型,這一個個模型,都可以稱做一個機器學習器(註:相同建模方法餵入不同的訓練樣本或特徵,亦視為不同的機器學習器)。集成學習主要的理念就是透過多個機器學習器的結果,透過不同方法綜合起來得到最終的結果。其方法主要包含三種,分別為Bagging, Bosting及Stacking。本支影片簡單介紹Bagging方法,並分享如何在Python中實作。

什麼是Bagging?

Bagging, 顧名思義,就是一種隨機抽取的概念。看到下圖中,我們可以想像一下,從大袋中(紫色圈圈)隨機抽取樣本及特徵變成一個小袋子(綠色圈圈),並以此袋子的內容物建模。接下來,將小袋子的樣本放回大袋子,再抽一次,建構第二個小袋子與模型,以此類推。而這種取後放回的抽取方式,我們稱之為bootstrap。最後,透過每個模型產出的結果,投票決定最終結果,也就是一人一票,票票等值的等權重加權方式。

光是這樣說,可能還是稍微有點抽象。我們把紫色袋中的樣本,轉換為我們熟悉的資料格式。而每一個綠色小袋子,就是透過樣本以及特徵的抽取,建構而成。抽完後立即放回紫色袋中,所以無論怎麼抽,這個資料大表都是不會改變的。而針對每個綠色袋中的樣本,我們都可以建構一個機器學習模型。最後,再以投票的方式來決定最終的結果,如果目標為連續型,則改採對每個學習器的結果取平均。

如何在Python裡運行Bagging?

在python中,我們可以透過scikit-learn所提供的套件進行Bagging,而所有的方法都與我們首部曲建模的步驟非常相似。

1.準備資料與引入套件

大家可以準備自己要分析的資料跟著後續程式碼進行操作,在這邊我們一樣以sklearn裡面所提供的鳶尾花資料集作演示。

引入套件
from sklearn.ensemble import BaggingClassifier
from sklearn import datasets
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
%matplotlib inline

下載資料集
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)

2.Bagging

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

選擇子模型
clf=GaussianNB()

Bagging
bagging=BaggingClassifier(base_estimator=clf,n_estimators=10,
bootstrap=True,bootstrap_features=True,max_features=3,max_samples=0.7)
bagging.fit(X_train,y_train)
bagging.predict(X_test)
bagging.score(X_test,y_test)

完整程式檔案,歡迎下載Github

Share

發佈留言

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