1. 程式人生 > >Boosting:XGBoost思想及資料推導詳細過程

Boosting:XGBoost思想及資料推導詳細過程

    Boosting思想:

    Boosting主要是一種思想,表示“知錯就改”。是一族可將弱學習器提升為強學習器的演算法,如Adaboost、GBDT、XGBOOST,這組演算法的工作機制類似。先從初始訓練集訓練出一個基學習器,再根據基學習器的表現對訓練樣本分佈進行調整,使得先前基學習器做錯的訓練樣本在後續受到更多關注,然後基於調整後的樣本分佈來訓練下一個學習器,如此重複進行下去,直到基學習器數目達到事先指定的值T,最終將這 T個基學習器進行加權結合。

    Boosting是是序列構造模型,不斷使用後一個弱分類器彌補前一個弱分類器的不足的過程。且最終結果為模型結果的加總。

    Boosting族著名的演算法:Adaboost、GBDT、XGBOOST

1、XGBoost介紹

    XGBoost是2014年2月誕生,由中國的陳天奇提出。XGBoost實現的是一種通用的Tree Boosting演算法。 xgboost即能解決分類問題,也能解決迴歸問題。  

    原理是,首先使用訓練集和樣本真值(即標準答案)訓練一棵樹,然後使用這棵樹預測訓練集,得到每個樣本的預測值,由於預測值與真值存在偏差,所以二者相減可以得到“殘差”。接下來訓練第二棵樹,此時不再使用真值,而是使用殘差作為標準答案。兩棵樹訓練完成後,可以再次得到每個樣本的殘差,然後進一步訓練第三棵樹,以此類推。樹的總棵數可以人為指定,也可以監控某些指標(例如驗證集上的誤差)來停止訓練。

舉例1說明:預測客戶去銀行審批貸款的額度,假設客戶的額度為1000。

  • 使用第一顆樹預測,其目標函式為1000。假設模型預測的結果為920,則殘差為80。

  • 接著構造第二課樹預測,這時其目標函式就要基於第一顆樹的預測結果,此時的目標函式是怎麼樣彌補前一課樹的殘差,即減少殘差。第二顆樹的目標函式為80。假設第二顆樹預測的結果為50,則與真實值的殘差還剩下30,即會作為第三顆樹的目標值。

  • 接著進行第三棵樹預測,此時的目標函式為30,假設第三課樹又找回來12。

  • 依次類推,序列構造,需要把前一顆樹的結果當成一個整體。最終結果值為n棵樹的結果相加。比如例中,如果只做三顆樹預測,最終結果為982。

    舉例2說明:用兩顆樹來預測一個人是否喜歡玩遊戲。最下面的一行數2、0.1、-1為得分值

    0?wx_fmt=png

    模型的結果為兩顆樹的值相加。比如男孩愛玩遊戲的得分為2.9,老人愛玩遊戲的得分為1.9。

2、目標函式

    監督機器學習問題基本上是“在規則化引數的同時最小化誤差”。最小化誤差是為了讓模型擬合訓練資料,而規則化引數是防止模型過分的擬合訓練資料。    

設計整合學習的目標函式的目的:

  • 一方面保證預測值和真實值之間的差異最小

  • 另一方面需要樹模型更精簡,防止過擬合

單個模型的損失函式如下:

0?wx_fmt=png

    關於邏輯迴歸的推導,可參考另一篇文章:

boosting的損失函式:

    Boosting學習中,假設我們構造了k顆樹,則預測函式的總體值為:

0?wx_fmt=png

因為是一系列序列模型的相加,因此,可以列出構建流程如下:

0?wx_fmt=png

因為每輪加入一個模型,到底加入模型的標準是什麼?

    這就到目標的角度,需要明確一個目標,來確定加進來什麼模型合適。

    監督機器學習問題基本上是“在規則化引數的同時最小化誤差”。最小化誤差是為了讓模型擬合訓練資料,而規則化引數是防止模型過分的擬合訓練資料。    

    設計如下為目標函式,由損失函式、複雜度兩部分構成

0?wx_fmt=png

0?wx_fmt=png

懲罰項計算案例如下:

0?wx_fmt=png

確定目標函式後,下面就是訓練和求解的過程。

