基于Knn算法的图书推荐系统(毕业设计) 联系客服

发布时间 : 星期四 文章基于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 页