Collaborative-filtering 推薦系統的核心概念在於:如果兩個 User 過去對於很多 Item 的評價都很相近,那對一個新的 Item,兩人也會給出相近的評價。從另一個角度來看,如果很多 User 都給了某兩個 Item 相近的評價,那對於一位 User ,他對這兩件 Item 的評價也可能會很接近。
以下用比較數學的方法,來定義協同過濾的推薦系統,以方便之後的描述。
U
表示 User 的集合I
表示 Item 的集合R
表示評分的紀錄 (rating)S
代表評分值的集合,例如 S = [like, dislike] 或 [1, 5]u
可以對 I 集合中的 Item i
做出評分 r_ui
U_i
I_u
U_ij
I_uv
推薦系統的核心就可以簡化成一個函數
f: U * I -> S
輸入是 User u 和一個 Item i , f 可以預測 u 會給 i 什麼評價。而推薦的動作就是在 I - I_u
(u 還沒評價過的 Item) 中,找到一個(或多個)可能給最高評價的 Items。
這樣一來,找出 f 的就可以想成一個機器學習的問題。如果我們有很多評價的紀錄 R,就可以將 R 分成 R_train 和 R_test,用 R_train 來訓練出函數 f。
而 R_test 可以用來計算算出來的 f 的 Accuracy,用來評斷 f 的好壞。常用的 Accuracy 算法有 Mean Absolute Error
和 Root Mean Square Error
,之後會再補做介紹。
但是我們不一定有評價紀錄 R,這時候就需要別的方法來評斷 f。
如果有 User 實際有興趣的 Item 清單 T (例如由購買、瀏覽、或點擊紀錄取得),也可以用 T
和 f 算出來要推薦的清單 L ,來算出推對的比例 Precision
和實際有興趣的涵蓋率 Recall
,同樣未來會再講詳細一點。
協同過濾的推薦方法又可以再分為 Neighborhood-based 和 Model-based。
Neighborhood-based 又可以再細分為 user-based 和 item-based,兩者的差別就是一開始概念中提到的兩種角度。
Neighborhood-based 的方法有許多好處:
所以之後會以它為主來介紹~