热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

R语言:recommenderlab包的总结与应用案例

R语言:recommenderlab包的总结与应用案例1.推荐系统:recommenderlab包整体思路recommenderlab包提供了一个可以用评分数据和0-1数据来发展和测试推荐算法的框
R语言:recommenderlab包的总结与应用案例  1. 推荐系统:recommenderlab包整体思路

recommenderlab包提供了一个可以用评分数据和0-1数据来发展和测试推荐算法的框架。
它提供了几种基础算法,并可利用注册机制允许用户使用自己的算法
recommender包的数据类型采用S4类构造。

(1)评分矩阵数据接口:使用抽象的raringMatrix为评分数据提供接口。raringMatrix采用了很多类似矩阵对象的操作,如 dim(),dimnames() ,rowCounts() ,colMeans() ,rowMeans(),colSums(),rowMeans();也增加了一些特别的操作方法,如sample(),用于从用户(即,行)中抽样,image()可以生成像素图。raringMatrix的两种具体运用是realRatingMatrix和binaryRatingMatrix,分别对应评分矩阵的不同情况。其中realRatingMatrix使用的是真实值的评分矩阵,存储在由Matrix包定义的稀疏矩阵(spare matrix)格式中;binaryRatingMatrix使用的是0-1评分矩阵,存储在由arule包定义的itemMatrix中。

(2)存储推荐模型并基于模型进行推荐。类Recommender使用数据结构来存储推荐模型。创建方法是:Rencommender(data=ratingMatrix,method,parameter=NULL),返回一个Rencommender对象object,可以用来做top-N推荐的预测:
predict(object,newdata,n,type=c('topNlist,ratings'),…)

(3)使用者可以利用registry包提供的注册机制自定义自己的推荐算法。注册机制调用recommenderRegistry并存贮推荐算法的名字和简短描述。

(4)评价推荐算法的表现:recommender包提供了evaluationScheme类的对象用于创建并保存评价计划。创建函数如下: evaluatiomScheme(data,method,train,k,given) 这里的方法可以采用简单划分、自助法抽样、k-折交叉验证等。接下来可以使用函数evalute()使用评价计划的多个评价算法的表现。


2.实例分析


library(recommenderlab)
library(ggplot2)

##数据处理与数据探索性分析

data(MovieLense)
image(MovieLense)
# 获取评分
ratings.movie <- data.frame(ratings = getRatings(MovieLense))
summary(ratings.movie$ratings)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 3.00 4.00 3.53 4.00 5.00

ggplot(ratings.movie, aes(x = ratings)) + geom_histogram(fill = "beige", color = "black",
    binwidth = 1, alpha = 0.7) + xlab("rating") + ylab("count")


# 标准化
ratings.movie1 <- data.frame(ratings = getRatings(normalize(MovieLense, method = "Z-score")))
summary(ratings.movie1$ratings)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -4.850 -0.647 0.108 0.000 0.751 4.130
ggplot(ratings.movie1, aes(x = ratings)) + geom_histogram(fill = "beige", color = "black",
    alpha = 0.7) + xlab("rating") + ylab("count")


# 用户的电影点评数
movie.count <- data.frame(count = rowCounts(MovieLense))
ggplot(movie.count, aes(x = count)) + geom_histogram(fill = "beige", color = "black",
    alpha = 0.7) + xlab("counts of users") + ylab("counts of movies rated")


rating.mean <- data.frame(rating = colMeans(MovieLense))
ggplot(rating.mean, aes(x = rating)) + geom_histogram(fill = "beige", color = "black",
    alpha = 0.7) + xlab("rating") + ylab("counts of movies ")


##推荐算法的情况

# 先看可以使用的方法
recommenderRegistry$get_entries(dataType = "realRatingMatrix")
#对于realRatingMatrix有六种方法:IBCF(基于物品的推荐)、UBCF(基于用户的推荐)、SVD(矩阵因子化)、PCA(主成分分析)、 RANDOM(随机推荐)、POPULAR(基于流行度的推荐)
#利用前940位用户建立推荐模型

m.recomm <- Recommender(MovieLense[1:940], method = "IBCF")
m.recomm


#对后三位用户进行推荐预测,使用predict()函数,默认是topN推荐,这里取n=3。预测后得到的一个topNList对象,可以把它转化为列表,看预测结果。
(ml.predict <- predict(m.recomm, MovieLense[941:943], n = 3))
str(ml.predict)
as(ml.predict, "list")#预测结果


#代码示例

library(recommenderlab)
data(MovieLense)
scheme <- evaluationScheme(MovieLense, method = "split", train = 0.9, k = 1,
    given = 10, goodRating = 4)
algorithms <- list(popular = list(name = "POPULAR", param = list(normalize = "Z-score")),
    ubcf = list(name = "UBCF", param = list(normalize = "Z-score", method = "Cosine",
        nn = 25, minRating = 3)), ibcf = list(name = "IBCF", param = list(normalize = "Z-score")))
results <- evaluate(scheme, algorithms, n = c(1, 3, 5, 10, 15, 20))
plot(results, annotate = 1:3, legend = "topleft") #ROC
plot(results, "prec/rec", annotate = 3)#precision-recall

# 按照评价方案建立推荐模型
model.popular <- Recommender(getData(scheme, "train"), method = "POPULAR")
model.ibcf <- Recommender(getData(scheme, "train"), method = "IBCF")
model.ubcf <- Recommender(getData(scheme, "train"), method = "UBCF")
# 对推荐模型进行预测
predict.popular <- predict(model.popular, getData(scheme, "known"), type = "ratings")
predict.ibcf <- predict(model.ibcf, getData(scheme, "known"), type = "ratings")
predict.ubcf <- predict(model.ubcf, getData(scheme, "known"), type = "ratings")
# 做误差的计算
predict.err <- rbind(calcPredictionError(predict.popular, getData(scheme, "unknown")),
    calcPredictionError(predict.ubcf, getData(scheme, "unknown")), calcPredictionError(predict.ibcf,
        getData(scheme, "unknown")))
rownames(predict.err) <- c("POPULAR, "UBCF", "IBCF")
predict.err

#calcPredictionError()的参数“know”和“unknow”表示对测试集的进一步划分:“know”表示用户已经评分的,要用来预测的items;“unknow”表示用户已经评分,要被预测以便于进行模型评价的items。

推荐阅读
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Givenasinglylinkedlist,returnarandomnode'svaluefromthelinkedlist.Eachnodemusthavethe s ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
author-avatar
卸妆乳123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有