因子分解机模型简介

简介:   Steffen Rendle于2010年提出Factorization Machines(下面简称FM),并发布开源工具libFM。 一、与其他模型的对比   与SVM相比,FM对特征之间的依赖关系用factorized parameters来表示。

  Steffen Rendle于2010年提出Factorization Machines(下面简称FM),并发布开源工具libFM。

一、与其他模型的对比

  与SVM相比,FM对特征之间的依赖关系用factorized parameters来表示。对于输入数据是非常稀疏(比如自动推荐系统),FM搞的定,而SVM搞不定,因为训出的SVM模型会面临较高的bias。还有一点,通常对带非线性核函数的SVM,需要在对偶问题上进行求解;而FM可以不用转为对偶问题,直接进行优化。

  目前还有很多不同的factorization models,比如matrix factorization和一些特殊的模型SVD++, PITF, FPMC。这些模型的一个缺点是它们只适用于某些特定的输入数据,优化算法也需要根据问题专门设计。而经过一些变换,可以看出FM囊括了这些方法。

二、模型简介

  2-way FM(degree = 2)是FM中具有代表性,且比较简单的一种。就以其为例展开介绍。其对输出值是如下建模:

Factorization Machines介绍 - vividfree - 罗维的BLOG

   公式说明:

  (1) 模型的参数包括:Factorization Machines介绍 - vividfree - 罗维的BLOG

  (2) n是特征维度;

  (3) k是定义factorization维度的超参数,是正整数。

  (4) 在FM中,如何对特征之间的依赖关系建模?首先用k维向量去描述每个维度,然后对2个维度所对应的vi和vj求点积,以此来刻画2个特征之间的特征关系。如果需要刻画x(x>2)个特征之间的关系,可以用x-way FM模型。

  (5) 表面上看式子的第3项的计算复杂度为O(kn2),但其实可以经过简单的数学处理,计算复杂度降为O(kn)。

三、模型分析

  他的思想应该是从推荐系统中经典的SVD模型(因子分解模型)得到的,经典的SVD模型当中相当于只有两种类型的feature,一类feature是user,一类feature是item,而libFM是把这个模型推广到了多类feature的情况。为简单起见,考虑因子维数为1的情况,SVD模型用aba∗b来作为对打分的预测。而libFM要面对的是多类feature,假设是3类,那么就用ab+bc+caa∗b+b∗c+c∗a来作为对结果的预测。这时候就要问了,如果feature很多,这不就有平方量级的乘法次数了么?当然不是,libFM的文章中提到,他利用((a+b+c)2a2b2c2)/2((a+b+c)2−a2−b2−c2)/2来计算刚才的式子,但是你可以看到,他们其实是相等的,不同的是,这样的计算量只是线性复杂度的。当然libFM也同时支持bias项,这和经典SVD模型类似。
  以上就是libFM的创新之处,其实如果很了解SVD模型,那这个改进并不难理解。
论文中还提到,经典的SVD++模型等对于SVD模型的改进,也只是libFM的一个子集而已。只要合适的去添加feature即可。比如SVD++模型就相当于对每个item增加一个feature,来描述用户是否也给这个item打过分即可。所以有了libFM以后,最需要人工解决的问题就是添加合适的feature了。
另外再说明一下推荐系统的数据如何转化成libFM接受的形式。假设User ID范围是[0,99],Item ID范围是[0,199],则定义feature 0到feature 99对应于User,feature 100到feature 299对应于Item,假设第一条打分记录是User 4对Item 9的打分,则feature 4和feature 109的取值为1,其余feature取值都是0。由于数据文件是稀疏格式的,所以取值为0的feature都不用写,这样文件不会太大。其余对经典SVD模型的改进就需要增加一些对应feature。他的代码中,每条记录是使用map存储feature的,可以随机存取任意一个feature的值(但是可能用链表就可以了?因为一般都是顺序访问的)。

  FM可以用于多种预测问题,包括回归、分类和排序。对不同的预测问题,可以选择合适的loss term和regularization term。另外,FM的梯度也很容易求。

目录
相关文章
|
11月前
|
数据挖掘
生信教程:使用拓扑加权探索基因组进化(1)
生信教程:使用拓扑加权探索基因组进化(1)
89 1
|
11月前
|
数据可视化 Python
生信教程:使用拓扑加权探索基因组进化(3)
生信教程:使用拓扑加权探索基因组进化(3)
57 0
|
4月前
|
算法
【免费】面向多微网网络结构设计的大规模二进制矩阵优化算法
【免费】面向多微网网络结构设计的大规模二进制矩阵优化算法
|
机器学习/深度学习 数据采集 搜索推荐
因子分解机介绍和PyTorch代码实现
因子分解机(Factorization Machines,简称FM)是一种用于解决推荐系统、回归和分类等机器学习任务的模型。它由Steffen Rendle于2010年提出,是一种基于线性模型的扩展方法,能够有效地处理高维稀疏数据,并且在处理特征组合时表现出色。它是推荐系统的经典模型之一,并且模型简单、可解释性强,所以搜索广告与推荐算法领域还在被使用。今天我们来详细介绍它并使用Pytorch代码进行简单的实现。
69 0
|
机器学习/深度学习 算法 数据可视化
神经⽹络可以计算任何函数的可视化证明
神经⽹络可以计算任何函数的可视化证明
|
数据可视化 搜索推荐 PyTorch
使用卷积操作实现因子分解机
本文将介绍如何使用卷积操作实现因子分解机器。卷积网络因其局部性和权值共享的归纳偏差而在计算机视觉领域获得了广泛的成功和应用。卷积网络可以用来捕获形状的堆叠分类特征(B, num_cat, embedding_size)和形状的堆叠特征(B, num_features, embedding_size)之间的特征交互。
79 1
|
机器学习/深度学习
受限玻尔兹曼机|机器学习推导系列(二十五)
受限玻尔兹曼机|机器学习推导系列(二十五)
723 0
受限玻尔兹曼机|机器学习推导系列(二十五)
|
机器学习/深度学习 数据采集 监控
转:如何利用BP神经网络算法实现对内网管理软件中的预测与管理
关于在内网管理软件里用BP神经网络算法来搞预测和管理,你可以把它想象成是探险,得跨过不少的障碍。但不要紧,因为每个软件和场景都有独特之处,所以需要根据具体情况来调整和优化。接下来我会详细地聊一聊,在内网管理软件中引入BP神经网络算法来进行预测和管理所需要考虑的一些步骤——
41 0
|
负载均衡 监控 算法
转:如何利用随机数算法优化局域网管理软件
随机数算法可谓是涵盖了多个领域,其中蕴含了提升安全性、增强性能,还有改进资源分配等关键方面。那么关于如何充分利用随机数算法优化局域网管理软件呢?下面,我为大家罗列了一些策略,或许能够为提供一些思路,更好地运用随机数算法来提升局域网管理软件的表现——
57 0
|
机器学习/深度学习 存储 人工智能
图如何双曲建模?弗吉尼亚理工Amazon最新WWW2022「双曲神经网络:理论、架构和应用」教程
图如何双曲建模?弗吉尼亚理工Amazon最新WWW2022「双曲神经网络:理论、架构和应用」教程
110 0