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

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。

时间: 2024-10-25 15:31:37

R语言:recommenderlab包的总结与应用案例的相关文章

R语言 recommenderlab 包

recommend li_volleyball 2016年3月20日 library(recommenderlab) ## Warning: package 'recommenderlab' was built under R version 3.2.4 ## Loading required package: Matrix ## Loading required package: registry ## Loading required package: arules ## ## Attach

安装R语言的包的方法

安装R语言的包的方法: 1. 在线安装 在R的控制台,输入类似install.packages("TSA")  # 安装 TSA install.packages("TSA", contriburl="url",  dependencies = TRUE) # 安装TSA 2. 手动安装(离线安装) 在Windows下: 下载对应的package.zip文件 打开R的菜单条->Packages->"Install packa

R语言的包管理功能

现代的开发语言都已经不再是单一的编程语言和编译环境,而是一个网络化的分布式系统.通过包(packages)管理程序进行软件模块的安装.卸载.更新等操作. 包管理的思路从Linux操作系统而来,通过Debian的apt-get可以从全球数万个网站快速获取软件的最新版本.在Mac OS X上也可以通过MacPort或Brew进行软件包的管理.Java语言自己不带包管理程序,但可通过maven进行包的自动下载和编译.链接.nodejs是通过npm进行包管理.python通过pip进行包管理.这些都是在

R语言diagram包画订单状态流图

代码如下: library("diagram") #a <- read.table(file="clipboard",header=TRUE) write.table(a,file="a.txt",sep=";") aa <- a c <- matrix(nrow=ncol(aa),ncol=ncol(aa),0) i <- 1 while(i<=ncol(aa)){ j <- 1 whil

R语言TTR包的安装

R语言是一门统计语言,主要用于数学建模.统计计算.数据处理.可视化 等几个方向,R语言天生就不同于其他的编程语言.R语言封装了各种基础学科的计算函数,我们在R语言编程的过程中只需要调用这些计算函数,就可以构建出面向不同领域.不同业务的.复杂的数学模型. 一.作用 1.TTR包的目的是在R当中构造技术分析和其它技术交易规则的函数.TTR可在CRAN中找到,目前的版本号是0.22(更新2013-3-18). TTR目前的功能是提供了一些常见的技术分析指标的函数,可以分为下面几类: 移动平均 趋势检测

R语言igraph 包-构建网络图

igaph 是一个项目,目标是建立一条简单,易用的网络分析工具,有 R, python, C/C++ 等语言的具体实现: 项目主页: http://igraph.org/ 在R语言中,对应的就是 igraph 这个R包 安装: install.packages("igraph") 使用: 对于图 graph 这种数据结构而言,最基本的元素包括节点(node) 和 边(节点之间的连线,edge); igraph 这个R包提供了很多种创建graph的方式,我们先看一个最基本的例子,从数据框

R语言 机器学习包

from:http://www.zhizhihu.com/html/y2009/410.html 机器学习是计算机科学和统计学的边缘交叉领域,R关于机器学习的包主要包括以下几个方面:  1)神经网络(Neural Networks): nnet包执行单隐层前馈神经网络,nnet是VR包的一部分(http://cran.r-project.org/web/packages/VR/index.html).  2)递归拆分(Recursive Partitioning): 递归拆分利用树形结构模型,来

R语言XML包的数据抓取

htmlParse 函数 htmlParse加抓HTML页面的函数. url1<-"http://www.caixin.com/"url<-htmlParse(url1,encoding="UTF-8") 但是有的网站会出现报错.例如淘宝,错误信息为: Warning message:XML content does not seem to be XML: 'https://www.taobao.com/' 原因为htmlParse可以抓取http的页面

R语言Cairo包的使用

Cairo使用起来非常简单,和基础包grDevices中的函数对应. CairoPNG---grDevices:png(). CairoTIFF---grDevices:tiff(). CairoPDF---grDevices:pdf(). ... 查看Cairo所支持的图片格式: #加载Cairo包 library(Cairo) #检查所支持的图片格式 Cairo.capabilities() 以iris数据集为例 > head(iris) Sepal.Length Sepal.Width P