資料探勘演算法之協同過濾演算法

2022-05-06 05:42:09 字數 3197 閱讀 1718

當下使用協同過濾演算法計算的推薦系統到處可見,例如**,京東,噹噹等電商**,當你在**上購買或者瀏覽了某些商品從而被其收集了相對應的資料,下次你在次瀏覽該**的時候就會發現,他會根據你之前的購買/瀏覽記錄為你推薦一些商品,而這些商品的推薦往往是十分精準的,因為它是建立在大資料的基礎之上計算出來的。

基於協同過濾的推薦是推薦演算法中的一種思想,協同過濾的思想是這樣的:一般是在海量的使用者中發掘出一小部分和你品位比較類似的,在協同過濾中,這些使用者成為鄰居,然後根據他們喜歡的其他東西組織成乙個排序的目錄作為推薦給你。

協同過濾的核心問題

實現協同過濾的步驟

收集使用者偏好

找到相似的使用者或物品

計算推薦

下面對這兩種cf分別進行討論

基於使用者的協同過濾演算法usercf

基於使用者的協同過濾,通過不同使用者對物品的評分來評測使用者之間的相似性,基於使用者之間的相似性做出推薦。

簡單來講就是:給使用者推薦和他興趣相似的其他使用者喜歡的物品。

如下圖所示:

使用者a購買了物品a和c

使用者c購買了物品a,c,d

這時候我們可以將a,c兩個使用者看成是相似的,因為他們有很類似的購買行為,這時候我們就可以將物品d推薦給使用者a

基於物品的協同過濾演算法itemcfusercf vs. itemcf

對於電子商務,使用者數量一般大大超過商品數量,此時itemcf的計算複雜度較低。

在非社交網路的**中,內容內在的聯絡是很重要的推薦原則,它比基於相似使用者的推薦原則更加有效。比如在購書**上,當你看一本書的時候,推薦引擎 會給你推薦相關的書籍,這個推薦的重要性進進超過了**首頁對該使用者的綜合推薦。可以看到,在這種情況下,item cf 的推薦成為了引導使用者瀏覽的重要手段。基於物品的協同過濾演算法,是目前電子商務採用最廣泛的推薦演算法。

而在社交網路站點中,user cf 是乙個更不錯的選擇,usercf 加上社會網路資訊,可以增加使用者對推薦解釋的信服程度。

基於物品的協同過濾演算法實現

上面描述的是usercf和itemcf的基本思想,接下來用乙個例項來實現itemcf

下面通過乙個簡單的影院資料分析來解釋itemcf的實現過程

這裡假設我們已經將文字或者其他型別的資料轉換成我們所需要的資料格式

在上圖的資料中每行3個字段,依次是使用者id,電影id,使用者對電影的評分(0-5分,每0.5分為乙個評分點)

從之前的演算法思想描述中我們知道,首先要分析電影和電影之間的相似度,但是現在我們不能再使用之前那種通過肉眼或者人工的方式來得出物品之間的相似度了,因為在大資料的前提下,手工所做的一切都是徒勞的

那麼我們要怎麼得到電影和電影之間的相似度呢?

這裡需要借助到數學上的技巧

步驟如下:

1. 建立物品的同現矩陣

2. 建立使用者對物品的評分矩陣

3. 矩陣計算推薦結果

1.建立物品的同現矩陣

如下圖所示:

由於例子資料量小,形成的同現矩陣規模也比較小,當資料量一大,構建的這個矩陣是十分巨大的,這也是為什麼itemcf一般會比usercf好算(因為使用者量一般是遠遠大於物品量的)

在之前的演算法解釋中,判斷兩個物品是否是相似的是根據這兩個物品是不是經常被一起購買,在本例中的解釋就變成,哪些電影是否經常被同乙個使用者**過,如果有,這些電影就是相似的

如果只從這一點上看的話,從同現度矩陣中我們就可以得出相似的電影結果,因為同現度本身就是代表兩個電影之間同時被乙個使用者**的次數,但是由於本例中紅還有乙個影響推薦結果的因素:使用者評分

所以我們要繼續進行資料分析

2.建立使用者對物品的評分矩陣

評分矩陣如下圖所示:

表示u3這個使用者對每個電影的評分

3.矩陣計算推薦結果

7* 7的矩陣乘上7*1的矩陣的計算結果=乙個7 *1的矩陣

其中第乙個矩陣的列數要=第二個矩陣的行數,否則無法計算

在結果矩陣r中可以看到對該使用者每個電影的推薦分,但是這裡只能推薦那些使用者沒有看過的電影,也就是原先評分為0.0的,所以得到首要推薦的電影為103,推薦分為24.5,然後在根據推薦分依次排列得到推薦列表

那麼為什麼同現矩陣和評分矩陣相乘會得到這個推薦的結果呢?

這裡可以理解為對同現度的一種加權運算,將評分看做是一種權值,最終得到的權值越大當然就越重要

最後的演算法評估方式

mahout提供了2個評估推薦器的指標,查準率和召回率(查全率),這兩個指標是搜尋引擎中經典的度量方法。

a:檢索到的,相關的 (搜到的也想要的)

b:未檢索到的,但是相關的 (沒搜到,然而實際上想要的)

c:檢索到的,但是丌相關的 (搜到的但沒用的)

d:未檢索到的,也丌相關的 (沒搜到也沒用的)

被檢索到的越多越好,這是追求「查全率」,即a/(a+b),越大越好。

被檢索到的,越相關的越多越好,不相關的越少越好,這是追求「查準率」,即a/(a+c),越大越好。

在大規模資料集合中,這兩個指標是相互制約的。當希望索引出更多的資料的時候,查準率就會下降,當希望索引更準確的時候,會索引更少的資料。

本文參考書《mahout in action》

協同過濾演算法

3種形式的協同過濾 collaborative filtering 演算法 1 user based 相同 相似 使用者的喜好相同 2 item based 能夠引起使用者興趣的專案,必定與其之前評分高的專案相似 3 model based 先用歷史資料得到乙個模型,再用此模型進行 參考 這個位址是...

協同過濾演算法

1.表示使用者行為矩陣,即統計使用者購買某種商品型別的數量 public double getnumbycustomer customer customer return vectore 2.用余弦距離計算每個使用者與其它使用者的行為相似度 下面 是兩個使用者之間的相似度,進行遍歷就可以獲取全部相似...

協同過濾演算法

乙個人想看電影的時候常常會思考要看什麼電影呢。這個時候他可能會問周圍愛好的人求推薦。現在社會每天都會產生海量的資訊。面對這麼多資訊好多人都不知道什麼資訊是自己需要的。推薦系統正是起了這麼乙個作用。推薦系統的應用隨處可見。網路購物是乙個典型的例子,電子商務的運營商往往會根據使用者在 的行為推薦使用者可...