概述
GBDT的加入,是為了彌補(bǔ)LR難以實(shí)現(xiàn)特征組合的缺點(diǎn)。
LR
LR作為一個(gè)線性模型,以概率形式輸出結(jié)果,在工業(yè)上得到了十分廣泛的應(yīng)用。
其具有簡(jiǎn)單快速高效,結(jié)果可解釋,可以分布式計(jì)算。搭配L1,L2正則,可以有很好地魯棒性以及挑選特征的能力。
但由于其簡(jiǎn)單,也伴隨著擬合能力不足,無法做特征組合的缺點(diǎn)(無法自動(dòng)做特征組合,需要人工做)。
通過梯度下降法可以優(yōu)化參數(shù)
可以稱之上是 CTR 預(yù)估模型的開山鼻祖,也是工業(yè)界使用最為廣泛的 CTR 預(yù)估模型
但是在CTR領(lǐng)域,單純的LR雖然可以快速處理海量高維離散特征,但是由于線性模型的局限性,其在特征組合方面仍有不足,所以后續(xù)才發(fā)展出了FM來引入特征交叉。在此之前,業(yè)界也有使用GBDT來作為特征組合的工具,其結(jié)果輸出給LR。
GBDT+LR
首先,GBDT是一堆樹的組合,假設(shè)有k棵樹。
對(duì)于第i棵樹,其存在
個(gè)葉子節(jié)點(diǎn)。而從根節(jié)點(diǎn)到葉子節(jié)點(diǎn),可以認(rèn)為是一條路徑,這條路徑是一些特征的組合,例如從根節(jié)點(diǎn)到某一個(gè)葉子節(jié)點(diǎn)的路徑可能是“
”這就是一組特征組合。到達(dá)這個(gè)葉子節(jié)點(diǎn)的樣本都擁有這樣的組合特征,而這個(gè)組合特征使得這個(gè)樣本得到了GBDT的預(yù)測(cè)結(jié)果。
所以對(duì)于GBDT子樹,會(huì)返回一個(gè)
維的one-hot向量
對(duì)于整個(gè)GBDT,會(huì)返回一個(gè)維的向量
,這個(gè)向量由0-1組成。
然后,這個(gè),會(huì)作為輸入,送進(jìn)LR模型,最終輸出結(jié)果
模型大致如圖所示。上圖中由兩棵子樹,分別有3和2個(gè)葉子節(jié)點(diǎn)。對(duì)于一個(gè)樣本x,最終可以落入第一棵樹的某一個(gè)葉子和第二棵樹的某一個(gè)葉子,得到兩個(gè)獨(dú)熱編碼的結(jié)果例如
[0,0,1],[1,0]組合得[0,0,1,1,0]輸入到LR模型最后輸出結(jié)果。
由于LR善于處理離散特征,GBDT善于處理連續(xù)特征。所以也可以交由GBDT處理連續(xù)特征,輸出結(jié)果拼接上離散特征一起輸入LR。
討論
至于GBDT為何不善于處理高維離散特征?
https://cloud.tencent.com/developer/article/1005416
缺點(diǎn):對(duì)于海量的 id 類特征,GBDT 由于樹的深度和棵樹限制(防止過擬合),不能有效的存儲(chǔ);另外海量特征在也會(huì)存在性能瓶頸,經(jīng)筆者測(cè)試,當(dāng) GBDT 的 one hot 特征大于 10 萬維時(shí),就必須做分布式的訓(xùn)練才能保證不爆內(nèi)存。所以 GBDT 通常配合少量的反饋 CTR 特征來表達(dá),這樣雖然具有一定的范化能力,但是同時(shí)會(huì)有信息損失,對(duì)于頭部資源不能有效的表達(dá)。
https://www.zhihu.com/question/35821566
后來思考后發(fā)現(xiàn)原因是因?yàn)楝F(xiàn)在的模型普遍都會(huì)帶著正則項(xiàng),而 lr 等線性模型的正則項(xiàng)是對(duì)權(quán)重的懲罰,也就是 W1一旦過大,懲罰就會(huì)很大,進(jìn)一步壓縮 W1的值,使他不至于過大,而樹模型則不一樣,樹模型的懲罰項(xiàng)通常為葉子節(jié)點(diǎn)數(shù)和深度等,而我們都知道,對(duì)于上面這種 case,樹只需要一個(gè)節(jié)點(diǎn)就可以完美分割9990和10個(gè)樣本,懲罰項(xiàng)極其之小.
這也就是為什么在高維稀疏特征的時(shí)候,線性模型會(huì)比非線性模型好的原因了:帶正則化的線性模型比較不容易對(duì)稀疏特征過擬合。
GBDT當(dāng)樹深度>2時(shí),其實(shí)組合的是多元特征了,而且由于子樹規(guī)模的限制,導(dǎo)致其特征組合的能力并不是很強(qiáng),所以才有了后續(xù)FM,F(xiàn)FM的發(fā)展
參考
https://cloud.tencent.com/developer/article/1005416
https://fuhailin.github.io/GBDT-LR/