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