推薦算法---FM,協同過濾

文章目錄

  • 目錄
    • 1.FM算法產生背景
    • 2.FM算法模型
    • 3.FM算法VS其他算法
    • 4.推薦算法總結

目錄

1.FM算法產生背景

在傳統的線性模型如LR中,每個特征都是獨立的,如果需要考慮特征與特征直接的交互作用,可能需要人工對特征進行交叉組合;非線性SVM可以對特征進行kernel映射,但是在特征高度稀疏的情況下,并不能很好地進行學習;現在也有很多分解模型Factorization model如矩陣分解MF、SVD++等,這些模型可以學習到特征之間的交互隱藏關系,但基本上每個模型都只適用于特定的輸入和場景。為此,在高度稀疏的數據場景下如推薦系統,FM(Factorization Machine)出現了。

下面所有的假設都是建立在稀疏數據的基礎上,舉個例子,根據用戶的評分歷史預測用戶對某部電影的打分,這里的每一行對應一個樣本,Feature vector x表示特征,Targer y表示預測結果。從下圖可以看出,這是一個稀疏特征的例子,后面的相關內容會以此為例子進行說明。

特征中的前四列表示用戶u(one-hot編碼,稀疏),接著五列表示電影i(ont-hot編碼,稀疏),再接下去五列表示用戶u對電影i的打分(歸一化特征),緊接著一列表示時間(連續特征),最后五列表示用戶u對電影i打分前評價過的最近一部電影(one-hot編碼,稀疏)
在這里插入圖片描述

2.FM算法模型

二、FM算法模型
1、模型目標函數
二元交叉的FM(2-way FM)目標函數如下:

其中,w是輸入特征的參數,<vi,vj>是輸入特征i,j間的交叉參數,v是k維向量。

前面兩個就是我們熟知的線性模型,后面一個就是我們需要學習的交叉組合特征,正是FM區別與線性模型的地方。

在這里插入圖片描述

為什么要通過向量v的學習方式而不是簡單的wij參數呢?

這是因為在稀疏條件下,這樣的表示方法打破了特征的獨立性,能夠更好地挖掘特征之間的相關性。以上述電影為例,我們要估計用戶A和電影ST的關系w(A&ST)以更好地預測y,如果是簡單地考慮特征之間的共現情況來估計w(A&ST),從已有的訓練樣本來看,這兩者并沒有共現,因此學習出來的w(A&ST)=0。而實際上,A和ST應該是存在某種聯系的,從用戶角度來看,A和B都看過SW,而B還看過ST,說明A也可能喜歡ST,說明A很有可能也喜歡ST。而通過向量v來表示用戶和電影,任意兩兩之間的交互都會影響v的更新,從前面舉的例子就可以看過,A和B看過SW,這樣的交互關系就會導致v(ST)的學習更新,因此通過向量v的學習方式能夠更好的挖掘特征間的相互關系,尤其在稀疏條件下。

2、模型的計算復雜度
可能有人會問,這樣兩兩交叉的復雜度應該O(k*n^2)吧,其實,通過數學公式的巧妙轉化一下,就可以變成O(kn)了。轉化公式如下所示,其實就是利用了2xy=(x+y)2?x2?y22xy = (x+y)^2-x^2-y^22xy=(x+y)2?x2?y2的思路。

在這里插入圖片描述

3、模型的應用
FM可以應用于很多預測任務,比如回歸、分類、排序等等。

1.回歸Regression:y^(x)直接作為預測值,損失函數可以采用least square error;2.二值分類Binary Classification:y^(x)需轉化為二值標簽,如0,1。損失函數可以采用hinge loss或logit loss;3.排序Rank:x可能需要轉化為pair-wise的形式如(X^a,X^b),損失函數可以采用pairwise loss

4、模型的學習方法
前面提到FM目標函數可以在線性時間內完成,那么對于大多數的損失函數而言,FM里面的參數w和v更新通過隨機梯度下降SGD的方法同樣可以在線性時間內完成,比如logit loss,hinge loss,square loss,模型參數的梯度計算如下:

在這里插入圖片描述

這部分求和跟樣本i是獨立的,因此可以預先計算好。

5、模型延伸:多元交叉
前面提到到都是二元交叉,其實可以延伸到多元交叉,目標函數如下:(看起來復雜度好像很高,其實也是可以在線性時間內完成的)

