一种基于矩阵分解的产品推荐方法与流程

文档序号:17376743发布日期:2019-04-12 23:23阅读:174来源:国知局
一种基于矩阵分解的产品推荐方法与流程

本发明属于数据挖掘和个性化推荐领域,更具体地,涉及一种基于矩阵分解的产品推荐方法。



背景技术:

根据用户对产品的喜好程度向用户推荐产品时,常用的方法包括协同过滤法和矩阵分解法。协同分解法又分为基于用户的协同过滤法和基于产品的协同过滤方法,前者利用不同用户之间的相似度来向用户推荐产品,后者则利用产品之间的相似度来向用户推荐产品,相似度之间的计算方式有多种,例如余弦相似度,jaccard相似度等。在实际的使用中,基于用户的协同过滤协同方法主要使用在用户数远多于产品数的场景下,基于产品的协同过滤方法主要使用在产品数远多于用户数的场景下。协同过滤法适用于大数据应用场景,其计算量较大,不能做到实时地向用户推荐产品,基于模型的协同过滤算法有效的解决了这一问题,矩阵分解(matrixfactorization,mf)法是基于模型的协同过滤算法中的一种。

基于矩阵分解的传统推荐模型是将用于表示用户与产品关系的评分矩阵分解成用户矩阵和产品矩阵,用户矩阵用于表示用户与隐藏特征的关系,产品矩阵用于表示产品与隐藏特征的关系,隐藏特征可以理解为影响用户选择产品的因子,可以手动设置个数。分解形式为:r=pq。它是将用户产品关系矩阵r通过学习训练参数,最终可以得到两个分解矩阵p和q,损失函数的定义如下所示。

在上述损失函数中,rui为用户产品关系矩阵r中的元素,pu和qi分别为矩阵p和矩阵q中的向量,λ为正则化系数。

通过定义的损失函数,可以求得模型参数。损失函数是一个凸函数,凸函数必然存在最小值,这是一个凸优化问题,通过梯度下降法不断迭代,可求解出两个矩阵,最后通过两个矩阵相等得到的评分高低可以得到向用户推荐产品的推荐列表。传统的矩阵分解法能够实时的实现个性化推荐,但是,由于用户与被推荐产品的关系是多种多样的,传统的矩阵分解法并没有充分考虑这一因素,导致推荐的准确度不高。



技术实现要素:

针对现有技术的缺陷和改进需求,本发明提供了一种基于矩阵分解的产品推荐方法,其目的在于,在损失函数中充分考虑用户与被推荐产品之间的关系,以提高基于矩阵分解向用户推荐产品的推荐准确度。

为实现上述目的,本发明提供了一种基于矩阵分解的产品推荐方法,包括如下步骤:

(1)对历史评分数据进行预处理,得到用户对产品的评分矩阵;

(2)对评分矩阵中同一用户对不同产品的喜好程度进行排序,并根据排序结果确定损失函数;

(3)对评分矩阵进行分解,并根据损失函数对分解结果进行调整,从而得到使得损失函数取值最小的的第一特征向量和第二特征向量,由此完成矩阵分解并得到向用户推荐产品的推荐列表;

其中,第一特征向量用于表示用户与隐藏特征的关系,第二特征向量用于表示产品与隐藏特征的关系。

进一步地,步骤(1)包括:

利用历史评分数据生成用户对产品的第一评分矩阵;

若第一评分矩阵的规模大于预设的数据集阈值,则对第一评分矩阵进行降维操作,从而得到第二评分矩阵,并将第二评分矩阵作为评分矩阵;否则,将第一评分矩阵作为评分矩阵;

合理设定数据集阈值并将评分矩阵的规模限定在阈值内,是为了避免因所生成的评分矩阵规模过大,而导致模型训练耗时过长;降维操作也是一个矩阵分解的过程,具体过程包括对特征值大小排序、筛选较大的特征值以及合成,pca(principalcomponentanalysis,主成成分提取)算法是一种常用的降维操作算法。

进一步地,步骤(2)包括:

计算每一个有序三元组中,用户对两个产品的评分差值,并对评分差值进行归一化后取其对数;将所有归一化评分差值的对数相加求和,作为迭代项;

根据分解所得两个矩阵的矩阵范数构建第一正则化项;

