7星彩网站开发,手机怎么制作网站教程视频,seo建站是什么意思,化妆品手机端网站模板文章目录目录1.FM算法产生背景2.FM算法模型3.FM算法VS其他算法4.推荐算法总结目录
1.FM算法产生背景
在传统的线性模型如LR中#xff0c;每个特征都是独立的#xff0c;如果需要考虑特征与特征直接的交互作用#xff0c;可能需要人工对特征进行交叉组合#xff1b;非线性…
文章目录目录1.FM算法产生背景2.FM算法模型3.FM算法VS其他算法4.推荐算法总结目录
1.FM算法产生背景
在传统的线性模型如LR中每个特征都是独立的如果需要考虑特征与特征直接的交互作用可能需要人工对特征进行交叉组合非线性SVM可以对特征进行kernel映射但是在特征高度稀疏的情况下并不能很好地进行学习现在也有很多分解模型Factorization model如矩阵分解MF、SVD等这些模型可以学习到特征之间的交互隐藏关系但基本上每个模型都只适用于特定的输入和场景。为此在高度稀疏的数据场景下如推荐系统FMFactorization Machine出现了。
下面所有的假设都是建立在稀疏数据的基础上举个例子根据用户的评分历史预测用户对某部电影的打分这里的每一行对应一个样本Feature vector x表示特征Targer y表示预测结果。从下图可以看出这是一个稀疏特征的例子后面的相关内容会以此为例子进行说明。
特征中的前四列表示用户uone-hot编码稀疏接着五列表示电影iont-hot编码稀疏再接下去五列表示用户u对电影i的打分归一化特征紧接着一列表示时间连续特征最后五列表示用户u对电影i打分前评价过的最近一部电影one-hot编码稀疏
2.FM算法模型
二、FM算法模型 1、模型目标函数 二元交叉的FM2-way FM目标函数如下
其中w是输入特征的参数vi,vj是输入特征i,j间的交叉参数v是k维向量。
前面两个就是我们熟知的线性模型后面一个就是我们需要学习的交叉组合特征正是FM区别与线性模型的地方。 为什么要通过向量v的学习方式而不是简单的wij参数呢
这是因为在稀疏条件下这样的表示方法打破了特征的独立性能够更好地挖掘特征之间的相关性。以上述电影为例我们要估计用户A和电影ST的关系w(AST)以更好地预测y如果是简单地考虑特征之间的共现情况来估计w(AST)从已有的训练样本来看这两者并没有共现因此学习出来的w(AST)0。而实际上A和ST应该是存在某种联系的从用户角度来看A和B都看过SW而B还看过ST说明A也可能喜欢ST说明A很有可能也喜欢ST。而通过向量v来表示用户和电影任意两两之间的交互都会影响v的更新从前面举的例子就可以看过A和B看过SW这样的交互关系就会导致v(ST)的学习更新因此通过向量v的学习方式能够更好的挖掘特征间的相互关系尤其在稀疏条件下。
2、模型的计算复杂度 可能有人会问这样两两交叉的复杂度应该O(k*n^2)吧其实通过数学公式的巧妙转化一下就可以变成O(kn)了。转化公式如下所示其实就是利用了2xy(xy)2−x2−y22xy (xy)^2-x^2-y^22xy(xy)2−x2−y2的思路。 3、模型的应用 FM可以应用于很多预测任务比如回归、分类、排序等等。
1.回归Regressiony^(x)直接作为预测值损失函数可以采用least square error2.二值分类Binary Classificationy^(x)需转化为二值标签如0,1。损失函数可以采用hinge loss或logit loss3.排序Rankx可能需要转化为pair-wise的形式如(X^a,X^b)损失函数可以采用pairwise loss4、模型的学习方法 前面提到FM目标函数可以在线性时间内完成那么对于大多数的损失函数而言FM里面的参数w和v更新通过随机梯度下降SGD的方法同样可以在线性时间内完成比如logit losshinge losssquare loss模型参数的梯度计算如下 这部分求和跟样本i是独立的因此可以预先计算好。
5、模型延伸多元交叉 前面提到到都是二元交叉其实可以延伸到多元交叉目标函数如下看起来复杂度好像很高其实也是可以在线性时间内完成的 6、总结 前面简单地介绍了FM模型总的来说FM通过向量交叉学习的方式来挖掘特征之间的相关性有以下两点好处
1.在高度稀疏的条件下能够更好地挖掘数据特征间的相关性尤其是对于在训练样本中没出现的交叉数据
2.FM在计算目标函数和在随机梯度下降做优化学习时都可以在线性时间内完成。
3.FM算法VS其他算法
1、FM 对比 SVM 1SVM SVM是大家熟知的支持向量机模型其模型原理在这里就不详述了。
SVM的线性模型函数表示为
其非线性形式可以通过核映射kernel mapping的方式得到如下所示
其中多项式核表示为
当d2时为二次多项式表示为 多项式核映射后的模型函数表示为
2FM 对比 SVM 看到上面的式子是不是觉得跟FM特别像SVM和FM的主要区别在于SVM的二元特征交叉参数是独立的如wij而FM的二元特征交叉参数是两个k维的向量vi、vj这样子的话vi,vj和vi,vk就不是独立的而是相互影响的。
为什么线性SVM在和多项式SVM在稀疏条件下效果会比较差呢线性svm只有一维特征不能挖掘深层次的组合特征在实际预测中并没有很好的表现而多项式svn正如前面提到的交叉的多个特征需要在训练集上共现才能被学习到否则该对应的参数就为0这样对于测试集上的case而言这样的特征就失去了意义因此在稀疏条件下SVM表现并不能让人满意。而FM不一样通过向量化的交叉可以学习到不同特征之间的交互进行提取到更深层次的抽象意义。
此外FM和SVM的区别还体现在1FM可以在原始形式下进行优化学习而基于kernel的非线性SVM通常需要在对偶形式下进行2FM的模型预测是与训练样本独立而SVM则与部分训练样本有关即支持向量。
2、FM 对比 其他分解模型Fac torization Model 这部分不详述其他分解模型包括Matrix factorization (MF)、SVD、PITF for Tag Recommendation、Factorized Personalized Markov Chains (FPMC)这些模型都只在特定场景下使用输入形式也比较单一比如MF只适用于categorical variables而FM通过对输入特征进行转换同样可可以实现以上模型的功能而且FM的输入可以是任意实数域的数据因此FM是一个更为泛化和通用的模型。详细内容参考https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
4.推荐算法总结
目前为止我们常推荐算法有好多种比较常见的有协同过滤Collaborative Filtering Recommendations这个在Mahout里的ItemCF和UserCF比较常用还有一种比较新的运行在Spark上的交替性最小二乘ALS也是一种协同过滤的算法但是其它的推荐算法也有很多在日常中也用的比较多就做个总结吧。
1、基于内容的推荐算法(Content Based Recommendation 简称CB) 这种推荐是从信息检索和文本检索里来的个人理解为是搜索引擎里的搜索排行。TD-IDF计算文章的词频和反文档频率计算出关键词在文档中的权值最后构成某篇文章的特征向量。基于该文章的特征向量和其它文章的特征向量进行余弦相似度计算从而返回最匹配相似的文章来给予推荐。
可以简单概括为: 抽取item的特征向量 - 计算余弦相似度 - 推荐
item可以是用户过去喜欢的电影商品问题等等。
基于内容的过滤创建了每个商品、用户的属性或是组合用来描述其本质。比如对于电影来说可能包括演员、票房程度等。 用户属性信息可能包含地理信息、问卷调查的回答等。这些属性信息关联用户用户后即可达到匹配商品的目的。 当然基于内容的策略极有可能因为信息收集的不便而导致无法实施。
CB的优点 用户之间的独立性User Independence既然每个用户的profile都是依据他本身对item的喜好获得的自然就与他人的行为无关。而CF刚好相反CF需要利用很多其他人的数据。CB的这种用户独立性带来的一个显著好处是别人不管对item如何作弊比如利用多个账号把某个产品的排名刷上去都不会影响到自己。 好的可解释性Transparency如果需要向用户解释为什么推荐了这些产品给他你只要告诉他这些产品有某某属性这些属性跟你的品味很匹配等等。 新的item可以立刻得到推荐New Item Problem只要一个新item加进item库它就马上可以被推荐被推荐的机会和老的item是一致的。而CF对于新item就很无奈只有当此新item被某些用户喜欢过或打过分它才可能被推荐给其他用户。所以如果一个纯CF的推荐系统新加进来的item就永远不会被推荐:( 。
CB的缺点 item的特征抽取一般很难Limited Content Analysis如果系统中的item是文档如个性化阅读中那么我们现在可以比较容易地使用信息检索里的方法来“比较精确地”抽取出item的特征。但很多情况下我们很难从item中抽取出准确刻画item的特征比如电影推荐中item是电影社会化网络推荐中item是人这些item属性都不好抽。其实几乎在所有实际情况中我们抽取的item特征都仅能代表item的一些方面不可能代表item的所有方面。这样带来的一个问题就是可能从两个item抽取出来的特征完全相同这种情况下CB就完全无法区分这两个item了。比如如果只能从电影里抽取出演员、导演那么两部有相同演员和导演的电影对于CB来说就完全不可区分了。 无法挖掘出用户的潜在兴趣Over-specialization既然CB的推荐只依赖于用户过去对某些item的喜好它产生的推荐也都会和用户过去喜欢的item相似。如果一个人以前只看与推荐有关的文章那CB只会给他推荐更多与推荐相关的文章它不会知道用户可能还喜欢数码。 无法为新用户产生推荐New User Problem新用户没有喜好历史自然无法获得他的profile所以也就无法为他产生推荐了。当然这个问题CF也有。
2、基于协同过滤的推荐算法Collaborative Filtering Recommendations 基于协同过滤的推荐可以理解为基于用户行为的推荐。依赖于用户过去的行为的协同过滤行为可以是过往的交易行为和商品评分这种方式不需要显性的属性信息。协同过滤通过分析用户和商品的内在关系来识别新的 user-item 关系。
协同过滤领域主要的两种方式是最近邻neighborhood方法和潜在因子latent factor模型。最近邻方法主要集中在 item 的关系或者是 user 的关系是比较基础的过滤引擎。而潜在因子模型并不是选取所有的关系而是通过矩阵分解的技术将共现矩阵的分解比如提取20-100个因子来表示原始矩阵信息可以对比上面提到的音乐基因只不过潜在因子模型是通过计算机化的实现。
最邻近
基于用户的协同过滤算法: 基于一个这样的假设“跟你喜好相似的人喜欢的东西你也很有可能喜欢。”所以基于用户的协同过滤主要的任务就是找出用户的最近邻居从而根据最近邻 居的喜好做出未知项的评分预测。
item based CF 基于物品相似的协同过滤。
user based CF 基于用户相似的协同过滤。
潜在引子模型
SVD奇异值分解矩阵
ALS交替最小二乘
总结为 用户评分 - 计算最邻近 - 推荐
3、算法对比
各种推荐方法都有其各自的优点和缺点见表1。 4、 Mahout里的推荐算法
5、总结 没有最那一种算法能解决所有问题混合算法有效结合每个算法的利弊才能达到最好的效果。
一个比较成功的内容过滤是 pandora.com 的音乐基因项目一个训练有素的音乐分析师会对每首歌里几百个独立的特征进行打分。这些得分帮助pandora推荐歌曲。还有一种基于内容的过滤是基于用户人口统计特征的推荐先根据人口统计学特征将用户分成若干个先验的类。对后来的任意一个用户首先找到他的聚类然后给他推荐这个聚类里的其他用户喜欢的物品。这种方法的虽然推荐的粒度太粗但可以有效解决注册用户的冷启动(Cold Start)的问题。