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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【机器学习基础】逻辑回归 + GBDT模型融合实战!

發(fā)布時間:2025/3/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习基础】逻辑回归 + GBDT模型融合实战! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:吳忠強(qiáng),東北大學(xué),Datawhale成員

一、GBDT+LR簡介

協(xié)同過濾和矩陣分解存在的劣勢就是僅利用了用戶與物品相互行為信息進(jìn)行推薦, 忽視了用戶自身特征, 物品自身特征以及上下文信息等,導(dǎo)致生成的結(jié)果往往會比較片面。而這次介紹的這個模型是2014年由Facebook提出的GBDT+LR模型, 該模型利用GBDT自動進(jìn)行特征篩選和組合, 進(jìn)而生成新的離散特征向量, 再把該特征向量當(dāng)做LR模型的輸入, 來產(chǎn)生最后的預(yù)測結(jié)果, 該模型能夠綜合利用用戶、物品和上下文等多種不同的特征, 生成較為全面的推薦結(jié)果, 在CTR點(diǎn)擊率預(yù)估場景下使用較為廣泛。

下面首先會介紹邏輯回歸和GBDT模型各自的原理及優(yōu)缺點(diǎn), 然后介紹GBDT+LR模型的工作原理和細(xì)節(jié)。

二、邏輯回歸模型

邏輯回歸模型非常重要, 在推薦領(lǐng)域里面, 相比于傳統(tǒng)的協(xié)同過濾, 邏輯回歸模型能夠綜合利用用戶、物品、上下文等多種不同的特征生成較為“全面”的推薦結(jié)果, 關(guān)于邏輯回歸的更多細(xì)節(jié), 可以參考下面給出的鏈接,這里只介紹比較重要的一些細(xì)節(jié)和在推薦中的應(yīng)用。

邏輯回歸是在線性回歸的基礎(chǔ)上加了一個 Sigmoid 函數(shù)(非線形)映射,使得邏輯回歸成為了一個優(yōu)秀的分類算法, 學(xué)習(xí)邏輯回歸模型, 首先應(yīng)該記住一句話:邏輯回歸假設(shè)數(shù)據(jù)服從伯努利分布,通過極大化似然函數(shù)的方法,運(yùn)用梯度下降來求解參數(shù),來達(dá)到將數(shù)據(jù)二分類的目的。

