1. 程式人生 > >個性化推薦演算法------基於內容的推薦和基於鄰域的協同過濾

個性化推薦演算法------基於內容的推薦和基於鄰域的協同過濾

這篇文章主要討論了個性推薦演算法中,基於內容推薦和基於鄰域的協同過濾推薦的分析比較。

資料集:使用者對電影的歷史評價記錄,只有喜歡與不喜歡,喜歡用1表示,不喜歡用2表示,格式如下:

使用者歷史電影評分記錄
使用者id           電影1         電影2        電影3        電影… …         
001 1 0 0 ……
002 0 1 1 ……
003 1 1 0 ……
…… 1 0 1 ……

現要根據使用者的歷史電影評分記錄,預測目標使用者(為每個使用者都要預測)會為目標電影評價多少分(目標電影為使用者為看過的電影)。

一.  基於內容的推薦

    Content-Based屬於傳統領域的個性推薦演算法,特點是隻利用使用者自身的歷史行為進行預測。比如預測使用者001喜不喜歡電影i,就是利用使用者001的歷史評分,通過找電影i和歷史電影的相似性判斷使用者是否喜歡電影i,此過程和其他使用者無關。其具體過程如下:

    1. 電影特徵值抽取

  每個電影都應該有資訊表,包括導演,演員,出品人等資訊,那麼我們就可以提取出一個能夠表示電影的向量,該向量中元素就是從電影中抽取的特徵值。

特徵值抽取的難點在於如何把像導演,演員這些非結構化資料轉換為結構化資料,使得可以進行衡量計算。

    2. 電影間相似度計算

利用提取的特徵值組成的向量,計算目標電影i和該使用者歷史電影的相似度,常見計算方法包括:皮爾遜相關係數,cosine相似度,歐幾里德距離等。

    3. TOPk選取

根據目標電影i和歷史電影相似度進行排序,選取排名靠前的k個電影(通常k取奇數),彙總使用者喜歡和不喜歡的個數,若喜歡大於不喜歡的個數,就表示使用者對目標電影喜歡。

該方法的優點

    1. 可以很好解決冷啟動問題(出現專案列表中為出現的新電影)。當有新電影加入列表後,只要把其表示向量抽取出來,就可以和歷史電影進行相似度計算,然後就可以得到計算結果。

    2. 完全是根據使用者自身的行為來進行推薦,不會受到其他使用者的干擾。可能出現其他使用者刷單等情況,不符合實際。

該方法缺點

    1. 無法為新使用者推薦。因為推薦依據的都是使用者歷史行為資料。

    2.即使使用者憑推薦選擇電影,那麼後續給其推薦的都是和他之前選擇的電影相關的,不能體現根據其興趣進行推薦。

   3. 特徵值比較難選取。像電影的導演,演員這些非結構化資料如何轉換為結構化資料是個難點。

二. 基於鄰域的協同過濾推薦

    2.1 基於使用者的協同過濾(UserCF)

    思想就是找使用者間相似度,然後取與目標使用者相似的topk個使用者,找出他們對目標電影的評分,取加權均值得到目標使用者對目標電影的評分。

    注意:計算使用者相似度時,得找兩個使用者都看過的電影集合。

    2.2 基於專案的協同過濾 (ItemCF)

    找電影間相似度,排序取top1,那麼認為使用者對目標電影的評分就等價於對最相似電影的評分。

   注意:計算電影間相似度時,使用者得對這兩部電影都評價過。