在這里插入圖片描述

6、總結
前面簡單地介紹了FM模型,總的來說,FM通過向量交叉學習的方式來挖掘特征之間的相關性,有以下兩點好處:

1.在高度稀疏的條件下能夠更好地挖掘數據特征間的相關性,尤其是對于在訓練樣本中沒出現的交叉數據;

2.FM在計算目標函數和在隨機梯度下降做優化學習時都可以在線性時間內完成。

3.FM算法VS其他算法

1、FM 對比 SVM
1)SVM
SVM是大家熟知的支持向量機模型,其模型原理在這里就不詳述了。

SVM的線性模型函數表示為:
在這里插入圖片描述

其非線性形式可以通過核映射kernel mapping的方式得到,如下所示:
在這里插入圖片描述

其中多項式核表示為:
在這里插入圖片描述

當d=2時為二次多項式,表示為:

在這里插入圖片描述

多項式核映射后的模型函數表示為:
在這里插入圖片描述

2)FM 對比 SVM
看到上面的式子,是不是覺得跟FM特別像?SVM和FM的主要區別在于,SVM的二元特征交叉參數是獨立的,如wij,而FM的二元特征交叉參數是兩個k維的向量vi、vj,這樣子的話,<vi,vj>和<vi,vk>就不是獨立的,而是相互影響的。

為什么線性SVM在和多項式SVM在稀疏條件下效果會比較差呢?線性svm只有一維特征,不能挖掘深層次的組合特征在實際預測中并沒有很好的表現;而多項式svn正如前面提到的,交叉的多個特征需要在訓練集上共現才能被學習到,否則該對應的參數就為0,這樣對于測試集上的case而言這樣的特征就失去了意義,因此在稀疏條件下,SVM表現并不能讓人滿意。而FM不一樣,通過向量化的交叉,可以學習到不同特征之間的交互,進行提取到更深層次的抽象意義。

此外,FM和SVM的區別還體現在:1)FM可以在原始形式下進行優化學習,而基于kernel的非線性SVM通常需要在對偶形式下進行;2)FM的模型預測是與訓練樣本獨立,而SVM則與部分訓練樣本有關,即支持向量。

2、FM 對比 其他分解模型Fac torization Model
這部分不詳述,其他分解模型包括Matrix factorization (MF)、SVD++、PITF for Tag Recommendation、Factorized Personalized Markov Chains (FPMC),這些模型都只在特定場景下使用,輸入形式也比較單一(比如MF只適用于categorical variables),而FM通過對輸入特征進行轉換,同樣可可以實現以上模型的功能,而且FM的輸入可以是任意實數域的數據,因此FM是一個更為泛化和通用的模型。詳細內容參考:https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf

4.推薦算法總結

目前為止,我們常推薦算法有好多種,比較常見的有協同過濾(Collaborative Filtering Recommendations)這個在Mahout里的ItemCF和UserCF比較常用,還有一種比較新的運行在Spark上的交替性最小二乘ALS也是一種協同過濾的算法,但是其它的推薦算法也有很多,在日常中也用的比較多,就做個總結吧。

1、基于內容的推薦算法(Content Based Recommendation 簡稱CB)
這種推薦是從信息檢索,和文本檢索里來的,個人理解為是搜索引擎里的搜索排行。TD-IDF計算文章的詞頻和反文檔頻率計算出關鍵詞在文檔中的權值,最后構成某篇文章的特征向量。基于該文章的特征向量和其它文章的特征向量進行余弦相似度計算,從而返回最匹配相似的文章來給予推薦。

可以簡單概括為: 抽取item的特征向量 -> 計算余弦相似度 -> 推薦

item可以是用戶過去喜歡的電影,商品,問題等等。

基于內容的過濾創建了每個商品、用戶的屬性(或是組合)用來描述其本質。比如對于電影來說,可能包括演員、票房程度等。 用戶屬性信息可能包含地理信息、問卷調查的回答等。這些屬性信息關聯用戶用戶后即可達到匹配商品的目的。 當然基于內容的策略極有可能因為信息收集的不便而導致無法實施。

