天天看點

推薦算法基礎

推薦系統核心要解決的問題是提高轉化率,也就是經過分析,要猜測某一個使用者更喜歡什麼。

1. 最簡單的方法來做推薦

  • 貝葉斯分類:通過統計使用者所有購買的物品的分布特性,統計該使用者購買物品的分布情況。
  • 利用搜尋記錄:比如廣告位的JavaScript代碼可以讀取浏覽器的本地Cookies(通常可以用來存儲浏覽器上的表單資訊、使用者名、搜尋關鍵字等資訊)和目前頁面的文本資訊,并做相應的關鍵詞提取,最後根據這些關鍵詞來猜測使用者可能感興趣的内容,進行推薦。

而目前協同過濾公認的應該是兩種思路,第一種是利用比較成熟的鄰居方法,而鄰居方法中有兩個方面的視角,

第一種:基于使用者。也就是說,系統通過分析一個使用者和哪些使用者的特征比較像,然後把相似使用者喜歡的商品推薦給該使用者。

第二種:基于商品。也就是說,通過分析使用者的購買行為來判斷使用者喜歡的商品,然後進行推薦。

前者稱為User-based CF(User-based Collaborative Filtering),或者叫基于使用者的協同過濾;後者稱為Item-based CF(Item-based Collaborative Filtering),或者叫基于商品的協同過濾

除了鄰居方法外,還有就是基于模型的推薦算法。

這裡注意的幾點

  • User-based CF:假設在得到了一個使用者對商品偏好的清單,但怎麼找到和該使用者興趣最接近的認呢?這裡用的是餘弦相似度。

    cos(a,b)=a⋅b|a|⋅|b|

    其中a,b都是向量,這時a,b兩個向量在空間上隻要方向一緻,不論大小是否相同,都會得到 cos(a,b)=1 ,而方向相反,則 cos(a,b)=−1 。這是一種最普通的基于使用者的協同過濾算法思路。

  • Item-based CF:這種算法和前面基于使用者的協同過濾算法不一樣,它并不是要建立一個商品屬性的矩陣來計算物品之間的相似度,由于商品之前的屬性相差很大,并且計算量也很大,是以這裡的Item-based CF主要通過分析使用者的行為來計算物品之間的相似度。

    計算步驟分為以下兩步:

    (1)計算物品之間的相似度

    (2)根據物品的相似度和使用者的偏好來給使用者生成推薦清單

這裡計算商品A和商品B的相似性也用到了餘弦相似度的概念,但略有不同:

cos(A,B)=N(A∩B)N(A)⋅N(B)−−−−−−−−−−−√

分子是同時喜歡A和喜歡B兩個商品的使用者數量,分母也就很清晰了。

一句話概括就是:有很多人喜歡商品A,同時他們也喜歡商品B,是以A和B應該是比較類似的商品。

2. 優化問題

其中要注意的是在 Item-based CF算法中還存在一種問題就是關于覆寫率和多樣性的問題。由于某些原因通過計算我們會得到一些不合适的高相似度的商品,這時我們期望的不是一個高度收斂的推薦算法,而是商品種類要豐富,也即是商品的覆寫率要高,保障它的多樣性。這裡就要用到物品相似度的歸一化。

所謂的歸一化就是把商品的相似度矩陣做如下變化:

w′ij=wijmaxj⋅wij

也就是對每一行的相似度值和目前行的最大值計算一個比值。這樣得到額結果可以看出原來相似度的分布被拉開了,有了更好的距離感,便于進一步的分類。

3. 分析餘弦相似度

在有的地方用餘弦相似度而不用歐式距離和曼哈頓距離來度量,是因為餘弦相似度用的是夾角概念。

例如路徑成本向量(5,5)和(3,3)的夾角是0°,也就是她們非常相似,但有歐式距離是 22√ ,解釋性顯然沒有餘弦相似度好。

如圖:

推薦算法基礎

一象限的A、B向量之間的距離是 22√ ,而二三象限的A、B之間的距離也是 22√ ,但這裡明顯能看出來一象限的兩個向量的方向性明顯比二三象限的這兩個向量的方向性要好很多,在這種情況下用歐式距離來度量就會誤判。

參考:《白話大資料與機器學習》

繼續閱讀