矩阵分解推荐算法(LMF)

首先我们现在有一个矩阵\(R_{mn}\),其中\(R_{ij}\)代表第\(i\)个用户对第\(j\)个商品的喜爱程度。

\(LMF\)算法认为每个商品上面都有一些隐因子,而顾客的喜爱程度是由这些隐因子来决定的。因此便可以将\(R_{mn}\)分解成\(P_{mF} \times Q_{Fn}\)的形式。
矩阵\(P_{mF}\)代表了这\(m\)个用户对\(F\)个隐因子的喜爱程度,\(Q_{Fn}\)代表这\(F\)个隐因子在这\(n\)个商品上的分布概率。
\[R'_{ij}=\sum_{f=1}^F {P_{if}Q_{fj}}\]

我们最终的目的是使得\(R_{ij}\)和\(R'_ {ij}\)尽可能的相近。因此,损失函数为:

\[f(P,Q)=\sum{(R_{ij}-R'_{ij})^2}\]

为了防止过拟合,需要加上一个正则项来防止\(P_{if},Q_{fj}\)过小或过大。

\[f(P,Q)=\sum{(R_{ij}-R'_{ij})^2}+\lambda(\sum{(P_{if}^2}+\sum{Q_{fj}^2})\]

接下来就是对这个函数用梯度下降进行拟合,递推式为:

\[P_{k+1}=P_{k}-\alpha\frac{\partial f(P,Q)}{\partial P_k}\]
\[Q_{k+1}=Q_{k}-\alpha\frac{\partial f(P,Q)}{\partial Q_k}\]

这样我们采用梯度下降算法即可获得\(R'\)矩阵

import matplotlib.pyplot as plt
import numpy
##将R_nm分解成P_nk*Q_km
def MF(R,P,Q,K,times=100000,alp=0.0001,lb=0.01):
  #  Q=Q.T
    for steps in range(times):# 迭代次数
        for u in range(len(R)):
            for i in range(len(R[u])):
                if R[u][i]>0:
                    delta=R[u][i]-numpy.dot(P[u,:],Q[:,i])
                for f in range(K):
                    P[u][f]=P[u][f]+2*alp*(delta*Q[f][i]-lb*P[u][f])#递推运算
                    Q[f][i]=Q[f][i]+2*alp*(delta*P[u][f]-lb*Q[f][i])
    return P,Q
if __name__ == "__main__":
    R=[
        [5,3,0,1],
        [4,0,0,1],
        [1,1,0,5],
        [1,0,0,4],
        [0,1,5,4]
    ]
    K=2
    n=len(R)
    m=len(R[0])
    ##随机生成P,Q矩阵
    P=numpy.random.rand(n,K)
    Q=numpy.random.rand(K,m)
    ##矩阵分解
    ansp,ansq=MF(R,P,Q,K)
    ansR=numpy.dot(ansp,ansq)
    print(ansR)

原文地址:https://www.cnblogs.com/codancer/p/12232298.html

时间: 2024-08-02 16:28:05

矩阵分解推荐算法(LMF)的相关文章

用Spark学习矩阵分解推荐算法

在矩阵分解在协同过滤推荐算法中的应用中,我们对矩阵分解在推荐算法中的应用原理做了总结,这里我们就从实践的角度来用Spark学习矩阵分解推荐算法. 1. Spark推荐算法概述 在Spark MLlib中,推荐算法这块只实现了基于矩阵分解的协同过滤推荐算法.而基于的算法是FunkSVD算法,即将m个用户和n个物品对应的评分矩阵M分解为两个低维的矩阵:$$M_{m \times n}=P_{m \times k}^TQ_{k \times n}$$ 其中k为分解成低维的维数,一般远比m和n小.如果大

ALS矩阵分解推荐模型

其实通过模型来预测一个user对一个item的评分,思想类似线性回归做预测,大致如下 定义一个预测模型(数学公式), 然后确定一个损失函数, 将已有数据作为训练集, 不断迭代来最小化损失函数的值, 最终确定参数,把参数套到预测模型中做预测. 矩阵分解的预测模型是: 损失函数是: 我们就是要最小化损失函数,从而求得参数q和p. 矩阵分解模型的物理意义 我们希望学习到一个P代表user的特征,Q代表item的特征.特征的每一个维度代表一个隐性因子,比如对电影来说,这些隐性因子可能是导演,演员等.当然

协同过滤推荐算法总结

推荐算法具有非常多的应用场景和商业价值,因此对推荐算法值得好好研究.推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结. 一.推荐算法概述 推荐算法是非常古老的,在机器学习还没有兴起的时候就有需求和应用了.概括来说,可以分为以下5种: 1)基于内容的推荐:这一类一般依赖于自然语言处理NLP的一些知识,通过挖掘文本的TF-IDF特征向量,来得到用户的偏好,进而做推荐.这类推荐算法可以找到用

矩阵分解在协同过滤推荐算法中的应用

在协同过滤推荐算法总结中,我们讲到了用矩阵分解做协同过滤是广泛使用的方法,这里就对矩阵分解在协同过滤推荐算法中的应用做一个总结.(过年前最后一篇!祝大家新年快乐!明年的目标是写120篇机器学习,深度学习和NLP相关的文章) 1. 矩阵分解用于推荐算法要解决的问题 在推荐系统中,我们常常遇到的问题是这样的,我们有很多用户和物品,也有少部分用户对少部分物品的评分,我们希望预测目标用户对其他未评分物品的评分,进而将评分高的物品推荐给目标用户.比如下面的用户物品评分表: 用户\物品 物品1 物品2 物品

ML.NET 示例:推荐之One Class 矩阵分解

写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn 产品推荐 - 矩阵分解问题示例 ML.NET 版本 API 类型 状态 应用程序类型 数据类型 场景 机器学习任务 算法 v0.8 动态 API 最新版本 控制台应用程序 .txt 文件 推荐 矩阵分解 MatrixFact

基于特征的推荐算法【转】

http://in.sdo.com/?p=2779 推荐算法准确度度量公式: 其中,R(u)表示对用户推荐的N个物品,T(u)表示用户u在测试集上喜欢的物品集合. 集合相似度度量公式(N维向量的距离度量公式): Jaccard公式: 其中,N(u)表示用户u有过正反馈的物品集合. 余弦相似度公式: UserCF公式: 其中,S(u,k)表示和用户u兴趣最接近的K个用户集合:N(i)表示对物品i有过正反馈的用户集合:w(u,v)表示用户u和用户v的兴趣相似度:r(v,i)表示用户v对物品i的兴趣.

简单的基于矩阵分解的推荐算法-PMF, NMF

介绍: 推荐系统中最为主流与经典的技术之一是协同过滤技术(Collaborative Filtering),它是基于这样的假设:用户如果在过去对某些项目产生过兴趣,那么将来他很可能依然对其保持热忱.其中协同过滤技术又可根据是否采用了机器学习思想建模的不同划分为基于内存的协同过滤(Memory-based CF)与基于模型的协同过滤技术(Model-based CF).其中基于模型的协同过滤技术中尤为矩阵分解(Matrix Factorization)技术最为普遍和流行,因为它的可扩展性极好并且易

推荐算法——非负矩阵分解(NMF)

一.矩阵分解回想 在博文推荐算法--基于矩阵分解的推荐算法中,提到了将用户-商品矩阵进行分解.从而实现对未打分项进行打分. 矩阵分解是指将一个矩阵分解成两个或者多个矩阵的乘积.对于上述的用户-商品矩阵(评分矩阵),记为Vm×n.能够将其分解成两个或者多个矩阵的乘积,如果分解成两个矩阵Wm×k和Hk×n.我们要使得矩阵Wm×k和Hk×n的乘积能够还原原始的矩阵Vm×n: Vm×n≈Wm×k×Hk×n=V^m×n 当中,矩阵Wm×k表示的是m个用户与k个主题之间的关系,而矩阵Hk×n表示的是k个主题

融合非负矩阵分解和图全变分的歌曲推荐算法

摘要: Kirell Benzi, Vassilis Kalofolias, Xavier Bresson and Pierre Vandergheynst Signal Processing Laboratory 2 (LTS2), Swiss Federal Institute of Technology (EPFL) Kirell Benzi, Vassilis Kalofolias, Xavier Bresson and Pierre Vandergheynst Signal Proce