1. 程式人生 > >因子分解機 FM和FFM

因子分解機 FM和FFM

因子分解機 Factorization Machine

因子分解機主要是考慮了特徵之間的關聯。

FM主要是為了解決資料稀疏的情況下,(而SVM無法解決稀疏問題),特徵怎樣組合的問題。

資料稀疏是指資料的維度很大,但是其中為0的維度很多。推薦系統是常見應用場景,原因是推薦系統中類別屬性(如商品id)比較多,每一種類別屬性經過onehot處理後會產生大量值為0的特徵,導致樣本變得稀疏,而FM就可以解決這種樣本稀疏的問題。

因子分解機FM演算法可以處理如下三類問題:

普通線性模型

我們將各個特徵獨立考慮,並沒有考慮特徵之間的相互關係。

img

FM模型

為了表述特徵間的相關性,我們採用多項式模型,將特徵

xixj的組合用xixj表示,只討論二階多項式模型:

j=i+1

其中,n表示樣本的維度(是已經進行onehot以後的特徵數量),xi表示第i個特徵,(如果是類別變數,那麼onehot後只有一個維度值為1,其餘維度值為0,因此在這種情況下xi的值通常是取0和1,而對於一般的數值維度,xi的值對應原來的數值), wij是組合引數,代表組合特徵的重要性,注意:wijwji是相等的,因此組合特徵部分相關引數共有(n1)+(n2)+...+1=n(n1)/2

注意到,在資料稀疏的情況下,滿足特徵xi

xj都不為0的情況很少,因此wij很難訓練。

為了求解組合引數wij, 對每個特徵分量xi引入k維(k遠小於n) 的輔助向量vi=(vi1,vi2,...,vik), 然後利用向量內積的結果vivjT來表示原來的組合引數wij

實際上,輔助向量可以理解為是特徵分量的另一種表示形式,類似於詞向量的表示形式,但是和詞向量存在區別。詞向量中是將一個單詞轉換為向量表示形式,而單詞是固定的,因此一個單詞對應一個詞向量;而在FM中,我們是將一個類別特徵(注意,這是onehot前的特徵)轉換為一個向量,但由於該類別特徵可以有多種取值,並且每種取值對應一個向量(也就是上面將類別特徵onehot以後,每個特徵分量對應一個輔助向量),因此,FM中確實是將一個類別特徵轉換為了向量形式,只不過向量會根據特徵的取值發生變化。

此時,組合引數wij組成的矩陣可以表示為:

= vvT

將組合引數進行分解的好處

  1. 從原來要求n(n-1)/2個組合引數變成了求矩陣V,引數數量變為n*k.
  2. 削弱了高階引數間的獨立性:k越大(即對特徵分量的表徵能力越強),高階引數間獨立性越強,模型越精細;k越小,泛化能力越強,

因此實際問題選擇較小的k可以克服稀疏資料的問題,並獲得較好的預測效果。

因此時間複雜度從O(n^2)變成了O(kn)

此時,分解機的表示形式變為

img

注意第二項,下標j的迴圈從i+1開始。

使用輔助向量乘積表示組合引數的原理

通常,由於資料稀疏,本來組合引數是學習不到的,但是我們可以通過特徵i與其他特徵的資料的關係,特徵j和其他特徵的關係,分別學習到特徵i和特徵j的對應的輔助向量vivj,這樣利用vivjT來表示wij,便可以解決資料稀疏帶來的問題。

計算模型的預測值

在計算模型時,只需要考慮計算量最大的二次項:

img

可以先把標量xi和對應的輔助向量vi相乘,並記錄下來,得到ui=xivi, 注意xi只是標量。

對於n個元素,共需要n*k次乘法,於是二元項變為:注意:公式中的r即為k,即輔助向量的維度

img

img

把上式湊成和的平方:

img

化簡的原理是將整個對稱矩陣W除去對角線上的數值,由於對稱,再除以2得到原來的上三角矩陣。

括號內,兩部分計算量均為O(n),因此整體計算量為O(kn)。

梯度下降求解模型引數

SGD中,需要計算兩種導數:

  1. 預測值對一元引數的導數:

img

  1. 預測值對二元引數的導數:

img

實際處理問題

迴歸問題:

在迴歸問題中,直接使用模型預測值作為預測結果,並使用最小均方誤差作為損失函式,其中m為樣本個數:

img

二分類問題:

將輸出結果通過啟用函式,如sigmoid函式得到預測類別的概率,使用對數似然作為損失函式:

img

場感知分解機 FFM

FM的應用場景:給定一組資料,判定使用者是否會進行點選。

採用onehot對categorical型別的資料進行編碼後,資料會十分稀疏,並且資料維度增大。

以廣告分類為例,“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”這三個特徵都是代表日期的,可以放到同一個field中。同理,商品的末級品類編碼生成了550個特徵,這550個特徵都是說明商品所屬的品類,因此它們也可以放到同一個field中。簡單來說,同一個categorical特徵經過One-Hot編碼生成的數值特徵都可以放到同一個field,包括使用者性別、職業、品類偏好等。

Field-aware Factorization Machine(FFM) 模型

場感知說白了可以理解引入了field的概念,FFM把相同性質的特徵歸於同一個field。

因此,隱向量不僅與特徵相關,也與filed相關,

即:對每一維特徵分量xi, 針對每一種field fj , 都會學習一個隱向量vi,fj,與不同的特徵關聯需要使用不同的隱向量 (而FM每種特徵只有一個隱向量)
例如,當考慮“Day=26/11/15”這個特徵,與“Country”特徵和“Ad_type”特徵進行關聯的時候,需要使用不同的隱向量,而在FM中則使用相同的隱向量。