根据迭代项和第一正则化项确定损失函数;或者,获得任意两个用户之间的用户相似度以及任意两个产品之间的产品相似度,以构建第二正则化项,并根据迭代项、第一正则化项以及第二正则化项确定损失函数;

其中,第一正则化项和第二正则化项均用于防止过拟合,排序规则为:对于评分矩阵中的任意一个用户u',用户u'对于其评分过的所有产品的喜好程度均相同,u'用户对于其未评分过的所有产品的喜好程度均相同,并且用户u'对于其评分过的任意一个产品的喜好程度大于其未评分过的所有产品的喜好程度。

在确定损失函数时,将同一用户对不同产品喜好程度的排序关系也考虑在内,能够有效提高产品推荐的准确度。

更进一步地,根据迭代项和第一正则化项所确定的损失函数,其表达式为:

其中,c1为损失函数,s为有所有有序三元组构成的集合,u为用户编号i和j均为产品编号,p和q分别表示由评分矩阵分解所得的用户矩阵和产品矩阵,pu表示用户矩阵中与用户u相对应的特征向量,qi和qj分别表示产品矩阵中与产品i和产品j相对应的特征向量,λ为正则化系数,f表示frobenius范数。

更进一步地,获得任意两个用户之间的用户相似度以及任意两个产品之间的产品相似度的方法包括:

以评分矩阵中的用户和产品为顶点,构建一个有向图;若用户对产品进行过评分,则在有向图中生成一条从该用户指向该产品的有向边;

根据有向图分别获得用户对应的顶点的出度集合和产品对应的顶点的入度集合;

任意两个用户的用户相似度为两个用户对应顶点的出度集合的交集与并集之比;任意两个产品的产品相似度为两个产品对应顶点的入度集合的交集与并集之比。

通过以上方法将用户和产品的关系建立成有向图,就能利用过用户节点的出度集合表示用户的偏好集合,并利用产品节点的入度集合表示偏好产品的用户集合。

更进一步地,用户相似度和产品相似度的计算表达式分别为:

其中,sim1()和sim2()分别表示用户相似度函数和产品相似度函数,u1和u2均为用户编号,i1和i2均为产品编号,uout(u1)和uout(u2)分别表示有向图中用户u1和用户u2的出度集合,iin(i1)和iin(i2)分别表示有向图中产品i1和产品i2的入度集合。

更进一步地,根据迭代项、第一正则化项以及第二正则化项确定的损失函数的表达式为:

其中,c2为损失函数,s为由所有有序三元组构成的集合,u和u1均为用户编号,i、j和i1均为产品编号,p和q分别表示由评分矩阵分解所得的用户矩阵和产品矩阵,pu和分别表示用户矩阵中与用户u和用户u1相对应的特征向量,qi、qj和分别表示产品矩阵中与产品i、产品j和产品i1相对应的特征向量,sim1()和sim2()分别表示用户相似度函数和产品相似度函数,u1表示与用户u的用户相似度大于预设的用户相似度阈值的用户集合,i1表示与产品i的产品相似度大于预设的产品相似阈值的产品集合,λ、β和γ均为正则化系数,f表示frobenius范数;

分析可知,sim1(u,u1)的值越大,说明用户u与用户u1的用户相似度越高,那么特征向量pu就越接近特征向量若用户u与用户u1的用户相似度较高,那么对应的值会很小,反之,用户u与用户u1的用户相似度较低,那么对应的值会很大;同理,sim2(i,i1)的值越大,产品i和产品i1的产品相似度就越高,那么特征向量qi就越接近特征向量若产品i和产品i1的产品相似度较高,那么对应的值会很小,反之,产品i和产品i1的产品相似度较低,那么对应的值会很大;在上述损失函数的表达式中,将反映用户相似度的和反映产品相似度的作为正则化项加入到损失函数中,能够有效地提高产品推荐的准确度。

进一步地,步骤(3)中,若损失函数存在多个极值,则根据损失函数对分解结果进行调整时所采用的算法为梯度下降法;若损失函数仅存在一个极值,则根据损失函数对分解结果进行调整是所采用的算法为随机梯度下降法;

梯度下降法每次都需要样本的所有数据,计算耗时较长,而随机梯度下降法在进行迭代的时候只需要部分样本,但是在存在多个极值时,随机梯度下降算法可能会出现较大的误差;在不同情况下采用不同的算法最优化损失函数,能够保证计算的精度,同时尽可能地减少计算所需的时间开销。

