L2R 一:基礎知識介紹


一、背景

  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM