一种基于Hadoop的加权Slope One推荐算法制造技术

技术编号:18165737 阅读:45 留言:0更新日期:2018-06-09 11:35
本发明专利技术公开了一种基于Hadoop技术的slope one加权算法,根据给出的用户评分文件,求出每个用户对电影的评分矩阵;建立电影的同现矩阵;统计同时看过两部电影的人数;获取所有用户评过分的电影,并输出每位用户对每部电影的评分,未评过则记为0;计算得出用户评价过的电影评分加上预测电影与该电影的平均差的和;统计得出每个用户对每个预测电影和另一部评价过的电影,且也评价过的其他用户对此电影评价的加权值之和及同时评价过这两部电影的用户数;计算获取用户对未评价的电影的预测值。本发明专利技术计算更便捷,可一次性计算出多个待评价电影的预测值。

A weighted Slope One recommendation algorithm based on Hadoop

The invention discloses a slope one weighting algorithm based on Hadoop technology. According to the given user scoring file, the scoring matrix for each user is obtained; the co occurrence matrix of the film is established; the number of the two films is seen at the same time; the movies which all users have been criticized excessively and each user to each movie are output The score, which was not evaluated, was recorded as 0; it was calculated that the user evaluated film score was added to the sum of the average difference between the predicted film and the film; the statistics obtained each user for each forecast film and another film evaluated, and the sum of the weighted values of the evaluation of other users and the two departments at the same time. The number of users of a movie; calculates the predicted value of the movie that is not evaluated by the user. The calculation of the invention is more convenient, and the predicted values of a plurality of films to be evaluated can be calculated at one time.

