推荐系统手册

来源:互联网 发布:python job管理 编辑:程序博客网 时间:2024/05/16 17:51

出自:http://blog.sina.com.cn/s/blog_761512e50100xnfs.html

推荐系统是近几年比较新的一个领域,目前比较完整的介绍这个领域的资料,主要是一些综述性paper。这些paper往往都各有侧重点,大多比较偏重推荐算法这一个层面,不够全面。

2011年的时候,国外一些在个性化推荐领域浸淫多年的人合作写了《Recommender System Handbook》一书,弥补了这方面的一个空白。其实这个东西与其说是一本书,不如说是一个资料集。它的写作方式看起来是几个大牛先拍下来应该包含哪几部分,每一部分包括哪些topic,然后把每一个topic分给对应的人写命题作文。这样的后果就是这本手册的每一章都是不同的作者写的,导致全书的连贯性和一致性较差,也就不够权威了。

然而尽管权威性不足,这本书仍然是目前能够找到的最全面的推荐系统方面的资料。鉴于此,我决定通读一遍这本书。在阅读的过程中,对每一章结合自己的理解,写一篇读书笔记。

以此作为前言。


现代生活带来的一个深刻改变是:人们的选择越来越多。我们选择看哪部电影,买哪个手机,看哪条新闻,租哪处房子…我们拥有的决策自由越来越多,随之而来的是,我们为这些决策付出的代价越来越多。相信大家都有过同样的经历,为了买一样东西,将网上琳琅满目的商品页面从第一页翻到最后一页,最后精疲力竭,还是购买了最初看中的那一个。有句俗话说得好:只有一个选择的人是最幸福的。

1.   推荐系统

     推荐系统的兴起,即是为了把人们从信息过载的陷阱中解决出来,帮助人们进行简单决策。它的主要原理是根据用户过去的行为(比如购买、评分、点击等)来为用户建立兴趣模型,并利用一定的推荐算法,把用户最可能感兴趣的内容推荐给用户,如下图。

推荐系统手册(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中常用的机器学习方法。

在推荐系统开发完成后,我们还需要考虑人机交互接口的问题。第一,系统要建立用户对推荐系统的信任;除了给用户靠谱的推荐结果外,我们从界面设计上要给出推荐的解释,即告诉用户系统为什么给他推荐某项内容,以此来说服用户信任推荐系统;第二,系统要给用户反馈的机制。当某项推荐靠谱并得到用户行为的证实(购买、评价高分等)时,系统要从用户的行为中得到正反馈来增进系统的准确性;同时,当某项推荐不靠谱时,我们要给用户提供一个负反馈的界面,来对推荐结果进行批评。第三,推荐的展现效果要满足用户的视觉需求,堆积的过满或者过松,字体太大或者太小,有没有缩略图等,都会对用户对推荐的满意度产生一定的影响。


引言
    通常来说,数据挖掘(Data Mining,DM)最早是机器学习(Machine Learning,ML)算法在具体领域中的应用。后来,在这些具体应用过程中逐渐总结出一套通用的流程,和数据挖掘一起形成了一个新的领域,叫数据库中的知识发现(Knowledge Discovery in Database),其主要流程:
推荐系统手册(2)鈥斖萍鱿低车氖萃诰蚍椒

    其中,数据预处理主要是针对原始数据中的一些问题,如噪声、离群点、遗漏值、不一致值和重复值等数据质量的问题,通过抽样、维度规约、归一化、离散化和变量变换等方式,将数据转换成为适合数据挖掘直接利用的数据。数据挖掘即是机器学习算法在具体问题中的应用,通常包括分类、聚类和异常检测等。数据后处理是数据挖掘后的结果进行进一步的处理,使得数据挖掘的结果应用到问题的解决之中。

    推荐系统算法策略通常会用到数据挖掘、机器学习、信息检索和自然语言处理等领域中的很多知识,尤其是数据挖掘。

 

1. 数据预处理

  推荐系统相关的数据预处理技术除了通常的归一化、变量替换等以外,最主要的是相似度计算、抽样和维度规约。

(1). 相似度计算

     相似度通常有两种衡量方式,一是直接计算相似度,二是计算距离,距离是本质上是相异程度的度量,距离越小,相似度越高。

1) 相似度度量

余弦相似度

 相似度计算最常见的方式是余弦相似度,对于n维空间的两个向量,通过以下公式计算相似度。其几何意义就是两个向量的空间夹角的余弦值,取值范围在-1到1之间。取值为-1表示完全相反,取值为1表示完全相同,其余值表示介于二者之间。

