本发明涉及一种智能推荐技术领域,尤其涉及一种基于三维张量迭代填补的推荐方法。
背景技术:
传统的推荐方法主要是依据用户对项目的评分数据来进行推荐,而在实际的推荐系统中,所能获得的数据除了用户对项目的评分,通常还包括项目的分类信息。例如,小说可以分为科幻、历史、言情等类别,电影可以分为文艺、战争、动画等类别。传统的推荐方法仅仅依据评分数据进行推荐,而忽略了项目的类别信息,推荐效果不佳。
推荐技术一般都是采用一些算法对空缺的评分数据进行预测或估计(通常,项目数量巨大,用户只对很少的项目有评分,因此评分数据是很稀疏的),然后依据预测或估计的评分进行推荐。已有的矩阵和张量填补算法都需要设置一些超参数,例如低秩约束中秩的上界,范数的惩罚系数等。但是,对于无监督的学习来说,很难选择合适的超参数,这些超参数的选择不仅要耗费大量的计算时间,而且会影响甚至决定推荐的性能。此外,张量填补是一个复杂的优化问题,现有的填补方案往往需要很大的计算量。
技术实现要素:
本发明实施例所要解决的技术问题在于,提供一种结合用户评分数据和项目类别信息的推荐方法,可以不需要设置超参数,并用较小的计算量向用户推荐其喜欢的项目。
为了解决上述技术问题,本发明实施例提供了一种基于三维张量迭代填补的推荐方法,包括以下步骤:
s1:获取所有用户对各个项目的评分数据,以及各个项目所属的项目类别信息,构建三维张量a,具体地,
如果用户i对项目j有评分,且项目j属于类别k,则aijk为评分值;否则,aijk为0,其中,i,j和k分别表示用户、项目和类别的编号,a的三个维度的大小分别为用户的数量,项目的数量和项目类别的数量;
s2:计算所述三维张量a中不为零元素的坐标集合ω;
s3:初始化一个与所述三维张量a具有相同维度的填补张量x,初始化一个与所述三维张量a具有相同维度的方向张量z=0;
s4:进行迭代计算,更新所述填补张量x和方向张量z的值,具体地,
首先计算张量
其中,
s5:判断本代计算得到的所述填补张量x与上三代的x是否足够接近,若否,则跳转到步骤s4;若是,将本代计算得到的所述填补张量x的值作为对所述三维张量a的填补结果,记为b;
s6:根据所述填补后的三维张量b计算推荐程度矩阵t,具体地,
判断用户i对项目j是否评过分;
若是,则向用户i推荐项目j的推荐程度tij等于零,
否则,用户i和项目j在所述填补后的三维张量b中对应一个向量,将这个向量中元素的和作为向用户i推荐项目j的推荐程度tij;
s7:根据在所述推荐程度矩阵t中用户对应的各个项目推荐程度值的排序,向所述用户推荐若干个项目。
进一步地,所述步骤s4中所述张量
将三维张量
令
所述张量
更进一步地,所述步骤s4中所述迭代步长λ的计算方法如下:
实施本发明实施例,具有如下有益效果:
1)本发明技术方案基于“用户-项目-类别”的三维张量进行推荐,既考虑了用户对项目的评分数据,又考虑了项目的类别信息,有助于提升推荐质量。
2)三维张量填补是一个复杂的优化问题,现有的填补方案计算量大,而本发明给出了一种计算量较小的高效填补方案。
3)本发明技术方案基于张量填补进行推荐,但与已有的张量和矩阵填补算法不同,本发明提出的方法不需要设置超参数,省去了调节参数这一复杂繁琐的工作,更容易使用。
4)在每次迭代中,借助张量的矩阵化和矩阵的奇异值分解对方向张量进行近似,既充分考虑了张量中数据之间的相关性,又能对缺失的值进行更新,并且计算开销很小。
5)在每次迭代中,通过对张量展开方向的精心选择,以及对迭代步长的精心设计,使得迭代过程能较快的收敛,具有很高的计算效率。
附图说明
图1是本发明方法的基本的流程示意图;
图2是步长公式的函数图像;
图3是3×4×2的三维张量的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
如图1所示,本发明实施例的一种基于三维张量迭代填补的推荐方法,包括以下步骤。
1、获取所有用户对各个项目的评分数据,以及各个项目所属的项目类别信息,构建三维张量a。具体地,如果用户i对项目j有评分,且项目j属于类别k,则aijk为评分值;否则,aijk为0,其中,i,j和k分别表示用户、项目和类别的编号。a的三个维度的大小分别为用户的数量,项目的数量和项目类别的数量。
2、计算所述三维张量a中不为零元素的坐标集合ω。
3、初始化一个与所述三维张量a具有相同维度的填补张量x,初始化一个与所述三维张量a具有相同维度的方向张量z=0。
4、进行迭代计算,更新所述填补张量x和方向张量z的值。具体地,首先计算张量
其中,所述张量
将三维张量
令
所述张量
其中,所述步骤s4中所述迭代步长λ的计算方法如下:
5、判断本代计算得到的所述填补张量x与上三代的x是否足够接近,若否,则跳转到步骤s4;若是,将本代计算得到的所述填补张量x的值作为对所述三维张量a的填补结果,记为b。
6、根据所述填补后的三维张量b计算推荐程度矩阵t,具体地为:
判断用户i对项目j是否评过分;
若是,则向用户i推荐项目j的推荐程度tij等于零,
否则,用户i和项目j在所述填补后的三维张量b中对应一个向量,将这个向量中元素的和作为向用户i推荐项目j的推荐程度tij。
7、根据在所述推荐程度矩阵t中用户对应的各个项目推荐程度值的排序,向所述用户推荐若干个项目。
需要说明的是:
1)上述步骤4中的迭代公式的设计思想如下:
首先,迭代公式xn 1=xn λ(a-xn)表示让x不断朝着a的方向迭代逼近a,其中,a-xn为方向,λ为迭代步长。
其次,a在ω范围内的值是已知的,在ω范围外的值是未知的,因此(a-xn)被替换成了
最后,如果直接以
2)张量的填补通常希望填补后的张量是低秩的,常用的做法是对x添加约束条件,例如限制x的秩或核范数,但是这样会引入超参数,例如秩或核范数的上限值。对于无监督的学习来说,很难选择合适的超参数,这些超参数的选择不仅要耗费大量的计算时间,而且会影响甚至决定算法的性能。针对这一问题,本发明提出了一种无约束、无参数的,高效的迭代填补方法。该方法虽然在迭代过程中没有对x增加约束条件,但是在每次迭代中,不仅根据数据的相关性计算缺失的值,而且考虑了张量的低秩特性和迭代的收敛速度。
3)本方法仅用张量
4)在选择张量
首先,张量填补是希望填补后的张量是低秩的。
其次,本方法采用
综合上述两方面,
5)本方法迭代步长的公式设计为
首先,本方法采用
其次,随着迭代的进行,张量
最后,步长的取值保证在0到1之间。
本方法设计的步长公式能够同时满足上述要求,其函数图像如图2所示。
6)为了便于理解张量的矩阵化,即张量的展开,下面给出一个三阶张量的示例。假设x为图3所示的3×4×2的张量,那么,张量x沿第1维,第2维和第3维展开的矩阵分别为
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
1.一种基于三维张量迭代填补的推荐方法,其特征在于,包括以下步骤:
s1:获取所有用户对各个项目的评分数据,以及各个项目所属的项目类别信息,构建三维张量a;
如果用户i对项目j有评分,且项目j属于类别k,则aijk为评分值;否则,aijk为0,其中,i,j和k分别表示用户、项目和类别的编号,a的三个维度的大小分别为用户的数量,项目的数量和项目类别的数量;
s2:计算所述三维张量a中不为零元素的坐标集合ω;
s3:初始化一个与所述三维张量a具有相同维度的填补张量x,初始化一个与所述三维张量a具有相同维度的方向张量z=0;
s4:进行迭代计算,更新所述填补张量x和方向张量z的值;
首先计算张量
其中,
s5:判断本代计算得到的所述填补张量x与上三代的x是否足够接近,若否,则跳转到步骤s4;若是,将本代计算得到的所述填补张量x的值作为对所述三维张量a的填补结果,记为b;
s6:根据所述填补后的三维张量b计算推荐程度矩阵t,具体地,
判断用户i对项目j是否评过分;
若是,则向用户i推荐项目j的推荐程度tij等于零,
否则,用户i和项目j在所述填补后的三维张量b中对应一个向量,将这个向量中元素的和作为向用户i推荐项目j的推荐程度tij;
s7:根据在所述推荐程度矩阵t中用户对应的各个项目推荐程度值的排序,向所述用户推荐若干个项目。
2.根据权利要求1所述的基于三维张量迭代填补的推荐方法,其特征在于,所述步骤s4中所述张量
将所述张量
令
所述张量
3.根据权利要求1所述的基于三维张量迭代填补的推荐方法,其特征在于,所述步骤s4中所述迭代步长λ的计算方法如下: