史上最全推荐系统传统算法合集
?作者 |?YBH
學(xué)校 |?上海交通大學(xué)
研究方向 |?推薦系統(tǒng)
我花了半個多月將推薦系統(tǒng)傳統(tǒng)算法分別進(jìn)行了總結(jié)歸納,應(yīng)該時目前全網(wǎng)最全的版本了。希望對大家了解推薦系統(tǒng)傳統(tǒng)算法有所幫助。
推薦系統(tǒng)的傳統(tǒng)算法主要包括:
基于鄰域的算法
隱語義模型
決策樹模型
邏輯回歸
基于鄰域的算法
主要介紹了 user-based CF(協(xié)同過濾),item-based CF 的原理以及他們的對比,另外還有相關(guān)代碼和優(yōu)化實(shí)驗(yàn)結(jié)果。詳細(xì)內(nèi)容:
1.1 基于鄰域的算法(協(xié)調(diào)過濾)
1.1.1 UserCF
算法步驟:
找到和目標(biāo)用戶興趣相似的用戶集合;
將集合中用戶喜歡的未出現(xiàn)在目標(biāo)用戶的興趣列表中的 item 以一定的權(quán)值排序后推薦給用戶
用戶相似度計(jì)算:
改進(jìn):
由于很多用戶兩兩之間并沒有對同樣的物品產(chǎn)生過行為,用用戶-物品表計(jì)算用戶相似度很多時候計(jì)算都是浪費(fèi)的,可以利用物品-用戶倒排表簡化計(jì)算。
加入熱門商品懲罰,用戶對冷門物品采取相同行為更能說明兩者的相似性
1.1.2 ItemCF
算法步驟:
計(jì)算物品之間的相似性
根據(jù)物品的相似度和用戶的歷史行為給用戶生成推薦列表
物品相似度計(jì)算:
余弦相似度
改進(jìn):
加入熱門用戶懲罰,或者直接忽略過分活躍用戶
利用用戶-物品倒排表
同類物品相似度歸一化
哈利波特問題:物品太熱門
加大對熱門物品的懲罰
兩個不同領(lǐng)域的熱門商品有很高的相似度
解決方法:1.引入物品的內(nèi)容數(shù)據(jù)
2.對不同領(lǐng)域的物品降權(quán)
1.1.3 UserCF與ItemCF比較
1.1.4 UserCF與ItemCF實(shí)驗(yàn)分析(基于movielens數(shù)據(jù)集)
代碼鏈接:github.com/mercurialgh/
1.2 UserCF 實(shí)驗(yàn)
K 代表最當(dāng)前用戶最相似的 k 個用戶,nitems 代表推薦的商品數(shù)目
不加入熱門商品懲罰:
K=8
1.nitems=5
1.nitems=10
1.nitems=20
1.nitems=40
1.nitems=160
選擇與用戶相似度最高的 8 個用戶,隨著推薦數(shù)目 k 的升高,召回率升高,準(zhǔn)確率下降,覆蓋率升高,流行度降低,符合直觀理解。
nitems=10
1.k=4
1.k=8
1.k=16
1.k=32
1.k=160
每次推薦的數(shù)目為 10,選取的相似用戶的數(shù)量 k 從 4 到 32,召回和準(zhǔn)確率都提升了,但是 k 從 32 到 160,對于模型沒有性能提升,反而損失了一部分性能,k 的增大會使得覆蓋率降低,商品的流行度上升。
加入熱門商品懲罰:
1.k=8,n=10,不熱門商品懲罰:
1.k=8,n=10,熱門商品懲罰
與書中描述的不同的是,我加入了懲罰項(xiàng)反而使得召回和準(zhǔn)確率稍微下降了,覆蓋率提升了一點(diǎn)。
1.3 ItemCF實(shí)驗(yàn)
K 代表與當(dāng)前用戶感興趣的物品最相似的 k 個物品,nitems 表示推薦的數(shù)量
不加入活躍用戶懲罰:
K=8
1.n=5
1.n=10
1.n=20
1.n=40
選擇最相似的 8 個物品,推薦數(shù)目遞增,跟 UserCF 第一個實(shí)驗(yàn)的結(jié)果一樣,召回提高,準(zhǔn)確率下降,覆蓋率提升,商品流行度下降。
nitems=10
1.k=4
1.k=8
1.k=16
1.k=100
推薦 10 個物品,選擇最相似商品的個數(shù) k 從 4 到 16 的時候,召回和準(zhǔn)備率都提升了,覆蓋率下降,流行度升高。但是 k 過大時,模型的性能反而會有損失。同時響應(yīng)時間也會慢很多
加入活躍用戶懲罰:
1.k=8,n=10,不加入活躍用戶懲罰:
1.k=8,n=10,加入活躍用戶懲罰:
加入活躍用戶懲罰后,模型性能有了較小的提升。
同類物品相似度歸一化
1.k=8,n=10,不進(jìn)行歸一化:
1.k=8,n=10,進(jìn)行歸一化:
可以看出加入歸一化后所有指標(biāo)都提升了,尤其是覆蓋率提升了很多,說明同類物品歸一化是有效的。
隱語義模型
主要介紹了隱語義模型原理,矩陣分解,以及 Factorization Machine(FM)和 Field-aware Factorization Machine(FFM)的原理和推導(dǎo)。詳細(xì)內(nèi)容:
在隱語義模型中,我們使用同樣的維度來表征(Embedding)item 和用戶。對于 item,這個表征就是 item 表現(xiàn)出的對應(yīng)維度的特征強(qiáng)度;對于用戶,就是用戶表現(xiàn)出的對對應(yīng)維度特征的偏好強(qiáng)度。用用戶的表征向量點(diǎn)乘 item 的表征向量,就可以得到用戶對該條目的偏好描述。
表示用戶 u 對 item i 的喜好程度,其中關(guān)于用戶和條目的描述維度有 k 個,這個參數(shù)是自定義的。
我們對模型的優(yōu)化目標(biāo):
其中 為實(shí)際喜好值, 為 Frobenius 范數(shù)。為了抑制過擬合,需要加入正則化參數(shù):
本質(zhì)上看,隱語義模型是不含非線性過程的單層圖神經(jīng)網(wǎng)絡(luò)。一般來講,我們觀測到的用戶對 item 的行為是很少的,用戶對大部分 item 沒有互動和喜好參數(shù),特別是沒有顯式的負(fù)樣本。
負(fù)樣本構(gòu)造應(yīng)該遵循的原則:
對每個用戶,要保證正負(fù)樣本均衡
對每個用戶采樣負(fù)樣本時,要選取那些熱門,而用戶沒有行為的物品
由于有訓(xùn)練過程,LFM 不能用于實(shí)時推薦,但可以作為 Hybrid System 中的一個選項(xiàng)。當(dāng)然,也可以將 LFM 演變成 2 層神經(jīng)網(wǎng)絡(luò),增加其表征能力:
這種表征類似于矩陣分解(Matrix Factorization)。不過這種改進(jìn)一般使 Recall 的提升在幾個百分點(diǎn)內(nèi),而計(jì)算量上大幅提升。為了避免計(jì)算導(dǎo)致的延遲,可以在模型確定之后對每個用戶計(jì)算一個推薦條目表,在部署時直接查表以免除計(jì)算過程。
2.1 Factorization Machine(FM)
針對的問題:
類別特征經(jīng)過 one-hot 編碼后數(shù)據(jù)稀疏性
一些特征兩兩組合之后往往與 label 有更強(qiáng)的關(guān)聯(lián)性
多項(xiàng)式模型是比較直觀的包含特征組合的模型,二階形式如下:
特征 , 的組合用 表示,只有當(dāng)兩者都非零時才有意義,該模型的主要問題:
特征數(shù)量為 N,二次項(xiàng)系數(shù)為 N(N-1)/2,復(fù)雜度太高
one-hot 特征太稀疏,特征組合之后更加稀疏
FM 的模型方程:
利用了推薦系統(tǒng)中的矩陣分解思想,實(shí)際就是 LFM(latent factor model)隱因子模型。參數(shù)量由 N(N-1)/2 降到 k*n。
原來只有 都不為 0 時才能計(jì)算,樣本量很少,現(xiàn)在只要 不為 0 就可以計(jì)算,解決了樣本量的問題,并且參數(shù)量減少。
注意這里公式之所以能這么化簡,是因?yàn)槲覀冏隽思僭O(shè):即每一個特征都可以用一個 k 維的隱向量來表示。但是這個假設(shè)不一定成立,例如行業(yè)(industry)特征做 one-hot 后,不同行業(yè)都用 k 維向量表示還行,但此時性別(gender)特征也用 k 維向量表示這顯然不太合理。若該假設(shè)有問題,則公式不成立。
2.2 Field-aware Factorization Machine(FFM)
FFM 將特征按不同的規(guī)則分到多個場(field),特征 屬于某個特定的場 f,每個特征 可以被映射為多個隱向量 ,每個隱向量對應(yīng)一個場,當(dāng)特征組合時,用特征對應(yīng)的場的隱向量進(jìn)行內(nèi)積。
FFM 由于引入了場,使得每兩組特征交叉的隱向量都是獨(dú)立的,可以取得更好的組合效果,但是使得計(jì)算復(fù)雜度無法通過優(yōu)化變成線性時間復(fù)雜度,每個樣本預(yù)測的時間復(fù)雜度為,不過 FFM 的 k 值通常遠(yuǎn)小于 FM 的 k 值。FM 可以看做只有一個場的 FFM。
2.3 LFM和基于鄰域的方法的比較
LFM 具有比較好的理論基礎(chǔ),它是一種學(xué)習(xí)方法,通過優(yōu)化一個設(shè)定的指標(biāo)建立最優(yōu)的模型?;卩徲虻姆椒ǜ嗟氖且环N基于統(tǒng)計(jì)的方法,并沒有學(xué)習(xí)過程。
LFM 在生成一個用戶推薦列表時速度太慢,因此不能在線實(shí)時計(jì)算。
ItemCF 算法支持很好的推薦解釋,它可以利用用戶的歷史行為解釋推薦結(jié)果。但 LFM 無法提供這樣的解釋。
決策樹模型
主要介紹了 GBDT 的原理和推導(dǎo),包括 GBDT 回歸算法,GBDT 分類算法(二分類,多分類)以及正則化。XGB 的原理和推導(dǎo),正則化,節(jié)點(diǎn)分類準(zhǔn)則(貪心準(zhǔn)則,近似算法,稀疏感知等)以及工程優(yōu)化原理。詳細(xì)內(nèi)容:
3.1 GBDT
bdt 通過多輪迭代,每輪迭代產(chǎn)生一個弱分類器,每個分類器在上一輪分類器的殘差基礎(chǔ)上進(jìn)行訓(xùn)練。對弱分類器的要求一般是足夠簡單,并且是低方差和高偏差的。因?yàn)橛?xùn)練的過程是通過降低偏差來不斷提高最終分類器的精度。
弱分類器一般會選擇為 CART(也就是分類回歸樹)。由于上述高偏差和簡單的要求每個分類回歸樹的深度不會很深。最終的總分類器是將每輪訓(xùn)練得到的弱分類器加權(quán)求和得到的(加法模型)。
算法流程如下:
1. 初始化
2. 對 t=1,2,3,...T,
計(jì)算殘差?
擬合殘差學(xué)習(xí)得到弱分類器?
得到新的強(qiáng)學(xué)習(xí)器?
3. 樹的深度達(dá)到閾值或者殘差小于閾值,得到最終的強(qiáng)學(xué)習(xí)器
3.1.1 GBDT回歸算法
假設(shè)訓(xùn)練集樣本 ,最大迭代次數(shù) T,損失函數(shù) L,輸出的強(qiáng)學(xué)習(xí)器 ,回歸算法的流程如下:
1. 初始化弱學(xué)習(xí)器,c 的值可以設(shè)為樣本 y 的均值?
2. 對迭代次數(shù) t=1,...T;
對樣本 i=1,...m;計(jì)算梯度
利用 ,擬合一顆 CART 樹,得到第 t 棵回歸樹,其對應(yīng)的葉子節(jié)點(diǎn)區(qū)域?yàn)?,j=1,2,..J。其中 J 為回歸樹 t 的葉子節(jié)點(diǎn)個數(shù)。
對葉子區(qū)域 j=1,2,3,…,J,計(jì)算最佳擬合值:
更新強(qiáng)學(xué)習(xí)器
3. 得到最終的強(qiáng)學(xué)習(xí)器
3.1.2 GBDT分類算法
GBDT 分類算法在思想上和回歸算法沒有區(qū)別,但是由于樣本輸出不是連續(xù)的值,而是離散的類別,導(dǎo)致我們無法直接從輸出類別去擬合類別輸出的誤差。為解決此問題,我們嘗試用類似于邏輯回歸的對數(shù)似然損失函數(shù)的方法,也就是說我們用的是類別的預(yù)測概率值和真實(shí)概率值來擬合損失函數(shù)。對于對數(shù)似然損失函數(shù),我們有二元分類和多元分類的區(qū)別。
1. 二分類
對于二元 GBDT,如果用類似于邏輯回歸的對數(shù)似然損失函數(shù),則損失函數(shù)表示為 ,其中 ,此時的負(fù)梯度誤差為
由于上式比較難優(yōu)化,我們一般使用近似值代替:
除了負(fù)梯度計(jì)算和葉子節(jié)點(diǎn)的最佳殘差擬合的線性搜索外,二元 GBDT 分類和 GBDT 回歸算法過程相同。
2. 多分類
多元 GBDT 要比二元 GBDT 復(fù)雜一些,對應(yīng)的是多元邏輯回歸和二元邏輯回歸的復(fù)雜度差別。假如類別數(shù)為 K,則我們的對數(shù)似然函數(shù)為:
其中如果樣本輸出類別為 k,則 ,第 k 類的概率 的表達(dá)式為:
集合上兩式,我們可以計(jì)算出第 t 輪的第 i 個樣本對應(yīng)類別 l 的負(fù)梯度誤差為:
其實(shí)這里的誤差就是樣本 i 對應(yīng)類別l的真實(shí)概率和 t-1 輪預(yù)測概率的差值。對于生成的決策樹,我們各個葉子節(jié)點(diǎn)的最佳殘差擬合值為:
由于上式比較難優(yōu)化,我們用近似值代替:
除了負(fù)梯度計(jì)算和葉子節(jié)點(diǎn)的最佳殘差擬合的線性搜索,多元 GBDT 分類和二元 GBDT 分類以及 GBDT 回歸算法過程相同。
3.1.3 正則化
和 Adaboost 一樣,我們也需要對 GBDT 進(jìn)行正則化,防止過擬合。GBDT 的正則化主要有 3 種方式:learning_rate(學(xué)習(xí)率);subsample(子采樣比例);min_samples_split(葉子結(jié)點(diǎn)包含的最小樣本數(shù))。?
針對 GBDT 正則化,我們通過子采樣比例方法和定義步長 v 方法來防止過擬合。
1. learning_rate。學(xué)習(xí)率是正則化的一部分,它可以降低模型更新的速度(需要更多的迭代)。通常我們用 learning_rate 和最大迭代次數(shù)一起來決定算法的擬合效果。
經(jīng)驗(yàn)表明:一個小的學(xué)習(xí)率(v<0.1)可以顯著提高模型的泛化能力(相比較于 v=1)。
如果學(xué)習(xí)率較大會導(dǎo)致預(yù)測性能出現(xiàn)較大波動。
2. subsample,子采樣比例。Freidman 從 bagging 策略受到啟發(fā),采用隨機(jī)梯度提升來修改了原始的梯度提升樹算法。
每一輪迭代中,新的決策樹擬合的是原始訓(xùn)練集的一個子集(而并不是原始訓(xùn)練集)的殘差。這個子集是通過對原始訓(xùn)練集的無放回隨機(jī)采樣而來。無放回抽樣的子采樣比例(subsample),取值為 (0,1]。如果取值為 1,則與原始的梯度提升樹算法相同,即使用全部樣本。
如果取值小于 1,則使用部分樣本去做決策樹擬合。較小的取值會引入隨機(jī)性,有助于改善過擬合,因此可以視作一定程度上的正則化;但是 會增加樣本擬合的偏差,因此取值不能太低。推薦在 [0.5, 0.8] 之間。這種方法除了改善過擬合之外,另一個好處是:未被采樣的另一部分子集可以用來計(jì)算包外估計(jì)誤差。因此可以避免額外給出一個獨(dú)立的驗(yàn)證集。
3. min_samples_split,葉子結(jié)點(diǎn)包含的最小樣本數(shù)。梯度提升樹會限制每棵樹的葉子結(jié)點(diǎn)包含的樣本數(shù)量至少包含 m 個樣本,其中m為超參數(shù)。在訓(xùn)練過程中,一旦劃分結(jié)點(diǎn)會導(dǎo)致子結(jié)點(diǎn)的樣本數(shù)少于 m,則終止劃分。
3.2 XGB
3.2.1 算法原理
和 GBDT 一樣,XGBoost 是一個加法模型,在每一步迭代中只優(yōu)化當(dāng)前步中的子模型。在第 m 步中:
目標(biāo)函數(shù)為經(jīng)驗(yàn)風(fēng)險+結(jié)構(gòu)風(fēng)險(正則項(xiàng)):
由
可以得到上式二階泰勒展開:
前 m-1 個子模型已經(jīng)確定了,故上式中除了關(guān)于 的部分都是常數(shù),不影響對 的優(yōu)化求解。目標(biāo)函數(shù)可轉(zhuǎn)化為:
其中:
這里的L是損失函數(shù),度量一次預(yù)測的好壞。在 確定了的情況下,對每個樣本點(diǎn)i都可以輕易計(jì)算出一個 和 。
3.2.2 xgb的正則化
為防止過擬合,XGBoost 設(shè)置了基于樹的復(fù)雜度作為正則項(xiàng):
T 為樹 f 的葉節(jié)點(diǎn)個數(shù),w 為所有葉節(jié)點(diǎn)輸出回歸值構(gòu)成的向量,由(1),(2)可知:
接下來通過一個數(shù)學(xué)處理,可以使得正則項(xiàng)和經(jīng)驗(yàn)風(fēng)險項(xiàng)合并到一起。經(jīng)驗(yàn)風(fēng)險項(xiàng)是在樣本層面上求和,我們將其轉(zhuǎn)換為葉節(jié)點(diǎn)層面上的求和。
3.2.3 節(jié)點(diǎn)分裂準(zhǔn)則
1. 貪心準(zhǔn)則
XGBoost 的子模型樹和決策樹模型一樣,要依賴節(jié)點(diǎn)遞歸分裂的貪心準(zhǔn)則來實(shí)現(xiàn)樹的生成。除此外,XGBoost 還支持近似算法,解決數(shù)據(jù)量過大超過內(nèi)存、或有并行計(jì)算需求的情況。
基本思路和 CART 一樣,對特征值排序后遍歷劃分點(diǎn),將其中最優(yōu)的分裂收益作為該特征的分裂收益,選取具有最優(yōu)分裂收益的特征作為當(dāng)前節(jié)點(diǎn)的劃分特征,按其最優(yōu)劃分點(diǎn)進(jìn)行二叉劃分,得到左右子樹。
上圖是一次節(jié)點(diǎn)分裂過程,很自然地,分裂收益是樹 A 的評分減去樹 B 的評分。虛線框外的葉節(jié)點(diǎn),即非分裂節(jié)點(diǎn)的評分均被抵消,只留下分裂后的 LR 節(jié)點(diǎn)和分裂前的 S 節(jié)點(diǎn)進(jìn)行比較,因此分裂收益的表達(dá)式為:
2. 近似算法
XGBoost 還提供了上述貪心準(zhǔn)則的近似版本,簡言之,將特征分位數(shù)作為劃分候選點(diǎn)。 這樣將劃分候選點(diǎn)集合由全樣本間的遍歷縮減到了幾個分位數(shù)之間的遍歷。
具體而言,特征分位數(shù)的選取有 global 和 local 兩種可選策略:global 在全體樣本上的特征值中選取,在根節(jié)點(diǎn)分裂之前進(jìn)行一次即可;local 則是在待分裂節(jié)點(diǎn)包含的樣本特征值上選取,每個節(jié)點(diǎn)分裂前都要進(jìn)行。通常,global 由于只能劃分一次,其劃分粒度需要更細(xì)。
在 XGB 原始論文中,作者在 Higgs Boson 數(shù)據(jù)集上比較了精確貪心準(zhǔn)則、global 近似和 local 近似三類配置的測試集 AUC,用 eps 代表取分位點(diǎn)的粒度,如 eps=0.25 代表將數(shù)據(jù)集劃分為 1/0.25=4 個 buckets,發(fā)現(xiàn) global(eps=0.05)和 local(eps=0.3)均能達(dá)到和精確貪心準(zhǔn)則幾乎相同的性能。
這三類配置在 XGBoost 包均有支持。
3. 加權(quán)分位數(shù)
查看(1)式表示的目標(biāo)函數(shù),令偏導(dǎo)為 0 易得
此目標(biāo)函數(shù)可理解為以 為權(quán)重, 為標(biāo)簽的二次損失函數(shù):
因此,在近似算法取分位數(shù)時,實(shí)際上 XGBoost 會取以二階導(dǎo) 為權(quán)重的分位數(shù)。
4. 列采樣和學(xué)習(xí)率
XGBoost 還引入了兩項(xiàng)特性:列采樣和學(xué)習(xí)率。
列采樣,即隨機(jī)森林中的做法,每次節(jié)點(diǎn)分裂的待選特征集合不是剩下的全部特征,而是剩下特征的一個子集。是為了更好地對抗過擬合(我不是很清楚 GBDT 中列采樣降低過擬合的理論依據(jù)。原文這里提到的動機(jī)是某 GBDT 的軟件用戶反饋列采樣比行采樣更能對抗過擬合),還能減少計(jì)算開銷。
學(xué)習(xí)率,或者叫步長、shrinkage,是在每個子模型前(即在每個葉節(jié)點(diǎn)的回歸值上)乘上該系數(shù),削弱每顆樹的影響,使得迭代更穩(wěn)定。可以類比梯度下降中的學(xué)習(xí)率。XGBoost 默認(rèn)設(shè)定為 0.3。
5. 稀疏感知
缺失值應(yīng)對策略是算法需要考慮的。特征稀疏問題也同樣需要考慮,如部分特征中出現(xiàn)大量的 0 或干脆是 one-hot encoding 這種情況。XGBoost 用稀疏感知策略來同時處理這兩個問題:概括地說,將缺失值和稀疏 0 值等同視作缺失值,再將這些缺失值“綁定”在一起,分裂節(jié)點(diǎn)的遍歷會跳過缺失值的整體。這樣大大提高了運(yùn)算效率。
分裂節(jié)點(diǎn)依然通過遍歷得到,NA 的方向有兩種情況,在此基礎(chǔ)上對非缺失值進(jìn)行切分遍歷。或者可以理解 NA 被分到一個固定方向,非缺失值在升序和降序兩種情況下進(jìn)行切分遍歷。
如上圖所示,若某個特征值取值為 1,2,5 和大量的 NA,XGBoost 會遍歷以上 6 種情況(3 個非缺失值的切分點(diǎn) × 缺失值的兩個方向),最大的分裂收益就是本特征上的分裂收益,同時,NA 將被分到右節(jié)點(diǎn)。
3.2.4 工程優(yōu)化
1. 并行列塊設(shè)計(jì)
XGBoost 將每一列特征提前進(jìn)行排序,以塊(Block)的形式儲存在緩存中,并以索引將特征值和梯度統(tǒng)計(jì)量 對應(yīng)起來,每次節(jié)點(diǎn)分裂時會重復(fù)調(diào)用排好序的塊。而且不同特征會分布在獨(dú)立的塊中,因此可以進(jìn)行分布式或多線程的計(jì)算。
2. 緩存訪問
特征值排序后通過索引來取梯度 會導(dǎo)致訪問的內(nèi)存空間不一致,進(jìn)而降低緩存的命中率,影響算法效率。為解決這個問題,XGBoost 為每個線程分配一個單獨(dú)的連續(xù)緩存區(qū),用來存放梯度信息。
3. 核外塊計(jì)算
數(shù)據(jù)量過大時,不能同時全部載入內(nèi)存。XGBoost 將數(shù)據(jù)分為多個 blocks 并儲存在硬盤中,使用一個獨(dú)立的線程專門從磁盤中讀取數(shù)據(jù)到內(nèi)存中,實(shí)現(xiàn)計(jì)算和讀取數(shù)據(jù)的同時進(jìn)行。為了進(jìn)一步提高磁盤讀取數(shù)據(jù)性能,XGBoost 還使用了兩種方法:一是通過壓縮 block,用解壓縮的開銷換取磁盤讀取的開銷;二是將 block 分散儲存在多個磁盤中,有助于提高磁盤吞吐量。
3.2.5 與GBDT比較
性質(zhì):GBDT 是機(jī)器學(xué)習(xí)算法,XGBoost 除了算法內(nèi)容還包括一些工程實(shí)現(xiàn)方面的優(yōu)化。
基于二階導(dǎo):GBDT 使用的是損失函數(shù)一階導(dǎo)數(shù),相當(dāng)于函數(shù)空間中的梯度下降;而 XGBoost 還使用了損失函數(shù)二階導(dǎo)數(shù),相當(dāng)于函數(shù)空間中的牛頓法。
正則化:XGBoost 顯式地加入了正則項(xiàng)來控制模型的復(fù)雜度,能有效防止過擬合。
列采樣:XGBoost 采用了隨機(jī)森林中的做法,每次節(jié)點(diǎn)分裂前進(jìn)行列隨機(jī)采樣。
缺失值處理:XGBoost 運(yùn)用稀疏感知策略處理缺失值,而 GBDT 沒有設(shè)計(jì)缺失策略。
并行高效:XGBoost 的列塊設(shè)計(jì)能有效支持并行運(yùn)算,提高效率。
邏輯回歸
主要介紹了邏輯回歸的原理和如何在推薦上應(yīng)用。詳細(xì)內(nèi)容:
在推薦系統(tǒng)中,可以將是否點(diǎn)擊一個商品看成一個概率事件,被推薦的商品無非兩種可能性:1.被點(diǎn)擊;2.不被點(diǎn)擊。那么就可以將這個推薦問題轉(zhuǎn)換成一個分類問題。邏輯回歸是監(jiān)督學(xué)習(xí)中的分類算法,所以可以使用邏輯回歸來進(jìn)行一個分類預(yù)測。
邏輯回歸模型能夠綜合利用用戶,物品,上下文等多種不同的特征生成較全面的推薦結(jié)果。
算法步驟
(1)將用戶年齡、性別、物品屬性、物品描述、當(dāng)前時間、當(dāng)前地點(diǎn)等特征轉(zhuǎn)換成數(shù)值型特征向量;
(2)確定邏輯回歸模型的優(yōu)化目標(biāo)(以優(yōu)化點(diǎn)擊率為例),利用已有樣本數(shù)據(jù)對邏輯回歸模型進(jìn)行訓(xùn)練,確定邏輯回歸模型的內(nèi)部參數(shù)
(3)在模型服務(wù)階段,將特征向量輸入邏輯回歸模型,經(jīng)過邏輯回歸模型的推斷,得到用戶“點(diǎn)擊”物品的概率
(4)利用“點(diǎn)擊概率”對所有候選物品進(jìn)行排序,得到推薦列表
LR的數(shù)學(xué)形式如下:
其中 ,假設(shè) ,,則 。
所以邏輯回歸實(shí)際上就是在線性回歸的基礎(chǔ)上加了 ,而這個就是所謂的 sigmoid 函數(shù)??梢钥催@篇詳細(xì)的解答:
https://www.zhihu.com/question/23666587/answer/462453898
LR的缺陷:
LR 假設(shè)各特征間是相互獨(dú)立的,忽略了特征間的交互關(guān)系,因此需要做大量的特征工程。同時 LR 對非線性的擬合能力較差,限制了模型的性能上限。通常LR可以作為 Baseline 版本。
這里有用邏輯回歸做電影推薦的 github 項(xiàng)目,有興趣的小伙伴可以實(shí)操一下:
https://github.com/LawsonAbs/MovieRecommend
這些傳統(tǒng)算法的思想后續(xù)在深度學(xué)習(xí)應(yīng)用到推薦系統(tǒng)中都有很多相關(guān)的模型,比如 facebook 將協(xié)同過濾和深度學(xué)習(xí)結(jié)合的 DLRM,以及后面的 DeepFM,Wide&Deep,Deep&Cross,以及將 Facebook 將 GBDT+LR 結(jié)合的方法一度成為業(yè)內(nèi)都使用的模型。所以了解這些算法對于提升自己時很有幫助的。
最后如果有錯誤希望大家指出,希望和大家一起交流,一起進(jìn)步!
特別鳴謝
感謝 TCCI 天橋腦科學(xué)研究院對于 PaperWeekly 的支持。TCCI 關(guān)注大腦探知、大腦功能和大腦健康。
更多閱讀
#投 稿?通 道#
?讓你的文字被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識的人。
總有一些你不認(rèn)識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵高校實(shí)驗(yàn)室或個人,在我們的平臺上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)術(shù)熱點(diǎn)剖析、科研心得或競賽經(jīng)驗(yàn)講解等。我們的目的只有一個,讓知識真正流動起來。
📝?稿件基本要求:
? 文章確系個人原創(chuàng)作品,未曾在公開渠道發(fā)表,如為其他平臺已發(fā)表或待發(fā)表的文章,請明確標(biāo)注?
? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發(fā)送,要求圖片清晰,無版權(quán)問題
? PaperWeekly 尊重原作者署名權(quán),并將為每篇被采納的原創(chuàng)首發(fā)稿件,提供業(yè)內(nèi)具有競爭力稿酬,具體依據(jù)文章閱讀量和文章質(zhì)量階梯制結(jié)算
📬?投稿通道:
? 投稿郵箱:hr@paperweekly.site?
? 來稿請備注即時聯(lián)系方式(微信),以便我們在稿件選用的第一時間聯(lián)系作者
? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿
△長按添加PaperWeekly小編
🔍
現(xiàn)在,在「知乎」也能找到我們了
進(jìn)入知乎首頁搜索「PaperWeekly」
點(diǎn)擊「關(guān)注」訂閱我們的專欄吧
·
總結(jié)
以上是生活随笔為你收集整理的史上最全推荐系统传统算法合集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CoSENT:比Sentence-BER
- 下一篇: 任务型对话系统预训练最新研究进展