推荐系统手册(2)鈥斖萍鱿低车氖萃诰蚍椒

皮尔逊相关系数

相似度计算的另一种常见方式时皮尔逊相关系数。皮尔逊相关系数的实际意义是两个随机变量x和y之间的线性相关性,取值范围在-1和1之间。-1表示负线性相关,1表示正线性相关,其余值表示介于二者之间。

    推荐系统手册(2)鈥斖萍鱿低车氖萃诰蚍椒

Jaccard相关系数(Jaccard Coefficient)

Jaccard用于集合相似度的一种方式。

推荐系统手册(2)鈥斖萍鱿低车氖萃诰蚍椒

2) 距离度量

欧几里得距离(Euclidean Distance)

距离度量最常见的是欧几里得距离,计算多位空间中两个点之间的绝对距离。

推荐系统手册(2)鈥斖萍鱿低车氖萃诰蚍椒

曼哈顿距离(Manhattan Distance)

曼哈顿距离也称为城市块距离,是将多个维度的直线距离求和后的结果。

推荐系统手册(2)鈥斖萍鱿低车氖萃诰蚍椒

切比雪夫距离(Chebyshev Distance)

推荐系统手册(2)鈥斖萍鱿低车氖萃诰蚍椒

闵可夫斯基距离(Minkowski Distance)

Minkowski距离是欧氏距离(p=2)、曼哈顿距离(p=1)和切比雪夫距离(p=无穷)的推广。

推荐系统手册(2)鈥斖萍鱿低车氖萃诰蚍椒

标准化欧氏距离(Standardized Euclidean Distance)

标准化欧氏距离是为了解决以上四种距离的一个重要不足而产生的,即以上四种距离把不同维度指标的差异视为相同的。标准欧式距离则通过每一维的标准差,对该维度进行一个标准化后再进行计算。

推荐系统手册(2)鈥斖萍鱿低车氖萃诰蚍椒

 

马哈拉诺比斯距离(Mahalanobis Distance)

     Mahalanobis距离是标准化欧氏距离的推广,在协方差矩阵是对角阵时,Mahalanobis距离就变成了标准化欧氏距离。

    推荐系统手册(2)鈥斖萍鱿低车氖萃诰蚍椒

(2).抽样

抽样技术在数据挖掘中主要用在两个地方:一是在数据预处理和后处理阶段,为了避免计算规模过大,进行抽样计算。二是在数据挖掘阶段,通常会对训练出来的模型进行交叉验证,需要抽样将所有样本划分为训练集和测试集。

通常所说的抽样都是随机抽样(random sampling),主要用于所有样本点都可以认为没有区分时适用。还有一种分层抽样(striated sampling),在样本需要显著的分为不同的子集时,针对每个子集分别进行抽样。

(3). 维度规约(dimensionality reduction)

    在统计学习理论中,当样本的维度增加的时候,待学习的模型的复杂性是随着维度呈指数增长的,这种现象通常称为“维灾难(curse of dimensionality)”。这也就意味着,如果我们想在高维空间中学到和在低维空间中精度一样高的模型,所需要的样本数是呈指数增长的。

    维度规约通常是用来处理维灾难问题的。通常维度规约有两种思路,一是从高维数据中选出最能表达数据的一些维度,并用这些维度来代表数据,称为特征选择(feature selection)。另一种是将高维数据通过某种trick变换映射到低维空间,称为特征构造(feature extraction)。

    主成分分析(PCA,Principal Component Analysis)是最主要的一种特征选择方式。它通过特征分解能够得到每一个维度对于整个数据的最小均方差的贡献程度,从而定量判断每一维对于数据所包含信息的贡献度。然后保留最主要的一些维度,抛弃一些不显著的维度,对数据进行降维。

    奇异值分解(SVD,singular value decomposition)是主要的特征构造方式。它通过矩阵分解的方式,将数据从高维空间映射到低维空间,对数据进行降维。

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).分类器评估

分类器评估是对一个分类器性能进行评价的重要一步,其主要有一些一些标准

Precision-recall:准确率-召回率,根据混淆矩阵计算

F1:结合准确率-召回率的一个综合指标

ROC:直观的曲线比较分类器性能

AUC:ROC的定量化表达

MAE:平均绝对误差

RMSE:平均根方误差



0 0
原创粉丝点击