FM(因子分解机系列)
来源:互联网 发布:疑心暗鬼动作数据下载 编辑:程序博客网 时间:2024/05/18 20:50
FM(Factorization Machine)
引子
机器学习的通常模式为学习输入到输出的变换,比如最常见的线性回归模型,输入为X,输出为Y,通常输入为高维数据,X是一个向量,形式如下:
线性回归是最简单的线性模型,只能捕捉最简单的一阶线性关系,而且基于各特征独立同分布的假设。
实际中,各特征
一般为了简单,会只捕捉二阶的关系,即特征间两两相互影响的关系,如下:
这里每两个特征有一个参数w要学习。
这里仍有问题,对于二项式回归来说,如果有n个特征,那么要学习到两两之间的关系,有
同时,又由于实际数据会有稀疏性问题,有些特征两两同时不为0的情况很少,当一个数据中任何一个特征值为0的时候,那么其他特征与此特征的相互关系将没有办法学习。
FM原理
受到矩阵分解的启发,为了解决上述两个问题,引入了因子分解机。
如果训练的输入数据有n个特征,设i,j两个特征的相互关系用参数
none
…
缺失了对角线的矩阵,正因为如此,我们可以通过给对角线任意设定值来保证矩阵为半正定矩阵,自然想到了矩阵分解。
基于矩阵分解的思想,将以上矩阵分解为两个低阶矩阵的乘积,那么在分解过程中,不仅仅减少了数据存储的复杂度,而且多了一个特别神奇的功能,预测功能。
矩阵分解基于一个假设,即矩阵中的值等于学习到的两个隐向量的乘积,即
这里
那么因子分解机的形式为:
其中,
通常,由于数据稀疏,本来
而且,一般隐向量维度k远远小于特征数量n,那么分解后要学习的参数数量为:
学习方法
通常在学习的时候,要加上正则,至于正则的选择,根据实际情况来。但是正则化系数的选择非常重要。
1.随机梯度下降
关键参数:
- 学习率(太大无法收敛)
- 正则系数(分解机高度依赖正则系数的选择,同时有一种自适应选择正则系数的方法,在libfm中有此实现)
- 初始化值(通常取小值,但不能为0)
2.交替最小二乘法(Alternating least-squares)
每次选择一个参数,固定其他参数进行优化
- 相较于梯度下降,没有了超参数学习率
- 仍有正则系数以及初始化值
3.马尔科夫链蒙特卡洛法MCMC
属于贝叶斯推断法,采用吉布斯采样,每次优化一个参数。
理论上是最好的方法,因为它首先对超参数的选择不是特别敏感,其次没有了正则系数,也就减少了正则系数的选择时间。同时,超先验参数的个数要小于正则系数的个数,减少了复杂度。
FFM(Field-aware Factorization Machines)
FFM是在FM的基础上引入了域的概念,是对FM的改进。
针对属于不同域的特征,相互影响因为域的不同而不同,那么一个特征,会学习到多个隐向量,一个隐向量对应一个域,更加准确地描述了特征的组合。
空间复杂度
假设有f个域,n个特征,隐向量长度为k, 那么时间复杂度为
参考文献
[1] Rendle S. Factorization machines with libfm[J]. ACM Transactions on Intelligent Systems and Technology (TIST), 2012, 3(3): 57.
[2] Juan Y, Zhuang Y, Chin W S, et al. Field-aware factorization machines for CTR prediction[C]//Proceedings of the 10th ACM Conference on Recommender Systems. ACM, 2016: 43-50.
- FM(因子分解机系列)
- 因子分解机FM原理及SGD训练
- 因子分解机FM原理及SGD训练
- 因子分解机
- SDUT 1722-整数因子分解问题(因子分解)
- 整数因子分解(转)
- lightoj1236(素因子分解)
- 因子分解
- 因子分解
- 因子分解
- poj 2429(因子分解 再处理一下因子即可)
- 菜鸟系列——pollard_rho分解质因子
- 隐因子分解机Factorization Machine
- 隐因子分解机Factorization Machine
- 从SVD、SVD++到因子分解机
- pku2992(约数,素因子分解)
- pallord-rho(质因子分解)
- uva 10879 Code Refactoring(分解因子)
- Node.js用来做什么?我们为什么要用它?
- RMQ
- Codeforces Round #423 (Div. 2) B Black Square 黑色正方形 思维题
- 3DES加密,秘钥长度为32
- 解决maven下载慢的问题
- FM(因子分解机系列)
- shell getopts 用法
- table中的某一格字数太多,要换行
- ORACLE 不走索引(失效)的原因以及解决办法
- js删除数组元素
- js call()与apply()
- 4143:和为给定数
- gitbook 生成 html 电子书, 搭建在 github 或 本地服务器上
- java-(继承、子父类中的变量的特点、子父类中函数的特点-覆盖、)