1. 程式人生 > >(一)因式分解機(Factorization Machine,FM)原理及實踐

(一)因式分解機(Factorization Machine,FM)原理及實踐

因子分解機(Factorization Machine),是由Konstanz大學(德國康斯坦茨大學)Steffen Rendle(現任職於Google)於2010年最早提出的,旨在解決大規模稀疏資料下的特徵組合問題原論文見此

不久後,FM的升級版模型場感知分解機(Field-aware Factorization Machine,簡稱FFM)由來自Yu-Chin Juan(阮毓欽,畢業於中國臺灣大學,現在美國Criteo工作)與其比賽隊員提出。通過引入field的概念,FFM把相同性質的特徵歸於同一個field。

本次系列部落格主要深入講解了FM和FFM的原理,並給出實踐。

本篇的主要內容是FM。FFM的內容稍後整理。

文章目錄

一、前言

FM旨在解決大規模稀疏資料下的特徵組合問題,那麼大規模稀疏資料是怎麼來的呢?在現實生活中,以使用者訪問某網站的日誌為例,我們可以發現許多特徵是類別特徵,如使用者訪問的是頻道(channel)資訊,如”news”, “auto”, “finance”等。

假設channel特徵有10個取值,分別為{“auto”,“finance”,“ent”,“news”,“sports”,“mil”,“weather”,“house”,“edu”,“games”}。部分訓練資料如下:
在這裡插入圖片描述


特徵ETL過程中,需要對categorical型特徵進行one-hot編碼(獨熱編碼),即將categorical型特徵轉化為數值型特徵。channel特徵轉化後的結果如下:
在這裡插入圖片描述
可以發現,由one-hot編碼帶來的資料稀疏性會導致特徵空間變大。上面的例子中,一維categorical特徵在經過one-hot編碼後變成了10維數值型特徵。真實應用場景中,未編碼前特徵總維度可能僅有數十維或者到數百維的categorical型特徵,經過one-hot編碼後,達到數千萬、數億甚至更高維度的數值特徵在業內都是常有的。

此外也能發現,特徵空間增長的維度取決於categorical型特徵的取值個數。在資料稀疏性的現實情況下,我們如何去利用這些特徵來提升learning performance?

或許在學習過程中考慮特徵之間的關聯資訊。針對特徵關聯,我們需要討論兩個問題:1. 為什麼要考慮特徵之間的關聯資訊?2. 如何表達特徵之間的關聯?

  1. 為什麼要考慮特徵之間的關聯資訊?

    大量的研究和實際資料分析結果表明:某些特徵之間的關聯資訊(相關度)對事件結果的的發生會產生很大的影響。從實際業務線的廣告點選資料分析來看,也證實了這樣的結論

  2. 如何表達特徵之間的關聯?

    表示特徵之間的關聯,最直接的方法的是構造組合特徵。樣本中特徵之間的關聯資訊在one-hot編碼和淺層學習模型(如LR、SVM)是做不到的。目前工業界主要有兩種手段得到組合特徵:
    ①、人工特徵工程(資料分析+人工構造);
    ②、通過模型做組合特徵的學習(深度學習方法、FM/FFM方法)

FM就可以學習特徵之間的關聯。 x i x j x_ix_j 表示特徵 x i x_i x j x_j 的組合,當 x i x_i x j x_j 都非零時,組合特徵 x i x j x_ix_j 才有意義。

接下來,我們以二階多項式模型(degree=2時)為例,來分析和探討FM原理和引數學習過程。

二、FM模型表達

為了更好的介紹FM模型,我們先從多項式迴歸、交叉組合特徵說起,然後自然地過度到FM模型。

2.1 二階多項式迴歸模型

我們先看二階多項式模型的表示式:
y ^ ( x ) : = w 0 + i = 1 n w i x i 線性迴歸 + i = 1 n j = i + 1 n w i j x i x j 交叉項(組合特徵) (1) \hat{y}(x) := \underbrace {w_0 + \sum_{i=1}^{n} w_i x_i }_{\text{線性迴歸}} + \underbrace {\sum_{i=1}^{n} \sum_{j=i+1}^{n} w_{ij} x_i x_j}_{\text{交叉項(組合特徵)}} \qquad \text{(1)}

其中, n n 表示樣本特徵維度,截距 w 0 R ,    w { w 1 , w 2 ,   , w n } R n , w i j R n × n w_0 \in R,\; w = \{w_1, w_2, \cdots, w_n\}\in R^n, w_{ij} \in R^{n \times n} 為模型引數。

從公式(1)可知,交叉項中的組合特徵引數總共有 n ( n 1 ) 2 \frac{n(n-1)}{2} 個。在這裡,任意兩個交叉項引數 w i j w_{ij} 都是獨立的。然而,在資料非常稀疏的實際應用場景中,交叉項引數的學習是很困難的。why?

