【機器學習】XGBoost集成算法——(理論+圖解+python代碼比較其他算法使用天池蒸汽數據)

一、集成算法思想

二、XGBoost基本思想

三、用python實現XGBoost算法


競賽題中經常會用到XGBoost算法,用這個算法通常會使我們模型的準確率有一個較大的提升。既然它效果這么好,那么它從頭到尾做了一件什么事呢?以及它是怎么樣去做的呢?

我們先來直觀的理解一下什么是XGBoost。XGBoost算法是和決策樹算法聯系到一起的。?

XGBoost是boosting算法的其中一種。Boosting算法的思想是將許多弱分類器集成在一起形成一個強分類器。因為XGBoost是一種提升樹模型,所以它是將許多樹模型集成在一起,形成一個很強的分類器。而所用到的樹模型則是CART回歸樹模型

一、集成算法思想

在決策樹中,我們知道一個樣本往左邊分或者往右邊分,最終到達葉子結點,這樣來進行一個分類任務。 其實也可以做回歸任務。

該算法思想就是不斷地添加樹,不斷地進行特征分裂來生長一棵樹,每次添加一個樹,其實是學習一個新函數,去擬合上次預測的殘差。當我們訓練完成得到k棵樹,我們要預測一個樣本的分數,其實就是根據這個樣本的特征,在每棵樹中會落到對應的一個葉子節點,每個葉子節點就對應一個分數,最后只需要將每棵樹對應的分數加起來就是該樣本的預測值

?

如下圖例子,訓練出了2棵決策樹,小孩的預測分數就是兩棵樹中小孩所落到的結點的分數相加。爺爺的預測分數同理

?

看上面一個圖例左邊:有5個樣本,現在想看下這5個人愿不愿意去玩游戲,這5個人現在都分到了葉子結點里面,對不同的葉子結點分配不同的權重項,正數代表這個人愿意去玩游戲,負數代表這個人不愿意去玩游戲。所以我們可以通過葉子結點和權值的結合,來綜合的評判當前這個人到底是愿意還是不愿意去玩游戲。上面「tree1」那個小男孩它所處的葉子結點的權值是+2(可以理解為得分)。

用單個決策樹好像效果一般來說不是太好,或者說可能會太絕對。通常我們會用一種集成的方法,就是一棵樹效果可能不太好,用兩棵樹呢?

看圖例右邊的「tree2」,它和左邊的不同在于它使用了另外的指標,出了年齡和性別,還可以考慮使用電腦頻率這個劃分屬性。通過這兩棵樹共同幫我們決策當前這個人愿不愿意玩游戲,小男孩在「tree1」的權值是+2,在「tree2」的權值是+0.9, 所以小男孩最終的權值是+2.9(可以理解為得分是+2.9)。老爺爺最終的權值也是通過一樣的過程得到的。

所以說,我們通常在做分類或者回歸任務的時候,需要想一想一旦選擇用一個分類器可能表達效果并不是很好,那么就要考慮用這樣一個集成的思想。上面的圖例只是舉了兩個分類器,其實還可以有更多更復雜的弱分類器,一起組合成一個強分類器。

?

二、XGBoost基本思想

XGBoost的集成表示是什么?怎么預測?求最優解的目標是什么?看下圖的說明你就能一目了然。

600

在XGBoost里,每棵樹是一個一個往里面加的,每加一個都是希望效果能夠提升,下圖就是XGBoost這個集成的表示(核心)。

一開始樹是0,然后往里面加樹,相當于多了一個函數,再加第二棵樹,相當于又多了一個函數...等等,這里需要保證加入新的函數能夠提升整體對表達效果。提升表達效果的意思就是說加上新的樹之后,目標函數(就是損失)的值會下降。

如果葉子結點的個數太多,那么過擬合的風險會越大,所以這里要限制葉子結點的個數,所以在原來目標函數里要加上一個懲罰項「omega(ft)」。

?

這里舉個簡單的例子看看懲罰項「omega(ft)」是如何計算的:

一共3個葉子結點,權重分別是2,0.1,-1,帶入「omega(ft)」中就得到上面圖例的式子,懲罰力度和「lambda」的值人為給定。

XGBoost算法完整的目標函數見下面這個公式,它由自身的損失函數和正則化懲罰項「omega(ft)」相加而成。

關于目標函數的推導本文章不作詳細介紹。過程就是:給目標函數對權重求偏導,得到一個能夠使目標函數最小的權重,把這個權重代回到目標函數中,這個回代結果就是求解后的最小目標函數值,如下:

其中第三個式子中的一階導二階導的梯度數據都是可以算出來的,只要指定了主函數中的兩個參數,這就是一個確定的值。下面給出一個直觀的例子來看下這個過程。

(這里多說一句:Obj代表了當我們指定一個樹的結構的時候,在目標上最多會減少多少,我們可以把它叫做結構分數,這個分數越小越好)

