1. 程式人生 > >推薦演算法之FFM:原理及實現簡介

推薦演算法之FFM:原理及實現簡介

推薦系統一般可以分成兩個模組,檢索和排序。比如對於電影推薦,檢索模組會針對使用者生成一個推薦電影列表,而排序模組則負責對這個電影列表根據使用者的興趣做排序。當把FFM演算法應用到推薦系統中時,具體地是應用在排序模組。

FFM演算法,全稱是Field-aware Factorization Machines,是FM(Factorization Machines)的改進版。這個改進原理上比較簡單,所以我想先把FM講清楚。

我們知道推薦演算法中,最廣為人知的是協同過濾演算法,協同過濾一般分為基於使用者的協同過濾和基於物品的協同過濾,而除此之外,還有基於隱語義的協同過濾。我們來考慮一個電影評分的問題,使用者對於電影的評分,可以構成一個評分矩陣M

,這個矩陣是稀疏的,因為每個使用者看過的電影都是有限的,這個矩陣裡面會有很多缺失項,我們要做的便是將這個稀疏矩陣填滿,我們可以怎麼做呢?想象一個興趣空間,這個空間裡面有多個維度,維度一表示懸疑型別,維度二表示言情型別,等等。那麼使用者的興趣可以表達為這個空間裡的一個向量u,而電影本身的特點也可以用這個空間裡的向量v表達,於是使用者對電影的評分可以用內積 uv來表示。通過這個方式,我們便可以對這個評分矩陣做矩陣分解:

M=UTV
其中U是使用者在隱語義空間對應的向量組成的矩陣,而V則是電影對應的矩陣。求解這個矩陣分解問題對應的優化問題是這樣:
minU,Vru,vR(ru,vu
v)2

其中R是使用者對電影的評分的集合,ru.v即表示使用者u對電影v的評分。這裡為了方便省略了正則項。通過求解這個優化問題,得到矩陣UV,於是對於ru,vR,可以通過uv得到。也就是說這個隱語義模型具有很好的泛化能力,可以對沒有出現的使用者對電影的評分做出比較準確的預測。

我們來看一下廣泛應用在排序場景裡的邏輯迴歸,為了學習出不同特徵之間的關聯,邏輯迴歸的使用中往往會引入高階特徵。比如說性別跟手機品牌的關係,通過引入(性別+手機品牌)的二階特徵,模型可以學習到不同性別對不同手機品牌的興趣。但如果訓練樣本中沒有出現(女性+錘子),模型也就無法學習到女性對於錘子的興趣程度。那麼如果說我就是想知道女性對於錘子的興趣呢?考慮上面的隱語義模型,如果我們把女性和錘子這些特徵對映到隱語義空間,通過學習女性和路虎各自對應的向量,就可以用這兩個向量的內積得到這個興趣。這樣嘗試就得到了FM。(這裡使用興趣這個詞是不太嚴謹的,更準確地講是這個二階特徵的權重)

邏輯迴歸模型可以寫成:

y=11+eϕ(w,x)
ϕ(w,x)=wixi
其中wixi對應的權重。將上面的ϕ(w,x)改寫為:
(i,j)C(wiwj)xixj
就得到了FM模型,其中wi即特徵xi所對應的隱語義空間的向量,C則是二階交叉特徵的組合。隱語義空間的維度是一個超引數,用k表示。這裡省略了一階項和正則項。

FM模型相對於邏輯迴歸有了更好的泛化能力,可以學習出訓練樣本中沒有的交叉特徵的權重。而另一方面,在效能上也有很好的表現,使用邏輯迴歸的時候,對於有N個特徵的情況,所有二階特徵對應的引數數量是N2(當然一般也沒人會取遍所有二階組合),而FM模型對應的引數總數只有Nk,一般地k<100<<N

