发布时间 : 星期四 文章基于Knn算法的图书推荐系统(毕业设计)更新完毕开始阅读b5dabdc390c69ec3d4bb7528
华北科技学院毕业设计
6.3 R语言与Java语言
Java语言提供了R应用的REngine.jar和RServerEngine.jar包,用于Java中使
用R语言。下面使用简单的例子来介绍RSever的使用:
1. 需要在R软件中下载RServe包,然后加载包,调用函数启动RServe 2. 在Java端导入REngine.jar和RServerEngine.jar 3. 在Java端应用如下函数
this.rc=new RConnection();
rc.eval(\
String s=\System.out.println(\读取代码\rc.voidEval(s);
REXP title=rc.eval(\
其中this.rc=new RConnection()用于R服务器的连接,
rc.eval(\用于加载R代码,rc.voidEval(s)用于在R服务器端运行R代码,REXP title=rc.eval(\\\\\\\用于数据的返回,其中的iconv函数用于编码的转换,否则可能在传输过程中出现乱码现象。
第 15 页 共 27 页
图书推荐系统
参考文献
[1]王珊.数据库与数据库管理系统.第1版.北京:电子工业出版社,1995
[2]赵子江,王丹.数据库原理与SQL SERVER应用.第2版.北京:机械工业出版社,2006 [3]张丹.R的极客理想-工具篇.第1版.北京:机械工业出版社,2014 [4]李明.R语言与网站分析.第1版.北京:机械工业出版社,2014
[5]Yanchang Zhao. R and Data Mining Examples and Case Studies.第1版.北京:机械工业出版社,2014
[6]耿祥义,张跃平,Java大学实用教程.第3版.北京:电子工业出版社,2013
第 16 页 共 27 页
华北科技学院毕业设计
致谢
在本文结束之际,我要特别感谢我的指导老师谭立云老师。谭老师学识渊博、为人真诚,他在我大学学习期间给了我许多教诲。本文从选题的确定,论文的写作、修改到最后定稿得到了谭老师的悉心指导,提出了许多宝贵建议,而且提供了大量的书籍资料。特别是他多次主动询问进程,为我指点迷津,帮助我开拓思路,精心点拨,热忱鼓励。他严肃的教学态度,严谨的治学精神,精益求精的工作作风深深地感染和激励着我,使我终身受益。在此,谨向谭老师致以诚挚的谢意和崇高的敬意。
此外,感谢其他诸位老师的谆谆教导,感谢谭立云老师对我学习上的点拨。同时,还要感谢在大学四年中所有帮助我的人,也要感谢在论文写作过程中,帮助过我、并且共同奋斗四年的大学同学们,与他们的讨论和他们提出的诸多建议帮助我解决了很多难题,使得论文能够顺利完成。衷心感谢我的家人。在漫长的求学生涯中,我的每一份成长和进步都离不开他们的支持。
另外,需要感谢一个素未谋面的老师,也就是《R的极客理想—工具篇》的作者,张丹老师。感谢他通过邮件给予的悉心指导。
最后,再次衷心地向所有在我论文写作过程中给予过我支持、帮助与关怀的各位老师、同学、亲友表以诚挚的谢意!
第 17 页 共 27 页
图书推荐系统
附录
1.R代码
library(RODBC) odbcDataSources()
conn=odbcConnect(\
sql=\train.data=sqlQuery(conn,sql)
names(train.data)=c(\odbcClose(conn)
train.data=train.data[1:1000,] #数据处理
value=rep(1,length(train.data$reader)) train.data=cbind(train.data,value) library(reshape)
user.item.matrix=cast(train.data,reader~book,value=value,fill=0,fun.aggregate=length)#重点代码 row.names(user.item.matrix)=user.item.matrix[,1] user.item.matrix=user.item.matrix[,-1]
#用book之间的相关系数,计算距离矩阵 sim_cor=cor(user.item.matrix) distance=-log((sim_cor/2)+0.5)
colnames(distance)=colnames(user.item.matrix) rownames(distance)=colnames(user.item.matrix) #计算用户和物品的关系成度
knn.userid.item=function(userid,itemid,user.item.matrix,distance,k=25){ item.index=which(rownames(distance)==as.character(itemid)) k.nearest.item.index=order(distance[item.index,])[2:(k+1)]
k.nearest.itemid=as.numeric(rownames(distance)[k.nearest.item.index]) sum(user.item.matrix[as.character(userid),as.character(k.nearest.itemid)])/k }
#计算书目关系程度。。。
knn.book.item=function(itemid,user.item.matrix,distance,k=10){ item.index=which(rownames(distance)==as.character(itemid)) k.nearest.item.index=order(distance[item.index,])[2:(k+1)]
k.nearest.itemid=as.numeric(rownames(distance)[k.nearest.item.index]) k.nearest.itemid }
#选拔最近距离
knn.itembase=function(userid,user.item.matrix,distance,k=25,return.item.num=10){ knn.userid=0
for(i in 1:nrow(distance)){
knn.userid[i]=knn.userid.item(userid,rownames(distance)[i],user.item.matrix,distance,k=k) }
return.itemid=rownames(distance)[order(knn.userid,decreasing=T)]#itemid的反向查找,值得考虑(向量排序之后,它的索引号是不变的)
return.itemid=setdiff(return.itemid,colnames(user.item.matrix)[which(user.item.matrix[as.character(userid),]!=1)])
return.itemid[1:return.item.num] }
#热门书籍
hotbook=function(){ library(RODBC) odbcDataSources()
第 18 页 共 27 页