標籤:
說明:文章為初學者看推薦系統(蔣凡),結合網上資料做的筆記,不保證其正確性~
一、首先當前的主流推薦方法有:
1、 協同過濾推薦;
2、 基於內容的推薦;
3、 基於知識的推薦;
4、 混合推薦;
(註:學習過程不必特意將他們區分開,由他們的推薦公式知道他們的缺陷,混合使用)
1、 協同過濾(CF collaborative Filtering):
1-1:基於使用者的最近鄰推薦:
1) (我理解的定義)從“協同過濾”四字知道其指的是:因為想到推薦,我們都是想到問使用者喜歡什麼類型的事物,然後根據他的回答推薦給他,或者看他對一些已喜歡事物,推薦給他類似的事物。然而“協同推薦”和上面的思路不同,推薦系統需要其他使用者“協同”,對所有使用者進行“過濾”,選擇出與目標使用者有相似愛好的使用者,然後進行推薦;
2) 例子說明(對物品的評分有1-5,對應不喜歡到喜歡):
|
|
物品1 |
物品2 |
物品3 |
物品4 |
物品5 |
平均 |
|
Alice |
5 |
3 |
4 |
4 |
? |
4(總物品數為4) |
|
使用者1 |
3 |
1 |
2 |
3 |
3 |
2.4·(這行及以下總物品數為5) |
|
使用者2 |
4 |
3 |
4 |
3 |
5 |
3.8 |
|
使用者3 |
3 |
3 |
1 |
5 |
4 |
3.2 |
|
使用者4 |
1 |
5 |
5 |
2 |
1 |
2.8 |
A、現在我們要算出Alice喜不喜歡物品5,即使用協同過濾方法算出Alice對物品5的評分,若評分高則說明Alice喜歡物品5,若評分則說明Alice不喜歡物品5
B、現在對所有的使用者進行“過濾”,選擇出,與Alice有相似愛好的人,通常我們判斷兩個人是否有相似的愛好,比較他們對物品的評分就好了,例如下面是我們最先想到:
a、最直觀的方法:
Alice和使用者1:|5-3|+|3-1|+|4-2|+|4-3|=7
Alice和使用者2:|5-4|+|3-3|+|4-4|+|4-3|=2
……
b、但是此方法有個弊端,就是使用者標準不同的時候,例如要求tom和mary是否相似,tom的評分標準鬆懈,對物品的評分為{4,3,5,5,4},而mary評分標準很嚴格,評分為{2,1,3,3,2},這樣的評分很可能表示tom和mary都喜歡物品3,4,而用上面的計算方法則顯示出他們的差別很大,這是不準確的。故而可以將上表資料每個減去相應平均數,轉換為下表:
|
|
物品1 |
物品2 |
物品3 |
物品4 |
物品5 |
|
Alice |
1 |
-1 |
0 |
0 |
? |
|
使用者1 |
0.6 |
-1.4 |
-0.4 |
0.6 |
0.6 |
|
使用者2 |
0.2 |
-0.8 |
0.2 |
-0.8 |
1.2 |
|
使用者3 |
-0.2 |
-0.2 |
-2.2 |
1.8 |
0.8 |
|
使用者4 |
-1.8 |
2.2 |
2.2 |
-0.8 |
-1.8 |
該表避免了不同使用者的評分標準不同的影響,在中即表現為,兩個使用者是否相似,不取決於他們的評分是否相差很大,而取決他們的走勢是否相近(可以看出,Alice與使用者1的愛好很相似,與使用者4差距很大):
c、又因為上面的絕對值不利於計算,考慮使用根號,根號也很難計算。書上就有了下面的方法Pearson係數:
Pearson係數的理解:使用者a和使用者b採用pearson係數:
我的理解:為什麼可以這樣,我們看二維的,因為比較他們的趨勢走向,故而cos值可以表示他們相似程度(推廣到n為應該也行,但我現在還不知道能推廣的原因):
|
|
物品1 |
物品2 |
|
使用者a |
a1 |
a2 |
|
使用者b |
b1 |
b2 |
d、由上面的分析知道:我們可以用下面公司計算兩個使用者是否相似:
e、計算結果:
f、找出與Alice相近的使用者時,我們就可以用這些相近的使用者來計算出alice對物品的評分了:
3) 缺陷:
A、當使用者和物品成千上萬時,電腦複雜度大;
B、 使用者對物品的評分數量過少,甚至沒有評論難以適用。
1-2、基於物品的最近鄰推薦
1) 為了知道使用者5喜不喜歡晴天,如,發現了絕大多數使用者對晴天和七裡香的評分相近,故而選出晴天,因為這兩首歌很相似,如果使用者5很喜歡七裡香的話,他也很可能喜歡晴天,若是他不喜歡七裡香,則也很可能不喜歡晴天;
|
|
使用者1 |
使用者2 |
使用者3 |
使用者4 |
使用者5 |
|
晴天 |
1 |
2 |
3 |
4 |
? |
|
七裡香 |
2 |
2 |
3 |
4 |
4 |
|
海闊天空 |
3 |
2 |
1 |
4 |
5 |
|
匿名的好友 |
2 |
4 |
5 |
2 |
2 |
2) 計算方法與上面基於使用者的類似,仍然以基於使用者的例子進行計算:
1-3、SVD(奇異值分解)(該方法我還不是很理解,還要繼續看資料):
(參考1)
(參考2)
1) 基礎知識:
A、對角矩陣:出對角線外所有元素都為0的矩陣
B、 特徵值:對一個M*M的C矩陣,若存在常數λ和矩陣X滿足下列公式,則稱λ為矩陣C的特徵值,稱矩陣X為矩陣C的特徵向量;
C、 中的特徵值λ和特徵向量X:
D、將A矩陣分解為以下形式稱為特徵值分解,其中Q為矩陣A的特徵向量組成的矩陣,表示對角陣,對角線上的元素為特徵值
E、 奇異值(特徵值分解是一個提取矩陣特徵很不錯的方法),對於一個N*M的矩陣,我們分解為如下形式,U為N*N的方陣(稱作左奇異向量),是N*M的矩陣(除對角線的元素都為0,對角線的元素稱為奇異值),V的轉置稱為右奇異向量:
F、 將矩陣A*(A的轉置)得到方陣,即可按照上面的公式進行處理,v即為右奇異向量,為奇異值,u為左奇異向量:
G、奇異值和特徵值一樣,在矩陣中從大到小排列,在多數情況下,前10%的甚至1%就佔了全部奇異值之和的99%以上了,即此時可以對r進行縮小(且r可以遠小於n,m):
H、將上面所述表達為,當r越接近於n,則結果越接近於A。當r更小時,所佔的儲存越小,,即我們把A分解為右邊三個矩陣時,儲存右邊三個占儲存小的矩陣即可:
2、 基於內容的推薦簡介:
1) 我的理解:分析使用者曾經喜歡過或購買過的物品,看他們具有什麼樣的特點,然後根據這些特點來對使用者進行推薦。例如,使用者買過電腦概論和資料結構,然後我們分析這兩本書知道它們都出自於“清華大學出版社”、“電腦專業書籍”,然後系統找到滿足這兩個特點的書推薦給使用者;
2) 優點:
A、不需要大規模的資料就能獲得較高的精確度;
B、 知道物品的屬性後即可搜查出類似的書籍推薦;
C、 我自己還認為:對比協同過濾,協同過濾需要不斷為使用者更新資料,例如為使用者1推薦書,而其他使用者隨著時間的推移在購買書,因此使用者1的最近鄰使用者可能會發生改變;而基於內容的推薦則對更新的頻率較低;
3) 適用:資料量很大時;
3、 基於知識的推薦簡介:
1) 我的理解:以上兩種推薦方法都需要有使用者的曆史資料或一些行為作為分析二得出結果,而類似相機,手機的購買難以從曆史資料中得出推薦結果,故而主要從和使用者的互動中獲得相關資訊,對使用者進行推薦。例如:購買電腦時,會讓使用者選擇cpu類型,主存、記憶體大小;
2) 缺點:
對於一些專業性的產品,使用者的瞭解少,資訊提供給使用者造成困擾
協同過濾推薦(第1周)