白話文理解機器學習之推薦系統及協同過濾演算法

2021-08-20 14:08:55 字數 1441 閱讀 5413

最近在學習機器學習推薦系統時發現,網上所看到的**並不是真正地運用了協同過濾演算法(也在git上找過兩篇,寫了很多看不太懂故而自己琢磨了一番),多數為通過計算兩個使用者所**電影的相似度來**,而機器學習課程中吳恩達所講的協同過濾並不是這樣,本篇部落格仔細講講兩者區別,並講講推薦系統。

先看這麼個例子:

其中行為使用者,列為商品,1~5數字代表該使用者對該菜的評價,0為該使用者未評價,需要值得推薦給相應的使用者。

1)、所有鄰居評價過的菜的評價值*該鄰居與**使用者的距離相似度的和取相應的平均值,鰻魚飯:(3*peter相似度+4*tracy相似度)/ 2 ,日式炸雞排:5*peter相似度,再比較他們的大小;

2)、就是在1的基礎上不算平均值,比如你也可以認為10個使用者都中高分評價比5個使用者高分評價可靠些,所以也可以不去平均值。

以上資料小推薦只有兩者的比較,實際上大資料的情況下可以通過設閾值來推薦自己設定的推薦個數。

其次發現在本章中peter和tracy並沒有評價過鰻魚飯,日式炸雞排,壽司飯,故而就會陷入推薦空值,這也是該方法的缺點,當然大資料下不會出現這種情況,即使出現也可以通過基於流行度來進行推薦,但該方法還有乙個致命的缺點就是無法**出該使用者對於某類商品的評價值。

方法2:吳恩達所講的協同過濾演算法, 也就是構建n*m的矩陣,如上圖,通過w*x來擬合出n*m維矩陣中各個位置的值,通過迭代最小化均方根誤差,以上圖為例,w:[使用者數,feature_size],x:[菜數,feature_size],feature_size是隱語義維度,就相當於神經網路中的隱藏層中的神經元個數,從這裡也可以看出,既然是擬合已給出的評價值,那麼有兩種方式來寫w*x,

1)、先構建n*m維的的矩陣,相應位置上未評價的值賦值為0

2)、既然沒有評價過再去計算只會消耗伺服器資源,通常矩陣的儲存方式為三元組的形式,這裡0不儲存,那麼直接對三元組遍歷相乘再去擬合就可以,兩者實際上是一樣的,但走了不同的路而已。以上兩者的我的電腦上訓練時消耗資源的比較(用公共資料集moivelens):1)耗記憶體325m,時間37s,因為可以直接通過index去尋找值,2)耗記憶體214m,時間107s,綜合而言應該選用2)的方式來計算

總結一下協同過濾演算法和基於使用者相似度兩種方法,協同過濾用法廣,**較為精確,缺點耗時慢,佔記憶體,基於內容度優點速度快,記憶體小,缺點適用範圍小。 但伺服器上將模型訓練好後只需要**即可,模型在夜晚更新就行,所以綜合而言協同過濾更優。當然還有什麼基於流行度,這個過於簡單不在考慮範圍。

注:你或許還在網上看到過svd矩陣分解+協同過濾,事實上只適用於基於內容的推薦系統,而不適用於協同過濾,為什麼呢,因為基於內容只是計算兩者向量的相似度,向量是n*1的,你壓縮乘m*1都可以,但其實不太需要,因為本來速度就很快了。而協同過濾中w,x都是n個使用者權重,x是m個電影的特徵,壓縮哪一維都不合適,因為還要索引對應位置上的值進行索引。

3種方式實現推薦系統

機器學習 推薦系統

在各類 軟體或各大購物 裡,通常會存在推薦系統。它可以根據每個使用者的個人喜好為使用者推薦相應的歌曲 商品 從而增加使用者體驗,並提高了產品的銷量。因此,推薦系統是乙個很值得學習的應用領域。如下圖所示,這是4個使用者對5部電影的評價,我們要求評價只能是0 5之間的數。可以看出,有一些已經打分了,有一...

機器學習2 推薦系統

問題 topk ctr步驟 feature recall 基於熱度,基於使用者興趣標籤,基於cf,基於fm sort lr,gbdt,gbdt lr,fm,dnn ad評價指標 accuracy 正確的樣本 總樣本 precision 為正類正確的樣本數 為正類的樣本數 recall 為正類正確的樣...

機器學習(10) 推薦系統

估計這章內容後面來的概率也比較低吧,學到一點思想,但畢竟現在推薦系統作為企業超看重的部分,發展較好,這些內容是不夠的,太入門了 推薦系統能領悟特徵學習的思想,不需要手動建立特徵 未防止後面看不懂,這裡做個說明 nu表示 使用者數量,nm表示電影數量,r i,j 1表示使用者j看過電影i,y i,j ...