ie=UTF8&refRID=0H4H2NSSR8F34R76E2TP网页上的元素:
数据演示样例
1,565,31,807,21,201,11,557,91,987,101,59,51,305,61,153,31,139,71,875,51,722,102,977,42,806,32,654,82,21,82,662,52,437,62,576,32,141,82,311,42,101,32,540,92,87,32,65,82,501,62,710,52,331,92,542,42,757,92,590,7
1,M,402,M,273,M,414,F,435,F,166,M,367,F,368,F,469,M,5010,M,2111,F,1112,M,4213,F,4014,F,2815,M,2516,M,6817,M,5318,F,6919,F,4820,F,5621,F,36
单机算法:在单机内存计算,支持多种算法推荐算法,部署执行简单,修正处理数据量有限分步式算法:基于Hadoop集群执行,支持有限的几种推荐算法。部署执行复杂,支持海量数据开发环境
源码
控制台输出:
userEuclideanAVERAGE_ABSOLUTE_DIFFERENCEEvaluaterScore:0.33333325386047363RecommenderIREvaluator:[Precision:0.3010752688172043,Recall:0.08542713567839195]userLoglikelihoodAVERAGE_ABSOLUTE_DIFFERENCEEvaluaterScore:2.5245869159698486RecommenderIREvaluator:[Precision:0.11764705882352945,Recall:0.017587939698492466]userEuclideanNoPrefAVERAGE_ABSOLUTE_DIFFERENCEEvaluaterScore:4.288461538461536RecommenderIREvaluator:[Precision:0.09045226130653267,Recall:0.09296482412060306]itemEuclideanAVERAGE_ABSOLUTE_DIFFERENCEEvaluaterScore:1.408880928305655RecommenderIREvaluator:[Precision:0.0,Recall:0.0]itemLoglikelihoodAVERAGE_ABSOLUTE_DIFFERENCEEvaluaterScore:2.448554412835434RecommenderIREvaluator:[Precision:0.0,Recall:0.0]itemEuclideanNoPrefAVERAGE_ABSOLUTE_DIFFERENCEEvaluaterScore:2.5665197873957957RecommenderIREvaluator:[Precision:0.6005025125628134,Recall:0.6055276381909548]slopeOneAVERAGE_ABSOLUTE_DIFFERENCEEvaluaterScore:2.6893078179405814RecommenderIREvaluator:[Precision:0.0,Recall:0.0]
可视化“评估推荐器”输出:
控制台输出:仅仅截取部分结果
我们查看uid=65的用户推荐信息:
查看user.csv数据集
>user[65,]useridgenderage6565M14
用户65,男性。14岁。
以itemEuclideanNoPref的算法的推荐结果。查看bookid=666的图书评分情况
>rating[which(rating$bookid==666),]useridbookidpref646446661013278966672470165666326971796667
发现有4个用户对666的图书评分。查看这4个用户的属性数据
>user[c(44,89,165,179),]useridgenderage4444F768989M40165165F59179179F68
这4个用户,3女1男。
我们如果男性和男性有同样的图书兴趣。女性和女性有同样的图书偏好。
由于用户65是男性,所以我们接下来排除女性的评分者。仅仅保留男性评分者的评分记录。
控制台输出:
userEuclidean=>uid:65,itemEuclidean=>uid:65,(784,8.090909)(276,8.000000)(476,7.666667)userEuclideanNoPref=>uid:65,itemEuclideanNoPref=>uid:65,(887,2.250000)(356,2.166667)(430,1.866667)
我们发现,因为仅仅保留男性的评分记录,数据量就变得比較少了。基于用户的协同过滤算法。已经没有输出的结果了。
基于物品的协同过滤算法,结果集也有所变化。
我再进一步向下追踪:查询哪些用户对图书887进行了打分。
>rating[which(rating$bookid==887),]useridbookidpref1280858872174311988782757184887427911868875
有4个用户对图书887评分,再分别查看这个用户的属性
>user[c(85,119,184,186),]useridgenderage8585F31119119F49184184M27186186M35
当中2男,2女。因为我们的算法,已经排除了女性的评分,我们能够判断图书887的推荐应该来自于2个男性的评分者的推荐。
分别计算用户65,与用户184和用户186的评分的图书交集。
rat65<-rating[which(rating$userid==65),]rat184<-rating[which(rating$userid==184),]rat186<-rating[which(rating$userid==186),]>intersect(rat65$bookid,rat184$bookid)integer(0)>intersect(rat65$bookid,rat186$bookid)[1]65375
最后发现,用户65与用户186都给图书65和图书375打过分。我们再打分出用户186的评分记录。
>rat186useridbookidpref27901866572791186887527921865293279318637562794186566727951861694279618690712797186821227981867205279918664252800186137328011867441280218689622803186156628041863923280518638632806186901728071866962808186845628091869983
用户186。还给图书887打过分,所以对于给65用户推荐图书887。是合理的。