如何訓練並求解目標函式,是GBDT和XGboost的一個區別。

  • GBDT的求解:具體到每顆樹來說,不斷地尋找分割點(split point),將樣本集進行分割,初始情況下,所有樣本都處於一個結點(即根結點),隨著樹的分裂過程的展開,樣本會分配到分裂開的子結點上。分割點的選擇通過列舉訓練樣本集上的特徵值來完成,分割點的選擇依據則是減少損失函式。給定一組樣本,實際上存在指數規模的分割方式,所以這是一個NP-Hard的問題,實際的求解演算法也沒有辦法在多項式時間內完成求解,而是採用一種基於貪心原則的啟發式方法來完成求解。 也就是說,在選取分割點的時候,只考慮當前樹結構到下一步樹結構的loss變化的最優值,不考慮樹分裂的多個步驟之間的最優值,這是典型的greedy的策略。

  • XGboost的求解:則是為了便於求解,對l目標函式進行二級Taylor展開進行了變換

boosting的訓練求解推導

在介紹推導前,先介紹下泰勒展開。

0?wx_fmt=png

而我們的目標函式是:

0?wx_fmt=png

先定義一階導數和二階導數:

0?wx_fmt=png

帶入公式轉化目標:

0?wx_fmt=png

因為上面的公式需要遍歷每一個樣本,計算比較複雜,因為每一個樣本最終都要落在葉子節點上,因此可以簡化為遍歷樣本,定義每個葉子節點的樣本個數。

0?wx_fmt=png

根據葉節點重新組合函式:注意現在遍歷點已經轉移到遍歷所有的葉子節點T。

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

推導到此,xgboost的問題演變為,每輪加進來的模型,該怎麼樣構造,按照什麼樣的標準評估。

Obj代表了當我們指定一個樹結構的時候,我們在目標上面最多減少多少,可以把它叫做結構分數。類似於基尼係數一樣,是對樹結構進行打分的函式。

0?wx_fmt=png

下面就是算如何切分,才能使得上面的值最小。而上面的值就是一個切分標準。

假設我們在樣本上切了一刀,

0?wx_fmt=png

對某個特定的分隔a,可以計算出計算a左邊和右邊的導數和。

進而求出切分後帶來的資訊增益。

0?wx_fmt=png

    xgboost通過巧妙的設計目標函式,先是在分母上加一個λ,來降低分支的收益“靈敏度”,這個“靈敏度”可以通過修改此引數來控制。當收益小於一個閾值則剪枝,從而達到防止過擬合的目的。另外一個引數γ,從最後每次分割後的收益函式可以看到,這個引數的“物理意義”就是每分裂一次,減去一個視為懲罰的常數

    但是對於樣本的切分,需要列舉所有可能的切分方案,看看哪個切分方案帶來的增益最大,從而使得損失函式最小。貪婪的做法,可以假設對於變數x,若要確定切分節點,可以先排序資料,從左到右對所有可能的切分點進行切分一次,每次計算出左導數和右導數和,然後求出資訊增益,最終找出最優切分方案。

    Boosting推導過程可以看出,為了求損失函式最小,最後一步步演變成,每輪加進來的模型,該怎麼樣構造,按照什麼樣的標準的問題。

xgboost為什麼是目前比較好用的演算法?(引用總結)

    機器學習就是模型對資料的擬合。對於一組資料,使用過於複雜的模型去擬合,往往會發生過擬合,這時就需要引入正則化項來限制模型複雜度,然而正則化項的選取、正則化係數的設定都是比較隨意的,也比較難做到最佳。而如果使用過於簡單的模型,由於模型能力有限,很難把握資料中蘊含的規律,導致效果不佳。
    Boosting演算法比較巧妙,首先使用簡單的模型去擬合數據,得到一個比較一般的結果,然後不斷向模型中新增簡單模型(多數情況下為層數較淺決策樹),隨著樹的增多,整個boosting模型的複雜度逐漸變高,直到接近資料本身的複雜度,此時訓練達到最佳水平。
    因此,boosting演算法要取得良好效果,要求每棵樹都足夠“弱”,使得每次增加的複雜度都不大,同時樹的總數目要足夠多。XGBoost中,對每棵樹的葉子節點數做了懲罰,從而限制了葉子節點的增長,使得每棵樹都是“弱”的,同時還引入了學習速率,進一步降低了每棵樹的影響。這樣做的代價是,數的總數目會多一些,但從其取得的效果上看,這樣做是值得的。

