推薦系統 - 基於用戶的協同過濾推薦 - 入門

原文:https://github.com/litaotao/guidetodatamining/blob/master/chapter-2.md

定義

協同過濾,這個方法是利用他人的喜好來進行推薦,也就是說,是大家一起產生的推薦。他的工作原理是這樣的:如果要推薦一本書給你,我會在網站上查找一個和你類似的用戶,然後將他喜歡的書籍推薦給你。

 

如何找到相似的用戶?

  1. 曼哈頓距離

    不同最簡單的距離計算方式是曼哈頓距離。可以在物品評分裏用。在二維模型中,每個人都可以用(x, y)的點來表示,這裏我用下標來表示不同的人,(x1, y1)表示艾米對兩個作品的評分,(x2, y2)表示那位神祕的X先生,那麼他們之間的曼哈頓距離就是:

    也就是x之差的絕對值加上y之差的絕對值
    曼哈頓距離的優點之一是計算速度快,對於Facebook這樣需要計算百萬用戶之間的相似度時就非常有利。

  2. 歐幾里得距離

    勾股定理

    也許你還隱約記得勾股定理。另一種計算距離的方式就是看兩點之間的直線距離:c平方=a平方+b平方
     

    歐幾里得距離,可以在物品評分裏用。公式是:

  3. 閔可夫斯基距離
    我們可以將曼哈頓距離和歐幾里得距離歸納成一個公式,這個公式稱爲閔可夫斯基距離:
    其中:r = 1 該公式即曼哈頓距離,r = 2 該公式即歐幾里得距離,r = ∞ 極大距離

  4. 餘弦相似度

它在文本挖掘中應用得較多,每個用戶播放歌曲的次數也可以。

餘弦相似度的計算中會略過這些非零值。它的計算公式是:

其中,“·”號表示數量積。“||x||”表示向量x的模,計算公式是:

 

問題

相似算法問題1 - 數據稀疏

iTunes上有1500萬首音樂,而我只聽過4000首。所以說單個用戶的數據是 稀疏 的,因爲非零值較總體要少得多。當我們用1500萬首歌曲來比較兩個用戶時,很有可能他們之間沒有任何交集,這樣一來就無從計算他們之間的距離了。曼哈頓距離和歐幾里得距離在數據完整的情況下效果最好如何處理缺失數據,這在研究領域仍是一個活躍的話題。本書的後續內容會進行一些討論,這裏先不展開。可以看誰與誰的距離最近,從而推薦最相似的用戶高分的東西給他。

相似算法問題2 - 打分標準非常不同

如何比較這些用戶呢?比如Hailey的4分相當於Jordan的4分還是5分呢?我覺得更接近5分。這樣一來就會影響到推薦系統的準確性了。

  • 左:我非常喜歡Broken Bells樂隊,所以我給他們打4分!
  • 右:Broken Bells樂隊還可以,我打4分。

問題2解決方法之一是使用皮爾遜相關係數,簡單來說就是看兩個人的評分趨勢,如果一致就是相似。具體解析:

https://github.com/litaotao/guidetodatamining/blob/master/chapter-2.md#%E7%9A%AE%E5%B0%94%E9%80%8A%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0

推薦算法問題1 - 特殊偏好

問題就在於我們只依靠最相似的 一個 用戶來做推薦,如果這個用戶有些特殊的偏好,就會直接反映在推薦內容裏。解決方法之一是找尋多個相似的用戶,這裏就要用到K最鄰近算法 結合 相似度算法了。

K最鄰近算法來找出K個最相似的用戶(如何找出,參考上面四個相似算法),然後怎麼計算每個物品的評分?看這k個用戶的相似評分來決定後續每個物品評分比重,然後用這個比重乘以對應相似用戶的分數然後彙總獲得這物品的評分。

eg:https://github.com/litaotao/guidetodatamining/blob/master/chapter-2.md#k%E6%9C%80%E9%82%BB%E8%BF%91%E7%AE%97%E6%B3%95

 

總結

需要使用K最鄰近算法 結合 相似度算法 來做推薦。

應該使用哪種相似度?

  • 如果數據存在“分數膨脹”問題,就使用皮爾遜相關係數。
  • 如果數據比較“密集”,變量之間基本都存在公有值,且這些距離數據是非常重要的,那就使用歐幾里得或曼哈頓距離。
  • 如果數據是稀疏的,則使用餘弦相似度。

 

代碼

https://github.com/litaotao/guidetodatamining/blob/master/chapter-2.md#python%E6%8E%A8%E8%8D%90%E6%A8%A1%E5%9D%97

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