个性化推荐系统设计毕业论文docxWord文档格式.docx
- 文档编号:18811267
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:41
- 大小:2.36MB
个性化推荐系统设计毕业论文docxWord文档格式.docx
《个性化推荐系统设计毕业论文docxWord文档格式.docx》由会员分享,可在线阅读,更多相关《个性化推荐系统设计毕业论文docxWord文档格式.docx(41页珍藏版)》请在冰豆网上搜索。
1.3论文内容与章节安排
对于介绍基于OJ数据的习题个性化推荐系统论文以下内容安排如下:
第二部分侧重介绍本系统数据处理过程中依据的理论知识背景及技术应用;
第三部分讲述了习题推荐系统实现过程中遇到的难题及整个系统的设计思路;
第四部分描述系统实现的详细步骤;
第五部分总结了本系统设计与实现过程中的心得与体会。
2理论支持与相关技术的应用与背景
习题个性化推荐系统所运用的理论来源于集体智慧,本系统中实现该理论的具体方法是基于记忆的协同过滤和基于规则的协同过滤。
鉴于开源软件Weka的强大功能和对Java应用程序的支持,我们采用Java作为开发语言,调用Weka程序返回的数据。
下面对这些方法的数学原理和工具或平台做具体介绍。
2.1相应的推荐算法及数学原理
2.1.1集体智慧与协同过滤
集体智慧(CollectiveIntelligence)[7]并不是Web2.0时代特有的,只是在Web2.0时代,大家在Web应用中利用集体智慧构建更加有趣的应用或者得到更好的用户体验。
集体智慧是指在大量的人群的行为和数据中收集答案,帮助你对整个人群得到统计意义上的结论,这些结论是我们在单个个体上无法得到的,它往往是某种趋势或者人群中共性的部分。
协同过滤是利用集体智慧的一个典型方法。
要理解什么是协同过滤(CollaborativeFiltering,简称CF)[5],首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?
大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。
这就是协同过滤的核心思想。
协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。
当然其中有一个核心的问题:
①如何确定一个用户是不是和你有相似的品位?
②如何将邻居们的喜好组织成一个排序的目录?
协同过滤相对于集体智慧而言,它从一定程度上保留了个体的特征,就是你的品位偏好,所以它更多可以作为个性化推荐的算法思想。
可以想象,这种推荐策略在Web2.0的长尾中是很重要的,将大众流行的东西推荐给长尾中的人怎么可能得到好的效果,这也回到推荐系统的一个核心问题:
了解你的用户,然后才能给出更好的推荐
2.1.2基于记忆的过滤
(1)基于用户的协同过滤
首先,要实现协同过滤,需要以下3个核心步骤:
①收集用户偏好:
从用户的行为和偏好中发现规律,并基于此给予推荐,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。
用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同。
收集了用户行为数据,我们还需要对数据进行一定的预处理,其中最核心的工作就是:
减噪和归一化[2]。
减噪:
用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,我们可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是我们的分析更加精确。
归一化:
如前面讲到的,在计算用户对物品的喜好程度时,可能需要对不同的行为数据进行加权。
但可以想象,不同行为的数据取值可能相差很大,比如,用户的查看数据必然比购买数据大的多,如何将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确,就需要我们进行归一化处理。
最简单的归一化处理,就是将各类数据除以此类中的最大值,以保证归一化后的数据取值在[0,1]范中。
进行的预处理后,根据不同应用的行为分析方法,可以选择分组或者加权处理,之后我们可以得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是[0,1]或者[-1,1]的浮点数值。
②找到相似的用户(通过相似度找到相似用户):
1、相似度的计算
关于相似度的计算,现有的几种基本方法都是基于向量(Vector)的,其实也就是计算两个向量的距离,距离越近相似度越大。
在推荐的场景中,在用户-物品偏好的二维矩阵中,我们可以将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,或者将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度。
下面我们详细介绍几种常用的相似度计算方法:
a欧几里德距离(EuclideanDistance)[6]
最初用于计算欧几里德空间中两个点的距离,假设x,y是n维空间的两个点,它们之间的欧几里德距离是:
可以看出,当n=2时,欧几里德距离就是平面上两个点的距离。
当用欧几里德距离表示相似度,一般采用以下公式进行转换:
距离越小,相似度越大。
b皮尔逊相关系数(PearsonCorrelationCoefficient)
皮尔逊相关系数一般用于计算两个定距变量间联系的紧密程度,它的取值在[-1,+1]之间。
sx,sy是x和y的样品标准偏差。
2、相似邻居的计算
介绍完相似度的计算方法,下面我们看看如何根据相似度找到用户-物品的邻居,常用的挑选邻居的原则可以分为两类:
图2.1给出了二维平面空间上点集的示意图。
固定数量的邻居:
K-neighborhoods或者Fix-sizeneighborhoods
不论邻居的“远近”,只取最近的K个,作为其邻居。
如图2.1中的A,假设要计算点1的5个邻居,那么根据点之间的距离,我们取最近的5个点,分别是点2,点3,点4,点7和点5。
但很明显我们可以看出,这种方法对于孤立点的计算效果不好,因为要取固定个数的邻居,当它附近没有足够多比较相似的点,就被迫取一些不太相似的点作为邻居,这样就影响了邻居相似的程度,比如图1中,点1和点5其实并不是很相似。
基于相似度门槛的邻居:
Threshold-basedneighborhoods
与计算固定数量的邻居的原则不同,基于相似度门槛的邻居计算是对邻居的远近进行最大值的限制,落在以当前点为中心,距离为K的区域中的所有点都作为当前点的邻居,这种方法计算得到的邻居个数不确定,但相似度不会出现较大的误差。
如图1中的B,从点1出发,计算相似度在K内的邻居,得到点2,点3,点4和点7,这种方法计算出的邻居的相似度程度比前一种优,尤其是对孤立点的处理。
图2.1相似邻居计算示意图
固定聚类数的邻居:
K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。
该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。
对应的元素同样可以找到自己的邻居,本系统采用EM聚类分析算法,以下对K-Means聚类分析与EM聚类分析比较:
在聚类问题中,给我们的训练样本是
,每个
,没有了y。
K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:
1、随机选取k个聚类质心点(clustercentroids)为
。
2、重复下面过程直到收敛{
对于每一个样例i,计算其应该属于的类
对于每一个类j,重新计算该类的质心
}
图2.2K-means聚类分析示意图
如上图所示,K是我们事先给定的聚类数,
代表样例i与k个类中距离最近的那个类,
的值是1到k中的一个。
质心
代表我们对属于同一个类的样本中心点的猜测,拿星团模型来解释就是要将所有的星星聚成k个星团,首先随机选取k个宇宙中的点(或者k个星星)作为k个星团的质心,然后第一步对于每一个星星计算其到k个质心中每一个的距离,然后选取距离最近的那个星团作为
,这样经过第一步每一个星星都有了所属的星团;
第二步对于每一个星团,重新计算它的质心
(对里面所有的星星坐标求平均)。
重复迭代第一步和第二步直到质心不变或者变化很小。
K-means面对的第一个问题是如何保证收敛,前面的算法中强调结束条件就是收敛,可以证明的是K-means完全可以保证收敛性。
下面我们定性的描述一下收敛性,我们定义畸变函数(distortionfunction)如下:
J函数表示每个样本点到其质心的距离平方和。
K-means是要将J调整到最小。
假设当前J没有达到最小值,那么首先可以固定每个类的质心
,调整每个样例的所属的类别
来让J函数减少,同样,固定
,调整每个类的质心
也可以使J减小。
这两个过程就是内循环中使J单调递减的过程。
当J递减到最小时,
和c也同时收敛。
(在理论上,可以有多组不同的
和c值能够使得J取得最小值,但这种现象实际上很少见)。
由于畸变函数J是非凸函数,意味着我们不能保证取得的最小值是全局最小值,也就是说k-means对质心初始位置的选取比较感冒,但一般情况下k-means达到的局部最优已经满足需求。
但如果你怕陷入局部最优,那么可以选取不同的初始值跑多遍k-means,然后取其中最小的J对应的
和c输出。
下面累述一下K-means与EM的关系,首先回到初始问题,我们目的是将样本分成k个类,其实说白了就是求每个样例x的隐含类别y,然后利用隐含类别将x归类。
由于我们事先不知道类别y,那么我们首先可以对每个样例假定一个y吧,但是怎么知道假定的对不对呢?
怎么评价假定的好不好呢?
我们使用样本的极大似然估计来度量,这里是就是x和y的联合分布P(x,y)了。
如果找到的y能够使P(x,y)最大,那么我们找到的y就是样例x的最佳类别了,x顺手就聚类了。
但是我们第一次指定的y不一定会让P(x,y)最大,而且P(x,y)还依赖于其他未知参数,当然在给定y的情况下,我们可以调整其他参数让P(x,y)最大。
但是调整完参数后,我们发现有更好的y可以指定,那么我们重新指定y,然后再计算P(x,y)最大时的参数,反复迭代直至没有更好的y可以指定。
这个过程有几个难点,第一怎么假定y?
是每个样例硬指派一个y还是不同的y有不同的概率,概率如何度量。
第二如何估计P(x,y),P(x,y)还可能依赖很多其他参数,如何调整里面的参数让P(x,y)最大。
这里只是指出EM的思想,E步就是估计隐含类别y的期望值,M步调整其他参数使得在给定类别y的情况下,极大似然估计P(x,y)能够达到极大值。
然后在其他参数确定的情况下,重新估计y,周而复始,直至收敛。
对应于K-means来说就是我们一开始不知道每个样例
对应隐含变量也就是最佳类别
最开始可以随便指定一个
给它,然后为了让P(x,y)最大(这里是要让J最小),我们求出在给定c情况下,J最小时的
(前面提到的其他未知参数),然而此时发现,可以有更好的
(质心与样例
距离最小的类别)指定给样例
,那么
得到重新调整,上述过程就开始重复了,直到没有更好的
指定。
这样从K-means里我们可以看出它其实就是EM的体现,E步是确定隐含类别变量
,M步更新其他参数
来使J最小化。
这里的隐含类别变量指定方法比较特殊,属于硬指定,从k个类别中硬选出一个给样例,而不是对每个类别赋予不同的概率。
总体思想还是一个迭代优化过程,有目标函数,也有参数变量,只是多了个隐含变量,确定其他参数估计隐含变量,再确定隐含变量估计其他参数,直至目标函数最优。
③计算推荐。
基于用户的CF的基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。
计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到K邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。
图2给出了一个例子,对于用户A,根据用户的历史偏好,这里只计算得到一个邻居-用户C,然后将用户C喜欢的物品D推荐给用户A。
图2.3基于用户的CF的基本原理
(2)基于内容的协同过滤
基于内容(物品)的CF的原理和基于用户的CF类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。
从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。
图3给出了一个例子,对于物品A,根据所有用户的历史偏好,喜欢物品A的用户都喜欢物品C,得出物品A和物品C比较相似,而用户C喜欢物品A那么可以推断出用户C可能也喜欢物品C。
图2.4基于内容的CF的基本原理
2.1.3基于规则的过滤
基于关联规则的推荐更常见于电子商务系统中,并且也被证明行之有效。
其实际的意义为购买了一些物品的用户更倾向于购买另一些物品。
基于关联规则的推荐系统的首要目标是挖掘出关联规则,也就是那些同时被很多用户购买的物品集合,这些集合内的物品可以相互进行推荐。
目前关联规则挖掘算法主要从Apriori[2]和FP-Growth两个算法发展演变而来。
Apriori算法思路实现简单,通过迭代不断通过K-1元频繁项目集生成K元频繁项目集,直到不能生成为止,最终可以得到最大频繁项目集。
Apriori算法存在的问题是每次迭代都要判断生成K元集合的K-1元子集是否都是频繁项目集,计算量巨大;
并且Apriori算法是一个挖掘最大频繁项目集的算法,无法得到全部频繁模式集合。
FP-Growth算法通过构建FP-Tree(频繁模式树),去发现频繁模式集。
相比于Apriori算法,计算量较少,并且可以得出几乎所有的频繁项目集;
但该算法实现起来要比Apriori复杂,并且FP-Growth需要将全部数据库事务加载到内存中,而Apriori虽然需要反复读取数据库事务,但是不需要全部载入内存。
一般而言,FP-Growth要比Apriori快至少一个数量级。
关联规则挖掘中有两个主要的概念,支持度和置信度。
支持度是指包含某频繁项目集的事务数和总数据库事务数的百分比。
置信度指包含某频繁项目集的事务数和包含被推荐项目集的事务数的百分比。
而最小支持度阈值和最小置信度阈值也是决定一个事务集合是否是频繁事务集和一个关联规则是否成立的决定因素。
因此这两个阈值也决定了推荐系统的准确率和召回率。
基于关联规则的推荐系统一般转化率较高,因为当用户已经购买了频繁集合中的若干项目后,购买该频繁集合中其他项目的可能性更高。
缺点在于计算量较大,但是可以离线计算,因此影响不大。
同时基于关联规则的推荐系统由于采用用户数据,不可避免的存在冷启动和稀疏性问题。
并且存在热门项目容易被过度推荐的问题。
此外,基于item的推荐体系多采用1toN的推荐模式,因此实际的关联规则相当于从二元频繁项目集产生(即1to1的模式),1->
1这种关联规则的相关性要远低于M->
N这种最初关联规则的推荐形式。
因此基于关联规则的推荐系统很少被应用于item的推荐体系。
2.2Weka的技术介绍与应用
2.2.1Weka系统简介
WEKA的全名是怀卡托智能分析环境(WaikatoEnvironmentforKnowledgeAnalysis),它是由怀卡托大学研究而成的,是一个完全开放的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理、分类、聚类、关联规则、属性选择以及在新的交互式界面上实现可视化等。
WEKA系统的实现源自EibeFrank等学者在机器学习方面的研究积累,1998年之前的WEKA版本是用C++来实现的,从1998年起,EibeFrank开始用Java语言重新编写该系统,这一举动还得到了项目组里
其它成员以及若干自由软件人的帮助。
2005年8月,在第11届ACMSIGKDD国际会议上,怀卡托大学的WEKA小组荣获了数据挖掘和知识探索领域的最高服务奖,WEKA系统得到了社会的广泛认可,被誉为数据挖掘和机器学习历史上的里程碑,是现今最完备的数据挖掘工具之一。
2.2.2Weka系统的特点与应用
WEKA是一套免费的提供学术许可、未与其它系统集成的、未汉化的通用软件,作为数据挖掘学术界的典型代表,它有如下特点:
(1)跨平台,支持Windows与Unix等很多操作系统;
(2)支持结构化文本文件、支持数据挖掘格式文件(C4.5)、提供数据库接口(JDBC);
(3)可处理连续型、离散型(字符型、日期型)数据;
(4)提供空缺值处理、消除噪声、标准化、数据离散化、属性构造、转换变量、拆分数据、数据平衡、样本排序、样本洗牌、数据聚集、维归约、值归约、抽样操作;
(5)能完成预处理、分类、聚类、关联、可视化等任务;
(6)支持机器学习方法和神经网络方法;
(7)提供算法组合、用户算法嵌入、算法参数设置(基本、高级);
(8)能生成基本报告、测试报告、输出格式,实现模型解释、模型比较、数据评分功能;
(9)实现数据可视化、挖掘过程可视化及挖掘结果可视化(理解、评估)。
WEKA的诸多特点可以反映出,WEKA的功能还是比较完善的。
WEKA数据挖掘平台完整、实用、高水准地实现了许多流行的学习方案,这些方案能够直接运用于一些实际的数据挖掘或研究领域。
除此,它还提供了一个Java类库形式的框架,这个框架支持嵌入式机器学习的应用,乃至新的学习方案的实现。
在进行WEKA数据挖掘实验之前,首先应该来了解一下整个WEKA系统的数据挖掘过程。
如图2.5所示,整个WEKA数据挖掘系统的过程包括输入要测试的数据集,然后对待测数据进行预处理,再将处理后的数据集置于一种学习方案中并分析其结果或是将已学习到的模型来预测未知的实例,或是将数据集置于不同的学习方案中,针对各种方案的学习结果进行模式评估,以找出最佳性能的学习方案。
下面简单介绍数据挖掘流程的每个层次:
(1)数据输入层:
是整个数据挖掘的准备阶段,数据输入方式有三种,分别为打开当地文件,数据库导入。
其中,打开当地文件的方式可以导入ARFF,CSV,C4.5,BSI四种格式文件,它们利用文件载入器导入数据。
而从数据库导入数据则必须要装载JDBC驱动程序,并利用SQL选择语句获取实例。
(2)数据挖掘层:
包括预处理,分类,聚类等功能,其中预处理是整个数据挖掘的最重要部分,它包括对数据的装载、对缺失数据项的填补、属性过滤及实例过滤等功能。
在该层,先对数据进行预处理,再将处理后的数据集置于学习方案中,进行相应的挖掘任务。
(3)模式评估层:
对于数据挖掘的结果进行模式评估,分析并学习数据挖掘结果。
(4)可视化层:
实现数据可视化、挖掘过程可视化、挖掘结果可视化,给挖掘提供了良好的辅助工具,提高了挖掘效率。
(5)存储层:
以特定的格式对挖掘过后的结果进行存储。
图2.5WEKA数据挖掘系统
3习题个性化推荐系统的设计原理
在了解个性化推荐基本算法的基础之上,本节主要将会讲述在开发基于OJ数据的习题个性化推荐系统过程中解决的难题,除此以外将会具体介绍怎样将基于记忆的协同过滤和基于规则的协同过滤两种方法融合之后运用到本系统之中,真正的将用户的历史习题记录利用率达到最大化,进而提高推荐习题对用户的准确率。
3.1研究难题解决
冷启动问题一直是推荐系统需要解决的难题,本系统针对在线推荐系统中如何为新用户推荐合适的习题内容展开研究,推出了基于群体智慧的行为预测模型,提出了一个三阶段的推荐方法,首先,根据老用户之间的习题内容范围将用户进行分群,使得在同一水平的用户聚集到一个群体中。
其次,对于没有历史习题记录的新用户,计算其属于每个用户群的概率。
最后,提出一种新颖的度量方法,估计一个用户群的用户对某推荐习题的感兴趣程度的概率,这样就避免了数据稀疏带来的问题。
基于一个新用户隶属每个用户群的概率和用户群对推荐习题的概率,就可以预测新用户对某习题的感兴趣程度并进行推荐。
该方法有效的解决了冷启动问题和数据稀疏的问题,提高了推荐的效率。
基于OJ数据的个性化习题推荐系统的关键点在于利用学生用户的历史
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个性化 推荐 系统 设计 毕业论文 docx