對于每次擴展,我們依舊要枚舉所有可能的方案。對于某個特定的分割,我們要計算出這個分割的左子樹的導數和和右子數導數和之和(就是下圖中的第一個紅色方框),然后和劃分前的進行比較(基于損失,看分割后的損失和分割前的損失有沒有發生變化,變化了多少)。遍歷所有分割,選擇變化最大的作為最合適的分割。

?

?GBDT與XGbost的區別

三、用python實現XGBoost算法代碼

使用天池競賽的蒸汽數據

xgboost回歸對比線性回歸 Ada、?GradientBoostingRegressor


train = pd.read_csv('./zhengqi_train.txt',sep = '\t')X = train.iloc[:,0:-1]
y = train['target']
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size =0.2)from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_errorlinear = LinearRegression()
linear.fit(X_train,y_train)print('r2_score',linear.score(X_test,y_test))
y1_ = linear.predict(X_test)
mean_squared_error(y_test,y1_)

r2_score 0.9035544162615812

from sklearn.ensemble import AdaBoostRegressor
ada = AdaBoostRegressor()
ada.fit(X_train,y_train)print('ada_score',ada.score(X_test,y_test))
y2_ = ada.predict(X_test)
mean_squared_error(y_test,y2_)

ada_score 0.8469280190502533

0.15315981475425688

from xgboost import XGBRegressor
xgb = XGBRegressor()
xgb.fit(X_train,y_train)print('xgb_score',xgb.score(X_test,y_test))
y3_ = xgb.predict(X_test)
mean_squared_error(y_test,y3_)

xgb_score 0.896815295803221

0.10324391232279032

from sklearn.ensemble import GradientBoostingRegressor
gbdt = GradientBoostingRegressor()
gbdt.fit(X_train,y_train)print('gbdt_score',gbdt.score(X_test,y_test))
y4_ = gbdt.predict(X_test)
mean_squared_error(y_test,y4_)

gbdt_score 0.8947755352826943

0.10528484327258612

推薦:

一文讀懂機器學習大殺器XGBoost原理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456062.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456062.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456062.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H.264的技術優勢及其在H.323系統中的應用

一、引言 近年來,隨著我國通信網絡基礎設施的快速建設,視訊業務由于可以為處于多點的與會者提供音視頻等多種信息,節省大量費用,提高工作效率,因而發展迅速,并有望成為NGN的主要業務。視訊會議系統從產生至…

python中的列表

列表操作 一組有序數據的組合就是列表 創建列表 空列表 方式1:變量 []方式2: 變量 list() 具有一個數據的列表 變量 [值] 備注:列表中保存的每個都稱之為元素具有多個數據的列表 變量 [值,值,值....]普通操作 訪問列表中的元素 …

高通被歐盟指控壟斷 或將面臨高達25億美元罰款

在被韓國指控違反反壟斷規定后,高通近期又被歐盟指控以壟斷方式排擠競爭對手。在11月10日的聽證會上高通將回應有關指控。高通有可能因此遭受25億美元的巨額罰款。 歐盟之前就曾經指出,高通在2009至2011年以低于成本價售賣部分基帶芯片,將英國…

wireshark

wireshark使用: http://wenku.baidu.com/link?urljIT43RWZbHissG70TK_hqVKRO6KWNZ4nK9RfncaFA5p-mrmjxsNd2aIapcKTtDDAjG0mddEKiLtwbqpu3Z12bXStDiDevZUGWTPxop4mKhG wireshark開源代碼相關: http://blog.csdn.net/zx824/article/details/7207713 轉載于…

1萬條數據大概占多大空間_國漫丨2019年上半年漫畫數據報告

文 │ 骨朵國漫一、各漫畫平臺總體趨勢1、快看漫畫快看漫畫平臺2019年Q2各月評論數較Q1有較明顯的下滑,月評論數都在400萬條左右;收藏數方面,2019年2月達到了半年內最高值,為2660.1萬條。2、看漫畫、知音漫客等平臺(小明太極旗下)…

【機器學習】 LightGBM——優于XGBoost提升的集成算法(安裝+對比XGBoost改進+參數說明+python代碼實例)

中文官方文檔:http://lightgbm.apachecn.org/cn/latest/Installation-Guide.html 英文官方文檔:https://lightgbm.readthedocs.io/en/latest/ 一、lightGBM安裝 在anaconda中輸入:pip install lightGBM即可 輸入import lightgbm as lgb做測…

H.264簡單總結

&#xff08;quan整理&#xff09;一、視頻信息和信號的特點 < type"text/javascript">< type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> 1&#xff0e;1直觀性 利用人的視覺系統&am…

輕量級代碼生成器-OnlyCoder 第一篇

程序猿利器&#xff1a;代碼生成器&#xff0c;使用代碼生成器已經好幾年了&#xff0c;增刪改查各種生成&#xff0c;從UI到DATA層均生成過。之前有使用過動軟的&#xff0c;T4模板等.... T4生成實體還是沒有問題的&#xff0c;但是生成MVC視圖就有點煩雜了&#xff0c;動軟給…