參考文章:

https://www.zhihu.com/question/41354392/answer/124274741

http://www.a-site.cn/article/714295.html

http://blog.csdn.net/sb19931201/article/details/52557382

http://blog.csdn.net/wty__/article/details/52919675

附:

稀疏矩陣:

矩陣中非零元素的個數遠遠小於矩陣元素的總數,並且非零元素的分佈沒有規律,通常認為矩陣中非零元素的總數比上矩陣所有元素總數的值小於等於0.05時,則稱該矩陣為稀疏矩陣(sparse matrix),該比值稱為這個矩陣的稠密度;與之相區別的是,如果非零元素的分佈存在規律(如上三角矩陣、下三角矩陣、對角矩陣),則稱該矩陣為特殊矩陣。

相關推薦

BoostingXGBoost思想資料推導詳細過程

    Boosting思想:     Boosting主要是一種思想,表示“知錯就改”。是一族可將弱學習器提升為強學習器的演算法,如Adaboost、GBDT、XGBOOST,這組演算法的工作機制

go陣列資料遍歷

go陣列及陣列遍歷 初始化陣列 array := [5]int(1,2,3,4,5) 陣列長度:arrLength := len(array) 元素訪問: for i := 0; i < len(array); i++{ fmt.PrintIn(array[

[zookeeper]zookeeper系列七zookeeper選舉資料一致性

ZAB協議 ZAB(Zookeeper Atomic Broadcast)協議,即Zookeeper原子訊息廣播協議,協議內容大致如下: 所有事物的請求必須由全域性唯一的伺服器來協調處理,這樣的伺服器

Angular 2 + 折騰記 (7) 初步瞭解表單模板驅動資料驅動脫坑要點

前言 表單在整個系統中的作用相當重要,這裡主要扯下響應表單的實現方式。 首先需要操作表單的模組引入這兩個模組; import { FormsModule, ReactiveFormsModule } from '@angular/forms';

Tomcat(三)tomcat處理連接的詳細過程

field rest web.xml sco gpo appear neu pragma 再次 本文目錄:1. Tomcat組件體系結構2. Tomcat和httpd/nginx在監聽和處理請求上的區別  2.1 Tomcat如何處理並發請求3. Tomcat處理jsp

CentOS7搭建FastDFS V5.11分散式檔案系統Java整合詳細過程(一)

1.緒論 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的過程中遇到過很多的問題,為了能幫忙到以後搭建FastDFS的同學,少走彎路,與大家分享一下。FastDFS的作者淘寶資深架構餘慶,這個優秀的輕量及的分散式檔案系統的開源沒多久

hbase 寫資料,存資料,讀資料詳細過程

Client寫入 -> 存入MemStore,一直到MemStore滿 -> Flush成一個StoreFile,直至增長到一定閾值 -> 出發Compact合併操作 -> 多個StoreFile合併成一個StoreFile,同時進行版本合併和資料刪

CentOS7搭建FastDFS V5.11分散式檔案系統Java整合詳細過程(三)

1.測試 前面兩篇博文已對FastDFS的安裝和配置,做了比較詳細的講解。FastDFS的基礎模組都搭好了,現在開始測試下載。 1.1 配置客戶端 同樣的,需要修改客戶端的配置檔案: vim /etc/fdfs/client.conf

wireshark實戰之dhcp四次資料包交流過程

實驗目的:檢視客戶端向DHCP伺服器請求IP過程。 實驗資料: 實驗拓撲: 實驗步驟: 1、在sw2與R1之間放置資料包嗅探器。 2、開啟wireshark配置顯示過濾器為bootp。 可以

Mysql高手系列 - 第27篇mysql如何確保資料不丟失的?我們借鑑這種設計思想實現熱點賬戶高併發設計跨庫轉賬問題

Mysql系列的目標是:通過這個系列從入門到全面掌握一個高階開發所需要的全部技能。 歡迎大家加我微信itsoku一起交流java、演算法、資料庫相關技術。 這是Mysql系列第27篇。 本篇文章我們先來看一下mysql是如何確保資料不丟失的,通過本文我們可以瞭解mysql內部確保資料不丟失的原理,學習裡面優秀

圖解集合7紅黑樹概念、紅黑樹的插入旋轉操作詳細解讀

集合 得到 2個 排序。 數據流 except boolean 修正 split 原文地址http://www.cnblogs.com/xrq730/p/6867924.html,轉載請註明出處,謝謝! 初識TreeMap 之前的文章講解了兩種Map,分別是HashMa

Git(1)思想概念

.com 永久 導致 回來 運算 image 提交 簡單的 設計 Git與其他版本控制軟件的差異及思想 直接記錄快照,而非差異比較 Git不保存這些前後變化的差異數據。實際上,Git 更像是把變化的文件作快照後,記錄在一個微型的文件系統中。每次提交更新時,它會縱覽一

資料結構線段樹ST演算法比較

ST演算法是一種高效的計算區間最值的方法。 他的思想是將詢問區間分解成兩個最長的二次冪的長度的區間並集的形式。 所以與線段樹不同,這種區間分解其實存在相交的分解。 因此ST演算法能維護的只是一些簡單的資訊,比如區間最值或者區間gcd問題 ST演算法的優勢: 實現簡單(qwq為什麼我覺得線段樹更

資料實時監控平臺(二)Telegraf簡介安裝

接著上一篇部落格:InfluxDB簡介及安裝,這篇部落格介紹下Linux環境下Telegraf安裝以及其功能特點。。。 官網地址:influxdata 官方文件:telegraf文件   環境:CentOS7.4 64位 Telegraf版本:0.11.1-1   一、Tel

計算機組成原理——匯流排補充地址匯流排、資料匯流排、定址能力、字長cpu位數等概念之間的關係

地址匯流排決定了CPU的定址能力;資料匯流排的寬度與字長及CPU位數一致。 詳細解釋見下文: 1.地址匯流排與定址能力 要存取資料或指令就要知道資料或指令存放的位置,地址暫存器儲存的就是CPU當前要存取的資料或指令的地址,該地址是由地址匯流排傳輸到地址暫存器上的。

MySQL資料庫實驗任務二 表資料的插入、修改刪除

目錄 任務二 表資料的插入、修改及刪除 一、利用介面工具插入資料 二、資料更新 (一)利用MySQL命令列視窗更新資料 (二)利用Navicat for MySQL客戶端工具更新資料 三、資料庫的備份與還原

python爬蟲三大解析資料方法正則 圖片下載案例

基本正則用法回顧 # 提取python key = 'javapythonc++php' print(re.findall('python', key)[0]) # 提取hello world key = '<html><h1>hello world</h

程式猿的血淚史一定要有資料備份的思想,不然死都不知道咋死的!!!

最近幾天水逆過頭了,硬碟在發生了眾多小毛病後,今天它終於被我搞掛了,600多G的資料,雖然真正有用的也就一點,但之前裝的軟體,配的環境什麼的一下全沒了,這感覺還是很爽啊!!!!QAQ!!! 硬碟掛掉的原因很簡單:首先它出現了一點小問題: 聯想Y700筆記本:硬碟突然不見了。好不容易

Linux基礎02磁碟操作,檔案許可權、檔案資料夾操作、網路服務

1.Linux磁碟與U盤操作 1.1 顯示系統的磁碟空間用量 ##du命令也是檢視使用空間的,但是與df命令不同的是Linux du命令是對檔案和目錄磁碟使用的空間的檢視 du -sh ##查目錄使用大小(-s表示總結) ## du -sh /bin ##df命令用於顯示磁碟分割槽

CDA深度分享資料自由之路——資料產品資料分析職業發展路徑

本次CDA深度分享活動於11月27日,在CDA北京西二旗校區舉行,活動邀請到的嘉賓是曾津老師,曾老師任職去哪兒網資深資料產品經理,中央財經大學財政學碩士,CDA II建模分析師。2015年4月加入去哪兒網,此前在諮詢公司及遊戲公司從事資料分析、戰略分析相關工作,有多年資料分析及實戰經驗。加入去哪兒網負責機