本篇内容為《機器學習實戰》第 7 章利用 adaboost 元算法提高分類性能程式清單。所用代碼為 python3。
adaboost 優點:泛化錯誤率低,易編碼,可以應用在大部分分類器上,無參數調整。 缺點:對離群點敏感。 适用資料類型:數值型和标稱型資料。
boosting 方法擁有多個版本,這裡将隻關注其中一個最流行的版本 adaboost。
在構造 adaboost 的代碼時,我們将首先通過一個簡單資料集來確定在算法實作上一切就緒。使用如下的資料集:
在 python 提示符下,執行代碼加載資料集:
我們先給出函數<code>buildstump()</code>的僞代碼:
為了解實際運作過程,在 python 提示符下,執行代碼并得到結果:
這一行可以注釋掉,這裡為了了解函數的運作而列印出來。
将目前錯誤率與已有的最小錯誤率進行對比後,如果目前的值較小,那麼就在字典<code>basestump</code>中儲存該單層決策樹。字典、錯誤率和類别估計值都會傳回給 adaboost 算法。
上述,我們已經建構了單層決策樹,得到了弱學習器。接下來,我們将使用多個弱分類器來建構 adaboost 代碼。
首先給出整個實作的僞代碼如下:
在 python 提示符下,執行代碼并得到結果:
最後,我們來觀察測試錯誤率。
輸入以下指令進行分類:
随着疊代的進行,資料點 [0,0] 的分類結果越來越強。也可以在其它點上分類:
這兩個點的分類結果也會随着疊代的進行而越來越強。