假設樣本的n個特徵(已經onehot)屬於f個field, 那麼FFM二次項有nf個隱向量。

因此,得到:

img

其中,

相關推薦

因子分解 FMFFM

因子分解機 Factorization Machine 因子分解機主要是考慮了特徵之間的關聯。 FM主要是為了解決資料稀疏的情況下,(而SVM無法解決稀疏問題),特徵怎樣組合的問題。 資料稀疏是指資料的維度很大,但是其中為0的維度很多。推薦系統是常見應用場

因子分解(FM) +場感知分解 (FFM) 入門

前言 FM和FFM模型是最近幾年提出的模型,憑藉其在資料量比較大並且特徵稀疏的情況下,仍然能夠得到優秀的效能和效果的特性,屢次在各大公司舉辦的CTR預估比賽中獲得不錯的戰績。在計算廣告領域,點選率CTR(click-through rate)和轉化率CVR(conversi

因子分解FM原理及SGD訓練

1.背景 Steffen Rendle於2010年提出Factorization Machines(下面簡稱FM),併發布開源工具libFM。FM的提出主要對比物件是SVM,與SVM相比,有如下幾個優

ml課程:FM因子分解介紹及相關程式碼

以下是我的學習筆記,以及總結,如有錯誤之處請不吝賜教。 FM(factorization machines)表示因子分解機,是由Steffen Rendle提出的一種基於矩陣分解的機器學習演算法。目前,被廣泛的應用於廣告預估模型中,相比LR而言,效果更好。主要目標是:解決資料稀疏的情況下,特

FM因子分解系列)

FM(Factorization Machine) 引子 機器學習的通常模式為學習輸入到輸出的變換,比如最常見的線性迴歸模型,輸入為X,輸出為Y,通常輸入為高維資料,X是一個向量,形式如下: y=w1x1+w2x2+...+wnxn 線性迴歸是最簡單

FM(Factorization Machine,因子分解)演算法個人理解

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

推薦系統學習筆記之四 Factorization Machines 因子分解 + Field-aware Factorization Machine(FFM) 場感知分解

前言 Factorization Machines(FM) 因子分解機是Steffen Rendle於2010年提出,而Field-aware Factorization Machine (FFM) 場感知分解機最初的概念來自於Yu-Chin Juan與其比賽

萬字長文,詳解推薦系統領域經典模型FM因子分解

在上一篇文章當中我們剖析了Facebook的著名論文GBDT+LR,雖然這篇paper在業內廣受好評,但是畢竟GBDT已經是有些老舊的模型了。今天我們要介紹一個業內使用得更多的模型,它誕生於2010年,原作者是Steffen Rendle。雖然誕生得更早,但是它的活力更強,並且衍生出了多種版本。我們今天剖析的

簡單易學的機器學習演算法——因子分解(Factorization Machine)

#coding:UTF-8 from __future__ import division from math import exp from numpy import * from random import normalvariate#正態分佈 from datetime import datetime

因子分解(libffm+xlearn)

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

從SVD、SVD++到因子分解

  什麼是因子分解?在本文的含義表示:矩陣分解、因子分解機等等。而什麼是矩陣分解、因子分解機?看完這篇文章你將會有答案。 傳統推薦系統中的矩陣分解   在很多情況下,資料的一小段攜帶了資料集中的大部分資訊,其他資訊則要麼是噪聲,要麼就是毫不相關的資訊。矩

FMFFM的區別

FM+FFM FM:旨在解決稀疏資料下的特徵組合問題,具有線性的計算複雜度;(矩陣分解方式處理引數,不僅能減少引數數量,還能處理由於稀疏性帶來的引數不好訓練的問題)一般的線性模型壓根沒有考慮特徵間的關聯(組合)。為了表述特徵間的相關性,我們採用多項式模型。觀察大量的樣本資

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

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

容斥原理的(二進位制思想因子分解+模板)

#include<iostream> #include<string> #include<cstdio> #include<algorithm> #include<cmath> #include<iomanip

POJ 1811 Prime Test(大素數判斷因子分解

題目連結: 題目大意: •給出一個N(2<=N<2^54)如果是素數,輸出Prime,否則輸出N的最小素因子。 思路:(miller素數判斷&&pollar_rho大數分解) 模板題 kuangbin的模板 資料比較大,只能先用Miller_R

poj 1811 Prime Test(大素數判定因子分解)

先用Miller_Rabin演算法進行素數判斷,再用Pollard_rho分解素因子。 今天做TC時,遇到一道大素數判定和質因子分解的模板題。想到了質因子分解,但沒想到用這個模板。賽後,還是自己理解一遍,然後手敲吧。。 #include <stdio.h

FM(Factorization Machine)因式分解 與 TensorFlow實現 詳解

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

Linux學習第一步(虛擬鏡像文件的安裝)

image 下載文件 型號 啟動 計算機 服務 .cn img blog 一、安裝虛擬機(本文以vmware workstation 12為例)   1.在網上所有虛擬機並下載。   2.找到下載文件安裝好   3.一直下一步   4.接下來的就是選擇安裝的目錄了,當

每日一小練——因子分解

char num class font col margin 技術 getchar lin 上得廳堂,下得廚房,寫得代碼。翻得圍墻,歡迎來到睿不可擋的每日一小練! 題目:因子分解 內容:編寫一個程序,讀入一個正整數,把它的全部質因子找出來。比如輸入的1

單片: EEPROM串口通信

content sla ng- tempdata 總線 style 串口 data art 名稱:IIC協議 EEPROM24c02 通過串口通信存數讀取數據 內容:此程序用於檢測EEPROM性能,測試方法例如以下:寫入24c02一個數據,然後在內存中改變這些數據