接下來,我們看下使用邏輯迴歸時特徵處理的過程。對於分類特徵,會做熱獨編碼。比如手機品牌有華為小米蘋果等等,那麼當用戶手機品牌為華為時,特徵可以表示為{fea_mobile_huawei=1, fea_mobile_xiaomi=0, fea_mobile_apple=0…….}這樣的形式。那麼這樣處理之後,fea_mobile_huawei可以稱為特徵(feature),而對於手機品牌在熱獨編碼後對應的多個特徵,可以稱為域(field)。回頭看一下基於隱語義的協同過濾模型,裡面實際可以看做是涉及了兩個域,即使用者域和電影域,這個模型只涉及了兩個域的互作用。對於FM模型呢,每個向量都是同時跟多個域互作用,比如手機品牌會同時跟使用者的性別、推薦的商品等等域互作用。FFM演算法的作者認為,兩個域之間的互作用應該獨立出來,也就是手機品牌跟使用者性別互作用有一個對應的向量,而跟推薦的商品互作用時也有一個對應的向量,這也就是所謂的field-aware。FFM模型可以通過修改上面的ϕ(w,x)得到,於是FFM模型的優化問題可以完整寫出:

minwl=1mlog(1+exp(ylϕ(w,xl)))+λ2w2
ϕ(w,x)=(i,j)C(wi,fjwj,fi)xixj
其中wi,fjxifield=j的特徵互作用時對應的向量。
minwL(w)=minw[1

相關推薦

推薦演算法FFM原理實現簡介

推薦系統一般可以分成兩個模組,檢索和排序。比如對於電影推薦,檢索模組會針對使用者生成一個推薦電影列表,而排序模組則負責對這個電影列表根據使用者的興趣做排序。當把FFM演算法應用到推薦系統中時,具體地是應用在排序模組。 FFM演算法,全稱是Field-aware

Vue 進階系列(三)Render函式原理實現

Vue進階系列彙總如下,歡迎閱讀,歡迎加高階前端進階群一起學習(文末)。 Vue 進階系列(一)之響應式原理及實現 Vue 進階系列(二)之外掛原理及實現 Render函式原理 根據第一篇文章介紹的響應式原理,如下圖所示。 在初始化階段,本質上發生在auto run函式中,然後通過r

Vue 進階系列響應式原理實現

什麼是響應式Reactivity Reactivity表示一個狀態改變之後,如何動態改變整個系統,在實際專案應用場景中即資料如何動態改變Dom。 需求 現在有一個需求,有a和b兩個變數,要求b一直是a的10倍,怎麼做? 簡單嘗試1: let a = 3; let b

多模字串匹配演算法AC自動機—原理實現

簡介: 本文是博主自身對AC自動機的原理的一些理解和看法,主要以舉例的方式講解,同時又配以相應的圖片。程式碼實現部分也予以明確的註釋,希望給大家不一樣的感受。AC自動機主要用於多模式字串的匹配,本質上是KMP演算法的樹形擴充套件。這篇文章主要介紹AC自動機的工作原理,並在此

九大排序演算法插入排序(原理實現

1、演算法思路:每趟將一個待排序的元素作為關鍵字,按照其關鍵字值得大小插入到已經排好的部分的適當位置上,知道插入完成。 2、演算法過程 舉個栗子(第一趟的排序過程) 原始序列:49、38、65、97、76、13、27、49 1)開始以第一個元素49為關鍵字,看成一個序列,其餘數看成另

九大排序演算法選擇排序(原理實現

1、演算法思想:選擇排序,從頭至尾掃描序列,找出最小的一個元素,和第一個元素交換,接著從剩下的元素中繼續這種選擇和交換方式,最終得到一個有序序列。 2、演算法過程 舉個栗子(第一趟的排序過程) 原始序列:49、38、65、97、76、13、27、49 1)在進行選擇排

演算法CLH鎖的原理實現

一、背景 1.1 SMP(Symmetric Multi-Processor) 對稱多處理器結構,它是相對非對稱多處理技術而言的、應用十分廣泛的並行技術。在這種架構中,一臺計算機由多個CPU組成,並共享記憶體和其他資源,所有的CPU都可以平等地訪問記憶體、I/O

寫程式學MLLogistic迴歸演算法原理實現(三)

2.2   利用Logistic演算法預測病馬死亡率 由於採集資料是諸多原因,採集的資料有可能不完整。但有時候資料相當昂貴,扔掉和重新獲取都是不可取的,所以必須採用一些方法來解決這個問題。 處理資料中缺失值的做法: 1>    使用可用特徵的均值來填補缺失值; 2&g

寫程式學ML樸素貝葉斯演算法原理實現(一)

[題外話]近期申請了一個微信公眾號:平凡程式人生。有興趣的朋友可以關注,那裡將會涉及更多更新機器學習、OpenCL+OpenCV以及影象處理方面的文章。 1、樸素貝葉斯演算法的原理 樸素貝葉斯法是基於貝葉斯定理與特徵條件獨立假設的分類方法。 和決策樹模型相比,樸素貝葉斯

寫程式學MLLogistic迴歸演算法原理實現(一)

[題外話]近期申請了一個微信公眾號:平凡程式人生。有興趣的朋友可以關注,那裡將會涉及更多更新機器學習、OpenCL+OpenCV以及影象處理方面的文章。 1、Logistic迴歸演算法的原理 假設現在有一些資料點,我們用一條直線對這些點進行擬合(該線稱為最佳擬合直線),這個

寫程式學ML樸素貝葉斯演算法原理實現(二)

[題外話]近期申請了一個微信公眾號:平凡程式人生。有興趣的朋友可以關注,那裡將會涉及更多更新機器學習、OpenCL+OpenCV以及影象處理方面的文章。 2、樸素貝葉斯演算法的實現 2.1   樸素貝葉斯演算法的實現 按照樸素貝葉斯演算法的原理,我們需要實現一個樸素貝葉

寫程式學ML決策樹演算法原理實現(四)

[題外話]近期申請了一個微信公眾號:平凡程式人生。有興趣的朋友可以關注,那裡將會涉及更多更新機器學習、OpenCL+OpenCV以及影象處理方面的文章。 2.3   決策樹的測試 書中使用隱形眼鏡資料集對決策樹進行了測試。 建立測試檔案contactLenses4Deci

寫程式學MLLogistic迴歸演算法原理實現(二)

2、Logistic迴歸演算法的實現 2.1   Logistic演算法的實現 首先,我們實現梯度上升演算法。 Sigmoid函式的定義如下: #sigmoid函式的實現 def sigmoid(inX): return 1.0 / (1 + exp(-inX))

資訊摘要演算法SHA1演算法分析實現

SHA演算法,即安全雜湊演算法(Secure Hash Algorithm)是一種與MD5同源的資料加密演算法,該演算法經過加密專家多年來的發展和改進已日益完善,現在已成為公認的最安全的雜湊演算法之一,並被廣泛使用。1、概述SHA演算法能計算出一個數位資訊所對應到的,長度固定

推薦演算法 DeepFM使用DeepCTR測試

## 演算法介紹 左邊deep network,右邊FM,所以叫deepFM ![DeepFm](https://gitee.com/jadepeng/pic/raw/master/pic/2020/10/15/1602764397990.png) 包含兩個部分: - Part1: FM(Fac

Vue 進階系列(二)外掛原理實現

Vue進階系列彙總如下,歡迎閱讀,歡迎加群討論(文末)。 Vue 進階系列(一)之響應式原理及實現 Vue 進階系列(二)之外掛原理及實現 使用方法 外掛的詳細使用方法詳情看Vue官網 Vue官網之外掛Plugins 概括出來就是 1、通過Vue.use(MyPlugin)使用,

.NetCore 中介軟體AddAuthentication服務說明實現原理簡述

  如果你使用過.NetCore開發過程序,你會很清楚,在其中我們經常會用到一些如下的程式碼 services.AddAuthentication(options => { options.DefaultAuthentic

機器學習系列k 近鄰法(k-NN)的原理實現

  本內容將介紹機器學習中的 k k k 近鄰法(

轉 vue實現雙向資料繫結原理實現篇 vue的雙向繫結原理實現

轉自:canfoo#! vue的雙向繫結原理及實現 前言 先上個成果圖來吸引各位: 程式碼:                          &nb

機器學習線性迴歸原理sklearn實現

  1、線性迴歸問題        以房價預測為例,佔地面積為變數x1,房屋年齡為變數x2,房屋價格為預測變數y。        為什麼叫線性迴歸問題,因為目標函式是一個線性迴歸函式。什麼是目標函式?        (1)、目標函式:目標函式是我們需要的最終結果,及