出自:http://blog.sina.com.cn/s/blog_761512e50100xnfs.html
推荐系统是近几年比较新的一个领域,目前比较完整的介绍这个领域的资料,主要是一些综述性paper。这些paper往往都各有侧重点,大多比较偏重推荐算法这一个层面,不够全面。
2011年的时候,国外一些在个性化推荐领域浸淫多年的人合作写了《Recommender System Handbook》一书,弥补了这方面的一个空白。其实这个东西与其说是一本书,不如说是一个资料集。它的写作方式看起来是几个大牛先拍下来应该包含哪几部分,每一部分包括哪些topic,然后把每一个topic分给对应的人写命题作文。这样的后果就是这本手册的每一章都是不同的作者写的,导致全书的连贯性和一致性较差,也就不够权威了。
然而尽管权威性不足,这本书仍然是目前能够找到的最全面的推荐系统方面的资料。鉴于此,我决定通读一遍这本书。在阅读的过程中,对每一章结合自己的理解,写一篇读书笔记。
以此作为前言。
现代生活带来的一个深刻改变是:人们的选择越来越多。我们选择看哪部电影,买哪个手机,看哪条新闻,租哪处房子…我们拥有的决策自由越来越多,随之而来的是,我们为这些决策付出的代价越来越多。相信大家都有过同样的经历,为了买一样东西,将网上琳琅满目的商品页面从第一页翻到最后一页,最后精疲力竭,还是购买了最初看中的那一个。有句俗话说得好:只有一个选择的人是最幸福的。
1. 推荐系统
图1 推荐系统简图
2. 数据
(1)用户数据:用户数据用来建立用户模型,这些数据根据不同的推荐算法而不同,典型的数据包括用户兴趣点、用户profile、用户的社交好友关系等。
(2)内容数据:内容数据是用来描述一个被推荐内容主要属性的数据,这些属性主要都是跟具体的内容相关的,如一部电影的导演、演员、类型和风格等。
(3)用户--内容数据:用户--内容交互是能反映用户与内容内在联系的数据,其分为隐式和显式两种。显式主要是指评价、打分、购买等能明显反映用户对内容兴趣的交互数据,隐式指的是用户的点击、搜索记录等间接反映用户对内容兴趣的交互数据。
3. 算法
有了基础数据之后,我们可以考虑不同的推荐算法。根据数据和利用数据的方式的不同,当前主流的推荐算法可以分为以下六类(不是主流的划分方法):
(1)基于内容的推荐(content-based):根据用户过去喜欢的内容,推荐相似的内容
(2)基于协同过滤的推荐(collaborative filtering ):根据与当前用户相似的用户的兴趣点,给当前用户推荐相似的内容
(3)基于人口统计学的推荐(demographic-based):根据用户共同的年龄、地域等人口统计学信息进行共同的推荐
(4)基于知识的推荐(knowledge-based):根据对用户和内容的特定领域知识,给特定的用户推荐特定的内容
(5)基于团体的推荐(community-based):根据用户的社交好友关系,给用户推荐其好友感兴趣的内容
(6)混合推荐(hybrid recommender system):以上各种推荐算法的特定组合
有了基础数据和算法选择后,我们在理解了特定领域知识、可用数据、应用需求的基础上,分析潜在的挑战和限制后,才能选择合适的推荐算法进行推荐系统的开发。
4. 相关领域
推荐系统(RS)是一个较新的领域,它利用并结合了多个领域的技术,其中最主要的包括信息检索(IR)、机器学习(ML)和人机交互(HCI)。
RS和IR同是为了解决人们面对信息过载的解决方法,它们有很多共同点。它们利用的很多技术,如相关性计算、多样性页面展现等,都是可以互为借鉴的。同时,它们会遇到很多类似的问题,如关联计算的规模过大,在IR中是通过倒排索引来减小计算规模,这一点在IR中同样可以借用。不同的是信息检索是利用显式的query来表达用户的需求,而推荐系统是利用机器隐式分析用户的兴趣来表达用户的需求。这一点决定了RS是一个比IR更难的问题,一是用户的兴趣比query更难准确的表达;二是用户的规模往往比query的规模要大几个数量级。
RS利用了ML中的很多算法和思想,如KNN聚类、机器学习点击率预估等,都是RS中常用的机器学习方法。
在推荐系统开发完成后,我们还需要考虑人机交互接口的问题。第一,系统要建立用户对推荐系统的信任;除了给用户靠谱的推荐结果外,我们从界面设计上要给出推荐的解释,即告诉用户系统为什么给他推荐某项内容,以此来说服用户信任推荐系统;第二,系统要给用户反馈的机制。当某项推荐靠谱并得到用户行为的证实(购买、评价高分等)时,系统要从用户的行为中得到正反馈来增进系统的准确性;同时,当某项推荐不靠谱时,我们要给用户提供一个负反馈的界面,来对推荐结果进行批评。第三,推荐的展现效果要满足用户的视觉需求,堆积的过满或者过松,字体太大或者太小,有没有缩略图等,都会对用户对推荐的满意度产生一定的影响。
|
1. 数据预处理
(1). 相似度计算
1) 相似度度量
l
l
相似度计算的另一种常见方式时皮尔逊相关系数。皮尔逊相关系数的实际意义是两个随机变量x和y之间的线性相关性,取值范围在-1和1之间。-1表示负线性相关,1表示正线性相关,其余值表示介于二者之间。
l
Jaccard用于集合相似度的一种方式。
2) 距离度量
l
距离度量最常见的是欧几里得距离,计算多位空间中两个点之间的绝对距离。
l
曼哈顿距离也称为城市块距离,是将多个维度的直线距离求和后的结果。
l
l
Minkowski距离是欧氏距离(p=2)、曼哈顿距离(p=1)和切比雪夫距离(p=无穷)的推广。
l
标准化欧氏距离是为了解决以上四种距离的一个重要不足而产生的,即以上四种距离把不同维度指标的差异视为相同的。标准欧式距离则通过每一维的标准差,对该维度进行一个标准化后再进行计算。
l
(2).抽样
抽样技术在数据挖掘中主要用在两个地方:一是在数据预处理和后处理阶段,为了避免计算规模过大,进行抽样计算。二是在数据挖掘阶段,通常会对训练出来的模型进行交叉验证,需要抽样将所有样本划分为训练集和测试集。
通常所说的抽样都是随机抽样(random sampling),主要用于所有样本点都可以认为没有区分时适用。还有一种分层抽样(striated sampling),在样本需要显著的分为不同的子集时,针对每个子集分别进行抽样。
(3). 维度规约(dimensionality reduction)
2.数据挖掘-分类
分类是数据挖掘的主要内容,方法众多,各自都有不同数据假设和理论支持。下面简单列举最有代表性的一些算法。
(1).KNN(k-nearest neighbour)
KNN是最容易理解的分类器,它不训练任何模型。当有一个未知样本需要预测时,它从已知样本中找到与这个未知样本距离最近的K个点,根据这K个点的类别来预测未知样本的类别。
它最主要的不足在于它需要的样本量非常大,同时因为它没有任何训练的模型,每一次预测都要计算k次距离,计算量非常大。
(2).决策树(Decision tree)
决策树将分类过程抽象为一颗树,它通过最大化信息增益的方式对树的分支进行划分,最终通过设置不纯度的阈值来停止树的划分,形成最终的决策树。
它的主要优点在于模型的训练和预测都非常快,不足在于模型的精度有时会低于其它分类器。不过,通过集群学习(ensemble learning)的方式能够极大的克服这一点,如采用bagging思想的random forest和采用boosting思想的GBDT,都是决策树的延伸,它们综合多棵决策树的分类结果来组合出更精确的分类器。
(3).基于规则的分类器(rule-based classifier)
基于规则的分类器通常都是利用“如果…则…”一类的规则来进行分类。其适用性有限,且要获得靠谱的规则比较困难,一般用的较少。
(4).贝叶斯分类器
贝叶斯分类器其实是一类分类器,主要是利用贝叶斯公式,通过估计先验概率和似然概率,并利用一部分先验信息,来计算给定样本的各维度数据值的情况下,样本属于某个类别的概率。
(5).人工神经网络
这个真心没弄懂,占座以后补上。
(6).支持向量机(supporting vector machine)
支持向量机是线性分类器的代表。与贝叶斯分类器先估计概率密度然后计算判别函数不同,线性分类器都是直接估计线性判别式,并最小化某个目标函数,利用某种凸优化方法求解得到最终的线性判别式。
这是最流行的分类器之一,通常认为它训练、预测速度快,而且精度靠谱,所以在各种领域广泛使用。
(7).组合分类器(ensemble learning)
组合分类器的想法是集合若干个弱分类器来组合成一个强分类器,通常有bagging和boosting两种思路。
(8).分类器评估
分类器评估是对一个分类器性能进行评价的重要一步,其主要有一些一些标准
l
l
l
l
l
l