基于Knn算法的图书推荐系统毕业设计概诉Word格式文档下载.docx
- 文档编号:21349462
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:36
- 大小:358.85KB
基于Knn算法的图书推荐系统毕业设计概诉Word格式文档下载.docx
《基于Knn算法的图书推荐系统毕业设计概诉Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于Knn算法的图书推荐系统毕业设计概诉Word格式文档下载.docx(36页珍藏版)》请在冰豆网上搜索。
互联网的出现和普及给用户带来了大量的信息,满足了用户在信息时代对信息的需求,但随着网络的迅速发展而带来的网上信息量的大幅增长,使得用户在面对大量信息时无法从中获得对自己真正有用的那部分信息,对信息的使用效率反而降低了,这就是所谓的信息超载问题。
解决信息超载问题一个非常有潜力的办法是推荐系统,它是根据用户的信息需求、兴趣等,将用户感兴趣的信息、产品等推荐给用户的个性化信息推荐系统。
和搜索引擎相比推荐系统通过研究用户的兴趣偏好,进行个性化计算,由系统发现用户的兴趣点,从而引导用户发现自己的信息需求。
一个好的推荐系统不仅能为用户提供个性化的服务,还能和用户之间建立密切关系,让用户对推荐产生依赖。
对于我们的图书的大量藏书,我们已经没有那么多的时间和精力去看完所有的书来寻找自己想要得到的知识,所以一个有专属个性的、合适的推荐系统能给我们节约不少的时间和精力。
1.2系统功能
该系统的具体功能如下
1.根据用户的借书证号给出专属推荐
2.根据书目的主键值给出相关推荐
3.推荐的书目中包含书名,作者,出版社,出版日期,索书号,类型等字段
4.可以查询用户的信息,以及当前书目的信息
1.3系统预览
图1-1系统主界面图
图1-2系统副界面图
1.4系统特点
系统界面相对简单,适合添加到web应用程序,作为Applet嵌入到网页中,但是内部数据的运算量相当大,因此可能运行较缓慢。
第2章开发环境及工具
2.1系统开发环境
服务器操作系统:
MicrosoftWindows操作系统
数据库:
SQLServer2008
R软件:
R3.1.2
JDK:
1.6
2.2系统架构模型
本系统整体框架采用了数据存储、大规模计算与前端展示相分离的新型设计模式。
其中SQLServer2008负责数据的存储与管理,R软件负责大规模数据计算,是系统的核心部分,Java端采用模型-视图-控制器(MVC)设计模型,完成数据计算结果的展示。
具体的模型设计如下图:
Java前端
结果展示
参数传递
R软件
数据抽取
数据存储
数据库
图2-1程序结构图
2.3系统开发技术
2.3.1R语言简介
R是用于统计分析、绘图的语言和操作环境。
R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
R是一套完整的数据处理、计算和制图软件系统。
其功能包括:
数据存储和处理系统;
数组运算工具,其向量、矩阵运算方面功能尤其强大;
完整连贯的统计分析工具;
优秀的统计制图功能;
简便而强大的编程语言:
可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。
与其说R是一种统计软件,还不如说R是一种数学计算的环境,因为R并不是仅仅提供若干统计程序、使用者只需指定数据库和若干参数便可进行一个统计分析。
R的思想是:
它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动的进行数据分析,甚至创造出符合需要的新的统计计算方法。
该语言的语法表面上类似C,但在语义上是函数设计语言(functionalprogramminglanguage)的变种并且和Lisp以及APL有很强的兼容性。
特别的是,它允许在“语言上计算”(computingonthelanguage)。
这使得它可以把表达式作为函数的输入参数,而这种做法对统计模拟和绘图非常有用。
2.3.2数据库技术简介
SQLServer是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。
SQLServer近年来不断更新版本,1996年,Microsoft推出了SQLServer6.5版本;
1998年,SQLServer7.0版本和用户见面;
SQLServer2000是Microsoft公司于2000年推出的最新版本。
SQLServer特点:
1.真正的客户机/服务器体系结构。
2.图形化用户界面,使系统管理和数据库管理更加直观、简单。
3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。
4.SQLServer与WindowsNT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等。
SQLServer也可以很好地与MicrosoftBackOffice产品集成。
5.具有很好的伸缩性,可跨越从运行Windows95/98的电脑到运行Windows2000的大型多处理器等多种平台使用。
6.对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上。
7.SQLServer提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。
2.3.3Java简介
Java是由SunMicrosystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。
由JamesGosling和同事们共同研发,并在1995年正式推出。
Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。
1995年更名为Java,并重新设计用于开发Internet应用程序。
用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:
跨平台、动态Web、Internet计算。
从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。
另一方面,Java技术也不断更新。
Java自面世后就非常流行,发展迅速,对C++语言形成有力冲击。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
2010年Oracle公司收购SunMicrosystems。
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
第3章系统设计与数据库
3.1系统设计
3.1.1系统功能模块划分
1.用户借书证号的查询:
包括个人信息以及推荐书目(专属推荐)。
2.书目编号查询:
包括本书的相关信息以及关于本书的推荐。
3.2数据库结构
历史数据来源于华北科技学院图书馆,数据处理中需要的表有流通日志表、读者信息表、书目信息表,详细字段含义如下:
表3-1流通日志表
comLog流通日志表
条形码
barCode
流通号
comNum
读者条码
readerNum
处理时间
handleTime
主键码
keyNum
表4-2读者信息表
reader读者信息表
姓名
rName
性别
sex
读者级别
rRank
读者单位
rUnit
班级
rClass
年级
rGrade
表4-2书目信息表
book书目信息表
题目
title
责任者
author
出版社
press
出版日期
pubDate
索书号
indexNum
图书类型
bType
第4章K最近邻分类(Knn)算法介绍
4.1Knn算法简介
邻近算法,或者说K最近邻(Knn,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。
所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。
Knn算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。
该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
kNN方法在类别决策时,只与极少量的相邻样本有关。
由于Knn方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,Knn方法较其他方法更为适合。
4.2算法流程
1.准备数据,对数据进行预处理
2.选用合适的数据结构存储训练数据和测试元组
3.设定参数,如k
4.维护一个大小为k的的按距离由大到小的优先级队列,用于存储最近邻训练元组。
随机从训练元组中选取k个元组作为初始的最近邻元组,分别计算测试元组到这k个元组的距离,将训练元组标号和距离存入优先级队列
5.遍历训练元组集,计算当前训练元组与测试元组的距离,将所得距离L与优先级队列中的最大距离Lmax
6.进行比较。
若L>
=Lmax,则舍弃该元组,遍历下一个元组。
若L<
Lmax,删除优先级队列中最大距离的元组,将当前训练元组存入优先级队列。
7.遍历完毕,计算优先级队列中k个元组的多数类,并将其作为测试元组的类别。
8.测试元组集测试完毕后计算误差率,继续设定不同的k值重新进行训练,最后取误差率最小的k值。
4.3算法优缺点
4.3.1优点
1.简单,易于理解,易于实现,无需估计参数,无需训练。
2.适合对稀有事件进行分类。
3.特别适合于多分类问题(multi-modal,对象具有多个类别标签),kNN比SVM的表现要好。
4.3.2缺点
该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。
该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。
无论怎样,数量并不能影响运行结果。
该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。
第5章Knn算法在图书推荐系统的实现
5.1训练集数据train.data
以表5-1所示的华北科技学院图书借阅记录的用户借阅行为,作为推荐系统的训练集数据。
表5-1数据集
00415155
0344432
A00000913
2006/9/50:
00
112354
00360052
0298082
A00000854
101837
00141303
0134864
47478
00319832
0268308
95171
00359031
0297062
101547
00404067
0333555
109964
…
00368169
0306006
103890
00410055
0339333
111251
00423676
0352909
A00000463
2006/9/60:
114296
00391519
0321016
107254
00268408
0213510
A00000260
82555
00423214
0352451
A00000377
114217
00333482
0271950
95871
其中readerNum(读者编号)和keyNum(书目主键)是相关性计算的主要数据依据。
下面将上述数据通过SQLServer2008数据库读取到R软件中,然后存放于train.data数据框中,具体代码如下:
library(RODBC)
odbcDataSources()
conn=odbcConnect("
library"
)
sql="
selectreaderNum,keyNumfromcomLog"
train.data=sqlQuery(conn,sql)
names(train.data)=c("
reader"
"
book"
odbcClose(conn)
其中,前3行样本数据如下所示:
train.data[1:
3,]
readerbook
1A00000543111510
2A0000099169045
3A0000099182879
5.2建立读者-书目矩阵
现在要把常规的train.data形式的矩阵转换为列代表不同书目,行代表不同读者,内部代表是否进行过借阅的矩阵,即每列代表某一本书被哪些读者借阅过,每行代表每一读者借阅过的书目。
具体数据如表5-2所示:
表5-2读者-书目矩阵
669
2324
8200
9462
9895
10515
10865
11007
11304
A00000014
A00000017
A00000025
1
A00000040
A00000050
A00000056
A00000057
A00000063
A00000075
实现代码如下:
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]
这里的核心函数是reshape包里的cast函数,如下代码执行后会返回行代表的用户。
user.item.matrix=cast(train.data,reader~book,value=value,fill=0,fun.aggregate=length)
其中列代表书目(reader~book),元素内容是value,默认值NA自动使用0替换(fill=0),以代表读者没有借入过该书目,首列数据(reader)是代表用户的读者编号,
首列数据是代表书目的键值编号。
5.3计算书目距离矩阵distance
这里使用书目之间的相关性系数来间接计算书目的距离矩阵。
例如,user.item.matrix矩阵中的第1列和第3列分别代表书目669和书目8200被用户借阅的情况,其相关性系数的计算方式代码如下:
sim_cor=cor(user.item.matrix[,1],user.item.matrix[,3]);
sim_cor的取值范围是[-1,1]这里使用如下规则把sim_cor转换为distance
1.当sim_cor的取值为-1时,distance=inf无限大
2.当sim_cor的取值为1是,distance=0
具体计算实现的方式代码如下:
distance=-log((sim_cor/2)+0.5)
最后把distance矩阵的行名称和列名称设置为书目键值,以便可以在后续程序中的distance矩阵中定位出实际的视频数据。
colnames(distance)=colnames(user.item.matrix)
rownames(distance)=colnames(user.item.matrix)
5.4计算读者和书目的关系程度
自定义的Knn.userid.item函数是算法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Knn 算法 图书 推荐 系统 毕业设计