[0054] 下面结合附图和具体实施方式对本发明进行详细说明。
[0055] 本发明基于标签迁移的跨域推荐方法,如图1所示,具体按照以下步骤实施:
[0056] 步骤1、假设A领域为源领域,B领域为目标领域,实现A领域与B领域之间的跨域推荐的前提条件如下:A领域与B领域存在重叠的用户,所述用户共用一套相同的标签系统并且A领域和B领域中都有对应的用户物品评分信息,通过迁移上述共享的标签信息,实现以A领域为源领域辅助目标领域B领域完成推荐任务,或者以B领域为源领域辅助目标领域A领域完成推荐任务;
[0057] 步骤1中A领域与B领域重叠的用户共用一套相同的标签,标签包括属性标签和行为标签,其中属性标签包括性别、年龄、职业,行为标签包括用户对物品所属标签的使用次数。
[0058] 步骤2、利用用户对A领域的评分信息构建A领域用户评分矩阵;
[0059] 步骤2具体如下:
[0060] 步骤2.1、利用Pandas库中的read_table函数读入用户物品评分表,该表中包括的字段有用户ID、物品ID和评分,该函数指定要打开文件的位置、用作列名的行号、用作行索引的列编号或列名,并设置python引擎来对用户物品评分表进行解析;
[0061] 步骤2.2、利用读到的用户物品评分表,使用Pandas的unique函数获取用户列名和物品列名的所有唯一值,然后使用len函数得到唯一的用户和物品的个数,结合numpy的zeros函数,创建行为用户数,列为物品数的全零二维数组;
[0062] 步骤2.3、按元组的方式遍历用户物品评分表,使用pandas的loc函数和python的内建函数getattr,将每个用户对每部物品的评分值对应起来并填充到创建的全零二维数组的对应位置,从而得到用户对物品的评分矩阵user_item_matrix,并保存为user_item_matrix.csv。
[0063] 步骤3、对A领域用户评分矩阵进行分解,得到用户潜在特征矩阵Usrc和物品潜在特征矩阵Vsrc;
[0064] 步骤3具体如下:
[0065] 步骤3.1、利用Pandas库中的read_csv函数读入步骤2得到的用户物品评分矩阵user_item_matrix.csv,通过设置用户潜在评分因子k和物品潜在评分因子l的大小以及最大迭代次数max_iter约束矩阵的分解;
[0066] 步骤3.2、不断调整用户潜在评分因子k和物品潜在评分因子l以及最大迭代次数max_iter的值以最小化目标函数,目标函数达到最小值,得到源领域中的用户潜在特征矩阵Usrc、物品潜在特征矩阵Vsrc以及集群级的用户和物品评分矩阵S。
[0067] 步骤3.2具体如下:
[0068] 通过不断地迭代以最小化目标函数:
[0069]
[0070]
[0071] 其中, m代表源领域中的用户数,k代表用户潜在评分因子,n代表源领域中物品的个数,l代表物品潜在评分因子,Usrc的大小为m×k,表示源领域中m个用户对k个用户潜在评分因子的用户潜在特征矩阵,同样,Vsrc的大小为n×l,表示源领域中n个物品对l个物品潜在评分因子的物品潜在特征矩阵。
[0072] 步骤3.2中当k=l=40,max_iter=200时,目标函数达到最小值。
[0073] 步骤4、基于用户潜在特征矩阵对用户进行聚类,聚类采用K-Means聚类方法,得到每一类别下的用户;
[0074] 步骤4具体如下:
[0075] 步骤4.1、设聚类个数为K,即对应K个初始的类簇,然后由用户潜在特征矩阵Usrc和聚类个数K,随机初始化质心矩阵centroids,再将用户特征矩阵Usrc中的每一行和质心矩阵centroids中的每一个质心之间计算欧氏距离,按照距离最短原则,将用户特征矩阵中的每一行划分到距离最近的类簇中,形成K个类簇;
[0076] 步骤4.2、更新每个类簇的中心,对每个簇内的数据求均值,得到新的质心矩阵centroids,再重新计算用户特征矩阵Usrc中的每一行和新的质心矩阵centroids中的每一个质心之间的欧氏距离,直到质心不再发生改变或者达到设定的迭代次数,最终得到了质心矩阵centroids和对应的类簇矩阵clusterAssment,这样就得到了每一类别下的用户。
[0077] 步骤4.1中计算用户特征矩阵中的每一行和质心矩阵中的每一个质心之间的欧氏距离,计算公式为:
[0078]
[0079] 其中,X表示用户特征矩阵中的某一个数据,Y表示质心矩阵中的某一个数据,xi表示用户特征矩阵中的某一个数据点的坐标,yi表示某一个质心点的坐标,f为用户特征矩阵中所有数据的个数,i代表用户特征矩阵中的某一个数据。
[0080] 步骤5、如图2所示,构建神经网络模型,对步骤4得到的不同类型下的用户使用的标签进行学习,并训练神经网络,得到能根据用户使用标签的特征对用户进行分类的神经网络模型,经过不断地训练得到最优网络模型;
[0081] 步骤5具体如下:
[0082] 步骤5.1、结合用户的属性标签和行为标签,通过量化处理后作为神经网络的输入,用户的属性标签包括用户的年龄、性别、职业,将用户的性别字段进行量化处理,假设用M表示男性,量化后用0表示,F表示女性,量化后用1表示,对于用户的职业字段,分别用0~6七个值表示,用户的行为标签包括用户使用每个物品所属标签的次数,通过统计得到;
[0083] 步骤5.2、将用户的属性标签和行为标签作为网络的输入特征经过隐藏层进行特征提取,设置隐藏层的神经元个数为h;
[0084] 隐藏层的神经元个数h由下面的公式确定:
[0085]
[0086] 其中,p为神经网络输入的神经元个数,q为神经网络输出的神经元个数,a为1~10的常数;
[0087] 步骤5.3、将隐藏层h个神经元的输出作为全连接层的输入,再经过softmax函数后得到分类结果,最终对应L个概率值,其中,L=K,再将L个概率值和1~K个类簇对应,判断属于哪个类别的概率值最大,则属于哪个类别;
[0088] 其中,softmax函数表示为:
[0089]
[0090] 其中,w表示分类数,z属于1~w,yz表示全连接层第z个神经元的输出,将w个输出分别经过softmax函数,得到符合概率分布的分类结果。
[0091] 步骤6、对每一类下的用户进行跨域推荐。
[0092] 步骤6具体如下:
[0093] 步骤6.1、将所述步骤5得到的在同一类下的所有用户在B领域中的评分矩阵进行重组,即将同一类别下的每一个用户的评分矩阵按行放置,得到新的用户在B领域中的评分矩阵user_item_matrix_tar;
[0094] 步骤6.2、使用近邻评分预测方法对步骤6.1得到的评分矩阵user_item_matrix_tar进行填充:
[0095] 近邻评分预测公式为:
[0096]
[0097] 其中,Au是B领域中目标用户u对所有评分物品的平均分,Rvt是B领域中用户v对物品t的评分值,Av是B领域中用户u的邻居用户v对所有评分物品的平均分,sim(u,v)是B领域中目标用户u和u的邻居用户v之间的相似度数值,c是B领域中目标用户u的最近邻个数,j代表1~c中某一个最近邻;
[0098] 步骤6.3、构造对照评分矩阵contrast_score_matrix:对评分矩阵user_item_matrix_tar按列求平均值,得到对照评分矩阵contrast_score_matrix;
[0099] 步骤6.4、将需要进行跨域推荐的用户在B领域中的评分矩阵user_item_matrix_tar与该用户所属类别下的对照评分矩阵contrast_score_matrix进行对比,利用阈值比较的方法,如果对应位置的评分大于阈值,则对用户推荐B领域内的物品,如果对应位置评分小于阈值,则不给用户推荐B领域内的物品,即实现A领域和B领域的跨域推荐。
[0100] 本发明基于标签迁移的跨域推荐方法,在迁移学习的过程中,将评分稠密的领域作为源领域,将评分稀疏的领域作为目标领域,迁移的目的是通过将源领域中的知识迁移到目标领域中,辅助目标领域来完成推荐的任务。对源领域中稠密的用户物品评分矩阵,由于维度较高,首先对评分矩阵进行非负正交矩阵分解,得到用户潜在特征矩阵和物品潜在特征矩阵,然后基于用户潜在特征矩阵,使用K-Means聚类方法,对用户进行聚类,这样就可以得到不同类型下的用户,接下来,通过设计神经网络模型,对每个类别下用户使用的标签特征进行学习,通过不断地训练得到最优的网络模型,得到一个能根据用户使用的标签特征来对用户进行分类的神经网络模型,然后对用户进行跨域推荐。
[0101] 实施例
[0102] 本发明基于标签迁移的跨领域推荐方法,针对单域推荐中存在的数据稀疏性问题和冷启动问题,结合用户的属性标签(性别、年龄、职业等)和用户的行为标签(用户对物品所属标签的使用次数),在电影领域和图书领域之间完成跨域推荐。架构图如图1所示。
[0103] (1)以电影领域作为源领域,首先利用用户对电影的评分信息构建用户电影评分矩阵:利用Pandas库中的read_table函数读入用户电影评分表ratings.dat,其中该表中包括的字段包括用户ID,电影ID和评分。通过该方法可以指定要打开文件的位置、用作列名的行号、用作行索引的列编号或列名等,并设置python引擎来对用户物品评分表进行解析。利用读到的用户电影评分表,使用Pandas的unique函数获取用户列名和电影列名的所有唯一值,然后使用len函数得到唯一的用户和电影的个数,结合numpy的zeros函数,创建一个行为用户数,列为电影数的全零的一个二维数组,再按元组的方式遍历用户电影评分表,使用pandas的loc函数和python的内建函数getattr,将每个用户对每部电影的评分值对应起来并填充到创建的全零的二维数组的对应位置,从而得到用户对电影的评分矩阵user_item_matrix,并保存为user_item_matrix.csv。
[0104] (2)对用户电影评分矩阵user_item_matrix进行分解,得到用户潜在特征矩阵Usrc和电影潜在特征矩阵Vsrc:首先利用Pandas库中的read_csv函数读入用户电影评分矩阵user_item_matrix.csv,通过设置用户潜在特征k和电影潜在特征l的大小以及最大迭代次数max_iter来约束矩阵的分解,通过不断地调整k、l和max_iter的值以最小化目标函数,当k=l=40,max_iter=200时,目标函数达到最小值,就得到了源领域中的用户潜在特征矩阵Usrc、电影潜在特征矩阵Vsrc以及集群级的用户和电影评分矩阵S。
[0105] (3)基于用户潜在特征矩阵Usrc,对用户进行聚类,聚类所采用的方法是K-Means聚类方法,得到每一类别下的用户。首先设定聚类个数K=5,即对应5个初始的类簇,然后由用户潜在特征矩阵Usrc和聚类个数K,随机初始化质心矩阵centroids,再将用户特征矩阵Usrc中的每一行和质心矩阵centroids中的每一个质心之间计算欧氏距离,按照距离最短原则,将用户特征矩阵中的每一行划分到距离最近的类簇中,形成5个类簇,再更新每个簇类的中心,对每个簇内的数据求均值,就得到新的质心矩阵centroids,再重新计算用户特征矩阵Usrc中的每一行和新的质心矩阵centroids中的每一个质心之间的欧氏距离,直到质心不再发生改变或者达到设定的迭代次数,最终得到的质心矩阵centroids和对应的簇类矩阵clusterAssment。
[0106] (4)设计神经网络模型,对不同类型下的用户使用的标签进行学习,训练神经网络,得到一个能根据用户使用标签特征对用户进行分类的神经网络模型,经过不断地训练得到最优网络模型。首先结合用户的属性标签和行为标签,通过量化处理后作为神经网络的输入。用户的属性标签包括用户的年龄、性别、职业等,将用户的性别字段进行量化处理,M用0来表示,F用1来表示,对于用户的职业字段,分别用0~6这七个值来表示,用户的行为标签包括用户使用每个物品所属标签的次数,通过统计得到。再将用户的属性标签和行为标签作为网络的输入特征经过隐藏层进行特征提取,设置输入特征数为21,输出为5,所以设置隐藏层的节点数为5。最后将隐藏层的输出作为全连接层的输入,再经过softmax函数后得到分类结果,最终对应5个概率值,哪个概率值较大,则属于哪个类别。
[0107] (5)对每一类下的用户进行跨域推荐。将图书领域作为目标领域,首先将同一类下的所有用户在图书领域中的评分矩阵进行重组,重组的方法就是将同一类别下的每一个用户的评分矩阵按行放置,得到一个新的用户在图书领域中的评分矩阵user_item_matrix_tar,然后使用近邻评分预测方法对该矩阵进行填充。接下来构造对照评分矩阵contrast_score_matrix。对评分矩阵user_item_matrix_tar,按列求平均值,得到对照评分矩阵contrast_score_matrix。最后将需要进行跨域推荐的用户在图书领域中的评分矩阵user_item_matrix_tar与该用户所属类别下的对照评分矩阵contrast_score_matrix进行对比,利用阈值比较的方法,考虑到用户对物品的打分范围为1~5分,所以设定阈值的大小为3,如果对应位置的评分大于阈值,则可以对用户推荐这类图书,如果对应位置评分小于阈值,则不给用户推荐这类图书。这样就实现了电影领域和图书领域的跨域推荐。
[0108] 本发明应用在跨领域的推荐系统中,用于将源领域稠密的知识通过迁移学习的方法应用到评分知识稀疏的目标领域中,辅助目标领域完成对用户的推荐任务。传统的推荐算法大都集中在单一领域的推荐任务中,随着大数据时代的来临,传统的单域推荐中存在的数据稀疏性问题和冷启动问题愈发严重,迫切需要跨领域的方法来缓解这种问题。本发明提出利用评分知识和领域中的标签信息,通过迁移领域中的标签信息,对目标领域中的用户进行分类,再对每一类用户进行跨域推荐。