【技术实现步骤摘要】
一种基于Hadoop的加权SlopeOne推荐算法
本专利技术涉及计算机应用问题,尤其是涉及一种基于Hadoop的加权SlopeOne推荐算法。
技术介绍
目前采用多种方法来对电影评分进行预测,如KNN算法、SVD算法、UserCF算法、ItemCF算法,SlopeOne算法是一种简单方便,且精确度较高的算法。SlopeOne算法是由DanielLemire教授在2005年提出的,虽然是一种简单的C.F.的算法,但是确实解决了若干个难以解决的问题,和其它类似算法相比,它的最大优点在于算法很简单,易于实现,执行效率高,同时推荐的准确性相对很高。现在常用的算法存在一些缺陷,通过的时间复杂度、空间复杂度较高,计算量较大,并且现在的算法没有加权。
技术实现思路
本专利技术要解决的技术问题是提供基于Hadoop技术的slopeone加权算法。为了解决上述技术问题,本专利技术提供了一种基于Hadoop的加权SlopeOne推荐算法,包括以下步骤:S101读取用户评分文件中的数据,形成每个用户对不同项目的评分矩阵;S102读取评分矩阵中的数据,计算每个用户对自己评价过的每两部电影之间的评分差值,整理统计每两部电影的全部评分差值总和以及对此评价的用户数,计算这两部电影的平均评分差值;S103读取评分矩阵中的数据,将其中每个用户评价过的每两部电影筛选出来,最终统计得到同时看过两部电影的总人数;S104读取用户评分文件中的数据,获取所有用户评分过的电影,输出每位用户对每部电影的评分,未评过则记为0,保存所有数据;S105计算得出用户评价过的电影评分加上预测电影与该电影的平均差的和;S106统计得出每个用户对每个预测电影和另一部评价过的电影,且也评价过的其他用户对此电影评价的加权值之和,以及同时评价过这两部电影的用户数;S107计算获取用户对未评价的电影的预测值。优选地,S101的算法为:输入:ratings.dat,输入格式:userID::movieID::pref::time,输出:Step1Output,输出格式:userIDmovieID1:pref1,movieID2:pref2,...读取ratings.dat中的数据,map操作:读取数据;每条数据用split("::")分割;将key设为userID,value设为movieID:pref;将键值收集传递给shuffle整理;reduce操作:将shuffle整理过的键值按照键,将值读进;每个值之间加入一个",";将key设为userID,value设为movieID1:pref1,movieID2:pref2,...;将键值收集保存;保存全部经过map和reduce操作处理过的数据到Step1Output中。优选地,S102的算法为:输入:Step1Output输入格式:userIDmovieID1:pref1,movieID2:pref2,...输出:Step2Output输出格式:movieID1:movieID2sub(pref的平均差值)读取Step1Output中的数据map操作:读取数据;每条数据用split(":")分割;两个for循环计算每个用户所评价过的每两部电影之间的评分差值;将key设为movieID1:movieID2,value设为sub(评分差值);将键值收集传递给shuffle整理;reduce操作:将shuffle整理过的键值按照键,将值读进;统计每两部电影的全部评分差值的值个数count及总和sub;计算平均的评分差值;规范评分差值的格式,限定格式为DecimalFormat("#.0000");将key设为movieID1:movieID2,value设为sub(pref的平均差值);将键值收集保存;保存全部经过map和reduce操作处理过的数据到Step2Output中。优选地,S103的算法为:输入:Step1Output输入格式:userIDmovieID1:pref1,movieID2:pref2,...输出:Step3Output输出格式:movieID1:movieID2sum读取Step1Output中的数据map操作:读取数据;每条数据用split(":")分割;两个for循环每个用户存在评价过的每两部电影添加设value为1;将key设为movieID1:movieID2;将键值收集传递给shuffle整理;reduce操作:将shuffle整理过的键值按照键,将值读进;统计每两部电影的全部看过的用户总数sum;将key设为movieID1:movieID2,value设为sum;将键值收集保存;保存全部经过map和reduce操作处理过的数据到Step3Output中。优选地,S104的算法为:输入:ratings.dat输入格式:userID::movieID::pref::time输出:Step4Output输出格式:userIDmovieID(全部),pref读取ratings.dat的数据;map操作:读取数据;每条数据用split("::")分割;如果movieID在movieList(List,公共,静态)中不存在就添加进去;将key设为userID,value设为movieID,pref;将键值收集传递给shuffle整理;reduce操作:将shuffle整理过的键值按照键,将值读进;每条数据用split(",")分割;以movieID为key,pref为value添加进userMovieList(Map)中;for循环,次数为movieList.size(),如果movieList中不存在userMovieList中的key,那么就将输出的value置为movieID,0;如果存在就将输出好的value置为movieID,pref;将key设为userID;将键值收集保存;保存全部经过map和reduce操作处理过的数据到Step4Output中。优选地,S105的算法为:输入1:Step2Output输入格式:movieID1:movieID2sub输入2:Step4Output输入格式:userIDmovieID(全部),pref输出:Step5Output输出格式:movieID1(待测):movieID2userID,score读取Step2Output和Step4Output的数据map操作:读取数据;每条数据用split(",")分割;如果分割后还包含:那么将key置为movieID1,valueID置为M:movieID2:sub;如果分割后不包含:那么将key置为movieID,valueID置为U:userID:pref;并且如果userScore(Map,公共,静态)中不存在key为userID,那么就添加一个key为userID,value为movieID,pref的记录,如果存在,那么就在key为userID的value后面加入:userID,pref;将键值收集传递给shuffle整理;reduce操作:将shuffle整理过的键值按照键,将值读进;每条数据添加到list(List)中;用split(":,")分割每条数据;如果分割后的数据本文档来自技高网...
一种<a href="http://www.xjishu.com/zhuanli/55/201810022872.html" title="一种基于Hadoop的加权Slope One推荐算法原文来自X技术">基于Hadoop的加权Slope One推荐算法</a>

【技术保护点】
一种基于Hadoop的加权Slope One推荐算法,其特征在于,包括以下步骤:S101读取用户评分文件中的数据,形成每个用户对不同项目的评分矩阵;S102读取评分矩阵中的数据,计算每个用户对自己评价过的每两部电影之间的评分差值,整理统计每两部电影的全部评分差值总和以及对此评价的用户数,计算这两部电影的平均评分差值;S103读取评分矩阵中的数据,将其中每个用户评价过的每两部电影筛选出来,最终统计得到同时看过两部电影的总人数;S104读取用户评分文件中的数据,获取所有用户评分过的电影,输出每位用户对每部电影的评分,未评过则记为0,保存所有数据;S105计算得出用户评价过的电影评分加上预测电影与该电影的平均差的和;S106统计得出每个用户对每个预测电影和另一部评价过的电影,且也评价过的其他用户对此电影评价的加权值之和,以及同时评价过这两部电影的用户数;S107计算获取用户对未评价的电影的预测值。