总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:

(1)本发明所提供的基于矩阵分解的产品推荐方法,在确定损失函数时,将同一用户对不同产品的喜好程度的排序关系考虑在内,能够在损失函数中更为充分地体现用户与被推荐产品之间的复杂关系,从而有效提高产品推荐的准确度。

(2)本发明所提供的基于矩阵分解的产品推荐方法,通过将用户和产品的关系建立成有向图,并利用所建立的有向图计算用户与用户之间以及产品与产品之间的相似度,并将反映用户与用户之间以及产品与产品之间的相似度的正则化项加入到损失函数中,能够有效地提高产品推荐的准确度。

附图说明

图1为本发明实施例提供的基于矩阵分解的产品推荐方法流程图;

图2为本发明实施例提供的有向图模型;(a)为不同用户与同一产品之间的关系模型;(b)为同一用户与不同产品之间的关系模型。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

在以下发明实施例中,均以movielens数据集作为历史评分数据,在该数据集中,被推荐的产品为电影。在对评分矩阵进行分解时,隐藏特征往往表示产品某些方面的属性,这些属性会影响用户该产品的喜好程度,并最终影响用户对产品的评分。

在本发明的第一实施例中,本发明所提供的基于矩阵分解的产品推荐方法,如图1所示,包括如下步骤:

(1)对历史评分数据进行预处理,得到用户对产品的评分矩阵;

在一个可选的实施方式中,步骤(1)具体包括:

利用历史评分数据生成用户对产品的第一评分矩阵;

若第一评分矩阵的规模大于预设的数据集阈值,则对第一评分矩阵进行降维操作,从而得到第二评分矩阵,并将第二评分矩阵作为评分矩阵;否则,将第一评分矩阵作为评分矩阵;

合理设定数据集阈值并将评分矩阵的规模限定在阈值内,是为了避免因所生成的评分矩阵规模过大,而导致模型训练耗时过长;降维操作也是一个矩阵分解的过程,具体过程包括对特征值大小排序、筛选较大的特征值以及合成,pca(principalcomponentanalysis,主成成分提取)算法是一种常用的降维操作算法;

(2)对评分矩阵中同一用户对不同产品的喜好程度进行排序,并根据排序结果确定损失函数;

在一个可选的实施方式中,步骤(2)具体包括:

对于评分矩阵中的任意一个用户,若根据排序规则,该用户对第一产品的喜好程度大于该用户对第二产品的喜好程度,则由该用户、第一产品和第二产品构成一个有序三元组;

计算每一个有序三元组中,用户对两个产品的评分差值,并对评分差值进行归一化后取其对数;将所有归一化评分差值的对数相加求和,作为迭代项;

根据分解所得两个矩阵的矩阵范数构建第一正则化项,用于防止过拟合;

根据迭代项和第一正则化项确定损失函数;

其中,排序规则为:对于评分矩阵中的任意一个用户u',用户u'对于其评分过的所有产品的喜好程度均相同,u'用户对于其未评分过的所有产品的喜好程度均相同,并且用户u'对于其评分过的任意一个产品的喜好程度大于其未评分过的所有产品的喜好程度;

在确定损失函数时,将同一用户对不同产品喜好程度的排序关系也考虑在内,能够有效提高产品推荐的准确度;

在本实施例中,所确定的损失函数的表达式为:

其中,c1为损失函数,s为由所有有序三元组构成的集合,u为用户编号,i和j均为产品编号,p和q分别表示由评分矩阵分解所得的用户矩阵和产品矩阵,pu表示用户矩阵中与用户u相对应的特征向量,qi和qj分别表示产品矩阵中与产品i和产品j相对应的特征向量,λ为正则化系数,f表示frobenius范数;正则化系数λ的取值一般根据经验在(0,0.5)的范围内设定;

在上述损失函数的表达式中,为迭代项,为第一正则化项;

(3)对评分矩阵进行分解,并根据损失函数对分解结果进行调整,从而得到使得损失函数取值最小的第一特征向量和第二特征向量,即上述损失函数中的pu、qi和qj,其中,pu为第一特征向量,用于表示用户与隐藏特征的关系,qi和qj为第二特征向量,用于表示产品与隐藏特征的关系;

