日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机智的ensemble

發布時間:2024/7/5 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机智的ensemble 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 引言

本文主要結合了李宏毅的機器學習課程之Ensemble和周志華的《機器學習》西瓜書兩者的說法,對ensemble這一競賽利器做了總結。
Ensemble主要可以分為bagging和boosting兩種方法。其中,bagging適用于基模型復雜度比較高的情況(如樹模型),其目的是為了減小variance,即阻止過擬合的情況。而boosting則是適用于基模型是弱學習器的情況,其目的是減小biases,基本上多弱模型都可以用(如果分類正確率低于50%,取個反就可以了)~

2 Bagging

個人覺得bagging其實和神經網絡中的drop-out非常相似。我們只給每個模型看數據的一部分,不給它們看全貌,然后希望它們在這一部分上有比較好的學習結果,最后綜合各個模型的結果,做一個blending,得到最終的結果。
Bagging在選取數據時,采用的是bootstrap的方法,即有放回的抽樣。假設我們有 mm 個樣本的數據集 DD 。我們希望利用有放回的抽樣方法構造一個新的數據集 DD′,其樣本個數仍舊是m。顯然 DD 中的一些數據會在 DD′ 中重復出現,這也就意味著有一部分數據在 DD′ 中是不會出現的。

圖1 bagging示意圖(此圖出自李宏毅的視頻)
我們可以做一個簡單的估計。樣本在m次采樣中,始終沒有被采到的概率為 (1?1m)m(1?1m)m ,取極限的話為
limm(1?1m)m1e0.368limm→∞(1?1m)m→1e≈0.368
這一部分沒有被采樣到的數據可以作為驗證集來使用,這個方法被稱“包外估計”(out-of-bag estimate)。
根據該方法訓練得到多個模型之后,可以取平均或者投票得到最終結果。
其中,隨機森林便是一個典型的利用bagging方法的模型,只不過在隨機森林當中,數據的特征也是隨機選取的。

3 Boosting

Boosting的主要想法是在已有模型的基礎上,重視被錯分的樣本,再訓練一個模型來融合到原模型中,以此來提高模型的準確率,如此不斷反復。那么如何重視被錯分的樣本呢?這就是boosting的一個有意思的地方了。它給每個樣本賦予了一個權重,每次boosting之后,樣本的權重就會被更新,而這里的權重直接影響了訓練時的Loss function。

L(f)=nl(f(xn),yn)L(f)=nunl(f(xn),yn)L(f)=∑nl(f(xn),yn)→L(f)=∑nunl(f(xn),yn)
式中, unun 即為每個樣本的權重。也就是說,現在我們的樣本變成了這個樣子
{(x1,y1,u1),(x2,y2,u2),?,(xn,yn,un)}{(x1,y1,u1),(x2,y2,u2),?,(xn,yn,un)}
Boosting的方法有很多,我們這里主要講一下其中比較流行的AdaBoost算法。
假設我們在第一個基模型 f1(x)f1(x) 上訓練得到的錯誤率為(此時所有樣本權重均相同)
?1=nun1δ(f1(xn)yn)Z1?1=∑nu1nδ(f1(xn)≠yn)Z1
其中
Z1=nun1Z1=∑nu1n
我們希望學習器的錯誤率 ?1?1 是大于0.5的,否則我們取個反,或者不要這個學習器,換一個。
知道了哪些訓練錯了,哪些訓練對了之后,我們就要進行最重要的重新分配權重了。所謂的重新分配權重就是給正確的權重除以一個 d1d1 ,錯誤的權重乘以一個 d1d1 d1>1d1>1
那么這個 d1d1 怎么來?我們希望再更新權重之后,新的權重滿足下式
f1(xn)ynun2=f1(xn)=ynun2∑f1(xn)≠ynu2n=∑f1(xn)=ynu2n
也就是說,從權重上來看要錯的對的各占一半,即
f1(xn)ynun1d1=f1(xn)=ynun1/d1∑f1(xn)≠ynu1nd1=∑f1(xn)=ynu1n/d1
其中, Z1?1=f1(xn)ynun1d1Z1?1=∑f1(xn)≠ynu1nd1 Z1(1??1)=f1(xn)=ynun1d1Z1(1??1)=∑f1(xn)=ynu1nd1,代入上式可得
d1=(1??1)/?1?????????d1=(1??1)/?1
再用此時的權重去訓練出第二個模型 f2(xn)f2(xn) 。之后,繼續如此操作,直到達到弱分類器個數限制。
為了方便表示,我們通常把 dd 表示成 eα 的形式,那么,權重的更新可以直接寫成
unt+1=unt?e?ynft(xn)αt=i=1te?ynαifi(xn)ut+1n=utn?e?ynft(xn)αt=∏i=1te?ynαifi(xn)
其中, αt=ln(dt)αt=ln(dt)
得到所有的模型之后,我們希望把訓練的 TT 個模型融合起來,這個融合的過程就叫做blending。
一種簡單的做法就是直接取結果的平均
H(x)=sign(t=1Tft(x))H(x)=sign(∑t=1Tft(x))
但這樣的做法不夠機智。我們每個模型的可信度是不同的,我們需要給每個模型一個權重,得到一個加權平均的結果
H(x)=sign(t=1Tαtft(x))H(x)=sign(∑t=1Tαtft(x))
這里的 αtαt 就是我們前面的 αt=ln((1??1)/?1?????????)αt=ln((1??1)/?1)。可以證明隨著模型數量的增加,模型在訓練集上的表現會越來越好,詳細證明可參見李宏毅的視頻。

4 Gradient Boosting

顧名思義,這是用Gradient的方法來進行boosting。上文中的Adaboost其實就是一種特殊的Gradient Boosting。Gradient Boosting的總體流程為

圖2 Gradient Boosting流程圖
既然是要做Gradient,當然要有目標函數啊。這里的目標函數就是
L(g)=nl(yn,g(xn))L(g)=∑nl(yn,g(xn))
于是,就有
gt(x)=gt?1?η?L(g)?g(x)|g(x)=gt?1(x)gt(x)=gt?1?η?L(g)?g(x)|g(x)=gt?1(x)
又由于
gt(x)=gt?1(x)+αtft(x)gt(x)=gt?1(x)+αtft(x)
所以我們希望 ?η?L(g)?g(x)|g(x)=gt?1(x)?η?L(g)?g(x)|g(x)=gt?1(x) αtft(x)αtft(x) 是方向相同的。即找到一個 ft(x)ft(x) 使得
maxft(x)?ηft(x)?L(g)?g(x)|g(x)=gt?1(x)maxft(x)?ηft(x)?L(g)?g(x)|g(x)=gt?1(x)
然后找一個 αtαt 使得 L(g)L(g) 最小。
L(g)=ne?yng(xn)L(g)=∑ne?yng(xn) 的時候,可以推出這就是我們的Adaboosting。
詳細推導過程偷下懶,參見李宏毅的視頻即可。

總結

以上是生活随笔為你收集整理的机智的ensemble的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。