因為我們知道,迴歸模型的引數 w w 的學習結果就是從訓練樣本中計算充分統計量(凡是符合指數族分佈的模型都具有此性質),而在這裡交叉項的每一個引數 w i j w_{ij} 的學習過程需要大量的 x i x_i x j x_j 同時非零的訓練樣本資料。由於樣本資料本來就很稀疏,能夠滿足“ x i x_i x j x_j 都非零”的樣本數就會更少。訓練樣本不充分,學到的引數 w i j w_{ij} 就不是充分統計量結果,導致引數 w i j w_{ij} 不準確,而這會嚴重影響模型預測的效果(performance)和穩定性。How to do it ?

那麼,如何在降低資料稀疏問題給模型效能帶來的重大影響的同時,有效地解決二階交叉項引數的學習問題呢?矩陣分解方法已經給出瞭解決思路。

在這裡插入圖片描述

根據矩陣分解的啟發,如果把多項式模型中二階交叉項引數 w i j w_{ij} 組成一個對稱矩陣 W W (對角元素設為正實數),那麼這個矩陣就可以分解為 W = V V T W = V V^T V R n × k V \in R^{n \times k} 稱為係數矩陣,其中第 i i 行對應著第 i i 維特徵的隱向量 。即,每一個特徵都有一個長度為 k k 的隱變數替代

**將每個交叉項引數 w i j w_{ij} 用隱向量的內積 v i , v j \langle \mathbf{v}_i, \mathbf{v}_j\rangle 表示,是FM模型的核心思想。**下面對FM模型表示式和引數求解過程,給出詳細解讀。

2.2 FM模型表達

這裡我們只討論二階FM模型(degree=2),其表示式為:
y ^ ( x ) : = w 0 + i = 1 n w i x i + i = 1 n j = i + 1 n v i , v j x i x j (1) \hat{y}(\mathbf{x}) := w_0 + \sum_{i=1}^{n} w_i x_i + \sum_{i=1}^{n} \sum_{j=i+1}^{n} \langle \mathbf{v}_i, \mathbf{v}_j \rangle x_i x_j \qquad \text{(1)}

相關推薦

因式分解Factorization MachineFM原理實踐

