推薦系統三十六式學習筆記:原理篇.模型融合14|一網打盡協同過濾、矩陣分解和線性模型

目錄

  • 從特征組合說起
  • FM模型
    • 1.原理
    • 2.模型訓練
    • 3.預測階段
    • 4.一網打盡其他模型
    • 5.FFM
  • 總結

在上一篇文章中,我們講到了使用邏輯回歸和梯度提升決策樹組合的模型融合辦法,用于CTR預估,給這個組合起了個名字,叫“輯度組合”。這對組合中,梯度提升決策樹GBDT,所起的作用就是對原始的特征做各種有效的組合,一顆樹一個葉子節點就是一種特征組合。

從特征組合說起

從邏輯回歸最樸素的特征組合就是二階笛卡爾乘積,但是這種暴力組合存在如下問題:
1.兩兩組合導致特征維度災難;
2.組合后的特征不見得都有效,事實上大部分可能無效;
3.組合后的特征樣本非常稀疏,即組合容易,但是樣本中可能不存在對應的組合,也就沒辦法在訓練時更新參數。

如果把包含了特征兩兩組合的邏輯回歸線性部分寫出來,就是:
y ^ = ω 0 + ∑ i = 1 n ω i x i + ∑ i = 1 n ∑ j = j + 1 n ω i j x i x j \hat{y} = ω_0 +\sum_{i=1}^n{ω_ix_i} +\sum_{i=1}^n\sum_{j=j+1}^n{ω_{ij}x_ix_j} y^?=ω0?+i=1n?ωi?xi?+i=1n?j=j+1n?ωij?xi?xj?

這和原始的邏輯回歸相比,多了后面的部分,特征兩兩組合,也需要去學習對應的參數權重。
問題是兩兩組合后可能沒有樣本能歐學習到$w_{ij},在應用中,對于這些組合,也只能放棄,因為沒有學到權重。

針對這個問題,就有了一個新的算法模型:因子分解機模型,也叫FM,即Factorization Machine。因子分解機也常常用來做模型融合。

FM模型

1.原理

因子分解機模型是在2010年被提出,因為邏輯回歸在做特征組合時樣本稀疏,無法學習到很多特征組合的權重,所以因子分解機的提出者就想,能否對上面那個公式中的 w i j w_{ij} wij?做解耦,讓每一個特征學習一個隱因子向量出來。

正如矩陣分解時,為每一個用戶和每一個物品各自都學習一個隱因子向量,這樣,任何兩個特征需要組合時,只需隱因子變量做向量點積,就是兩者組合特征的權重了。

針對邏輯回歸的線性部分:
y ^ = ω 0 + ∑ i = 1 n ω i x i + ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j \hat{y} =\omega_{0} + \sum_{i=1}^n{\omega_{i}x_{i}} + \sum_{i=1}^{n}{\sum_{j=i+1}^{n}}{<v_i,v_j>x_ix_j} y^?=ω0?+i=1n?ωi?xi?+i=1n?j=i+1n?<vi?,vj?>xi?xj?

這個公式和前面特征組合的公式相比,不同之處就是原來有個\omega_{ij},變成了兩個隱因子向量的點積<V_i,V_j>。

它認為兩個特征之間,即便沒有出現在一條樣本中,也是有間接聯系的。比如特征A和特征B,出現在一些樣本中,特征B和特征C也出現在一些樣本中,那么特征A和特征C無論是否出現在一些樣本中,我們有理由認為兩個特征仍然有些聯系。

如果在實際預測CTR時,特征A和特征C真的同時出現在一些樣本中,如果你用的是因子分解模型,你可以直接取特征A和特征C的隱因子向量,進行點積計算,就得到兩者組合的權重。因子分解機的先進之處就在于此。

既然二階組合特征可以學到隱因子向量,那么三階、四階、五階呢?實際上,組合越多,計算復雜度就會陡增,一般在實際使用中,因子分解機多用在二階特征組合中。

2.模型訓練

因子分解機的參數學習并無特別之處,看目標函數,這里是把他當做融合模型來看的,用來做CTR預估,因預測目標是一個二分類,因子分解機的輸出還需要經過sigmoid函數變換:
σ ( y ^ ) = 1 1 + e ? y ^ \sigma(\hat{y}) =\frac{1}{1+ e^{-\hat{y}}} σ(y^?)=1+e?y^?1?

