**:
乙個人想看電影的時候常常會思考要看什麼電影呢。這個時候他可能會問周圍愛好的人求推薦。現在社會每天都會產生海量的資訊。面對這麼多資訊好多人都不知道什麼資訊是自己需要的。推薦系統正是起了這麼乙個作用。推薦系統的應用隨處可見。網路購物是乙個典型的例子,電子商務的運營商往往會根據使用者在**的行為推薦使用者可能會購買的商品。豆瓣fm是做的乙個非常好的電台,這個電台能夠根據使用者的歷史行為學習出使用者喜歡歌曲的型別,從而給使用者推薦歌曲。除此之外還有電影推薦、新聞推薦、部落格推薦等等。
協同過濾演算法的出現標誌著推薦系統的產生。協同過濾演算法包含基於使用者的協同過濾演算法和基於物品的協同過濾演算法。
通過公式1或者2我們能得到乙個相似度矩陣。然而在很多應用中這個相似度矩陣式非常稀疏的。也就是很多使用者相互之間沒有對相同的商品產生行為。如果我們直接先把相似度不為0的使用者對數求出來,然後只計算這些不為0的使用者對,這樣子會剩很多複雜度。 用陣列c[u][v]記錄使用者u和v有相同商品行為的數目。
首相建立乙個倒排表。每個物品都儲存被產生過行為的使用者。然後對於每個物品所有的使用者對數(u,v),c[u][v]加1。這樣結束以後就可以只利用相似度不為0的使用者對數了。
得到相似度矩陣後利用公式3**使用者u對物品i的感興趣程度。其中s(u,k)表示與使用者u最接近的k個使用者n(i)表示對物品i有過行為的使用者集合。wuv
表示使用者u和v的相似度,rvi
表示使用者v對物品i的感興趣程度。
到此基於使用者的系統過濾演算法基本就介紹完了。 公式1和公式2衡量使用者的使用者相似度其實上是比較粗糙的。舉個例子,小時候基本每個人都會買《新華字典》,其實並不能據此說明他們的興趣相似,然而如果兩個人都買了《模式識別》,那麼就基本可以肯定他們的興趣是比較相似的。《新華字典》與《模式識別》的區別在於乙個是火爆的物品,乙個相對不火爆。因此相似度的計算方式可以修改為公式4。
1/(1+n(i) )懲罰了火爆的物品。
基於物品的協同過濾演算法在應用中更頻繁。基於物品的協同過濾演算法主要基於這樣的思想: 如果使用者x購買了物品a,那麼她很可能會購買與a很相似的物品b(比如a是**,b是洗面奶)。這樣的話就需要計算物品間的相似度。
在得到了物品相似度後, 我們要計算使用者u對物品j的興趣程度:
其中n(u) 是使用者u喜歡的物品集合, s(j,k)是與物品j最相似的k個物品的集合。 wij是物品i和j的相似度。 rui 是使用者u對物品i的興趣度。基本思想就是,如果要計算使用者u與物品j的興趣度, 先找到與j最相似的k個物品,再看使用者u與這些物品的感興趣程度,加權得到使用者u對物品j的興趣程度。
這裡需要提出乙個問題,如果使用者u是乙個書商,那麼在計算物品相似度的時候,這個書上對他購買書中的任何兩本書計算相似的時候都會做出貢獻。 其實這事不合理的。 如果他購買了《資料探勘導論》和一本《紅樓夢》,這個資訊其實意義不大的, 我們並不能因此而直接地增加這兩本書的相似度。 這裡我們需要對使用者的熱度做懲罰。
公式8是對公式6的修正, 懲罰了熱門的使用者。
上述討論只是用了無下文的隱性資料。 在計算物品相似度和使用者相似度的時候有很多公式。實際應用中發現,基於使用者的協同的過濾利用皮爾遜相關係數效果比較好。而基於物品的協同過濾利用余弦相似度效果會比較好。
協同過濾演算法
3種形式的協同過濾 collaborative filtering 演算法 1 user based 相同 相似 使用者的喜好相同 2 item based 能夠引起使用者興趣的專案,必定與其之前評分高的專案相似 3 model based 先用歷史資料得到乙個模型,再用此模型進行 參考 這個位址是...
協同過濾演算法
1.表示使用者行為矩陣,即統計使用者購買某種商品型別的數量 public double getnumbycustomer customer customer return vectore 2.用余弦距離計算每個使用者與其它使用者的行為相似度 下面 是兩個使用者之間的相似度,進行遍歷就可以獲取全部相似...
協同過濾演算法
演算法思想 尋找與目標使用者相似使用者,然後將相似使用者買過但目標使用者沒有買過的商品推薦給目標使用者 舉個栗子 由於目標使用者與其相似使用者非常相似 比如大部分的考研學生都購買 肖秀榮八套卷 現在我們的目標使用者購買了大量的考研資料但還沒有買 八套卷 除了 八套卷 目標使用者與考研學生相似度十分高...