- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
recommenderlab?是R语言非常强大的包,能帮助使用者针对评分数据或者0-1(不喜欢/喜欢)二分数据开发和测试推荐算法,本文就是利用该包对于?movielens?的电影评分数据进行预测和推荐,会对比基于用户的协同过滤和基于项的协同过滤在推荐效果上的差别。
1 获取电影数据
电影数据来源于/datasets/movielens/网站,本文分析的数据是MovieLens 100k,总共有100,000个评分,来自1000位用户对1700部电影的评价。
2 数据准备和清理
设置好工程路径后,可用读入数据,注意数据的格式,第一列是 user id,第二列是 item id,第三列是 rating,第四列是时间戳,时间戳这里用不到,可去掉。
ml100k - read.table(u.data, header = F, stringsAsFactors = T)
head(ml100k)
?? V1? V2 V3??????? V4
1 196 242? 3 881250949
2 186 302? 3 891717742
3? 22 377? 1 878887116
ml100k - ml100k[, -4]
可以简单看下 rating 的分布情况
prop.table(table(ml100k[, 3]))
???????? 1????????? 2????????? 3????????? 4????????? 5
00000
summary(ml100k[, 3])
?? Min. 1st Qu.? Median??? Mean 3rd Qu.??? Max.??? NAs
? 1.000?? 3.000?? 3.000?? 3.206?? 4.000?? 5.000???? 812
可以看出,3 星和 4 星的数量最多,接近总数的75%,1 星和 5 星的数量最少,和预期的一致。数据格式和我们想要的行为用户,列为项目的 ratingMatrix 还有很大的差距,对此可以使用?reshape?包的?cast()?进行转换,注意转换后的缺失值默认为NA。
library(reshape)
ml100k - cast(ml100k, V1 ~ V2, value = V3)
ml.useritem[1:3, 1:6]
?? 1? 2? 3? 4? 5? 6
1? 5? 3? 4? 3? 3? 5
2? 4 NA NA NA NA NA
3 NA NA NA NA NA NA
到此,把数据整理成 ratingMatrix,接下来利用 recommenderlab 处理数据。
3 recommenderlab 处理数据
在用 recommenderlab 处理数据之前,需将数据转换为?realRatingMatrix?类型,这是 recommenderlab 包中专门针对 1-5 star 的一个新类,需要从?matrix?转换得到。上文获得的?ml.useritem?有两个类属性,其中?cast_df?是不能直接转换为?matrix?的,因此需要去掉这个类属性,只保留?data.frame
class(ml.useritem)
[1] cast_df??? data.frame
class(ml.useritem) - data.frame??? ##只保留data.frame的类属性
ml.useritem - as.matrix(ml.useritem)
ml.ratingMatrix - as(ml.useritem, realRatingMatrix)? ##转换为realRatingMatrix
ml.ratingMatrix
943 x 1682 rating matrix of class ‘realRatingMatrix’ with 100000 ratings.
ml.ratingMatrix?是可以用 recommenderlab 进行处理的?realRatingMatrix,943是 user 数,1682 指的是 item 数,?realRatingMatrix?可以很方便地转换为?matrix?和?list
as(ml.ratingMatrix , matrix)[1:3, 1:10]
?? 1? 2? 3? 4? 5? 6? 7? 8? 9 10
1? 5? 3? 4? 3? 3? 5? 4? 1? 5? 3
2? 4 NA NA NA NA NA NA NA NA?
文档评论(0)