CB的優點:

  1. 用戶之間的獨立性(User Independence):既然每個用戶的profile都是依據他本身對item的喜好獲得的,自然就與他人的行為無關。而CF剛好相反,CF需要利用很多其他人的數據。CB的這種用戶獨立性帶來的一個顯著好處是別人不管對item如何作弊(比如利用多個賬號把某個產品的排名刷上去)都不會影響到自己。

  2. 好的可解釋性(Transparency):如果需要向用戶解釋為什么推薦了這些產品給他,你只要告訴他這些產品有某某屬性,這些屬性跟你的品味很匹配等等。

  3. 新的item可以立刻得到推薦(New Item Problem):只要一個新item加進item庫,它就馬上可以被推薦,被推薦的機會和老的item是一致的。而CF對于新item就很無奈,只有當此新item被某些用戶喜歡過(或打過分),它才可能被推薦給其他用戶。所以,如果一個純CF的推薦系統,新加進來的item就永遠不會被推薦:( 。

CB的缺點:

  1. item的特征抽取一般很難(Limited Content Analysis):如果系統中的item是文檔(如個性化閱讀中),那么我們現在可以比較容易地使用信息檢索里的方法來“比較精確地”抽取出item的特征。但很多情況下我們很難從item中抽取出準確刻畫item的特征,比如電影推薦中item是電影,社會化網絡推薦中item是人,這些item屬性都不好抽。其實,幾乎在所有實際情況中我們抽取的item特征都僅能代表item的一些方面,不可能代表item的所有方面。這樣帶來的一個問題就是可能從兩個item抽取出來的特征完全相同,這種情況下CB就完全無法區分這兩個item了。比如如果只能從電影里抽取出演員、導演,那么兩部有相同演員和導演的電影對于CB來說就完全不可區分了。

  2. 無法挖掘出用戶的潛在興趣(Over-specialization):既然CB的推薦只依賴于用戶過去對某些item的喜好,它產生的推薦也都會和用戶過去喜歡的item相似。如果一個人以前只看與推薦有關的文章,那CB只會給他推薦更多與推薦相關的文章,它不會知道用戶可能還喜歡數碼。

  3. 無法為新用戶產生推薦(New User Problem):新用戶沒有喜好歷史,自然無法獲得他的profile,所以也就無法為他產生推薦了。當然,這個問題CF也有。

2、基于協同過濾的推薦算法(Collaborative Filtering Recommendations)
基于協同過濾的推薦,可以理解為基于用戶行為的推薦。依賴于用戶過去的行為的協同過濾,行為可以是過往的交易行為和商品評分,這種方式不需要顯性的屬性信息。協同過濾通過分析用戶和商品的內在關系來識別新的 user-item 關系。

協同過濾領域主要的兩種方式是最近鄰(neighborhood)方法和潛在因子(latent factor)模型。最近鄰方法主要集中在 item 的關系或者是 user 的關系,是比較基礎的過濾引擎。而潛在因子模型并不是選取所有的關系,而是通過矩陣分解的技術將共現矩陣的分解,比如提取20-100個因子,來表示原始矩陣信息(可以對比上面提到的音樂基因,只不過潛在因子模型是通過計算機化的實現)。

最鄰近:

基于用戶的協同過濾算法: 基于一個這樣的假設“跟你喜好相似的人喜歡的東西你也很有可能喜歡。”所以基于用戶的協同過濾主要的任務就是找出用戶的最近鄰居,從而根據最近鄰 居的喜好做出未知項的評分預測。

item based CF 基于物品相似的協同過濾。

user based CF 基于用戶相似的協同過濾。

潛在引子模型:

SVD奇異值分解矩陣

ALS交替最小二乘

總結為: 用戶評分 -> 計算最鄰近 -> 推薦

3、算法對比

各種推薦方法都有其各自的優點和缺點,見表1。
在這里插入圖片描述
4、 Mahout里的推薦算法
在這里插入圖片描述

5、總結
沒有最那一種算法能解決所有問題,混合算法有效結合每個算法的利弊才能達到最好的效果。

一個比較成功的內容過濾是 pandora.com 的音樂基因項目,一個訓練有素的音樂分析師會對每首歌里幾百個獨立的特征進行打分。這些得分幫助pandora推薦歌曲。還有一種基于內容的過濾是基于用戶人口統計特征的推薦,先根據人口統計學特征將用戶分成若干個先驗的類。對后來的任意一個用戶,首先找到他的聚類,然后給他推薦這個聚類里的其他用戶喜歡的物品。這種方法的雖然推薦的粒度太粗,但可以有效解決注冊用戶的冷啟動(Cold Start)的問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445354.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445354.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445354.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

借助桶排序思想完成的一道題

問題&#xff1a; 數組排序之后的相鄰數的最大差值&#xff1b; 嗯&#xff0c;你可以排序&#xff0c;然后找相鄰的最大差值。 但是你覺得這么簡單我寫他干啥。 最優解&#xff1a;時間復雜度O(N)&#xff0c;空間O(1) 那我們開始說這種方法&#xff1a; 1&#xff09;遍…

Python(3)-Pycharm基本使用技巧

初識Pycharm1.界面2.恢復初始設置3.第一次打開Pycharm4.打開一個項目5.設置解釋器的版本。6.新建項目7.編輯器、控制臺的字體設置Pycharm–適合于開發管理大型項目&#xff0c;項目是用以解決復雜功能的軟件。1.界面 導航區–主要有什么文件 編輯區–編輯具體的文件 控制臺窗口…

推薦算法概述(01)

1.什么是推薦系統 用戶沒有明確的需求&#xff0c;你需要的是一個自動化的工具&#xff0c;它可以分析你的歷史興趣&#xff0c;從龐大的電影庫中找到幾部符合你興趣的電影供你選擇。這個工具就是個性化推薦系統。 推薦系統的主要任務 推薦系統的任務就是聯系用戶和信息&…

CSDN-Markdown編輯器使用小技巧

Markdown編輯器使用小技巧1.圖片無法顯示1.圖片無法顯示 1.檢查圖片的命名格式是否正確&#xff0c;數字不能作為圖片名稱開頭&#xff0c;雖然window操作系統下能夠識別&#xff0c;但是導入圖片的時候會造成無法顯示的錯誤。

何為布隆過濾器

問題的提出 我們有一個不安全網頁的黑名單&#xff0c;包含了100億個黑名單網頁的URL,每個網頁URL最多占用64B.。 現在我們要設計一個網頁過濾系統&#xff0c;這個系統要判斷該網頁是否在黑名單里&#xff0c;但是我們的空間有限&#xff0c;只有30GB. 允許有萬分之一的判斷…

推薦算法--利用用戶行為數據(02)

文章目錄目錄1.什么是用戶行為數據&#xff1f;1.1用戶行為分類2.用戶行為數據如何使用&#xff1f;2.1 用戶活躍度和物品流行度的分布2.2 用戶活躍度和物品流行度的關系2.3 協同過濾算法3.實驗設計和算法評測4.基于鄰域的的推薦算法4.1 基于用戶的協同過濾算法4.2 基于物品的協…

《Head First設計模式》第九章(2)組合模式

組合模式 ? 基于前一篇迭代模式的案例進行需求更新&#xff0c;餐廳的菜單管理系統需要有煎餅屋菜單和披薩菜單。現在希望在披薩菜單中能夠加上一份餐后甜點的子菜單。 在迭代模式中&#xff0c;披薩菜單是用數組維護的&#xff0c;我們需要讓披薩菜單持有一份子菜單&#xf…

Python(4)--Pycharm安裝、使用小技巧

Pycharm安裝1.專業版Pycharm 安裝2.設置Pycharm桌面快捷圖標3.Linux卸載一個軟件4.教育版Pycharm的安裝5.多文件項目演練&#xff08;Pycharm針對學生和教師開發了免費使用版&#xff09;1.專業版Pycharm 安裝 1.官網下載安裝包 .tar.gz 2.解壓縮 tar -zxvf 文件名 3.移動解壓…

推薦算法--推薦系統冷啟動問題(03)

文章目錄目錄1.什么是冷啟動問題&#xff1f;1.1冷啟動問題1.2 冷啟動問題的分類1. 用戶冷啟動2 物品冷啟動3 系統冷啟動2.如何解決冷啟動問題&#xff1f;2.1利用用戶注冊信息2.2選擇合適的物品啟動用戶的興趣2.3利用物品的內容信息2.4 發揮專家的作用目錄 1.什么是冷啟動問題…

《Head First 設計模式》第十章-狀態模式 狀態模式

狀態模式 策略模式和狀態模式是雙胞胎&#xff0c;在出生時才分開。你已經知道&#xff0c;策略模式是圍繞可以互換的算法來創建成功業務的&#xff0c;然而&#xff0c;狀態走的是更崇高的路&#xff0c;它通過改變對象內部的狀態來幫助對象控制自己的行為。 定義狀態模式 …

推薦算法--利用用戶標簽數據(04)

文章目錄流行的推薦系統通過3種方式聯系用戶興趣和物品 &#xff08;1&#xff09;&#xff1a;利用用戶喜歡過的物品&#xff0c;給用戶推薦與他喜歡過的物品相似的物品&#xff0c;這是基于物品的算法。 &#xff08;2&#xff09;&#xff1a;利用和用戶興趣相似的其他用戶…

Python(5)-注釋

Python注釋1.單行注釋2. 多行注釋&#xff08;塊注釋&#xff09;3.注釋的使用和代碼規范pyhton 的注釋 使用自己熟悉的語言&#xff08;中文&#xff09;&#xff0c;解釋代碼。Python解釋器在執行文件時不會執行井號右邊邊的內容。1.單行注釋 # 井號后面跟著注釋內容 灰灰的虛…

玩具kv數據庫

介紹 用java寫一個簡陋的kv數據庫&#xff08;倆小時的貨&#xff09;&#xff0c;用來復習一下java流知識、線程、socket等知識。 客戶端&#xff1a;很簡單的寫了一下功能&#xff1a;就是發送用戶的命令&#xff0c;還有接收數據顯示出來 服務端&#xff1a;redis類&#…

網絡原理知識點總結

第一章&#xff1a; 計算機網絡系統由資源子網和通信子網組成。 計算機網絡系統主要由網絡通信系統、操作系統和應用系統構成 互聯網基礎結構發展的三個階段&#xff1a; 第一階段&#xff1a;從單個網絡 ARPANET 向互聯網發展的過程。 第二階段&#xff1a;建成了三級結構…

推薦算法--時效性(05)

時效性 推薦系統應該考慮時間效應&#xff0c;因為用戶的興趣是有時間變化的。用戶一年前喜歡的東西現在不一定感興趣&#xff0c;相比于推薦過去喜歡的物品&#xff0c;推薦用戶近期喜歡的物品更有參考價值。而在新聞更是如此&#xff0c;推薦過去跟用戶興趣一致的新聞已經失去…

初識博弈論(1)

博弈論與主流經濟學的新發展1.經濟學的研究內容2.博弈論的研究內容3.博弈論的發展簡史4.經濟學發展的趨勢本系列博文主要記錄了學習張維迎老師的《博弈論與信息經濟學》一書相關內容&#xff0c;如果有誤之處懇請指出&#xff1b;或對照張老師的書籍進行學習。1.經濟學的研究內…

c語言實現排序和查找所有算法

c語言版排序查找完成&#xff0c;帶詳細解釋&#xff0c;一下看到爽&#xff0c;能直接運行看效果。 /* Note:Your choice is C IDE */ #include "stdio.h" #include"stdlib.h" #define MAX 10 void SequenceSearch(int *fp,int Length); void Search(int …

推薦算法--推薦系統架構(06)

外圍架構一般來說&#xff0c;每個網站都有一個 UI 系統&#xff0c;UI 系統負責給用戶展示網頁并和用戶交互。網站會通過日志系統將用戶在 UI 上的各種各樣的行為記錄到用戶行為日志中。 從上面的結構可以看到&#xff0c;除了推薦系統本身&#xff0c;主要還依賴兩個條件--界…

樹狀數組維護區間和的模型及其拓廣的簡單總結

by wyl8899 樹狀數組的基本知識已經被講到爛了&#xff0c;我就不多說了&#xff0c;下面直接給出基本操作的代碼。 假定原數組為a[1..n]&#xff0c;樹狀數組b[1..n]&#xff0c;考慮靈活性的需要&#xff0c;代碼使用int *a傳數組。 #define lowbit(x) ((x)&(-(x))…

Python(6)-算數運算符

算數運算符1.算數運算符2.優先級1.算數運算符 加 減- 乘* 除/ 取商// 取余數% 冪**(能算n次方&#xff1a; 2**38&#xff0c;一直以為只能算平方) 擴展&#xff1a; 乘法用于字符串&#xff1a;字符串重復指定的次數&#xff0c;要拼接的次數很長時&#xff0c;用乘號很方便…