在一个可选的实施方式中,若损失函数存在多个极值,则根据损失函数对分解结果进行调整时所采用的算法为梯度下降法;若损失函数仅存在一个极值,则根据损失函数对分解结果进行调整是所采用的算法为随机梯度下降法;

梯度下降法每次都需要样本的所有数据,计算耗时较长,而随机梯度下降法在进行迭代的时候只需要部分样本,但是在存在多个极值时,随机梯度下降算法可能会出现较大的误差;在不同情况下采用不同的算法最优化损失函数,能够保证计算的精度,同时尽可能地减少计算所需的时间开销;

分别获得第一特征向量和第二特征向量后,即可构建由评分矩阵最终分解得到的用户矩阵和产品矩阵,从而完成矩阵的分解,并通过矩阵相乘得到的评分高低得到向用户推荐产品的推荐列表。

在本发明的第二实施例中,本发明所提供的基于矩阵分解的产品推荐方法与本发明第一实施例的方法步骤类似,所不同之处在于,在步骤(2)中,确定损失函数时,获得迭代项和第一正则化项之后,还会获得任意两个用户之间的用户相似度以及任意两个产品之间的产品相似度,以构建第二正则化项,并根据迭代项、第一正则化项以及第二正则化项确定损失函数;第二正则化项用于防止过拟合;

在一个可选的实施方式中,获得任意两个用户之间的用户相似度以及任意两个产品之间的产品相似度的方法具体包括:

以评分矩阵中的用户和产品为顶点,构建一个有向图;若用户对产品进行过评分,则在有向图中生成一条从该用户指向该产品的有向边;所构建的有向图如图2所示,若两个产品对同一个产品进行过评分,则在有向图中存在两条分别由这两个用户指向该产品的有向边,如图2(a)所示;若同一个用户对两个产品都进行过评分,则在有向图中存在由该用户分别指向这两个产品的有向边,如图2(b)所示;

根据所述有向图分别获得用户对应的顶点的出度集合和产品对应的顶点的入度集合;

任意两个用户的用户相似度为所述两个用户对应顶点的出度集合的交集与并集之比;任意两个产品的产品相似度为所述两个产品对应顶点的入度集合的交集与并集之比;

通过以上方法将用户和产品的关系建立成有向图,就能利用过用户节点的出度集合表示用户的偏好集合,并利用产品节点的入度集合表示偏好产品的用户集合;

用户相似度和产品相似度的计算表达式分别为:

其中,sim1()和sim2()分别表示用户相似度函数和产品相似度函数,u1和u2均为用户编号,i1和i2均为产品编号,uout(u1)和uout(u2)分别表示有向图中用户u1和用户u2的出度集合,iin(i1)和iin(i2)分别表示有向图中产品i1和产品i2的入度集合;

在本实施例中,损失函数的表达式具体为:

其中,c2为损失函数,s为有序三元组集合,u和u1均为用户编号,i、j和i1均为产品编号,p和q分别表示由评分矩阵分解所得的用户矩阵和产品矩阵,pu和pu1分别表示用户矩阵中与用户u和用户u1相对应的特征向量,qi、qj和qi1分别表示产品矩阵中与产品i、产品j和产品i1相对应的特征向量,u1表示与用户u的用户相似度大于预设的用户相似度阈值的用户集合,i1表示与产品i的产品相似度大于预设的产品相似阈值的产品集合,λ、β和γ均为正则化系数,f表示frobenius范数;

在上述损失函数表达式中,在上述损失函数的表达式中,为迭代项,为第一正则化项,为第二正则化项;

分析可知,sim1(u,u1)的值越大,说明用户u与用户u1的用户相似度越高,那么特征向量pu就越接近特征向量若用户u与用户u1的用户相似度较高,那么对应的值会很小,反之,用户u与用户u1的用户相似度较低,那么对应的值会很大;同理,sim2(i,i1)的值越大,产品i和产品i1的产品相似度就越高,那么特征向量qi就越接近特征向量若产品i和产品i1的产品相似度较高,那么对应的值会很小,反之,产品i和产品i1的产品相似度较低,那么对应的值会很大;在上述损失函数的表达式中,将反映用户相似度的和反映产品相似度的作为正则化项加入到损失函数中,能够有效地提高产品推荐的准确度。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1