因此損失目標函數為:
l o s s ( θ ) = ? 1 m ∑ i = 1 m [ y ( i ) l o g ( σ ( y ^ ) ) + ( 1 ? y ( i ) ) l o g ( 1 ? σ ( y ^ ) ] loss(\theta) = - \frac{1}{m}\sum_{i=1}^m{[y^{(i)} log(\sigma(\hat{y})) + (1-y^{(i)})log(1-\sigma(\hat{y}) ]} loss(θ)=?m1?i=1m?[y(i)log(σ(y^?))+(1?y(i))log(1?σ(y^?)]

公式中 σ ( y ^ ) \sigma(\hat{y}) σ(y^?) 是因子分解機的預測輸出后經過sigma函數變換得到的預估CTR, y ^ \hat{y} y^?是真實樣本的類別標記,正樣本為1,負樣本為0,m是樣本總數。

對于這個損失目標函數使用梯度下降或者隨機梯度下降,就可以得到模型的參數,注意函數實際上還需要加上正則項。

3.預測階段

因子分解機中二階特征組合那一部分,在實際計算時,復雜度有點高,如果隱因子向量的維度是k,特征維度是n,那么這個復雜度為O(kn^2),其中n方是特征要兩兩組合,k是每次組合都要對k維向量計算
點積。需稍微改造一下,改造過程如下:

loop1 begin: 循環k次,k就是隱因子向量的維度,其中,循環到第f次時做以下事情loop2 begin:循環n個特征,第i次循環時做這樣的事情1. 從第i個特征的隱因子向量中拿出第f維的值2. 計算兩個值:A是特征值和f維的值相乘,B是A的平方loop2 end把n個A累加起來,并平方得到C,把n個B也累加起來,得到D用C減D,得到Eloop1 end把k次循環得到的k個E累加起來,除以2

這就是因子分解機中,二階組合部分的實際計算方法,目前復雜度下降為O(kn)。

4.一網打盡其他模型

下面繼續帶你見識一些因子分解機的神奇之處。看下面這張圖:
在這里插入圖片描述
下面繼續帶你見識一些因子分解機的神奇之處。看下面這張圖:

這張圖中的每一條樣本都記錄了用戶對電影的評分,最右邊的y是評分,也就是預測目標;左邊的特征有五種,用戶ID、當前評分的電影ID、曾經評過的其他分、評分時間、上一次評分的電影。

現在我們來看因子分解機如何一網打盡其他模型的,這里說的打敗是說模型可以變形成其他模型。

前面例子,因子分解機實現了帶有特征組合的邏輯回歸。

現在假設圖中的樣本特征只留下用戶ID和電影ID,因子分解機模型就變成:
y ^ = ω 0 + ω u + ω i + < V u , V i > \hat{y} =\omega_{0} + \omega_{u} + \omega_{i} + <V_{u},V_{i}> y^?=ω0?+ωu?+ωi?+<Vu?,Vi?>

用戶ID和電影ID,在一條樣本中,各自都只有一個維度1,其他都是0。所以在一階部分就沒有了求和符號,直接是 w u w_u wu? w i w_i wi?,二階部分乘積也只剩下了1,其他都為0,就轉變為偏置信息的SVD。

繼續,在SVD基礎上把樣本中的特征加上用戶歷史評分過的電影ID,再求隱因子向量,就轉變為SVD++;再加上時間信息,就變成了time-SVD。

因子分解機把前面講過的矩陣分解一網打盡了,順便還干起了邏輯回歸的工作。正因為如此,因子分解機常常用來做模型融合,在推薦系統的排序階段肩負起對召回結果做重排序的任務。

5.FFM

在因子分解機基礎上可以進行改進,改進思路是:不但認為特征和特征之間潛藏著一些關系,還認為特征和特征類型也有千絲萬縷的關系。

這個特征類型,就是某些特征實際上來自數據的同一個字段。比如用戶id,占據了很多維度,變成了很多特征,但他們都屬于同一個類型,都叫做用戶ID。這個特征類型就是字段,即Field.所以這種改進叫做Field-aware Factorization Machines ,簡稱FFM。

因子分解機模型如下:
KaTeX parse error: Expected group after '_' at position 42: …_{i=1}^n{\omega_?}

總結

今天,我給你介紹了另一種常用來做CTR預估的模型,因子分解機。因子分解機最早提出在2010年,在一些數據挖掘比賽中取得了不錯的成績,后來被引入到工業界做模型融合,也表現不俗。
嚴格來說,因子分解機也算是矩陣分解算法的一種,因為它的學習結果也是隱因子向量,也是用隱因子向量的乘積來代替單個權重參數。

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

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

相關文章

Yokogawa AQ6370E 10與AQ6370E 20 光譜儀的區別?

Yokogawa AQ6370E 20相比AQ6370E 10在波長準確度上有哪些改進&#xff1f; AQ6370E 20在波長準確度上相對于AQ6370E 10有明顯的提升&#xff0c;這對于需要高精度波長測量的應用來說是非常有益的。 波長精度提升&#xff1a;AQ6370E 20的波長精度相比AQ6370E 10有所提升&#…

SQL面試題練習 —— 查詢每個用戶的第一條和最后一條記錄

目錄 1 題目2 建表語句3 題解 題目來源&#xff1a;小紅書。 1 題目 現有一張訂單表 t_order 有訂單ID、用戶ID、商品ID、購買商品數量、購買時間&#xff0c;請查詢出每個用戶的第一條記錄和最后一條記錄。樣例數據如下&#xff1a; ---------------------------------------…

個人支付系統實現

基礎首頁&#xff1a; 訂單&#xff1a; 智能售卡系統 基于webmanworkerman開發 禁用函數檢查 使用這個腳本檢查是否有禁用函數。命令行運行curl -Ss https://www.workerman.net/check | php 如果有提示Function 函數名 may be disabled. Please check disable_functions in …

外星生命在地球的潛在存在:科學、哲學與社會的交織

外星生命在地球的潛在存在&#xff1a;科學、哲學與社會的交織 摘要&#xff1a;近年來&#xff0c;關于外星生命是否存在的討論日益激烈。有研究表明&#xff0c;外星人可能已經在地球漫步&#xff0c;這一觀點引發了廣泛的科學、哲學和社會學思考。本文將從科學角度探討外星…

線程池FutureTask淺談

一,概述 FuturnTask實現了Future與Runnable接口,筆者知道,ThreadPoolExecutor#submit可以傳入Callable接口而非Runnable,區別點在于Callable可以返回值,而整個FuturnTask可以理解為Callable設計,用來優雅地異步獲取執行結果,無需手動Condition去實現。 圍繞此,需知道…

鴻蒙開發系統基礎能力:【@ohos.wallpaper (壁紙)】

壁紙 說明&#xff1a; 本模塊首批接口從API version 7開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。 導入模塊 import wallpaper from ohos.wallpaper;WallpaperType 定義壁紙類型。 系統能力: 以下各項對應的系統能力均為SystemCapability…

python接口自動化的腳本

使用Requests庫進行GET請求 Requests是Python中最常用的HTTP庫,用于發送HTTP請求。下面是一個簡單的GET請求示例,用于從API獲取數據。 import requests url = "https://api.example.com/data" response = requests.get(url) if response.status_code == 200:prin…

【項目實訓】falsk后端連接數據庫以及與前端vue進行通信

falsk連接數據庫 我們整個項目采用vueflaskmysql的框架&#xff0c;之前已經搭建好了mysql數據庫&#xff0c;現在要做的是使用flask連接到數據庫并測試 安裝flask 首先安裝flask pip install flask 進行數據庫連接 數據庫連接需要使用到pymysql庫以及flask庫 連接數據庫…

通過注釋語句,簡化實體類的定義(省略get/set/toString的方法)

引用Java的lombok庫&#xff0c;減少模板代碼&#xff0c;如getters、setters、構造函數、toString、equals和hashCode方法等 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructorData&#xf…

使用【docker】簡單部署打包構建好的鏡像并運行python項目

使用【docker】簡單部署運行python項目 方案一&#xff1a;使用打包好的鏡像直接運行 一&#xff0e;項目配置 項目壓縮包&#xff1a;project.tar.gz 項目目錄存放在服務器路徑&#xff1a;/var/opt/app (1)解壓項目文件到該目錄下&#xff1a;/var/opt/app 命令&#xff1…

Linux-引導過程與服務控制

目錄 一、Linux操作系統引導過程 1、引導過程總覽 2、引導過程詳解 2.1、開機自檢&#xff08;BIOS&#xff09; 2.2、 MBR引導 2.3、GRUB菜單 2.4、加載內核(kernel) 2.5、init進程初始化 3、系統初始化進程 3.1、Systemd單元類型 3.2、運行級別所對應的 Systemd 目…

SherlockChain:基于高級AI實現的智能合約安全分析框架

關于SherlockChain SherlockChain是一款功能強大的智能合約安全分析框架&#xff0c;該工具整合了Slither工具&#xff08;一款針對智能合約的安全工具&#xff09;的功能&#xff0c;并引入了高級人工智能模型&#xff0c;旨在輔助廣大研究人員針對Solidity、Vyper和Plutus智…

前端 Array.sort() 源碼學習

源碼地址 V8源碼Array 710行開始為sort()相關 Array.sort()方法是那種排序呢&#xff1f; 去看源碼主要是源于這個問題 // In-place QuickSort algorithm. // For short (length < 22) arrays, insertion sort is used for efficiency.源碼中的第一句話就回答了我的問題…

Potato(土豆)一款輕量級的開源文本標注工具(二)

示例項目&#xff08;模版&#xff09; Potato 旨在提高數據標注的可復制性&#xff0c;并降低研究人員設置新標注任務的成本。因此&#xff0c;Potato 提供了一系列預定義的示例項目&#xff0c;并歡迎公眾向項目中心貢獻。如果您使用 Potato 進行了自己的標注工作&#xff0…

海思平臺使用ITTP_Stream調試sensor

目錄 相關資料1.ISP相關資料2.MIPI RX相關資料3.sensor資料4.MIPI標準 準備工作1.準備sensor驅動2.準備sample vio3.準備上位機和下位機程序 運行1.只運行HiPQTool1.1.板端運行1.2.PC端運行HiPQTool 2.使用ITTP_Stream2.1.板端運行2.2.打開上位機軟件 相關資料 1.ISP相關資料 …

uniapp開發手機APP、H5網頁、微信小程序、長列表插件

ml-list 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id18928 ml-list介紹 1、ml-list 列表組件&#xff0c;包含基本列表樣式、可擴展插槽機制、長列表性能優化、多端兼容。 2、ml-list 低代碼列表&#xff0c;幫助使用者快速構建列表&#xff0c;簡單配置&…

秋招突擊——6/26~6/27——復習{二維背包問題——寵物小精靈之收服}——新作{串聯所有單詞的字串}

文章目錄 引言復習二維背包問題——寵物小精靈之收服個人實現重大問題 滾動數組優化實現 新作串聯所有單詞的字串個人實現參考實現 總結 引言 今天應該是舟車勞頓的一天&#xff0c;頭一次在機場刷題&#xff0c;不學習新的東西了&#xff0c;就復習一些之前學習的算法了。 復…

百度Apollo的PublicRoadPlanner一些移植Ros2-foxy的思路(持續更新)

如今的PublicRoadPlanner就是之前耳熟能詳的EM planner 計劃 —— ROS2與CARLA聯合仿真 結構化場景: 規劃算法:EM-planner 控制算法:MPC和PID 非結構化場景: 規劃算法采用Hybrid A* (1)小車模型搭建(計劃參考Github上Hybrid上的黑車,比較炫酷) (2)車輛里程計: 位…

深入比較:Batch文件與Shell腳本的異同

在操作系統中&#xff0c;自動化腳本是一種常見的工具&#xff0c;用于執行一系列自動化命令或程序。Windows和類Unix系統都提供了各自的腳本解決方案&#xff1a;Batch文件&#xff08;在Windows中&#xff09;和Shell腳本&#xff08;在類Unix系統中&#xff09;。本文將詳細…

有哪些方法可以恢復ios15不小心刪除的照片?

ios15怎么恢復刪除的照片&#xff1f;在手機相冊里意外刪除了重要的照片&#xff1f;別擔心&#xff01;本文將為你介紹如何在iOS 15系統中恢復已刪除的照片。無需專業知識&#xff0c;只需要按照以下步驟操作&#xff0c;你就能輕松找回寶貴的回憶。 一、從iCloud云端恢復刪除…