顯然我們不能靠由單個人(編輯)或team的主觀想法建立起來的分類標準對整個平台使用者喜好進行標準化。
此外我們還需要注意的兩個問題:
我們在可見的使用者書單中歸結出3個類別,不等於該使用者就只喜歡這3類,對其他類別的書就一點興趣也沒有。也就是說,我們需要了解使用者對於所有類別的興趣度。
對於乙個給定的類來說,我們需要確定這個類中每本書屬於該類別的權重。權重有助於我們確定該推薦哪些書給使用者。
下面我們就來看看lfm是如何解決上面的問題的?對於乙個給定的使用者行為資料集(資料集包含的是所有的user, 所有的item,以及每個user有過行為的item列表),使用lfm對其建模後,我們可以得到如下圖所示的模型:(假設資料集中有3個user, 4個item, lfm建模的分類數為4)
r矩陣是user-item矩陣,矩陣值rij表示的是user i 對item j的興趣度,這正是我們要求的值。對於乙個user來說,當計算出他對所有item的興趣度後,就可以進行排序並作出推薦。lfm演算法從資料集中抽取出若干主題,作為user和item之間連線的橋梁,將r矩陣表示為p矩陣和q矩陣相乘。其中p矩陣是user-class矩陣,矩陣值pij表示的是user i對class j的興趣度;q矩陣式class-item矩陣,矩陣值qij表示的是item j在class i中的權重,權重越高越能作為該類的代表。所以lfm根據如下公式來計算使用者u對物品i的興趣度
我們發現使用lfm後,
我們不需要關心分類的角度,結果都是基於使用者行為統計自動聚類的,全憑資料自己說了算。
不需要關心分類粒度的問題,通過設定lfm的最終分類數就可控制粒度,分類數越大,粒度約細。
對於乙個item,並不是明確的劃分到某一類,而是計算其屬於每一類的概率,是一種標準的軟分類。
對於乙個user,我們可以得到他對於每一類的興趣度,而不是只關心可見列表中的那幾個類。
對於每乙個class,我們可以得到類中每個item的權重,越能代表這個類的item,權重越高
那麼,接下去的問題就是如何計算矩陣p和矩陣q中引數值。一般做法就是最優化損失函式來求引數。在定義損失函式之前,我們需要準備一下資料集並對興趣度的取值做一說明。
資料集應該包含所有的user和他們有過行為的(也就是喜歡)的item。所有的這些item構成了乙個item全集。對於每個user來說,我們把他有過行為的item稱為正樣本,規定興趣度rui=1,此外我們還需要從item全集中隨機抽樣,選取與正樣本數量相當的樣本作為負樣本,規定興趣度為rui=0。因此,興趣的取值範圍為[0,1]。
取樣之後原有的資料集得到擴充,得到乙個新的user-item集k=,其中如果(u,i)是正樣本,則rui=1,否則rui=0。損失函式如下所示:
上式中的
通過求引數puk和qki的偏導確定最快的下降方向;
迭代計算不斷優化引數(迭代次數事先人為設定),直到引數收斂。
其中,α是學習速率,α越大,迭代下降的越快。α和λ一樣,也需要根據實際的應用場景反覆實驗得到。本書中,作者在movielens資料集上進行實驗,他取分類數f=100,α=0.02,λ=0.01。
綜上所述,執行lfm需要:
根據資料集初始化p和q矩陣(這是我暫時沒有弄懂的地方,這個初始化過程到底是怎麼樣進行的,還懇請各位童鞋予以賜教。)
確定4個引數:分類數f,迭代次數n,學習速率α,正則化引數λ。
推薦系統之LFM
這裡我想給大家介紹另外一種推薦系統,這種演算法叫做潛在因子 latent factor 演算法。這種演算法是在netflix 沒錯,就是用大資料捧火 紙牌屋 的那家公司 的推薦演算法競賽中獲獎的演算法,最早被應用於電影推薦中。這種演算法在實際應用中比現在排名第一的 邰原朗 所介紹的演算法誤差 rms...
推薦系統之LFM
這裡我想給大家介紹另外一種推薦系統,這種演算法叫做潛在因子 latent factor 演算法。這種演算法是在netflix 沒錯,就是用大資料捧火 紙牌屋 的那家公司 的推薦演算法競賽中獲獎的演算法,最早被應用於電影推薦中。這種演算法在實際應用中比現在排名第一的 邰原朗 所介紹的演算法誤差 rms...
推薦系統(二) 協同過濾之隱語義模型(LFM)
三 小結 基於使用者行為分析的推薦演算法一般稱為協同過濾演算法。所謂協同過濾,就是指眾多的使用者可以齊心協力,通過不斷地和 互動,使自己的推薦列表能夠不斷過濾掉自己不感興趣的物品,從而越來越滿足自己的需求。常見實現方法的包括 基於鄰域的方法 隱語義模型 基於圖的隨機遊走演算法 在講解lfm之前,先看...