推荐算法基础
推薦系統核心要解決的問題是提高轉化率,也就是經過分析,要猜測某一個用戶更喜歡什么。
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的相似性也用到了余弦相似度的概念,但略有不同:
分子是同時喜歡A和喜歡B兩個商品的用戶數量,分母也就很清晰了。
一句話概括就是:有很多人喜歡商品A,同時他們也喜歡商品B,所以A和B應該是比較類似的商品。
2. 優化問題
其中要注意的是在 Item-based CF算法中還存在一種問題就是關于覆蓋率和多樣性的問題。由于某些原因通過計算我們會得到一些不合適的高相似度的商品,這時我們期望的不是一個高度收斂的推薦算法,而是商品種類要豐富,也即是商品的覆蓋率要高,保障它的多樣性。這里就要用到物品相似度的歸一化。
所謂的歸一化就是把商品的相似度矩陣做如下變化:
也就是對每一行的相似度值和當前行的最大值計算一個比值。這樣得到額結果可以看出原來相似度的分布被拉開了,有了更好的距離感,便于進一步的分類。
3. 分析余弦相似度
在有的地方用余弦相似度而不用歐式距離和曼哈頓距離來度量,是因為余弦相似度用的是夾角概念。
例如度量值向量(5,5)和(3,3)的夾角是0°,也就是她們非常相似,但有歐式距離是22√,解釋性顯然沒有余弦相似度好。
如圖:
一象限的A、B向量之間的距離是22√,而二三象限的A、B之間的距離也是22√,但這里明顯能看出來一象限的兩個向量的方向性明顯比二三象限的這兩個向量的方向性要好很多,在這種情況下用歐式距離來度量就會誤判。
參考:《白話大數據與機器學習》
總結
- 上一篇: Rocchio算法—文本分类
- 下一篇: 卷积的一点补充