gtb分类器参数调节_集成学习
About
個人同時在簡書和自制個人博客兩個地方同時更新文章,有興趣的話可以來我的博客玩呀,一般而言排版會好不少。本篇在博客的位置。
集成學習一句話版本
集成學習的思想是將若干個學習器(分類器&回歸器)組合之后產生新的學習器。
在學習這一章節中,老師提到了這個說法,我覺得非常言簡意賅就直接引用了過來。集成學習算法的成功在于保證若分類器(錯誤率略小于0.5,即勉強比瞎猜好一點)的多樣性,且集成不穩定的算法也能得到一種比較明顯的提升。
注:深度學習其實也可以看作是一種集成學習
集成學習的作用
采用集成學習的原因有以下四點:
分類器間存在一定的差異性,這會導致分類的邊界不同,也就是說分類器是一個比較專精的專家,它有它自己一定的適用范圍和特長。那么通過一定的策略將多個弱分類器合并后,就可以拓展模型的適用范圍,減少整體的錯誤率,實現更好的效果。
注:不嚴謹的類比的話,就像彈性網絡模型就可以看作是由LASSO回歸和Ridge回歸組成的集成學習。
對于數據集過大或者過小,過大會導致訓練一個模型太慢,過小則會導致訓練不充分,在這種情況下可以分別對數據集進行劃分和有放回的操作產生不同的數據子集,然后使用數據子集訓練不同的分類器,最終再將不同的分類器合并成為一個大的分類器。
注:這種方案的優勢就在于,提高了準確度和訓練速度,使得之前很難利用的數據得到了充分的利用
如果數據的劃分邊界過于復雜,使用線性模型很難描述情況,那么可以訓練多個模型,然后再進行模型的融合。
注:這種特性就好比當初素描老師教我們畫圓一樣,畫一個正方形,再用一堆小直線一點一點切成圓形。
對于多個異構的特征集的時候,很難進行融合,那么可以考慮每個數據集構建一個分類模型,然后將多個模型融合。
注:簡單的來說就是公司有兩個人都很厲害,但是偏偏不湊巧兩個人打架,就不能把他們放一個部門里,得放不同部門一樣。
集成學習的三種思想
Bagging
Bagging算法思想
Bagging,這個名字就是從袋子里取的意思,本身便很形象的說明了這個算法的核心思想,即在原始數據集上通過有放回的抽樣的方式,重新選擇出S個新數據集來分別訓練S個分類器,隨后在預測的時候采用多數投票或者求均值的方式來判斷預測結果。
Bagging適用弱學習器的范圍
基本的弱學習器都能用,如Linear、Ridge、Lasso、 Logistic、Softmax、ID3、C4.5、CART、SVM、KNN。
Boosting
Boosting算法思想
提升學習(Boosting),這個名字也很形象,在賽車游戲中氮氣加速有時候界面就描述是boost,也就是越加越快,每次都比上一次更快,也就是說同Bagging是不一樣的,Boosting是會根據其他的弱分類器的結果來更改數據集再喂給下一個弱分類器。準確的描述為,Boosting算法每一步產生弱預測模型(如決策樹),并加權累加到總模型中。
它的意義在于如果一個問題存在弱預測模型,那么可以通過提升技術的辦法得到一個強預測模型。
注1: 如果每一步的弱預測模型的生成都是依據損失函數的梯度方式的,那么就稱為梯度提升(Gradient boosting)
注2:Boosting這個集成學習的思想就有點深度網絡的意思了。
Boosting適用范圍
提升學習適用于回歸和分類的問題。
Stacking
之前提到了Bagging是把訓練集拆成不同的子集訓練多個學習器投票,而Boosting是根據學習器學習的結果來改動數據集,經過多層改動后試圖獲得一個更好的預測效果。Bagging和Boosting這兩個集成學習其實并沒有通過訓練結果來改變弱分類器的參數。相對比而言,Stacking就激進許多,當然也復雜和困難許多,它首先訓練出多個不同的模型,然后再以之前訓練的各個模型的輸出作為輸入來新訓練一個新的模型,換句話說,Stacking算法根據模型的輸出是允許改其他分類器的參數甚至結構的,也正是因為這點sklearn中很少有stacking的內置的算法。
1、Bagging算法
隨機森林(Random Forest)
隨機森林的思路很簡單如下:
從樣本集中用Bootstrap采樣選出n個樣本;
從所有屬性中隨機選擇K個屬性,選擇出最佳分割屬性作為節點創建決策樹
重復以上兩步m次,即建立m棵決策樹
這m個決策樹形成隨機森林,通過投票表決結果決定數據屬于那一類
注:RF算法在實際應用中具有比較好的特性,應用也比較廣泛,主要應用在分類、 回歸、特征轉換、異常點檢測等。
RF算法分析
RF的主要優點:
訓練可以并行化,對于大規模樣本的訓練具有速度的優勢。
由于進行隨機選擇決策樹劃分特征列表,這樣在樣本維度比較高的時候,仍然具有比較高的訓練性能。
給以給出各個特征的重要性列表。
由于存在隨機抽樣,訓練出來的模型方差小,泛化能力強;。
RF實現簡單。
對于部分特征的缺失不敏感。
RF的主要缺點:
在某些噪音比較大的特征上,RF模型容易陷入過擬合。
取值比較多的劃分特征對RF的決策會產生更大的影響,從而有可能影響模型的效果。
RF的變種
Extra Tree
Extra Tree是RF的一個相當激進的變種,原理基本和RF一樣,區別如下:
RF會隨機采樣來作為子決策樹的訓練集,而Extra Tree每個子決策樹采用原始數據集訓練;
RF在選擇劃分特征點的時候會和傳統決策樹一樣,會基于信息增益、信息增益率、 基尼系數、均方差等原則來選擇最優特征值。而Extra Tree會隨機的選擇一個特征值來劃分決策樹。
Extra Tree因為是隨機選擇特征值的劃分點,這樣會導致決策樹的規模一般大于RF所生成的決策樹。也就是說Extra Tree模型的方差相對于RF進一步減少。在某些情況下,Extra Tree的泛化能力比RF的強。
Totally Random Trees Embedding
TRTE算法主要進行了兩部分操作,第一部分是對數據進行操作,第二部分是對生成的決策樹的位置信息轉換成向量信息以供之后構建特征編碼使用。拋開數據集上的操作,TRTE算法對RF的變種在于如何參考最終生成的多個決策樹來給出預測結果。
RF是采用投票的方式,而TRTE算法中,每個決策樹會生成一個編碼來對應葉子結點的位置信息,那么把所有的決策樹對應相同的分類的編碼合并起來,就可以用這一合并后的編碼來代表它的特征了,預測時待預測樣本經過這些決策樹的預測也會得到這樣一個合并后的編碼,通過同訓練好的類別的編碼之間的差距的大小來預測這個樣本應該屬于哪一個類別。
詳細的說明說下:
TRTE是一種非監督的數據轉化方式。將低維的數據集映射到高維,從而讓映射 到高維的數據更好的應用于分類回歸模型。
TRTE算法的轉換過程類似RF算法的方法,建立T個決策樹來擬合數據。當決策樹構建完成后,數據集里的每個數據在T個決策樹中葉子節點的位置就定下來了, 將位置信息轉換為向量就完成了特征轉換操作,這個轉換過程有點像霍夫曼編碼的過程。
Isolation Forest
這個算法是用來異常點檢測的,正如isolation這個名字,是找出非正常的點,而這些非正常的點顯然是特征比較明確的,故不需要太多的數據,也不需要太大規模的決策樹。
它和RF算法有以下幾個差別:
在隨機采樣的過程中,一般只需要少量數據即可。
在進行決策樹構建過程中,IForest算法會隨機選擇一個劃分特征,并對劃分特征隨機選擇一個劃分閾值。
IForest算法構建的決策樹一般深度max_depth是比較小的。
算法思路如下:
對于異常點的判斷,則是將測試樣本x擬合到T棵決策樹上。計算在每棵樹上該樣本的葉子節點的深度
。從而計算出平均深度
。然后就可以使用下列公式計算樣本點x的異常概率值,
的取值范圍為
,越接近于1,則是異常點的概率越大。
注:這個公式可以簡單的理解為越是出現在越深的層數,這個事件越不可能發生,足夠深的情況基本上就可以判斷為不可能發生是異常點
2、Boosting算法
Adaboost
總覽
Adaboost全名為Adaptive Boosting,每輪迭代中會在訓練集上產生一個新的學習器,然后使用該學習器對所有樣本進行預測,以評估每個樣本的重要性 (Informative)。換句話來講就是,算法會為每個樣本賦予一個權重,每次用訓練好的學習器標注/預測各個樣本,如果某個樣本點被預測的越正確,則將其權重降低,否則提高樣本的權重。權重越高的樣本在下一個迭代訓練中所占的比重就越大,也就是說越難區分的樣本在訓練過程中會變得越重要。
整個算法的迭代的結束條件就是錯誤率足夠小或者達到一定的迭代次數為止。
注:整體的過程很像,分豆子,先把我們直接能看出來的區別的豆子分開,留下不太能區分開來的豆子,然后交給母上大人幫忙再分這種感覺。
細節描述
首先再重新強調下,從線性回歸開始的兩種思想,第一種是,設計出一個損失函數來代表預測結果,之后根據其應該為極小值和凸函數的特性,求原公式中的參數,一般是用導數等于0這種方式。第二種思想則是,當有多個變量共同作用結果的時候,我們給每個變量前加參數,也就是權值來控制變量的影響結果的能力。
這兩種貫穿了幾乎所有機器學習的思想,當然在Adaboost中也不會例外,整體的步驟分兩部分:
每次迭代都為新的弱學習器加權重,并根據損失函數計算得到這個權重。
根據這個新的學習器的預測結果,對每個樣本特征的權重進行調整。
算法構建之權重系數
假設我們打算用的最終分類器為
,第m次迭代用的弱分類器為
,并給分類器前加權重
已保證分類準的分類器得到足夠的重視。于是得到下面公式3.1,公式3.2。
有了一個對算法整體的數學表達以后,我們就可以根據它寫出AdaBoost的損失函數如下公式3.3:
注:到現在為止大家應該對
這種公式的函數圖不陌生了,就不贅述了
有了損失函數了,那么
在哪里呢,是要像SVM一樣找個算法一起求么,顯然不是了,如果那樣子的話估計就不是集成算法了,它是一步一步求的,它只關心當前最好結果,類比算法中的貪心算法。于是,我們討論第k-1輪和第k論迭代的關系:
根據loss函數的構成方法,我們很容易寫出第k輪含有
的公式如下公式3.4,之后對其進行求導就可以得到
的公式3.5:
于是至此,我們就將弱分類器簡單的連接在一起了,做好了下一步對數據樣本特征值的權重調整的準備。
算法構建之樣本特征權重調整
首先我們設定第k輪的數據集的權重分布為
。同時每次的
都是由
通過某種規律計算得到的,這種計算公式如下公式3.6:
可以看到這種第k次迭代開始前的數據的權重的調整是在根據第k-1次迭代中預測結果來進行調整的,換句話說,第k次迭代的數據集被第k-1次的訓練修正了。
算法構建之總覽
我們現在知道了每個弱分類器的權值是怎么夠建的,也知道了Boosting算法中調整數據的部分是怎么調整的,算法的零件已經齊全,現在拼接起來如下:
初始化數據集權重為
,n為特征的個數。
加入弱分類器,并根據數據集feed進模型確定這個新加入的弱分類的權重。
根據最終訓練的結果,調整數據集中不同特征的權值
重復2,3步驟直到符合結束條件,一般為達到預計準確度,或者為達到規定迭代次數。
Gradient Boosting
首先值得注意的是,GBDT算法,它有很多別名如GBT,GTB,BGRT,GBDT,MART,初學者很容易把它們當作是多個算法,比如我(笑。
言歸正傳GBDT全名為Gradient Boosting Decision Tree。它也是Boosting算法的一種,它的算法推導相比之前算法的較為復雜,詳細公式推導參考這篇文章,這里就不贅述了。
算法大體的步驟如下:
算法每次迭代生成一顆新的決策樹
注:GBDT的核心其實是找出一堆決策樹,然后讓他們的結果累加得到最終的預測值
在每次迭代開始之前,計算損失函數在每個訓練樣本點的一階導數和二階導數
通過貪心策略生成新的決策樹,通過等式計算每個葉節點對應的預測值
注:這步是通過目標函數求導得到的,需要利用第二步中的二階導數和一階導數,同時等式的推導中用到了泰勒公式
把新生成的決策樹
添加到模型中:
*注:這里我們會將模型替換為
,這里的
稱之為步長或者學習率。增加?因子的目的是為了避免模型過擬合。*
GBDT總結
GBDT優點如下:
可以處理連續值和離散值
在相對少的調參情況下,模型的預測效果也會不錯
模型的魯棒性比較強。
缺點如下:
由于弱學習器之間存在關聯關系,難以并行訓練模型
Bagging和Boosting的總結
樣本選擇:
Bagging算法是有放回的隨機采樣
Boosting算法是每一輪訓練集不變,只是訓練集中的每個樣例在分類器中的權重發生變化,而權重根據上一輪的分類結果進行調整
樣例權重:
Bagging使用隨機抽樣,樣例的權重
Boosting根據錯誤率不斷的調整樣例的權重值, 錯誤率越大則權重越大
預測函數:
Bagging所有預測模型的權重相等
Boosting算法對于誤差小的分類器具有更大的權重
并行計算:
Bagging算法可以并行生成各個基模型
Boosting理論上只能順序生產,因為后一個模型需要前一個模型的結果
Bagging是減少模型的variance(方差),Boosting是減少模型的Bias(偏度)。
Bagging里每個分類模型都是強分類器,因為降低的是方差,方差過高需要降低是過擬合。Boosting里每個分類模型都是弱分類器,因為降低的是偏度,偏度過高是欠擬合。
']]}});
總結
以上是生活随笔為你收集整理的gtb分类器参数调节_集成学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uml 时序图_程序猿都应学习的语言:看
- 下一篇: sql随机抽取数据50条_厉害!苏宁通过