机器学习笔记之二十——Factorization Machines(FM)

  Factorization Machines,为什么会出现这个东西?

      (1)、在推荐系统中,数据矩阵往往是十分稀疏的,而原本分类任务中最强的单模型——SVM又对高维稀疏的数据十分的不敏感,无法找到一个好的分割超平面。

      (2)、推荐系统中有诸多基于内容的推荐算法、协同过滤等算法框架,但是一般某个业务的模型不具备一般化能力,不能拿到别的业务中使用。

       基于以上两点,FM出现了,我觉着它有以下特点:

        (1)首先,与SVM不同的是,它不适用kernel,而是将参数矩阵进行分解,用sparse的数据来训练分解后的向量,还是可以的。

         (2)、FM做到了与多项式回归类似的事情,但是它通过分解矩阵将问题的复杂度降到线性级别。

         (3)、如MF、SVD++等算法一样,可以套用在其他的问题上。

    FM长什么样子?

       最开始,它是这样的: y_{pred} = w_0 + \sum ^n{w_ix_i}+\sum ^n_{i=1}\sum ^n_{j=i+1}w_{ij}x_ix_j

       只看这个式子前两项,就是一个线性回归公式,而第三项就是关键,显而易见,它描述了两个特征之间的关系,当然这里是degree=2的情况,也可以有三个特征的关系描述、四个……毕竟Factorization Machines,是带s的。

      式子提出来了,问题也来了,十分稀疏的data无法训练svm,那这个wij能训练出来吗?好像是不太能。

  

   FM核心思想

   通过将wij分解成一个向量V和它的转置VT的点积,用这两个类似于SVD中隐向量的概念来表示,这样需要训练的就是这个v了。(写着写着懵了,求解释,怎么v就好训练了……)

    然后就成了这个样子:y_{pred} = w_0 + \sum ^n{w_ix_i}+\sum ^n_{i=1}\sum ^n_{j=i+1}<vi,vj>x_ix_j,<vi,vj>代表的是向量内积。

  

   这个时候会发现式子的复杂度是O(kn^2).因为<vi,vj>=\sum ^k_{f=1}v_{if}v_{jf}

  

   FM paper的作者用了一些等式转换,将这个式子降低到了O(kn).  

   

发布了88 篇原创文章 · 获赞 28 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_35946969/article/details/87949315