一、背景
l2r可以說是搜索推薦里面很常用的知識了,一直處於一知半解的地步,今天開個博客准備把這些零散的東西系統性整理好,一版就粗糙點了。
二、粗概
前段時間的項目主要和搜索引擎相關,記錄下搜索引擎的主題思路,大致就是:召回 --> 粗排 ---> 精排。
一般情況下,召回和粗排會並在一起,例如LUCENE。召回的方法有很多種,常見的有:BM25,TF-IDF等,但不限於這些,用LDA也未嘗不可。因為這一階段是海選,涉及大量數據計算,為了保證時效,這部分的算法一般會選用快捷有效且相對簡單的,重頭戲都會放在精排階段,也就是我們要說的L2R(Learning to Rank)。
L2R按照方法類型,主要分為以下三種:pointwise, pairwise以及listwise。具體算法以及相應的類型,可參見wiki中的標記[1]。pointwise更適用於ordinal regression,而后兩者更適用於L2R[2]。
三、基本知識
1. bagging 、boosting及stacking 區別[3][8]
1.1 bagging方法也稱為自舉匯聚法(bootstrap aggregating,bootstraps:名字來自成語“pull up by your own bootstraps”,意思是依靠你自己的資源,它是一種有放回的抽樣方法),是在原始數據集中選擇S次后(有放回)得到S個新數據集的一種技術,新數據集和原數據集的大小相等,新數據集中可以有重復值出現,也有可能原始數據集中的某些值在新數據集中不會出現。然后利用S個新數據集,將某個學習算法分別作用於每個數據集就得到了S個分類器,最終將這S個分類器ensemble起來就得到最終的結果。算法如:隨機森林(random forest)。
1.2 boosting是一種與bagging類似的技術,兩者所使用的多個分類器的類型都是一致的,主要的區別就是,boosting的分類器之間是串行訓練獲得的,每個新分類器都是根據已訓練出的分類器的性能來訓練,通過幾種關注被錯分的數據來獲得新的分類器。boosting分類的結果是基於所有分類器的加權求和的結果,所以它中分類器的權重並不相等,每個權重代表的是其對應分類器在上一輪迭代中的成功度,而bagging中,每個分類器的權重是相等的。算法如:Adaboost(adaptive boosting).
1.3 stacking是一種meta_calssifier,分兩步,第一步的做法類似於bagging,首先訓練集再划分出兩部分(子訓練集+子測試集),然后是常用的做法,得到一個弱模型,求得這個弱模型在子預測集及預測集上的預測結果(這個很重要,作為第二步的輸入)。利用cross_validation,迭代幾次,將每個子集作為測試集得到一遍測試結果,這個作為新訓練集的X,Y保持不變。再利用每個弱模型預測測試集的結果,平均后作為新測試集的X,Y保持不變。第二步,更新訓練集和測試集的X,重新學習一個分類器。[6]以上就是stacking的第一層,在第二層中,我們以第一層的輸出train再結合其他的特征集再做一層stacking。不同的層數之間有各種交互,還有將經過不同的 Preprocessing 和不同的 Feature Engineering 的數據用 Ensemble 組合起來的做法。
[7]
2. 分類樹和回歸樹
決策樹主要分為兩類:分類樹和回歸樹。
2.1 分類樹常用來解決分類問題,比如用戶性別、網頁是否是垃圾頁面、用戶是不是作弊等。
2.2 而回歸樹一般用來預測真實數值,比如用戶的年齡、用戶點擊的概率、網頁相關程度等等。
2.3 回歸樹總體流程類似於分類樹,區別在於,回歸樹的每一個節點都會得到一個預測值,以年齡為例,該預測值等於屬於這個節點的所有人年齡的平均值。分枝時窮舉每一個feature的每個閾值尋找最優切分變量和最優切分點,但衡量的准則不再是分類樹中的基尼系數,而是平方誤差最小化。也就是被預測錯誤的人數越多,平方誤差就越大,通過最小化平方誤差找到最可靠的分枝依據。分枝直到每個葉子節點上人的年齡都唯一或者達到預設的終止條件(如葉子個數上限),若最終葉子節點上人的年齡不唯一,則以該節點上所有人的平均年齡做為該葉子節點的預測年齡。
3. bias 和variance
鏈接中說明,bias 相當於模型訓練的評價指標,variance則表示了模型的泛化能力[4]。
3.1 bagging 減少 variance, boosting 減少bias,bagging對樣本進行不斷重新采樣和聚合,減少了單個樣本對於模型的影響,增加了模型本身的抗干擾能力,所以降低了variance。而boosting是串行疊加訓練,不斷增加每個樣本的影響,對樣本的依賴也比較大,這樣雖然能很好的擬合訓練集,bias就降低了,但是當訓練集出現問題時,模型的波動也會比較大,高variance。
四、評價指標
1. NDCG[5]
五、參考文獻
1.https://en.wikipedia.org/wiki/Learning_to_rank
2.Hang Li, Learning to Rank, ACML 2009Tutorial.
3.機器學習實戰[M].第七章,利用AdaBoost元算法提高分類性能。
4.https://zhuanlan.zhihu.com/p/28769940 https://www.zhihu.com/question/27068705/answer/137487142 http://scott.fortmann-roe.com/docs/BiasVariance.html
5.https://en.wikipedia.org/wiki/Discounted_cumulative_gain
6.https://blog.csdn.net/Mr_tyting/article/details/72957853
7.https://stats.stackexchange.com/questions/18891/bagging-boosting-and-stacking-in-machine-learning
8. Comparison of Bagging, Boosting and Stacking Ensembles Applied to Real Estate Appraisal