python中的元組操作

元組操作 元組也是一組有序數據的組合&#xff0c;和列表唯一的不同是&#xff0c;元組不可修改 列表 用鉛筆寫的清單(能擦能改) 元組 用鋼筆寫的清單(不能擦改) 創建元組 創建空元組 方式1&#xff1a;變量 ()方式2&#xff1a; 變量 tuple() 創建單個元素的元組 方式1…

從Java到Go面向對象--繼承思想.md

2019獨角獸企業重金招聘Python工程師標準>>> Go語言實現繼承 我們都知道Java中通過extends來實現對象的繼承&#xff0c;那么Go中怎么實現繼承呢&#xff1f;Go語言沒有繼承&#xff0c;只有組合。我們知道&#xff0c;繼承的目的是什么&#xff0c;是類的重用&…

電腦鍵盤練習_電腦新手最關心的:零基礎如何快速掌握電腦打字的技巧?

隨著計算機的普及&#xff0c;越來越多的人在工作和生活中需要使用計算機。有的朋友通過參與培訓學會了鍵盤打字&#xff0c;有的朋友自學成才學會了鍵盤打字。這里筆者給大家分享在0基礎的情況下&#xff0c;通過自學快速掌握鍵盤打字的一種方法。需要說明的是&#xff0c;鍵盤…

【解決】jupyter在deepin安裝上的坑

報錯&#xff1a;env: "wine": 沒有那個文件或目錄 jupyter打開之后無法直接跳轉瀏覽器 解決方法&#xff1a; 1、 生成配置文件jupyter notebook --generate-config 2、打開jupyter_notebook_config.py&#xff0c;在文件最后添加以下代碼 選擇你的瀏覽器位置 …

鹽城出臺推進大數據產業發展實施意見

日前&#xff0c;鹽城市政府印發了《關于推進大數據產業發展的實施意見》&#xff08;下稱《實施意見》&#xff09;&#xff0c;從指導思想、推進原則、發展目標、發展方向、重點工程和保障措施六個方面明確了鹽城市加快培育和發展大數據產業的具體實施意見&#xff0c;這是該…

json字符串轉換成json對象

Json字符與Json對象的相互轉換方式有很多&#xff0c;接下來將為大家一一介紹下&#xff0c;感興趣的朋友可以參考下哈&#xff0c;希望可以幫助到你1>jQuery插件支持的轉換方式&#xff1a; 代碼如下:$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以將json字符串…

python中的字典

字典操作 以鍵值對方式存在的無序數據的組合就是字典 創建字典 創建空字典 方式1&#xff1a;變量 {}方式2&#xff1a; 變量 dict() 創建多個元素的字典 方式1&#xff1a;變量 {鍵:值,鍵:值....}方式2&#xff1a;變量 dict({鍵:值,鍵:值....})方式3&#xff1a;變量 …

【深度學習】Win10安裝TensorFlow_gpu(避坑必看)

不用gpu的tensorflow 是沒有靈魂的Tensorflow 因為就是為了快&#xff01;快二十倍 FIRST Q&#xff1a;系統及顯卡版本問題&#xff01;!!! 到官網看&#xff01;別看別的博客 ~鏈接&#xff1a; Windows端&#xff1a;https://tensorflow.google.cn/install/source_wind…

SCL定時 1500_iPhone12開售當天黃牛加價1500,哪里買最劃算?

10月23日&#xff0c;蘋果iPhone12全系列正式開售。首批貨源非常搶手&#xff0c;各地的蘋果商店門口都排起了長隊&#xff0c;現場黃牛甚至加價1500元收購用戶手機。開賣首日熱度高&#xff0c;官方最快一周發貨據蘋果官網介紹&#xff0c;此次iPhone12系列共有4款機型&#x…

H.264編解碼

H.264是由ITU-T&#xff08;ITU Telecommunication Standardization Sector&#xff0c;國際電信聯盟遠程通信標準化組&#xff09;視頻編碼專家組&#xff08;VCEG&#xff09;和ISO/IEC動態圖像專家組&#xff08;MPEG&#xff09;聯合組成的聯合視頻組&#xff08;JVT&#…

Web開發基礎

-------------------siwuxie095 HTML HTML 即 HyperText Markup Language&#xff0c;超文本標記語言 由服務器返回&#xff0c;瀏覽器呈現 服務器 即 HTTP 服務器&#xff0c;如&#xff1a;Apache、Nginx、Tomcat 一段 HTML 代碼&#xff0c;可以是存放在 HTTP 服務器上的一個…

飛信即將歸來:移動企業IM面臨的三大難題

企業即時通訊(以下稱“企業IM” ) 激戰正酣&#xff0c;中國移動也有意攪局。中國移動方面日前向北京商報記者透露&#xff0c;中國移動的IM產品將于下月正式上線&#xff0c;此次中國移動拿出的是淡出人們視線許久的飛信。由于傳統通信業務持續下滑&#xff0c;正在蓬勃發展的…