因子分解機(Factorization Machine),是由Konstanz大學(德國康斯坦茨大學)Steffen Rendle(現任職於Google)於2010年最早提出的,旨在解決大規模稀疏資料下的特徵組合問題。原論文見此。 不久後,FM的升級版模型場感知分解機(Field-awa

FMFactorization Machine因式分解 與 TensorFlow實現 詳解

超參數 optimizer 梯度下降 很多 動態 print cor 數量 add 1,線性回歸(Linear Regression) 線性回歸,即使用多維空間中的一條直線擬合樣本數據,如果樣本特征為: \[x = ({x_1},{x_2},...,{x_n})\] 模型假

多項式因式分解定理Factor theorem與多項式剩餘定理Polynomial remainder theorem多項式長除法

(多項式的)因式分解定理(factor theorem)是多項式剩餘定理的特殊情況,也就是餘項為 0 的情形。 0. 多項式長除法(Polynomial long division)

FMFactorization Machine因子分解演算法個人理解

1. FM是什麼 因子分解機(Factorization Machine, FM)是由Steffen Rendle提出的一種基於矩陣分解的機器學習演算法。 1.1 背景 常見的線性模型,比如線性迴歸、邏輯迴歸等,它只考慮了每個特徵對結果的單獨影響,而沒有考慮特徵間的組合

因子分解libffm+xlearn

因子分解機 一、簡介   在CTR和CVR預估任務中,可能有大量的ID類特徵(Categorical Feature),一般來說並不適合直接送入樹模型(xgboost完全不支援,lightgbm只根據取值不同),一種常用的做法是通過Label Encod

poj 2191Mersenne Composite Numbers大整數因式分解+素數判斷

Mersenne Composite NumbersTime Limit: 1000MSMemory Limit: 65536KTotal Submissions: 2442Accepted: 1139DescriptionOne of the world-wide cooperative computing

【效率工具】SSH鍵登錄腳本鍵從跳板登錄線上服務器

git 修改 href 分享圖片 got online brew apt-get username 說明 前陣子上線,一次性上了十個服務,一直上到淩晨才完事,期間每個服務都要先輸入跳板機的登錄信息來登錄跳板機,然後再輸入線上服務器的信息來登錄線上服務器,實在是太過於麻煩,而

python+unittest框架整理點點學習前輩們的封裝思路點點成長。。。

spa star 世界 ner bytes odi splay 好玩 etime 預期框架整理目標: 1.單個用例維護在單個.py文件中可單個執行,也可批量生成組件批量執行 2.對定位參數,定位方法,業務功能腳本,用例腳本,用例批量執行腳本,常用常量進行分層獨立,各自維護在

資料結構演算法題/最大子序列維陣列中和最大的連續子序列

1首先看一下 最大子序列。 最大子序列是要找出由陣列成的一維陣列中和最大的連續子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,達到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已經看出來了,找最大子序列的方法很簡單,只要前i項的和還沒有

Sping cache 資料。Spring4.1新特性——Spring快取框架增強

Spring 4.1提供了對jcache的支援,並對cache抽象部分進行了一些簡單的增強。在整合jcache時是非常費勁的,版本之間各種不相容,不建議用於正式環境,在正式環境中可以使用如Guava Cache或Ehcache。   jcache依賴:

深度學習 --- 隨機神經網路詳解玻爾茲曼學習演算法、執行演算法

BM網路的學習演算法 (1)  學習過程       通過有導師學習,BM網路可以對訓練集中各模式的概率分佈進行模擬,從而實現聯想記憶.學習的目的是通過調整網路權值使訓練集中的模式在網路狀態中以相同的概率再現.學習過程可分為兩個階段;第一階段

c++讀檔案次全讀/每行讀/多次讀

我以為這些都很容易在網上找到,誰知網上亂七八糟的東西太多,讓我找了很久。。 開發環境為Windows,VS2013 一次全讀: std::ifstream t(path); //讀檔案ifstream,寫檔案ofstream,可讀可寫fstream std::stringstr

假如你不小心幹掉了系統你該怎麼辦?次手賤的記錄 ~ Ubuntu and Python3.6

前言 多年未犯低階錯誤,今天犯了個不大不小的錯誤,記錄下生活點滴吧 今天早上腦海裡想了下,如果電腦掛了我要備份哪些東西?然後中午休息的時候就列了一下,沒想到晚上就悲劇了... 這個是中午寫的: ## If I to bak **`瀏覽器書籤備份`** ~/桌面(**先push到github**) ~/下載(

Unity實戰篇:實現連連看死局判定:資料結構的選擇以及基本思路概述

最近在做連連看小遊戲,整體完成的差不多,還差一個死局判定,若為死局,即重新洗牌。 由於專案結構較為繁雜,建議大家先下載原始碼 原始碼下載連結:https://gitee.com/NKG/UnityWorks/blob/master/UnityPackages/LinkUp.unitypa

資料結構篇:校園最短路徑導航:地圖資料的配置以及圖的建立

首先去找一張學校的地圖,並且自己配置好資料和路線 在程式碼裡面寫好資料 //地點資訊 char _mapName[32][50] = {"行政樓","實驗樓D", "教學樓A", "籃球場", "足球場", "A4", "實驗樓C", "教學樓B", "A2", "A6", "計

支援向量Support Vector MachineSVM—— 線性SVM

  支援向量機(Support Vector Machine,簡稱 SVM)於 1995 年正式發表,由於其在文字分類任務中的卓越效能,很快就成為機器學習的主流技術。儘管現在 Deep Learning 很流行,SVM 仍然是一種很有的機器學習演算法,在資料集小的情況下能比 Deep Learning 取得更

時間序列arima+支援向量svm+優化=組合預測

看見大家想學習組合預測,我今晚就準備加班,給大家上一個arima+svm的組合預測,有什麼不足的請指出了,時間序列是一個大類,我今天主要是給大家展示的是最常用的arima. 這裡原理就不介紹了,只講應用,你可以自己搜尋網上原理或者關注我後面論文,我會專門寫一個

MySql、MySQL基礎、庫操作和表操作

MySQL資料庫 MySQL資料庫是一種C/S結構的軟體:客戶端/服務端,若想訪問伺服器,必須通過客戶端(伺服器一直執行,而客戶端在需要使用的時候執行。) 互動方式: 1、客戶端連線認證:連線伺服器,認證身份:mysql.exe -hPup 2、客戶端傳送S

[Elasticsearch 6.3.1] 在虛擬機器centos7和本win10下組成叢集

      最近學習ELK,苦於伺服器效能太低,故在本機搭建叢集環境。 Step 0  配置JAVA環境 tips : JDK 需要在 1.8 版本及其以上。 Windows 下配置JAVA環境不再贅述。 在Centos 7 下,預設是安裝了JDK 1.8.x,

十大經典預測演算法----支援向量SVM演算法

一、概念:SVM思想和線性迴歸很相似,兩個都是尋找一條最佳直線。 不同點:最佳直線的定義方法不一樣,線性迴歸要求的是直線到各個點的距離最近,SVM要求的是直線離兩邊的點距離儘量大。   SVM本質,   距離測度,即把點的座標轉換成點到幾個固定點的距離 ,從而實現升維。