推薦系統筆記三、基於近鄰的推薦系統(進階篇)

參考:http://blog.csdn.net/wangjian1204/article/details/50490108

一、概述:

基於近鄰的推薦算法在推薦系統中佔有重要的地位,是學術界的一個重點研究方向,在產業界也得到了廣泛的應用。基於近鄰的推薦算法大致可以分爲user-baseditem-based兩類,關於近鄰推薦算法的基礎性介紹,請參見博文: “推薦系統筆記一、基於近鄰的推薦系統(基礎篇)”。由於user-based方法和item-based方法的相似性,本文主要討論item-based方法上的一些技術,這些技術可以被直接套用到user-based方法上。本文主要介紹五種近鄰模型。

二、符號定義:

  • U:用戶集合;I:item集合;
  • R:評分集合,rui表示用戶uU對item iI的評分;
  • Ui:已經給item i打分的用戶集合;Iu:已經被用戶u打分的item集合;
  • IuvIuIv,同時被用戶u和用戶v打過分的item集合;Uij:同時對item i和j打過分的用戶集合;
  • wuv:用戶u和v之間的相似度;wij:item i和j之間的相似度;

三、相似權值計算:

        兩個用戶或者item間的近鄰關係是由他們之間的相似度來判斷的,與一個用戶(或item)相似度最大的k個用戶(或item)稱爲他的k近鄰。

        cosine相似度是其中一種常用的度量方法: 

cos(i,j)=uUijruirujuUir2uivUjr2vj

UiUj的相似度。在前面符號定義小節已經提到過Uij表示同時對item i和item j打過分的用戶集合。

        如果考慮均值和方差,則得到Pearson相關係數:

PearsonCorrelation(i,j)=uUij(ruir¯i)(rujr¯j)vUij(rvir¯i)2kUij(rkjr¯j)2

Pearson Correlation是在集合Uij上計算的,其他的評分都忽略,所以在分母上和cosine有一個小小的區別。另外,由於Pearson Correlation 的分子分母都要除以標準差項,所以可以分子分母同時約去。

相似權值改進:

    在實際中,不同用戶或者item的評分往往是帶偏差的,例如A和B兩個用戶的偏好類似,但是A比較容易滿足,傾向於給item打高分;而B傾向於給item打低分(Item 上也有類似的情況)。爲了解決這個問題,需要爲每個用戶和item增加一個偏置項。在前面的式子中,用均值r¯i作爲這個偏置項,也可以用學習的方法得到一個較好的偏置項: 

minb(u,i)K(ruiμbubi)2+λ(ub2u+ib2i)

其中μ是整體評分偏置,bubi是用戶u和item i上額外的偏置。那麼評分rui的偏置就等於: 
bui=μ+bu+bi

    把這個偏置代入Pearson Correlation,得到: 

PearsonCorrelation(i,j)=uUij(ruibui)(rujbuj)vUij(rvibvi)2kUij(rkjbkj)2

當使用Pearson Correlation方法時,如果item i和j只被一個用戶同時評分過,並且恰好在這兩個item上的評分相同,那麼根據Pearson公式他們之間的相似度等於1,這顯然不大合理。可以用以下方法對權值進行收縮: 

sij=|Uij|1|Uij|1+βPearsonCorrelation(i,j)

β的值可以通過交叉驗證選擇(例如β=100)。

四、相似度插值:

    Similarity-Based Interpolation:定義Sk(i;u)爲用戶u評分的item集合中和item i最相似的k個近鄰。由用戶對item的歷史評分來預測評分: 

r̂ ui=bui+jSk(i;u)sij(rujbuj)jSk(i;u)sij

這可以看做一個插值函數,sij是插值係數。這種方法主要有一下兩個優點:

  • 可解釋性。通過用戶對item的歷史評分(喜好)推薦新的item。
  • 實時性。一旦用戶給出新的評分,item-based模型可以立即提供新的推薦,而不需要重新訓練模型或計算參數(通常認爲item間的相似度在短時間內是恆定的,只需每隔較長一段時間重新計算)。

五、聯合派生插值權重:

    Jointly Derived Interpolation Weights:相似度插值方法直接使用item間的相似度作爲插值權重(係數),忽略了近鄰間的相互關係,爲了更好的預測評分,需要重新學習插值權重{θuij|jSk(i;u)}。 

r̂ ui=bui+jSk(i;u)θuij(rujbuj)

插值權重通過求解一個最小二乘問題得到: 

minθuvu{(rvibvi)jSk(i;u)θuij(rvjbvj)}2

    如果寫成Aw=b的形式,則: 

Ajl=vu(rvjbvj)(rvlbvl)bj=vu(rvjbvj)(rvibvi)

由於評分矩陣是稀疏的,很少有用戶v對Sk(i;u)都進行了評分。可以同時用正則化和平滑的方式進行處理(結果會向avg收縮): 
 jl=Ajl+βavg|Ujl|+βb̂ j=bj+βavg|Uij|+β

六、全局近鄰模型:

    前面介紹的近鄰模型都是局部的(k近鄰),全局近鄰模型吸取了矩陣分解模型的優點,從而可以得到更優的結果。這種模型可以使用隱式反饋,並且具有較好的實時性。重新定義預測函數: 

r̂ ui=μ+bu+bi+|Rk(i;u)|12jRk(i;u){wij(rujbuj)+cij}

    R(u)是用戶u的所有評分,cij是用戶u的隱式反饋,如租借、購買等。Rk(i;u)是item項的集合,這些item需要同時滿足兩個條件:一是用戶u評過分;二是item i的k近鄰。所以Rk(i;u)中item的個數通常是小於k的。需要學習的參數有:bu,bi,wij,cij,同過梯度下降最優化下面這個目標函數來學習參數:

minb,w,c=(u,i){ruiμbubi|Rk(i;u)|12jRk(i;u)(wij(rujbuj)+cij)}2+λ{b2u+b2i+jRk(i;u)(w2ij+c2ij)}2

七、因子分解近鄰模型:

    可以對全局近鄰模進行因子分解以減少時間和空間複雜度,提高準確率: 

r̂ ui=μ+bu+bi+|Rk(i;u)|12jRk(i;u){wij(rujbuj)+cij}=μ+bu+bi+|Rk(i;u)|12jRk(i;u){qixj(rujbuj)+qiyj}=μ+bu+bi+qi|Rk(i;u)|12jRk(i;u){xj(rujbuj)+yj}

可以發現最後的表示和SVD++很相似。

八、近鄰模型添加時間信息:

    用戶的偏好是隨着時間不斷髮生變化的,\emph{如一個人喜歡的電影在2年前和2年後很可能是不同的}。在全局近鄰模型中可以很容易加入時間信息:

r̂ ui=μ+bu(tui)+bi(tui)+|Rk(i;u)|12jRk(i;u)eβu|tuituj|{wij(rujbuj)+cij}

bu(tui),bi(tui)bu,bi的時間函數,詳見博文”矩陣分解協同過濾“。 eβu|tuituj|是指數衰退函數,如果用戶u對item j的評分是在很久之前,那麼item j的評分對現在的影響不大,用指數函數縮小其權重。其他項和原始的全局近鄰模型一樣,保持不變。

九、參考資料

Recommender Systems Handbook


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章