Apriori算法在高校图书馆图书推荐中的应用
2012-02-05陈锦吴扬扬
陈锦,吴扬扬
(1.华侨大学计算机科学与技术学院,福建泉州362000;2.泉州经贸职业技术学院信息系,福建泉州362000)
随着高校学生数量的不断增多,图书馆的藏书量也相应地剧增,为了让学生从浩瀚的馆藏资源中快速找到自己所需的图书,图书馆工作模式应该变“被动”为“主动”,可通过数据挖掘技术来挖掘大量的图书借阅记录,主动向学生推荐图书.关联规则用于分析隐藏在大量数据集中令人感兴趣的联系[1].Apriori算法是关联规则的经典算法,该算法的主要思想是首先寻找给定数据集中的频繁项集,然后通过频繁项集生成强关联规则[2].
1 Apriori算法
一个事物数据库中的关联规则可以描述如下:
设I={I1,I2,……In}是项的集合,D是任务相关数据数据库事务的集合,TID作为每个事务的标识符,每个事务T对应I上的子集.设A是项集,事务T包含A当且仅当A⊆T.关联规则是形如A⇒B的蕴涵式,其中A⊂I ,B⊂I,A∩B=∅.规则A⇒B在事务D中成立,具有支持度s,其中s是D中事务包含的百分比.规则A⇒B在事务D中具有置信度c,其中c是D中包含A的事务同时也包含B的百分比[3].即Suppor(tA⇒B)=P(A∪B),Confidence(A⇒B)=P(B|A).
Apriori算法将关联规则挖掘分解为两个子问题:
(1)找到频繁项集,即所有支持度大于最小支持度的项集;
(2)使用第一步找到的频繁项集找到强关联规则即D在I上满足最小置信度.
在实际应用中,发现Apriori算法存在如下一些主要的缺陷[4]:
(1)需多次扫描事务数据库;
(2)不适用于稠密集的关联规则挖掘;
(3)可能生成的关联规则过于庞大.
2 Apriori算法在图书推荐中的应用
图书推荐服务在图书馆个性化服务中非常重要,它既能提高用户的满意度,又可以让信息得到更好的利用.传统的Apriori算法需要对借阅借阅数据库大量的扫描,所以算法的运行效率低下.通过对读者借阅数据的研究,发现大部分读者在一次特定的借阅中,往往只会借阅某一类别的图书,通过传统Apriori算法对借阅数据进行挖掘后发现关联规则的左部和右部均为同类图书的关联规则占总挖掘关联规则的90%以上[5].
按照上述图书借阅的特点,在应用Apriori算法挖掘数据前,先按照《中图法》对图书进行分类,根据图书分类号将借阅数据库分为若干个子借阅数据库,每个子借阅数据库都只包含某一分类的图书,然后再进行挖掘,可减少时间的开销.
3 实例说明
3.1 数据源
从某学院的图书馆自动化系统中导出读者借阅记录表lt_gck,学生基本信息表lt_reader,图书信息表ydcc 3个EXCEL文件,将其导入到SQLSERVER2005中.
3.2 数据的预处理
(1)对表进行连接,获取所需分析的字段.对上述3个表进行连接操作并创建视图,将得到的视图导入到数据库中,得到最终可分析的数据表;
(2)将第一步得到的表中续借的借阅记录进行删除,由于借阅次数较少的学生借阅记录比较没有参考价值,所以这里只筛选出借阅次数≥5次的学生借阅记录;
(3)按照《中图法》,将借阅记录按照借阅的图书类型,分成不同图书类型的借阅记录库,每个库只含有同一类型书籍的借阅记录.这里选取读者借阅计算机技术类型书籍的记录并只取“读者号”和“索引号”两个字段进行分析,所以将索书号以“TP3”字符开头的记录筛选出独立成一个数据表.
3.3 Apriori算法的应用
从对借阅记录的观察,发现要关联规则到两本具体的书籍很难,基本上很少有读者借阅两本一模一样的书籍(书名,作者,出版社完全相同),而且也不切合实际,可能两个读者都借阅了数据结构和C语言的书籍,但可以要求是不同作者,不同出版社的.所以从上述观点考虑,这里我们只关联到具体类别的书籍,比如数据结构和C语言书籍之间是否有关联.若要推荐到具体一本图书的话,可选择推荐类别中借阅次数最高的图书进行推荐.将预处理过的数据表进行转换成表1这种可分析的形式.
表1 借阅记录Tab.1 Library record
为了书写的方便,这里用I1,I2,……代表不同类别的索书号,比如I1代表TP316.7,I2代表TP391.41,以此类推,得到表2.
表2 借阅记录事务Tal.2 Libraryrecord transaction
关联规则的挖掘工作也分为2步:频繁项集的挖掘和关联规则的产生[6].
(1)频繁项集的挖掘.就是要从事务数据表中,发现满足最小支持度的频繁项集.首先,假设最小支持数为40%,得到频繁1项集L1,如下表3所示.
表3 频繁项集Tal.3 Frequent itemset
把所生成的L1相互进行连接并生成候选频繁2项集L2{(I2,I11),(I11,I12},(I11,I13),(I11,I15),(I12,I15)}以此类推,直到候选集为空,算法停止,得到所有的频繁项目集为{I2,I11,I12,I13,I15,(I2,I11),(I11,I12),(I11,I13),(I11,I15),(I12,I15),(I11,I12,I13)}.
(2)关联规则的产生.找出所有频繁项集之后,即可进行第2步,找出其中满足最小置信度要求的强关联规则.假设取置信度为80%,可得到下表4数据.
表4 数据结果Tal.4 Data result
从产生的关联规则中看出:①可以给借阅过TP311.138FO(visual Foxpro),TP312C(C语言程序)这两个类别书籍的学生推荐TP368.1(单片机)类别的书籍;②可以给借阅过TP311.138FO(visual Foxpro),TP368.1(单片机)这两个类别书籍的学生推荐TP312C(C语言程序)类别的书籍;③可以给借阅过TP312C(C语言程序)这类书籍的学生推荐TP311.138FO(visual Foxpro)类别的书籍;④可以给借阅过TP368.1(单片机)类别书籍的学生推荐TP311.138FO(visual Foxpro)类别的书籍;⑤可以给借阅过TP311.56(DELPHI)类别书籍的学生推荐TP311.138FO(visual Foxpro)或者TP312C(C语言程序)两类的书籍.
4 小结
通过对借阅记录库先按照图书的类型分成若干个数据库再应用Apriori算法,可以提高挖掘的效率,减少内存的占用.在筛选记录时,筛选出那些借阅次数比较多的学生的借阅记录进行挖掘,比如可规定借阅次数>5的学生记录,可以使挖掘结果更具参考价值.而且,按照不同级别图书分类号对记录分类,所产生的挖掘效果也有很大的不同,选取图书分类号的级别时,要注意不宜过大或过小,过大会产生很多无关的关联规则,过小则产生的关联规则太少.
[1] 康敏旸,张安.改进的Apriori数据挖掘算法的应用[J].火力与指挥控制,2009,34(10):111-114.
[2] 黄鹤.关联规则算法综述[J].软件导刊,2009,8(3):56-58.
[3] 刘静.数据挖掘算法在书目推荐系统中的应用研究[D].郑州:郑州大学,2011.
[4] 鲍静.关联规则挖掘及其在图书流通数据中的应用研究[D].合肥:合肥工业大学,2007.
[5] 林郎碟,王灿辉.Apriori算法在图书推荐服务中的应用与研究[J].计算机技术与发展,2011,21(5):22-24.
[6] 雷蕾.基于关联规则的个性化图书推荐研究[J].情报探索,2011(1):49-50.