【技术特征摘要】
1.一种基于Hadoop的加权SlopeOne推荐算法,其特征在于,包括以下步骤:S101读取用户评分文件中的数据,形成每个用户对不同项目的评分矩阵;S102读取评分矩阵中的数据,计算每个用户对自己评价过的每两部电影之间的评分差值,整理统计每两部电影的全部评分差值总和以及对此评价的用户数,计算这两部电影的平均评分差值;S103读取评分矩阵中的数据,将其中每个用户评价过的每两部电影筛选出来,最终统计得到同时看过两部电影的总人数;S104读取用户评分文件中的数据,获取所有用户评分过的电影,输出每位用户对每部电影的评分,未评过则记为0,保存所有数据;S105计算得出用户评价过的电影评分加上预测电影与该电影的平均差的和;S106统计得出每个用户对每个预测电影和另一部评价过的电影,且也评价过的其他用户对此电影评价的加权值之和,以及同时评价过这两部电影的用户数;S107计算获取用户对未评价的电影的预测值。2.如权利要求1所述的基于Hadoop的加权SlopeOne推荐算法,其特征在于,S101的算法为:输入:ratings.dat,输入格式:userID::movieID::pref::time,输出:Step1Output,输出格式:userIDmovieID1:pref1,movieID2:pref2,...读取ratings.dat中的数据,map操作:读取数据;每条数据用split("::")分割;将key设为userID,value设为movieID:pref;将键值收集传递给shuffle整理;reduce操作:将shuffle整理过的键值按照键,将值读进;每个值之间加入一个",";将key设为userID,value设为movieID1:pref1,movieID2:pref2,...;将键值收集保存;保存全部经过map和reduce操作处理过的数据到Step1Output中。3.如权利要求1所述的基于Hadoop的加权SlopeOne推荐算法,其特征在于,S102的算法为:输入:Step1Output输入格式:userIDmovieID1:pref1,movieID2:pref2,...输出:Step2Output输出格式:movieID1:movieID2sub(pref的平均差值)读取Step1Output中的数据map操作:读取数据;每条数据用split(":")分割;两个for循环计算每个用户所评价过的每两部电影之间的评分差值;将key设为movieID1:movieID2,value设为sub(评分差值);将键值收集传递给shuffle整理;reduce操作:将shuffle整理过的键值按照键,将值读进;统计每两部电影的全部评分差值的值个数count及总和sub;计算平均的评分差值;规范评分差值的格式,限定格式为DecimalFormat("#.0000");将key设为movieID1:movieID2,value设为sub(pref的平均差值);将键值收集保存;保存全部经过map和reduce操作处理过的数据到Step2Output中。4.如权利要求1所述的基于Hadoop的加权SlopeOne推荐算法,其特征在于,S103的算法为:输入:Step10utput输入格式:userIDmovieID1:pref1,movieID2:pref2,...输出:Step30utput输出格式:movieID1:movieID2sum读取Step10utput中的数据map操作:读取数据;每条数据用split(":")分割;两个for循环每个用户存在评价过的每两部电影添加设value为1;将key设为movieID1:movieID2;将键值收集传递给shuffle整理;reduce操作:将shuffle整理过的键值按照键,将值读进;统计每两部电影的全部看过的用户总数sum;将key设为movieID1:movieID2,value设为sum;将键值收集保存;保存全部经过map和reduce操作处理过的数据到Step30utput中。5.如权利要求1所述的基于Hadoop的加权SlopeOne推荐算法,其特征在于,S104的算法为:输入:ratings.dat输入格式:userID::movieID::pref::time输出:Step4Output输出格式:userIDmovieID(全部),pref读取ratings.dat的数据;map操作:读取数据;每条数据用split("::")分割;如果movieID在movieList(List,公共,静态)中不存在就添加进去;将key设为userID,value设为movieID,pref;将键值收集传递给shuffle整理;reduce操作:将shuffle整理过的键值按照键,将值读进;每条数据用split(",")分割;以movieID为key,pref为value添加进userMovieList(Map)中;for循环,次数为movieList.size(),如果movieList中不存在userMovieList中的key,那么就...

【专利技术属性】
技术研发人员:杜友明顾嘉奇吴宏杰杨茹戴大东沈华祥
申请(专利权)人:苏州科技大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1