协同过滤推荐算法 及其模型的设计与开发 毕业论文答辩 陈鹏 - 信息与计算科学 指导老师:王国庆 – 2015-06-05
目录 1 2 课题背景 协同推荐的原理 CONTENTS 3 余弦相似度设计 4 相关Web模块设计 5 6 测试数据及方法 总结
论文摘要 本论文通过对推荐系统的研究,进一步的说明推荐系统在信息过载时代的重要性以及处理信息模型的精巧之处。本论文主要研究多维空间向量相似度的在推荐系统的应用。根据这些算法,结合Java的一些特性,设计一个类库,更方便的使用该类算法进行过滤推荐。 协同过滤推荐,其原理是利用人们共同的喜好和行为为相似的人推荐他可能喜欢的信息,而用户的新的行为也会成为信息过滤的条件。 买了这本书的人也买了什么
设计该类库的背景 课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 现在是一个信息严重过载的时代,从消息流中找寻自己的爱好的信息也比较困难。协同过滤推荐过滤掉不喜欢的资讯,推荐用户喜欢的资讯,节省时间提高效率。 但是,直接用的话不是很方便,随时切换各种实现也不方便。 为了弥补这些缺陷,使人们更好的在面对海量数据时使用协同过滤算法,故设计了该组件,让人们更好的更方便的使用协同过滤推荐算法。
课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 收集用户资料 最近邻搜索(找到相似的用户) 计算推荐,产生推荐结果
MyCosSimilarity = cosθ * ModuloRate 课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 过程以及相关算法 其中, ModuloRate为 对两个向量进行取模、除运算,如果大于1取其倒数; cosθ为余弦相似度; MyCosSimilarity 的 取值范围为 [-1,1],越接近1越相似。 余弦相似度 取模余弦相似度(自行设计) 优点: MyCosSimilarity = cosθ * ModuloRate 兼顾角度和长度绝对值; 使用到的计算值均为之前的计算中间值,合理控制计算规模的增加。
Java类库设计 用到的特性 需要注意的问题 Java反射机制 注解与自定义注解 多态 多维空间向量之间的相似度的判断; 课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 Java类库设计 用到的特性 Java反射机制 注解与自定义注解 多态 需要注意的问题 多维空间向量之间的相似度的判断; 不同维度的权重衡量;
课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 类库主要类的继承关系
Java类库之用法 课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 @FilterType(CosSimilarity.class) public class EntityDemo { @FilterWeight(5) private int age; @FilterWeight private int sex; private int id; // setter and getter... } @FilterType(MapCosineSimilarity.class) public class MapEntity { private int id; @MapFilter // 前者为向量名字,后者是向量的长度 private Map<Object, Double> map = new HashMap<Object, Double>(); // setter and getter... } 这样就可以了
课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 业务逻辑表示 http://co.usee.tk
课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 首页
课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 与某用户相似的用户列表
课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 电影推荐列表
MovieLens 课题背景 协同推荐的原理 余弦相似度设计 相关Web模块设计 测试数据及方法 数据来自著名的MovieLens,本例子中采用了MovieLens的子集。MovieLens 是一个 推荐系统和虚拟社区网站,其主要功能是应用协同过滤推荐技术提供数据,数据形式是电影,利用用户对电影的喜好,向用户推荐电影。该网站是GroupLens Research实验室的一个项目,GroupLens Research实验室隶属于明尼苏达大学大学计算机系,MovieLens创建于1997年。MovieLens保存有用户对电影的评分,由此可进行个性化的协同过滤(推荐)。 MovieLens
总结 本文通过对协同过滤推荐算法、Java高级特性以及SpringMVC,Spring,MyBatis等相关知识技术的深入研究,实现了一个基于Java的协同过滤推荐类库,并且给出了基于SSI架构的Web项目Demo。方便大家使用、学习和研究。通过本文的深入研究,得出一下结论: 在设计类库时应充分考虑到使用的场景,大胆的设计,可以考虑使用高级特性,但使用高级特性不是目的,目的是方便更方便的使用该类库。 在开发的时候要充分考虑可扩展性,力求简单拓展,无论是类库还是其他。 采用SpringMVC可以十分轻松清晰的设计视图和具体逻辑的结构,方便前端和后端服务的对接,有利于后期系统拓展和维护。 采用MyBatis可以简单快捷的使用Native SQL,优化数据库性能时比较方便。 使用MVC模式,可以使项目结构清晰,有利于功能的解耦,简化开发流程,专注开发具体的模块功能。
总结 虽然开发出来的类库和该Web项目Demo有较多的优势,但是也存在一些问题。随着新的技术知识的不断涌现,要使程序能够高效运行,就要做进一步的研究和试验: 计算相似度涉及多维空间向量,需要的数据量比较大,尤其是在大数据时代,这就需要优化MySQL数据的存储结构,适当数据冗余,建立合适的索引,优化IO性能。还可以尝试使用NoSQL数据库,例如PostgreSQL、MongoDB等,提高性能。 计算相似度同样计算量也非常大,可以设计多线程分布式服务来解决这个问题,同时关注和研究新的高效的相似度计算算法,拓展在本类库中。
文献综述 [1] Baron Schwartz,Peter Zaitsev,Vadim Tkachenko 著,宁海元,周振兴,彭立勋 等 译.高性能MySQL(第3版). 电子工业出版社, 2013.4. [2] 戴克(Paul Deck) [美] 著,林仪明 崔毅译. Spring MVC学习指南.人民邮电出版社.2015.5.6 [3] Cay S.Horstmann[美],Gary Cornell[美]. Core Java 2. Prentice Hall PTR ,2006.5. [4] 上野·宣[日] 著;于均良 译. 图解HTTP. 人民邮电出版社,2014.05.01. [5] 张为.基于Struts框架的JavaWeb应用研究[J].长沙电力学院学报,2006(2) . [6] Joshua Bloch(美) ,杨春花,俞黎敏译.Effective Java Second Edition[M].北京:机械工业出版社,2009.1 [7] 项亮. 推荐系统实践. 人民邮电出版社,2012.6
谢谢 协同过滤推荐算法 及其模型的设计与开发 陈鹏 - 信息与计算科学 指导老师:王国庆 – 2015-06-05