相比于協(xié)同過濾和矩陣分解利用用戶的物品“相似度”進(jìn)行推薦, 邏輯回歸模型將問題看成了一個分類問題, 通過預(yù)測正樣本的概率對物品進(jìn)行排序。這里的正樣本可以是用戶“點(diǎn)擊”了某個商品或者“觀看”了某個視頻, 均是推薦系統(tǒng)希望用戶產(chǎn)生的“正反饋”行為, 因此邏輯回歸模型將推薦問題轉(zhuǎn)化成了一個點(diǎn)擊率預(yù)估問題。而點(diǎn)擊率預(yù)測就是一個典型的二分類, 正好適合邏輯回歸進(jìn)行處理, 那么邏輯回歸是如何做推薦的呢?過程如下:

  • 將用戶年齡、性別、物品屬性、物品描述、當(dāng)前時間、當(dāng)前地點(diǎn)等特征轉(zhuǎn)成數(shù)值型向量

  • 確定邏輯回歸的優(yōu)化目標(biāo),比如把點(diǎn)擊率預(yù)測轉(zhuǎn)換成二分類問題, 這樣就可以得到分類問題常用的損失作為目標(biāo), 訓(xùn)練模型

  • 在預(yù)測的時候, 將特征向量輸入模型產(chǎn)生預(yù)測, 得到用戶“點(diǎn)擊”物品的概率

  • 利用點(diǎn)擊概率對候選物品排序, 得到推薦列表

  • 推斷過程可以用下圖來表示:

    這里的關(guān)鍵就是每個特征的權(quán)重參數(shù), 我們一般是使用梯度下降的方式, 首先會先隨機(jī)初始化參數(shù), 然后將特征向量(也就是我們上面數(shù)值化出來的特征)輸入到模型, 就會通過計算得到模型的預(yù)測概率, 然后通過對目標(biāo)函數(shù)求導(dǎo)得到每個的梯度, 然后進(jìn)行更新

    這里的目標(biāo)函數(shù)長下面這樣:

    求導(dǎo)之后的方式長這樣:

    這樣通過若干次迭代, 就可以得到最終的了, 關(guān)于這些公式的推導(dǎo),可以參考下面給出的文章鏈接, 下面我們分析一下邏輯回歸模型的優(yōu)缺點(diǎn)。

    優(yōu)點(diǎn):

  • LR模型形式簡單,可解釋性好,從特征的權(quán)重可以看到不同的特征對最后結(jié)果的影響。

  • 訓(xùn)練時便于并行化,在預(yù)測時只需要對特征進(jìn)行線性加權(quán),所以性能比較好,往往適合處理海量id類特征,用id類特征有一個很重要的好處,就是防止信息損失(相對于范化的 CTR 特征),對于頭部資源會有更細(xì)致的描述

  • 資源占用小,尤其是內(nèi)存。在實(shí)際的工程應(yīng)用中只需要存儲權(quán)重比較大的特征及特征對應(yīng)的權(quán)重。

  • 方便輸出結(jié)果調(diào)整。邏輯回歸可以很方便的得到最后的分類結(jié)果,因?yàn)檩敵龅氖敲總€樣本的概率分?jǐn)?shù),我們可以很容易的對這些概率分?jǐn)?shù)進(jìn)行cutoff,也就是劃分閾值(大于某個閾值的是一類,小于某個閾值的是一類)

  • 當(dāng)然, 邏輯回歸模型也有一定的局限性

  • 表達(dá)能力不強(qiáng), 無法進(jìn)行特征交叉, 特征篩選等一系列“高級“操作(這些工作都得人工來干, 這樣就需要一定的經(jīng)驗(yàn), 否則會走一些彎路), 因此可能造成信息的損失

  • 準(zhǔn)確率并不是很高。因?yàn)檫@畢竟是一個線性模型加了個sigmoid, 形式非常的簡單(非常類似線性模型),很難去擬合數(shù)據(jù)的真實(shí)分布

  • 處理非線性數(shù)據(jù)較麻煩。邏輯回歸在不引入其他方法的情況下,只能處理線性可分的數(shù)據(jù), 如果想處理非線性, 首先對連續(xù)特征的處理需要先進(jìn)行離散化(離散化的目的是為了引入非線性),如上文所說,人工分桶的方式會引入多種問題。

  • LR 需要進(jìn)行人工特征組合,這就需要開發(fā)者有非常豐富的領(lǐng)域經(jīng)驗(yàn),才能不走彎路。這樣的模型遷移起來比較困難,換一個領(lǐng)域又需要重新進(jìn)行大量的特征工程。

  • 所以如何自動發(fā)現(xiàn)有效的特征、特征組合,彌補(bǔ)人工經(jīng)驗(yàn)不足,縮短LR特征實(shí)驗(yàn)周期,是亟需解決的問題, 而GBDT模型, 正好可以自動發(fā)現(xiàn)特征并進(jìn)行有效組合。注:在Datawhale公眾號后臺回復(fù)【數(shù)據(jù)項(xiàng)目】可進(jìn)項(xiàng)目專欄群,和作者等一起學(xué)習(xí)交流。

    三、GBDT模型

    GBDT全稱梯度提升決策樹,在傳統(tǒng)機(jī)器學(xué)習(xí)算法里面是對真實(shí)分布擬合的最好的幾種算法之一,在前幾年深度學(xué)習(xí)還沒有大行其道之前,gbdt在各種競賽是大放異彩。原因大概有幾個,一是效果確實(shí)挺不錯。二是即可以用于分類也可以用于回歸。三是可以篩選特征, 所以這個模型依然是一個非常重要的模型。

    GBDT是通過采用加法模型(即基函數(shù)的線性組合),以及不斷減小訓(xùn)練過程產(chǎn)生的誤差來達(dá)到將數(shù)據(jù)分類或者回歸的算法, 其訓(xùn)練過程如下:

    ? ?

    gbdt通過多輪迭代, 每輪迭代會產(chǎn)生一個弱分類器, 每個分類器在上一輪分類器的殘差基礎(chǔ)上進(jìn)行訓(xùn)練。gbdt對弱分類器的要求一般是足夠簡單, 并且低方差高偏差。因?yàn)橛?xùn)練的過程是通過降低偏差來不斷提高最終分類器的精度。由于上述高偏差和簡單的要求,每個分類回歸樹的深度不會很深。最終的總分類器是將每輪訓(xùn)練得到的弱分類器加權(quán)求和得到的(也就是加法模型)。

    關(guān)于GBDT的詳細(xì)細(xì)節(jié),依然是可以參考下面給出的鏈接。這里想分析一下GBDT如何來進(jìn)行二分類的,因?yàn)槲覀円鞔_一點(diǎn)就是gbdt 每輪的訓(xùn)練是在上一輪的訓(xùn)練的殘差基礎(chǔ)之上進(jìn)行訓(xùn)練的, 而這里的殘差指的就是當(dāng)前模型的負(fù)梯度值, 這個就要求每輪迭代的時候,弱分類器的輸出的結(jié)果相減是有意義的, 而gbdt 無論用于分類還是回歸一直都是使用的CART 回歸樹, 那么既然是回歸樹, 是如何進(jìn)行二分類問題的呢?

    GBDT 來解決二分類問題和解決回歸問題的本質(zhì)是一樣的,都是通過不斷構(gòu)建決策樹的方式,使預(yù)測結(jié)果一步步的接近目標(biāo)值, 但是二分類問題和回歸問題的損失函數(shù)是不同的, 關(guān)于GBDT在回歸問題上的樹的生成過程, 損失函數(shù)和迭代原理可以參考給出的鏈接, 回歸問題中一般使用的是平方損失, 而二分類問題中, GBDT和邏輯回歸一樣, 使用的下面這個:

    其中,?是第個樣本的觀測值, 取值要么是0要么是1, 而是第個樣本的預(yù)測值, 取值是0-1之間的概率,由于我們知道GBDT擬合的殘差是當(dāng)前模型的負(fù)梯度, 那么我們就需要求出這個模型的導(dǎo)數(shù), 即, 對于某個特定的樣本, 求導(dǎo)的話就可以只考慮它本身, 去掉加和號, 那么就變成了, 其中如下:

    如果對邏輯回歸非常熟悉的話, ?一定不會陌生吧, 這就是對幾率比取了個對數(shù), 并且在邏輯回歸里面這個式子會等于, 所以才推出了的那個形式。這里令, 即, 則上面這個式子變成了:

    這時候,我們對求導(dǎo), 得

    這樣, 我們就得到了某個訓(xùn)練樣本在當(dāng)前模型的梯度值了, 那么殘差就是。GBDT二分類的這個思想,其實(shí)和邏輯回歸的思想一樣,邏輯回歸是用一個線性模型去擬合這個事件的對數(shù)幾率, GBDT二分類也是如此, 用一系列的梯度提升樹去擬合這個對數(shù)幾率, 其分類模型可以表達(dá)為:

    下面我們具體來看GBDT的生成過程, 構(gòu)建分類GBDT的步驟有兩個:

    1. 初始化GBDT

    和回歸問題一樣, 分類 GBDT 的初始狀態(tài)也只有一個葉子節(jié)點(diǎn),該節(jié)點(diǎn)為所有樣本的初始預(yù)測值,如下:

    上式里面,?代表GBDT模型,?是模型的初識狀態(tài), 該式子的意思是找到一個,使所有樣本的 Loss 最小,在這里及下文中,都表示節(jié)點(diǎn)的輸出,即葉子節(jié)點(diǎn), 且它是一個?形式的值(回歸值),在初始狀態(tài),。

    下面看例子(該例子來自下面的第二個鏈接), 假設(shè)我們有下面3條樣本:

    我們希望構(gòu)建 GBDT 分類樹,它能通過「喜歡爆米花」、「年齡」和「顏色偏好」這 3 個特征來預(yù)測某一個樣本是否喜歡看電影。 我們把數(shù)據(jù)代入上面的公式中求Loss:

    為了令其最小, 我們求導(dǎo), 且讓導(dǎo)數(shù)為0, 則:

    于是, 就得到了初始值, 模型的初識狀態(tài)

    2. 循環(huán)生成決策樹

    這里回憶一下回歸樹的生成步驟, 其實(shí)有4小步, 第一就是計算負(fù)梯度值得到殘差, 第二步是用回歸樹擬合殘差, 第三步是計算葉子節(jié)點(diǎn)的輸出值, 第四步是更新模型。下面我們一一來看:

    計算負(fù)梯度得到殘差:

    此處使用棵樹的模型, 計算每個樣本的殘差, 就是上面的, 于是例子中, 每個樣本的殘差:

    使用回歸樹來擬合, 這里的表示樣本哈,回歸樹的建立過程可以參考下面的鏈接文章,簡單的說就是遍歷每個特征, 每個特征下遍歷每個取值, 計算分裂后兩組數(shù)據(jù)的平方損失, 找到最小的那個劃分節(jié)點(diǎn)。假如我們產(chǎn)生的第2棵決策樹如下:

    對于每個葉子節(jié)點(diǎn), 計算最佳殘差擬合值

    意思是, 在剛構(gòu)建的樹中, 找到每個節(jié)點(diǎn)的輸出, 能使得該節(jié)點(diǎn)的loss最小。那么我們看一下這個的求解方式, 這里非常的巧妙。首先, 我們把損失函數(shù)寫出來, 對于左邊的第一個樣本, 有

    這個式子就是上面推導(dǎo)的, 因?yàn)槲覀円没貧w樹做分類, 所以這里把分類的預(yù)測概率轉(zhuǎn)換成了對數(shù)幾率回歸的形式, 即, 這個就是模型的回歸輸出值。而如果求這個損失的最小值, 我們要求導(dǎo), 解出令損失最小的。但是上面這個式子求導(dǎo)會很麻煩, 所以這里介紹了一個技巧就是使用二階泰勒公式來近似表示該式, 再求導(dǎo), 還記得偉大的泰勒嗎?

    這里就相當(dāng)于把當(dāng)做常量,?作為變量, 將二階展開:

    這時候再求導(dǎo)就簡單了

    Loss最小的時候, 上面的式子等于0, 就可以得到:

    因?yàn)榉肿泳褪菤埐?上述已經(jīng)求到了), 分母可以通過對殘差求導(dǎo),得到原損失函數(shù)的二階導(dǎo):

    這時候, 就可以算出該節(jié)點(diǎn)的輸出:

    這里的下面表示第棵樹的第個葉子節(jié)點(diǎn)。接下來是右邊節(jié)點(diǎn)的輸出, 包含樣本2和樣本3, 同樣使用二階泰勒公式展開:

    求導(dǎo), 令其結(jié)果為0,就會得到, 第1棵樹的第2個葉子節(jié)點(diǎn)的輸出:

    可以看出, 對于任意葉子節(jié)點(diǎn), 我們可以直接計算其輸出值:

    最后,更新模型:

    這樣, 通過多次循環(huán)迭代, 就可以得到一個比較強(qiáng)的學(xué)習(xí)器。

    下面分析一下GBDT的優(yōu)缺點(diǎn):

    我們可以把樹的生成過程理解成自動進(jìn)行多維度的特征組合的過程,從根結(jié)點(diǎn)到葉子節(jié)點(diǎn)上的整個路徑(多個特征值判斷),才能最終決定一棵樹的預(yù)測值, 另外,對于連續(xù)型特征的處理,GBDT 可以拆分出一個臨界閾值,比如大于 0.027 走左子樹,小于等于 0.027(或者 default 值)走右子樹,這樣很好的規(guī)避了人工離散化的問題。這樣就非常輕松的解決了邏輯回歸那里自動發(fā)現(xiàn)特征并進(jìn)行有效組合的問題, 這也是GBDT的優(yōu)勢所在。

    但是GBDT也會有一些局限性, 對于海量的 id 類特征,GBDT 由于樹的深度和棵樹限制(防止過擬合),不能有效的存儲;另外海量特征在也會存在性能瓶頸,當(dāng) GBDT 的 one hot 特征大于 10 萬維時,就必須做分布式的訓(xùn)練才能保證不爆內(nèi)存。所以 GBDT 通常配合少量的反饋 CTR 特征來表達(dá),這樣雖然具有一定的范化能力,但是同時會有信息損失,對于頭部資源不能有效的表達(dá)。

    所以, 我們發(fā)現(xiàn)其實(shí)GBDT和LR的優(yōu)缺點(diǎn)可以進(jìn)行互補(bǔ)

    四、GBDT+LR模型

    2014年, Facebook提出了一種利用GBDT自動進(jìn)行特征篩選和組合, 進(jìn)而生成新的離散特征向量, 再把該特征向量當(dāng)做LR模型的輸入, 來產(chǎn)生最后的預(yù)測結(jié)果, 這就是著名的GBDT+LR模型了。GBDT+LR 使用最廣泛的場景是CTR點(diǎn)擊率預(yù)估,即預(yù)測當(dāng)給用戶推送的廣告會不會被用戶點(diǎn)擊。

    有了上面的鋪墊, 這個模型解釋起來就比較容易了, 模型的總體結(jié)構(gòu)長下面這樣:

    ? ?

    訓(xùn)練時,GBDT 建樹的過程相當(dāng)于自動進(jìn)行的特征組合和離散化,然后從根結(jié)點(diǎn)到葉子節(jié)點(diǎn)的這條路徑就可以看成是不同特征進(jìn)行的特征組合,用葉子節(jié)點(diǎn)可以唯一的表示這條路徑,并作為一個離散特征傳入 LR 進(jìn)行二次訓(xùn)練。

    比如上圖中, 有兩棵樹,x為一條輸入樣本,遍歷兩棵樹后,x樣本分別落到兩顆樹的葉子節(jié)點(diǎn)上,每個葉子節(jié)點(diǎn)對應(yīng)LR一維特征,那么通過遍歷樹,就得到了該樣本對應(yīng)的所有LR特征。構(gòu)造的新特征向量是取值0/1的。比如左樹有三個葉子節(jié)點(diǎn),右樹有兩個葉子節(jié)點(diǎn),最終的特征即為五維的向量。對于輸入x,假設(shè)他落在左樹第二個節(jié)點(diǎn),編碼[0,1,0],落在右樹第二個節(jié)點(diǎn)則編碼[0,1],所以整體的編碼為[0,1,0,0,1],這類編碼作為特征,輸入到線性分類模型(LR or FM)中進(jìn)行分類。

    預(yù)測時,會先走 GBDT 的每棵樹,得到某個葉子節(jié)點(diǎn)對應(yīng)的一個離散特征(即一組特征組合),然后把該特征以 one-hot 形式傳入 LR 進(jìn)行線性加權(quán)預(yù)測。

    這個方案應(yīng)該比較簡單了, 下面有幾個關(guān)鍵的點(diǎn)我們需要了解:

  • 通過GBDT進(jìn)行特征組合之后得到的離散向量是和訓(xùn)練數(shù)據(jù)的原特征一塊作為邏輯回歸的輸入, 而不僅僅全是這種離散特征

  • 建樹的時候用ensemble建樹的原因就是一棵樹的表達(dá)能力很弱,不足以表達(dá)多個有區(qū)分性的特征組合,多棵樹的表達(dá)能力更強(qiáng)一些。GBDT每棵樹都在學(xué)習(xí)前面棵樹尚存的不足,迭代多少次就會生成多少棵樹。

  • RF也是多棵樹,但從效果上有實(shí)踐證明不如GBDT。且GBDT前面的樹,特征分裂主要體現(xiàn)對多數(shù)樣本有區(qū)分度的特征;后面的樹,主要體現(xiàn)的是經(jīng)過前N顆樹,殘差仍然較大的少數(shù)樣本。優(yōu)先選用在整體上有區(qū)分度的特征,再選用針對少數(shù)樣本有區(qū)分度的特征,思路更加合理,這應(yīng)該也是用GBDT的原因。

  • 在CRT預(yù)估中, GBDT一般會建立兩類樹(非ID特征建一類, ID類特征建一類), AD,ID類特征在CTR預(yù)估中是非常重要的特征,直接將AD,ID作為feature進(jìn)行建樹不可行,故考慮為每個AD,ID建GBDT樹。

    • 非ID類樹:不以細(xì)粒度的ID建樹,此類樹作為base,即便曝光少的廣告、廣告主,仍可以通過此類樹得到有區(qū)分性的特征、特征組合

    • ID類樹:以細(xì)粒度 的ID建一類樹,用于發(fā)現(xiàn)曝光充分的ID對應(yīng)有區(qū)分性的特征、特征組合。

    五、編程實(shí)踐

    下面我們通過kaggle上的一個ctr預(yù)測的比賽來看一下GBDT+LR模型部分的編程實(shí)踐, 數(shù)據(jù)來源:https://github.com/zhongqiangwu960812/AI-RecommenderSystem/tree/master/GBDT%2BLR/data

    我們回顧一下上面的模型架構(gòu), 首先是要訓(xùn)練GBDT模型, GBDT的實(shí)現(xiàn)一般可以使用xgboost, 或者lightgbm。訓(xùn)練完了GBDT模型之后, 我們需要預(yù)測出每個樣本落在了哪棵樹上的哪個節(jié)點(diǎn)上, 然后通過one-hot就會得到一些新的離散特征, 這和原來的特征進(jìn)行合并組成新的數(shù)據(jù)集, 然后作為邏輯回歸的輸入,最后通過邏輯回歸模型得到結(jié)果。

    根據(jù)上面的步驟, 我們看看代碼如何實(shí)現(xiàn):

    假設(shè)我們已經(jīng)有了處理好的數(shù)據(jù)x_train, y_train。

    1. 訓(xùn)練GBDT模型

    GBDT模型的搭建我們可以通過XGBOOST, lightgbm等進(jìn)行構(gòu)建。比如:

    gbm = lgb.LGBMRegressor(objective='binary',subsample= 0.8,min_child_weight= 0.5,colsample_bytree= 0.7,num_leaves=100,max_depth = 12,learning_rate=0.05,n_estimators=10,)gbm.fit(x_train, y_train,eval_set = [(x_train, y_train), (x_val, y_val)],eval_names = ['train', 'val'],eval_metric = 'binary_logloss',# early_stopping_rounds = 100,)

    2. 特征轉(zhuǎn)換并構(gòu)建新的數(shù)據(jù)集

    通過上面我們建立好了一個gbdt模型, 我們接下來要用它來預(yù)測出樣本會落在每棵樹的哪個葉子節(jié)點(diǎn)上, 為后面的離散特征構(gòu)建做準(zhǔn)備, 由于不是用gbdt預(yù)測結(jié)果而是預(yù)測訓(xùn)練數(shù)據(jù)在每棵樹上的具體位置, 就需要用到下面的語句:

    model = gbm.booster_ # 獲取到建立的樹# 每個樣本落在每個樹的位置 , 下面兩個是矩陣 (樣本個數(shù), 樹的棵樹) , 每一個數(shù)字代表某個樣本落在了某個數(shù)的哪個葉子節(jié)點(diǎn) gbdt_feats_train = model.predict(train, pred_leaf = True) gbdt_feats_test = model.predict(test, pred_leaf = True)# 把上面的矩陣轉(zhuǎn)成新的樣本-特征的形式, 與原有的數(shù)據(jù)集合并 gbdt_feats_name = ['gbdt_leaf_' + str(i) for i in range(gbdt_feats_train.shape[1])] df_train_gbdt_feats = pd.DataFrame(gbdt_feats_train, columns = gbdt_feats_name) df_test_gbdt_feats = pd.DataFrame(gbdt_feats_test, columns = gbdt_feats_name)# 構(gòu)造新數(shù)據(jù)集 train = pd.concat([train, df_train_gbdt_feats], axis = 1) test = pd.concat([test, df_test_gbdt_feats], axis = 1) train_len = train.shape[0] data = pd.concat([train, test])

    3. 離散特征的獨(dú)熱編碼,并劃分?jǐn)?shù)據(jù)集

    # 新數(shù)據(jù)的新特征進(jìn)行讀入編碼 for col in gbdt_feats_name:onehot_feats = pd.get_dummies(data[col], prefix = col)data.drop([col], axis = 1, inplace = True)data = pd.concat([data, onehot_feats], axis = 1)# 劃分?jǐn)?shù)據(jù)集 train = data[: train_len] test = data[train_len:]x_train, x_val, y_train, y_val = train_test_split(train, target, test_size = 0.3, random_state = 2018)

    4. 訓(xùn)練邏輯回歸模型作最后的預(yù)測

    # 訓(xùn)練邏輯回歸模型 lr = LogisticRegression() lr.fit(x_train, y_train) tr_logloss = log_loss(y_train, lr.predict_proba(x_train)[:, 1]) print('tr-logloss: ', tr_logloss) val_logloss = log_loss(y_val, lr.predict_proba(x_val)[:, 1]) print('val-logloss: ', val_logloss)# 預(yù)測 y_pred = lr.predict_proba(test)[:, 1]

    上面我們就完成了GBDT+LR模型的基本訓(xùn)練步驟, 具體詳細(xì)的代碼可以參考鏈接。

    六、課后思考

  • 為什么使用集成的決策樹?為什么使用GBDT構(gòu)建決策樹而不是隨機(jī)森林?

  • 面對高維稀疏類特征的時候(比如ID類特征), 邏輯回歸一般要比GBDT這種非線性模型好, 為什么?

  • 參考資料

    • 王喆 - 《深度學(xué)習(xí)推薦系統(tǒng)》

    • 決策樹之 GBDT 算法 - 分類部分

    • 深入理解GBDT二分類算法

    • 邏輯回歸、優(yōu)化算法和正則化的幕后細(xì)節(jié)補(bǔ)充

    • 梯度提升樹GBDT的理論學(xué)習(xí)與細(xì)節(jié)補(bǔ)充

    • 推薦系統(tǒng)遇上深度學(xué)習(xí)(十)--GBDT+LR融合方案實(shí)戰(zhàn)

    • CTR預(yù)估中GBDT與LR融合方案

    • GBDT+LR算法解析及Python實(shí)現(xiàn)

    • 常見計算廣告點(diǎn)擊率預(yù)估算法總結(jié)

    • GBDT--分類篇

    論文

    • http://quinonero.net/Publications/predicting-clicks-facebook.pdf

    • Predicting Clicks: Estimating the Click-Through Rate for New Ads\

    • Greedy Fun tion Approximation : A Gradient Boosting

    后臺回復(fù)【數(shù)據(jù)項(xiàng)目】可進(jìn)項(xiàng)目專欄群,和作者等一起學(xué)習(xí)交流。

    “整理不易,點(diǎn)三連

    總結(jié)

    以上是生活随笔為你收集整理的【机器学习基础】逻辑回归 + GBDT模型融合实战!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。