推荐系统相关算法(2):k-nearest neighbor
1. kNN
1.1?基本的kNN模型
? ? ??kNN(k-nearest neighbor)的思想簡單來說就是,要評價一個未知的東西U,只需找k個與U相似的已知的東西,并通過k個已知的,對U進行評價。假如要預測風炎君對一部電影M的評分,根據kNN的思想,我們可以先找出k個與風炎君相似的,并且對M進行過評分的用戶,然后再用這k個用戶的評分預測風炎君對M的評分。又或者先找出k個與M相似的,并且風炎君評價過的電影,然后再用這k部電影的評分預測風炎君對M的評分。在這個例子中,找相似用戶的方法叫做user-based kNN,找相似物品的方法叫做item-based kNN。這兩種方法的思想和實現都大同小異,因此下文只討論item-based kNN,并且將其簡稱為kNN。
??? 根據kNN的思想,我們可以將kNN分為以下三個步驟(假設預測用戶u對物品i的評分):
(1)計算相似度
? ? ? 推薦系統中常用的相似度有:Pearson correlation,Cosine,Squared Distance,其中Pearson correlation的運用最為普遍,因此本文只介紹Pearson correlation。
? ? ? Pearson correlation的取值范圍為[-1,1],當值為-1時,表示兩組變量負相關,為0時則表示兩組變量不相關,為1時表示兩組變量正相關,其計算公式如下:
(2)選擇鄰居
? ? ? 在用戶u評過分的所有電影中,找出k個與電影m相似度最高的電影,并用N(u, m)表示這k個電影的集合。
(3)計算預測值
? ? ? 有了k個相似的電影后,就可以用以下公式預測評分:
?
1.2?數據稀疏性與kNN的改進
? ? ? 現在待處理的推薦系統規模越來越大,用戶和商品數目動輒百千萬計,兩個用戶之間選擇的重疊非常少。如果用用戶和商品之間已有的選擇關系占所有可能存在的選擇關系的比例來衡量系統的稀疏性,那么平時研究最多的MovieLens數據集的稀疏度是4.5%,Netflix是1.2%,Bibsonomy是0.35%,Delicious是0.046%。
? ? ? 從Pearson correlation的計算公式上看,如果某兩個電影的交集大小比其它電影的交集要小得多,那么這兩個電影的相似度的可靠性就比較低。由上面描述的數據稀疏性可知,在推薦系統中出現某些交集的較小的情況將會十分平常。而這會大大加強相似度的不可靠性。為了預測結果的可靠性,有必要減輕這種不可靠性,因此我們要根據交集的大小對相似度進行一次壓縮(shrinkage):
?
1.3?全局作用與kNN的改進
? ? ? 用戶對電影評分有各種趨勢,例如:有的用戶是嚴格的評分者,因而傾向于給較低的分數;有的用戶是寬松的評分者,因而傾向于給較高的分數;有的電影的表現即使一般也傾向于獲得較高的分數。在推薦系統中,將這些趨勢稱為全局作用(global effect,簡稱GE)。
? ? ?常用的GE有16種,這里只列出本文用到的3種:
| No. | Global Effect | Meaning |
| 0 | Overall mean | 全部評分的平均值 |
| 1 | Movie × 1 | 電影的被評分傾向 |
| 2 | User × 1 | 用戶的評分傾向 |
| 3 | User × Time(user)1/2 | 用戶第一次評分后到現在相距了多少時間 |
表格的第一列表示各個 GE 被考慮的順序;第二列表示 GE 的名稱;第三列表示GE的意義。其中第二列命名的意義為:在“×”之前的部分代表該 GE 是基于用戶或基于電影的,在“×”之后的部分代表 xu,m(下文會提到)的取值形式。
? ? ?GE的目標是為該GE估計一個特定的參數(第0號GE除外,因為全部評分的平均值能直接計算得到)。在估計參數時,一次只考慮一個GE,并且使用前面已得到的所有GE的預測殘差(residual)作為本次估計的真實評分。估計第t+1個GE時的真實評分由以下公式得到:
? ? ? 在估計GE的特定參數時,也一樣要考慮到前面提到的數據稀疏性問題,即該參數也要進行壓縮,進行壓縮后的參數估計公式如下:
其中表示這是第t個參數,并且是基于用戶的,表示用戶u評過分的所有電影的集合,表示第u個用戶和第m部電影相關的解釋變量(explanatory variable),且在計算第1,2號GE時為1,在計算第3號GE時為
? ? ? kNN基本模型并沒有將GE考慮在內,為了使預測結果更加精確,有必要將GE加到kNN的預測公式中,改進后的預測公式如下:
?
2.?實驗
? ? 實驗數據使用MovieLens 100k的數據。這份數據由1000個用戶對1700部電影的100000個評分組成,其稀疏性為5.88%。評價指標使用RMSE(root mean squared error):
??? 各算法在該數據集的表現如下所示,其中表中的數值指RMSE。
| ? | k=10 | k=15 | k=20 |
| 基本kNN模型 | 1.076 | 1.071 | 1.068 |
| 壓縮相似度的kNN | 1.011 | 1.016 | 1.020 |
| 帶GE的kNN | 0.987 | 0.988 | 0.989 |
| 壓縮相似度并且帶GE的kNN | 0.946 | 0.951 | 0.955 |
? ? ? 從上表可知,當k=10時,壓縮相似度的改進效果為6%,GE的改進效果為8.2%,兩者疊加的改進效果為12.1%。這說明:(1)數據的稀疏性對越粗糙的模型,影響越大。(2)GE的影響較大,原因是kNN的預測結果是相似度與用戶評分的加權平均值。當用戶評分包含與相似度無關的因素(即GE)越多時,最終結果越不可靠。
? ? ? 代碼由于較多就不直接貼上,想要的可以在從以下地址下載(Python實現)
http://ishare.iask.sina.com.cn/f/34170290.html
總結
以上是生活随笔為你收集整理的推荐系统相关算法(2):k-nearest neighbor的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐系统相关算法(1):SVD
- 下一篇: python核心模块之pickle和cP