基於使用者的協同過濾
我們已有的資料: 使用者u1買了(m1,m2..)u2(m3,m4..)等等,找到和目標使用者最相似的前k個使用者,計算相似度為 k1
,k2,
...,
kk。如果第n個使用者賣了商品p,而該商品u1沒買,那麼該商品的推薦值加上kn
。最後得分高的排在前面。
設n(u)表示使用者u喜歡的物品,n(v)表示使用者v喜歡的物品,則兩個使用者的相似度為(jacard):w=∣n
(u)∩
n(v)
∣∣n(
u)∪n
(v)∣
基於物品的協同過濾
我們已有的資料: 使用者u1買了(m1,m2..)u2(m3,m4..)等等,建立乙個逆向字典 即賣了物品m1的使用者有.同理找到和目標物品最相似的前k個物品,後續同理。基於物品過濾的方式比基於使用者過濾的方式計算的快,為什麼?
假如,**已經根據某一刻使用者的歷史購買記錄建立了所有使用者的之間的相似度。那麼來了乙個使用者,首先要計算這個使用者的前k個相似使用者。然後遍歷這個使用者的前k個相似使用者的物品欄,計算所有物品的推薦值,然後排序ok。
假如,**已經根據某一刻使用者的歷史購買記錄建立了所有使用者的前k個使用者的相似度。那麼來了乙個使用者,首先要遍歷這個使用者的前k個相似使用者的物品欄,計算所有物品的推薦值,然後排序ok。
假如,**已經根據某一刻使用者的歷史購買記錄建立了所有使用者的前k個使用者的相似度,並計算完了推薦給他的物品。那麼來了乙個使用者,直接推薦物品。
在資料稀疏情況下,基於物品推薦更好,為什麼?
首先我們構建乙個基於使用者推薦的badcase:
u1:i1,i2,i3
u2:i1,i2,i3,b1(根據u2 會把b1推給u1)
然後構造乙個根據item 演算法給出不同推薦的資料
u3:i3,b2
u4:i3,b2
u5:i3,b2
u6:i3,b2
這樣根據item演算法會推薦b2
根據結果反推原因:
b2優於b1 ,那麼有兩種情況:1 只考慮i3推可能比根據i1,i2,i3聯合推薦更優,這是時間衰減的道理,歷史購買離得越久,支援力度越小。2 使用者稀疏的資料分布大概是這樣的,相對較多的使用者,每次只買過,一兩件商品(總之很少),少數買的多。所以找前k個相似使用者是非常不靠譜的事情,(極有可能會匹配到少數買的多的使用者),因為即使前k個,也不相似。3 從資料推薦結果來看,item推薦效果比較(淺,泛),使用者推薦有可能比較深。什麼意思呢?就是我在網上買了可樂,推薦給我雞翅。其實不用推薦我也可能買雞翅(假設可樂+雞翅絕配)。但其實我是資深宅腐男,我之前買了酒、零食、漫畫等等,這些根據item比較難推薦,但是根據使用者有可能推薦。使用者推薦的麻煩在於,之前有個**也買了酒和漫畫,還買了女性內衣。使用者推薦就會推薦我女性內衣。綜合,資料較少的情況下,item可能白推薦(因為我已經想到了),使用者推薦可能錯誤的推薦。很多商家綜合,還是寧願選擇白推薦,所以選擇了item推薦
KMP演算法的基礎應用
本篇部落格 於內容中含有大量原文,僅是本蒟蒻的一篇筆記 kmp演算法指的是字串模式匹配演算法,問題是 在主串t中找到第一次出現完整子串p時的起始位置。該演算法是三位大牛 d.e.knuth j.h.morris和v.r.pratt同時發現的,以其名字首字母命名。本篇部落格講介紹kmp演算法的最基礎應...
演算法設計與應用基礎系列14
min stack design a stack that supports push,pop,top,and retrieving the minimum element in constant time.example minstack minstack new minstack minstac...
mysql應用基礎 MySQL基礎應用
1.登入到mysql伺服器 root localhost mysql u root p enter password 根據提示輸入正確的密碼 2.執行mysql操作語句 以root登入打 mysql 環境後,執行 show master logs 語句可以查詢當前資料庫服務的日誌檔案資訊。3.退出 ...