FM算法的原理
FM全称为Factor Machine,中文翻译为因子分解机。
FM表达式为:
首先是特征组合,通过对两两特征组合,引入交叉项特征(即表达式中最后一项),使得稀疏数据下学习不充分的问题得以解决。比如原本的多项式回归的参数w12w12的学习只能依赖于特征x1x1和x2x2;而对参数⟨v1,v2⟩⟨v1,v2⟩而言就完全不一样了,它由v1v1和v2v2组成。而对于每个向量可以通过多个交叉组合特征学习得到,比如可以由x1x2,x1x3,…x1x2,x1x3,…学习获得,这样可供学习的非零样本就大大增加了。
其次是高维灾难,通过引入隐向量(对参数矩阵进行矩阵分解)隐向量的点积可以表示原本两个毫无相关的参数之间的关系,使参数的数量大幅度缩减,从n×(n−1)/2降低到nk,完成对特征的参数估计。
FM算法的计算复杂度
两两交叉的复杂度应该O(k*n^2)吧,其实,通过数学公式的巧妙转化一下,就可以变成O(kn)了。转化公式如下所示,其实就是利用了2xy = (x+y)^2 – x^2 – y^2的思路。
FFM算法的原理
Field-aware Factorization Machines for CTR Prediction
www.csie.ntu.edu.tw/~cjlin/pape…
通过引入field的概念,FFM把相同性质的特征归于同一个field,比如“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”这三个特征代表日期,放到同一个field中
当“Day=26/11/15”与Country特征,Ad_type特征进行特征组合时,使用不同的隐向量(Field-aware),这是因为Country特征和Ad_type特征,本身的field不同
DeepFM算法的原理
DeepFM: A Factorization-Machine based Neural Network for CTR Prediction,2017
FM可以做特征组合,但是计算量大,一般只考虑2阶特征组合
如何既考虑低阶(1阶+2阶),又能考虑到高阶特征 => DeepFM=FM+DNN
设计了一种end-to-end的模型结构 => 无须特征工程
在各种benchmark和工程中效果好
Libfm
使用文档:www.libfm.org/libfm-1.42.…
FM论文作者Steffen Rendle提供的工具(2010年)
在KDD CUP 2012,以及Music Hackathon中都取得不错的成绩
不仅适用于推荐系统,还可以用于机器学习(分类问题)
实现三种优化算法:SGD,ALS,MCMC
支持2种输入数据格式:文本格式(推荐)和二进制格式
Libffm
libFFM
提供Python接口
支持LR,FM,FFM算法等
运行效率高,比libfm, libffm快
Xlearn
xlearn
xlearn-doc-cn.readthedocs.io/en/latest/i…
提供Python接口
支持LR,FM,FFM算法等
运行效率高,比libfm, libffm快
Deepctr
实现了多种CTR深度模型
与Tensorflow 1.4和2.0兼容
基于邻域的协同过滤 UserCF,ItemCF
协同过滤是推荐系统的经典算法之一
基于邻域的协同过滤(neighborhood-based)
UserCF:给用户推荐和他兴趣相似的其他用户喜欢的物品
ItemCF:给用户推荐和他之前喜欢的物品相似的物品
相似邻居的定义
固定数量的邻居K-neighborhoods
不论距离原理,只取固定的K个最近的邻居
k-Nearest Neighbor,KNN
基于相似度门槛的邻居,落在以当前点为中心,距离为 K 的区域中的所有点都作为邻居
相似度计算的方式
• 相似度计算方式,默认为MSD,也可设置为cosine,pearson,pearson_baseline
• min_support,最小支持度,对用户或者商品进行筛选
• shrinkage:收缩参数(仅与Pearson correlation相似度相关)。 默认值为100