本发明涉及大数据技术领域,尤其涉及一种基于矩阵分解的协同过滤推荐优化算法和装置。
背景技术:
近年来,大数据技术已经被广泛应用于电子商务、金融证券、交通旅游和医疗教育等行业。在这个数据爆发的时代,如何从海量数据中甄选出感兴趣的部分,是大数据技术研究的热门话题。协同过滤(cf,collaborativefiltering)推荐技术正是在这样的背景下产生的。典型的基于模型的cf推荐是基于矩阵分解的推荐算法,其中最典型的是基于奇异值分解(svd,singularvaluedecomposition)的推荐算法。
然而,传统的svd推荐算法是基于最小化均方误差(mse,meansquareerror)损失函数和利用随机梯度下降(sgd,stochasticgradientdescend)法建立的。不同用户特征向量或项目特征向量的能量将会影响这些svd推荐算法的性能和稳定性。此外,当系统遭遇异常干扰时,传统的基于mse损失函数的svd推荐算法不能保证鲁棒性。再者,利用最传统的sgd方法对用户特征向量和项目特征向量进行更新不能保证推荐性能。
技术实现要素:
本发明的目的就在于为了解决上述问题而提供一种基于矩阵分解的协同过滤推荐优化算法和装置。
本发明通过以下技术方案来实现上述目的:
本发明一种基于矩阵分解的协同过滤推荐优化算法,包括基于归一化最小均方的矩阵分解协同过滤推荐算法、基于最大相关熵准则的矩阵分解协同过滤推荐算法和基于自适应矩估计优化的矩阵分解协同过滤算法;
所述基于归一化最小均方的矩阵分解协同过滤推荐算法包括以下步骤:
s1.1:用户对旅游景点的评分数据获取并存储;
s1.2:生成用户-旅游景点评分矩阵;
s1.3:生成随机的用户特征矩阵;
s1.4:生成随机的旅游景点特征矩阵;
s1.5:输入学习率参数;
s1.6:输入正则化参数;
s1.7:迭代计算用户的特征矩阵和项目特征矩阵;
所述基于最大相关熵准则的矩阵分解协同过滤推荐算法包括以下步骤:
s2.1:用户对旅游景点的评分数据获取并存储;
s2.2:生成用户-旅游景点评分矩阵;
s2.3:生成随机的用户特征矩阵;
s2.4:生成随机的旅游景点特征矩阵;
s2.5:输入学习率参数;
s2.6:输入正则化参数;
s2.7:输入核参数;
s2.8:迭代计算用户的特征矩阵和项目特征矩阵;
所述基于自适应矩估计优化的矩阵分解协同过滤算法包括以下步骤:
s3.1:用户对旅游景点的评分数据获取并存储;
s3.2:生成用户-旅游景点评分矩阵;
s3.3:生成随机的用户特征矩阵;
s3.4:生成随机的旅游景点特征矩阵;
s3.5:输入学习率参数;
s3.6:输入正则化参数;
s3.7:输入遗忘因子1;
s3.8:输入遗忘因子2;
s3.9:初始化用户特征向量梯度的一阶/二阶矩及其偏置校正量;
s3.10:初始化旅游景点特征向量梯度的一阶/二阶矩及其偏置校正量;
s3.11:迭代计算用户的特征矩阵和项目特征矩阵。
所述步骤s1.7的具体算法为:
s1.7.1当前用户的特征矩阵下标小于或等于评分矩阵的维度时,循环;否则结束循环;
s1.7.2当前旅游景点的特征矩阵下标小于或等于评分矩阵的维度时,循环;否则结束循环;
s1.7.3如果评分矩阵当前元素不为0时,计算该元素与预测元素的误差
s1.7.4利用s1.7.3中的误差更新用户特征矩阵的值;
s1.7.5利用s1.7.3中的误差更新旅游景点特征矩阵的值;
s1.7.6旅游景点的特征矩阵下标自增1,跳转至s1.7.2;
s1.7.7用户的特征矩阵下标自增1,跳转至s1.7.1。
所述步骤s2.8的具体算法为:
s2.8.1:当前用户的特征矩阵下标小于或等于评分矩阵的维度时,循环;否则结束循环;
s2.8.2:当前旅游景点的特征矩阵下标小于或等于评分矩阵的维度时,循环;否则结束循环;
s2.8.3:如果评分矩阵当前元素不为0时,计算该元素与预测元素的误差
s2.8.4:利用s2.8.3中的误差更新用户特征矩阵的值;
s2.8.5:利用s2.8.3中的误差更新旅游景点特征矩阵的值;
s2.8.6:旅游景点的特征矩阵下标自增1,跳转至s2.8.2;
s2.8.7:用户的特征矩阵下标自增1,跳转至s2.8.1。
所述步骤s3.11的具体算法为:
s3.11.1:当前用户的特征矩阵下标小于或等于评分矩阵的维度时,循环;否则结束循环;
s3.11.2:当前旅游景点的特征矩阵下标小于或等于评分矩阵的维度时,循环;否则结束循环;
s3.11.3:计算该元素与预测元素的误差
s3.11.4:计算用户特征向量的梯度
s3.11.5:计算旅游景点特征向量的梯度
s3.11.6:利用s3.11.3中的误差更新用户特征矩阵的值;
s3.11.7:利用s3.11.3中的误差更新旅游景点特征矩阵的值;
s3.11.8:利用s3.11.4计算用户特征向量的梯度的一阶矩和二阶矩的估计量s3.11.9:利用s3.11.5计算旅游景点特征向量的梯度的一阶矩和二阶矩的估计量
s3.11.10:利用s3.11.8计算用户特征向量的梯度的一阶矩和二阶矩的估计量的偏置校正量
s3.11.11:利用s3.11.9计算旅游景点特征向量的梯度的一阶矩和二阶矩的估计量的偏置校正量
s3.11.12:如果评分矩阵当前元素不为0时,跳转至s3.11.3;否则结束循环;
s3.11.13:旅游景点的特征矩阵下标自增1,跳转至s3.11.2;
s3.11.14:用户的特征矩阵下标自增1,跳转至s3.11.1。
本发明一种基于矩阵分解的协同过滤推荐优化装置,包括用户-旅游景点的评分数据存储模块(11)、用户推荐信息综合管理模块(12)和计算模块(13),用户-旅游景点的评分数据存储模块(11)用于存储用户对于旅游景点的评分数据,生成用户-旅游景点的评分矩阵,以及存储预测后的用户-旅游景点的评分矩阵;
用户推荐信息综合管理模块(12)用于接收目标用户的旅游景点推荐申请,并判断用户是否进行过推荐或者是否更新了旅游景点评分,如果用户未进行过推荐或者更新了旅游景点评分,则转发目标用户的旅游景点推荐申请到计算模块(13);否则,从用户-旅游景点的评分数据存储模块(11)中获取用户的推荐列表,推送给用户;
计算模块(13)用于离线计算用户的推荐列表,对用户未进行评分的景点进行预测,对预测的景点评分进行排序,作为用户的推荐备选列表,将计算好的推荐列表存储到用户-旅游景点的评分数据存储模块(11),并转发至用户推荐信息综合管理模块(12)。
本发明的有益效果在于:
本发明是一种基于矩阵分解的协同过滤推荐优化算法和装置,与现有技术相比,本发明具有如下技术效果:
(1)为解决传统funksvd算法在应对不同能量用户特征向量与项目特征向量更新时的性能不佳甚至大能量时的稳定性问题,本发明将归一化方法应用于funksvd算法分别对其用户特征向量和项目特征向量进行归一化,提出了新的基于归一化最小均方矩阵分解(nlms-mf,normalizedleastmeansquarebasedmatrixfactorization)推荐算法。使用北京地区的景点评分数据做仿真验证,实验表明:nlms-mf算法具有比funksvd算法更优的推荐性能。
(2)传统的矩阵分解cf推荐算法都是基于mse损失函数建立的,不具有对抗异常干扰的鲁棒性,本发明提出了基于最大相关熵准则的矩阵分解(mcc-mf,maximumcorrentropycriterionbasedmatrixfactorization)推荐算法以解决这一问题。使用α稳态噪声来模拟带有异常干扰的推荐系统环境,对mcc-mf算法的鲁棒性做验证。实验表明:在北京地区的景点评分数据集上,mcc-mf算法都具有比传统基于mse损失函数的推荐算法更优的推荐性能和更好的应对干扰的鲁棒性。
(3)利用机器学习中对sgd进行优化的常用方法adam,本发明提出了基于自适应矩估计优化的矩阵分解(adam-mf,adaptivemomentestimationmatrixfactorization)协同过滤算法。该算法利用用户特征向量和项目特征向量的梯度的一阶矩和二阶矩分别对用户特征向量和项目特征向量进行更新,避免了在最优解附近的振荡。实验表明:在测试集上,adam-mf拥有比funksvd更快的收敛速度与更好的优化性能。
附图说明
图1为本发明实施例的一种基于归一化最小均方的矩阵分解协同过滤推荐算法;
图2为本发明实施例的基础旅游景点库的存储结构示意图;
图3为本发明实施例的用户-旅游景点的评分矩阵、用户特征矩阵、旅游景点特征矩阵的示意图;
图4为本发明实施例采用协同过滤算法预测后的基础旅游景点库的存储结构示意图;
图5为本发明实施例的一种基于最大相关熵准则的矩阵分解协同过滤推荐算法;
图6为本发明实施例的一种基于自适应矩估计优化的矩阵分解协同过滤算法;
图7为发明实施例一种基于协同过滤优化的推荐装置的结构示意图。
具体实施方式
下面结合附图对本发明作进一步说明:
本发明的第一个目的是提供一种基于协同过滤优化的推荐算法,克服了现有的协同过滤算法应对不同能量(通常指方差)用户特征向量和项目特征向量引起的性能退化和稳定性问题,保证推荐系统的性能。
基于上述目的本发明提供的一种基于归一化最小均方的矩阵分解协同过滤推荐算法,应用于旅游景点库。所述旅游景点库包括用户曾经去过并且做出评价的景点以及用户从未去过的景点;所述推荐算法包括:
接收用户的景点推荐申请,根据用户的历史行为数据,构建用户对旅游景点的评分矩阵,利用用户已有的评分数据,对用户未进行评分的旅游景点进行预测,最终根据预测结果,选取用户评分较高的10个地点进行推荐。
第一步,接收用户的景点推荐申请,从旅游景点库中获取用户对景点的评分矩阵r,并随机生成用户的特征矩阵p,相应的用户u的特征向量为pu;旅游景点的特征矩阵q,相应的景点i的特征向量为qi。
第二步,为了对用户特征向量pu进行迭代更新,因此利用线性回归的方法将用户-项目评分矩阵r分解为用户特征矩阵p与项目特征矩阵q的乘积的形式,且使得它们之间的误差最小化,该优化问题可以表示如下:
这里||·||f为矩阵的f范数。对上式优化问题的求解需要考虑损失函数。在传统的推荐算法中,通常使用均方误差损失函数,并且为了防止过拟合,上式优化问题需要引入用户特征向量pu和项目特征向量qi的l2正则化项。均方误差(mse,meansquareerror)损失函数,其表示如下
上式中,λ>0为正则化参数,||·||为欧几里得范数。
因此,分别求上式中mse损失函数关于用户特征向量pu和景点特征向量qi的梯度如下:
从而根据pu和qi的梯度,利用随机梯度下降(sgd,stochasticgradientdescend)方法,可对pu和qi进行迭代更新,式中η>0为学习率,其可以控制算法的收敛速度和稳态误差。如下:
然而当用户特征向量pu或旅游景点特征向量qi的能量(通常指它们的方差)不同时,固定的学习率将会导致算法的性能恶化甚至不稳定性。为了解决该问题,本发明引入了归一化方法,具体如下:
首先,为了对用户特征向量pu进行迭代更新,考虑如下的优化模型:
这里δ>0为很小的自然数以防止分母为零,通常取δ=10-8。在上述优化模型中,损失函数可以表示为
为了防止过拟合,在上式损失函数中引入l2正则化项可得:
这里λ>0为正则化参数。因此,利用上述损失函数,可求其关于用户特征向量pu的梯度如下所示
从而,利用sgd优化方法,可得用户特征向量pu的迭代更新方程如下所示,其中η>0为学习率:
接下来,利用与求解用户特征向量pu相似的方法求解旅游景点特征向量qi。因此,首先考虑如下带有l2正则化项的求解项目特征向量的优化模型:
上式所示的优化模型中的损失函数可以表示为:
可求解该损失函数关于项目特征向量qi的梯度如下所示:
从而,利用sgd优化方法,可得项目特征向量qi的迭代更新方程如下所示:
通过不断迭代更新用户特征向量pu和项目特征向量qi,直到用户特征矩阵p和旅游景点特征矩阵q不再发生改变,从而得到用户-评分矩阵r的预测矩阵
本发明的第二个目的是提供一种基于协同过滤优化的推荐算法,克服了现有的协同过滤算法应对系统异常干扰引起的算法无法收敛的问题,保证推荐系统的鲁棒性。
基于上述目的本发明提供的一种基于最大相关熵准则的矩阵分解协同过滤推荐算法,应用于旅游景点库。所述推荐算法包括:
接收用户的景点推荐申请,根据用户的历史行为数据,构建用户对旅游景点的评分矩阵,利用用户已有的评分数据,对用户未进行评分的旅游景点进行预测,最终根据预测结果,选取用户评分较高的10个地点进行推荐。
第一步,接收用户的景点推荐申请,从旅游景点库中获取用户对景点的评分矩阵r,并随机生成用户的特征矩阵p,相应的用户u的特征向量为pu;旅游景点的特征矩阵q,相应的景点i的特征向量为qi。
第二步,为了对用户特征向量pu进行迭代更新,因此利用线性回归的方法将用户-项目评分矩阵r分解为用户特征矩阵p与项目特征矩阵q的乘积的形式,且使得它们之间的误差最小化,该优化问题可以表示如下:
第三步,对上式优化问题的求解需要考虑损失函数。在传统的推荐算法中,通常使用mse损失函数,利用sgd优化方法对用户特征向量pu和项目特征向量qi进行迭代更新。然而,由于mse损失函数是一个二次函数,当误差eu,i很大时,其一阶导数也很大,从而利用sgd方法求解的算法不能保证鲁棒性。为了解决该问题,本发明引入了相关熵损失(closs,correntropyloss)函数来替代传统的mse损失函数,并使用随机梯度上升(sga,stochasticgradientascend)来进行迭代求解。其具体如下:
首先,定义closs损失函数如下:
上式中σ>0为高斯核的核宽。利用上式中定义的closs函数替换传统推荐算法的优化模型中的mse损失函数,可得如下的最小化模型:
该优化模型可以等价为以下优化问题:
当数据量较大或数据维度高时,该优化算法将遭遇过拟合的风险,因此,引入l2正则化项可得如下的优化模型:
这里λ>0为正则化参数,通常取较小值,||·||为向量的欧几里得范数。
由于上式中所示的是最大化优化模型,因此不能用传统的sgd优化方法对其进行求解,而需要用到随机梯度上升(sga,stochasticgradientascend)优化方法,也就是利用正梯度方向迭代更新参数以获得损失函数的最大值。
上式对应的损失函数如下:
分别求上式中l(eu,i)关于用户特征向量pu和项目特征向量qi的梯度为:
这里
这里的η>0为学习率,其可以控制算法的收敛速度和稳态误差,即当η较大时收敛速度快但稳态误差大,而小的η可导致相反的结果。通过不断迭代更新用户特征向量pu和项目特征向量qi,直到用户特征矩阵p和旅游景点特征矩阵q不再发生改变,从而得到用户-评分矩阵r的预测矩阵
本发明的第三个目的是提供一种基于协同过滤优化的推荐算法,克服了现有的协同过滤算法在最优解附近的振荡,保证推荐系统的性能。
基于上述目的本发明提供的一种基于自适应矩估计优化的矩阵分解协同过滤算法,应用于旅游景点库。所述推荐算法包括:
接收用户的景点推荐申请,根据用户的历史行为数据,构建用户对旅游景点的评分矩阵,利用用户已有的评分数据,对用户未进行评分的旅游景点进行预测,最终根据预测结果,选取用户评分较高的10个地点进行推荐。
第一步,接收用户的景点推荐申请,从旅游景点库中获取用户对景点的评分矩阵r,并随机生成用户的特征矩阵p,相应的用户u的特征向量为pu;旅游景点的特征矩阵q,相应的景点i的特征向量为qi。
第二步,为了对用户特征向量pu进行迭代更新,因此利用线性回归的方法将用户-项目评分矩阵r分解为用户特征矩阵p与项目特征矩阵q的乘积的形式,且使得它们之间的误差最小化,该优化问题可以表示如下:
对上式优化问题的求解需要考虑损失函数。在传统的推荐算法中,通常使用均方误差损失函数,并且为了防止过拟合,上式优化问题需要引入用户特征向量pu和项目特征向量qi的l2正则化项。均方误差(mse,meansquareerror)损失函数,其表示如下
传统推荐算法中,对于mse损失函数的求解采用了sgd的方法,然而sgd优化方法利用固定学习率η对参数进行更新,当数据相当稀疏或者特征具有显著不同的出现频率时,固定的η得不到良好的优化性能。为了解决该问题,本发明引入了自适应矩估计(adam,adaptivemomentestimation)优化方法,以加快算法收敛速度和提高推荐性能。具体如下:
首先对用户特征向量pu进行优化,求得其关于pu的梯度如下所示:
将该梯度表示为
这里的
联合上式,利用adam优化参数更新方式,可得用户特征向量pu的迭代更新方程如下所示:
这里的ε>0为很小的常数,通常取ε=10-8,η>0为固定学习率,通常取η=0.01。
接下来利用adam优化方法对项目特征向量qi进行优化。将项目特征向量qi的梯度表示为
这里的
联合上式,利用adam优化参数更新方式,可得旅游景点特征向量pu的迭代更新方程如下所示:
通过不断迭代更新用户特征向量pu和项目特征向量qi,直到用户特征矩阵p和旅游景点特征矩阵q不再发生改变,从而得到用户-评分矩阵r的预测矩阵
实施例1:
图1为本发明实施例一种基于协同过滤优化的推荐算法的流程图。本发明实施例提出了一种基于协同过滤优化的推荐算法,应用于旅游景点库。所述旅游景点库包括用户曾经去过并且做出评价的景点以及用户从未去过的景点;所述推荐算法包括:
第一步,接收目标用户的旅游景点推荐申请,并从数据库中获取用户-旅游景点的评分矩阵。对于用户曾经到访且做出过评分的地点,按照实际评分进行存储,其余未到访地点记为0分。如图2所示。
第二步,随机生成用户的特征矩阵和旅游景点的特征矩阵,此时,用户-旅游景点的评分矩阵、用户特征矩阵、旅游景点特征矩阵的示意图如图3所示。
第三步,根据所述的用户特征矩阵和旅游景点特征矩阵,采用本发明提出的一种基于归一化最小均方的矩阵分解协同过滤推荐算法,对用户特征矩阵和旅游景点特征矩阵进行迭代更新。其中,用户特征矩阵的迭代更新计算公式为:
旅游景点特征矩阵的迭代更新计算公式为:
上式中,η>0为学习率,λ>0为正则化参数,δ>0为一个很小的数,避免分母为0,pu为用户u的特征向量,qi为旅游景点i的特征向量,eu,i为用户对旅游景点的评分预测值和实际值之间的差。
第四步,根据停止迭代的用户特征矩阵和旅游景点特征矩阵,计算得到用户-旅游景点的预测评分矩阵,该步骤的计算公式为:
上式中
第五步,根据目标用户的唯一识别码,获取目标用户的旅游景点评分预测向量,根据评分结果,对旅游景点进行降序排序。得到的列表作为候选推荐列表。
第六步,对于上述候选推荐列表,根据业务需要,选取前n个旅游景点,对目标用户进行推送。
实施例2:
图5为本发明实施例一种基于最大相关熵准则的矩阵分解协同过滤推荐算法的流程图。本发明实施例提出了一种基于协同过滤优化的推荐算法,应用于旅游景点库。所述旅游景点库包括用户曾经去过并且做出评价的景点以及用户从未去过的景点;所述推荐算法包括:
第一步,接收目标用户的旅游景点推荐申请,并从数据库中获取用户-旅游景点的评分矩阵。对于用户曾经到访且做出过评分的地点,按照实际评分进行存储,其余未到访地点记为0分。如图2所示。
第二步,随机生成用户的特征矩阵和旅游景点的特征矩阵,此时,用户-旅游景点的评分矩阵、用户特征矩阵、旅游景点特征矩阵的示意图如图3所示。
第三步,根据所述的用户特征矩阵和旅游景点特征矩阵,采用本发明提出的一种基于最大相关熵准则的矩阵分解协同过滤推荐算法,对用户特征矩阵和旅游景点特征矩阵进行迭代更新。其中,用户特征矩阵的迭代更新计算公式为:
旅游景点特征矩阵的迭代更新计算公式为:
上式中,η>0为学习率,λ>0为正则化参数,δ>0为一个很小的数,避免分母为0,σ>0为高斯核的核宽,pu为用户u的特征向量,qi为旅游景点i的特征向量,eu,i为用户对旅游景点的评分预测值和实际值之间的差。
第四步,根据停止迭代的用户特征矩阵和旅游景点特征矩阵,计算得到用户-旅游景点的预测评分矩阵,该步骤的计算公式为:
上式中
第五步,根据目标用户的唯一识别码,获取目标用户的旅游景点评分预测向量,根据评分结果,对旅游景点进行降序排序。得到的列表作为候选推荐列表。
第六步,对于上述候选推荐列表,根据业务需要,选取前n个旅游景点,对目标用户进行推送。
实施例3:
图6为本发明实施例一种基于自适应矩估计优化的矩阵分解协同过滤算法的流程图。本发明实施例提出了一种基于协同过滤优化的推荐算法,应用于旅游景点库。所述旅游景点库包括用户曾经去过并且做出评价的景点以及用户从未去过的景点;所述推荐算法包括:
第一步,接收目标用户的旅游景点推荐申请,并从数据库中获取用户-旅游景点的评分矩阵。对于用户曾经到访且做出过评分的地点,按照实际评分进行存储,其余未到访地点记为0分。如图2所示。
第二步,随机生成用户的特征矩阵和旅游景点的特征矩阵,此时,用户-旅游景点的评分矩阵、用户特征矩阵、旅游景点特征矩阵的示意图如图3所示。
第三步,根据所述的用户特征矩阵和旅游景点特征矩阵,采用本发明提出的一种基于自适应矩估计优化的矩阵分解协同过滤算法,对用户特征矩阵和旅游景点特征矩阵进行迭代更新。其中,用户特征矩阵的迭代更新计算公式为:
旅游景点特征矩阵的迭代更新计算公式为:
上式中,pu为用户u的特征向量,qi为旅游景点i的特征向量,
第四步,根据停止迭代的用户特征矩阵和旅游景点特征矩阵,计算得到用户-旅游景点的预测评分矩阵,该步骤的计算公式为:
上式中
第五步,根据目标用户的唯一识别码,获取目标用户的旅游景点评分预测向量,根据评分结果,对旅游景点进行降序排序。得到的列表作为候选推荐列表。
第六步,对于上述候选推荐列表,根据业务需要,选取前n个旅游景点,对目标用户进行推送。
实施例4:
本发明实施例还提供一种基于协同过滤优化的推荐装置,参照图7所示。所述推荐装置应用于旅游景点库。所述旅游景点库包括用户曾经去过并且做出评价的景点以及用户从未去过的景点;所述推荐装置包括:
用户-旅游景点的评分数据存储模块11,用于存储用户对于旅游景点的评分数据,生成用户-旅游景点的评分矩阵,以及存储预测后的用户-旅游景点的评分矩阵。
用户推荐信息综合管理模块12,用于接收目标用户的旅游景点推荐申请,并判断用户是否进行过推荐或者是否更新了旅游景点评分,如果用户未进行过推荐或者更新了旅游景点评分,则转发目标用户的旅游景点推荐申请到计算模块13;否则,从模块11中获取用户的推荐列表,推送给用户。
计算模块13,用于离线计算用户的推荐列表,对用户未进行评分的景点进行预测,对预测的景点评分进行排序,作为用户的推荐备选列表,将计算好的推荐列表存储到模块11,并转发至模块12。
以上显示和描述了本发明的基本原理和主要特征及本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。