sklearn adaboost_集成学习-从零推导和实现adaboost与3D可视化
今天的主題是集成學習中的
, 或稱作 , 首先我們來建立一種概念, 什么是 :3D平面表示分類邊界, 此圖表示數據點和他們被分到的區域這是上面3D動圖中數據點的二維圖, 要和上圖對應看 是集成學習的一種, 意思是建立多個弱分類器, 然后用這些弱分類器的線性加權組合來形成一個強分類器, 什么是弱分類器呢, 就是只比胡猜稍微好一點的分類器, 訓練這些弱分類器是一個迭代的過程, 在這個過程里, 下一個弱分類器總是更加關注上一個弱分類器沒有分好的數據樣本, 以彌補之前弱分類器的不足, 就是類似"三個臭皮匠頂個諸葛亮"的算法.首先我們先來通過可視化的方法來建立一種直覺, 上面兩幅圖中, 下面的2D圖是一些數據點, 分為兩類, 紅色的類和藍色的類, 上面動態圖展示的是
迭代增加弱分類器的過程中, 分類邊界的變化, 可見隨著迭代次數的增加, 分類邊界把數據點分別推向了正樣本(紅色)和負樣本(藍色)的區域, 當然如果仔細看的話, 也可以看到紅色的點出現在藍色的區域, 這屬于沒有分對的樣本.源代碼: https://github.com/aespresso/a_journey_into_math_of_ml
從零推導
:我們首先有一個弱分類器
, 它輸出的值非 即 , , 的思路是把這些弱分類器的預測結果都加起來, 然后取 , 在我們的推導過程中, 假設我們要解決的問題是一個二項分類問題, 則我們要把這些弱分類器都加起來取 , 則有:上式中
是一個強分類器, 是數據或特征值, 指的是弱分類器的個數, 上式的意思是對弱分類器的輸出值求和并取 ,然后我們發現只對弱分類器求和好像少了點什么, 沒錯, 我們要賦予每個弱分類器不同的權重:
上式中
指的是第 個弱分類器的權重.在
中, 這么多弱分類器, 是憑什么依據劃分的呢, 其實每個弱分類器關注的是前面弱分類器沒有分對的數據樣本, 比如說第 個弱分類器犯了一些錯誤, 導致有些數據樣本沒有分對, 那么第 個弱分類器就會更加關注前面沒有分對的數據點, 嘗試彌補第 個弱分類器的不足.假設我們有一些數據樣本
, 其中 , 是數據樣本的個數, 我們要解決的是二項分類問題.我們需要給每一個數據樣本賦一個權重, 以控制每個弱分類器應該更加關注哪些數據樣本, 我們需要讓下一個弱分類器更加關注它前面的弱分類器沒有分對的數據點, 設
在第 個弱分類器上的權重為 , 我們首先初始化, 在第 個弱分類器上所有數據點的權重都是一樣的, 即:初始化錯誤率為
, 比如說 個數據點, 分錯了40個, 則 , 取值在 到 之間:將
代入 , 得出:那我們怎么確定下一個弱分類器需要關注哪些數據樣本呢? 當我們定義好當前的弱分類器
之后, 做以下操作:上式中
是歸一化因子, 因為我們想要 , 怎么理解這個式子呢, 首先 是正數, 當 的時候, 的是 , 否則是 , 不難看出當當前弱分類器 預測正確的時候, 會變小, 而錯誤的時候, 會變大, 權重變大代表著下一個弱分類器中需要更加關注這些樣本:注意我們暫且不管
.我們現在要求所有未歸一的權重的和, 并求出可以使它最小的
, 我們把未歸一的權重的和定義為 , 因為分錯的樣本輸入到下一個弱分類器的權重(未歸一)為 (見 ), 則分錯的樣本越多 會越大, 相反分對的樣本越多 越小.上式左邊加上
, 右邊再減去.上式中可看出, 上式左邊跟我們當前的弱分類器
無關, 當前的弱分類器只對右式起作用, 也就是右式控制著 的大小, 為了得到我們想要的 , 我們要求 對于 的導數, 并把它設為 , 求出 的值, 注意下邊我們會把等式左邊省略掉, 因為它可看作一個常數.解上面的式子, 這里省略過程, 因為比較簡單, 大概解法是將
和 提到求和符號外面來, 同時取 , 化簡, 得到 :將
帶入到 里, 得到下式, 注意這里用到了 :我們求
, 是所有數據樣本權重的和也就是所有 取值的和:將
代入上式, 得出:將
代入 里:我們通過上式還是很難看出
的意義到底是什么, 沒關系, 接下來就恍然大悟了, 下面我們求數據點中分類正確的樣本和分類錯誤樣本各自 的和:我們又知道
, 得出 , 代入上式:又因為
, 得出:上式的意義是, 在我們每次增加一個新弱分類器的時候, 前面的弱分類器分錯的樣本的權重占總樣本權重的
, 前面的弱分類器分對的樣本的權重也占總樣本權重的 .我們把
的計算步驟梳理一下:- 易用, 需要調節的參數少;
- 弱分類器可以是任何模型, 比如邏輯回歸, 線性回歸等等, 最常用的是決策樹樁;
- 對數據敏感, 如果數據有很多噪音, 則 會傾向于擬合噪音而最終導致模型的過擬合, 為了解決這樣的問題, 可以給每一個弱分類器一個學習率權重, 讓每個弱分類器最強分類器造成的影響小一些, 或做交叉驗證, 讓迭代的過程在合適的時機停止;
- 可以用來做特征選擇, 舉個例子吧, 比如說要評估人群的信用風險, 然后你會有很多這些人的資料, 比如說性別年齡, 居住地址, 收入, 有無不動產等等, 如果你用 的集成方法來做分類, 在迭代的每一步你需要用一個弱分類器劃分數據樣本, 假設我們用決策樹樁, 決策樹樁每次只能選擇一個特征值進行劃分, 在建模完成之后, 看一下模型里的弱分類器都是靠那些特征進行分類的, 就可以得出每種特征的重要性, 方便我們做特征選擇, 剔除多余的特征, 增加計算效率, 減少噪音;
- 注意, 在推導的過程中, 我們對強分類器輸出的結果取 , 實際中我們可以不單純取 , 而是找一個分類最好的閾值, 或者說邊界, 這個閾值不一定為 .
代碼解讀:
請關注我的b站頻道, 課程的視頻講解稍后奉上, 包含對整個推導過程的講解和代碼講解:
嗶哩嗶哩 ( ゜- ゜)つロ 乾杯~ Bilibili?space.bilibili.comimport總結
以上是生活随笔為你收集整理的sklearn adaboost_集成学习-从零推导和实现adaboost与3D可视化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java conterller_java
- 下一篇: opensplice dds v6.3.