個性化推薦演算法------基於內容的推薦和基於鄰域的協同過濾
這篇文章主要討論了個性推薦演算法中,基於內容推薦和基於鄰域的協同過濾推薦的分析比較。
資料集:使用者對電影的歷史評價記錄,只有喜歡與不喜歡,喜歡用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,那麼認為使用者對目標電影的評分就等價於對最相似電影的評分。
注意:計算電影間相似度時,使用者得對這兩部電影都評價過。