原书:http://www.guidetodatamining.com/
一、协同过滤(CF)——寻找相似用户
- 曼哈顿距离(数据稠密:几乎所有属性都没有0值,且属性值大小十分重要)
- 欧式距离(明氏距离)(数据稠密:几乎所有属性都没有0值,且属性值大小十分重要)
- 皮尔逊相关系数(取值【-1,1】,1表示完全相关,-1表示完全不相关)(数据接受分数贬值:不同用户使用不同的评级范围的影响)
- 余弦相似度(在文本挖掘中使用普遍)(取值【-1,1】,1表示完全相似,-1表示完全不相似)(适合稀疏性数据计算)
-
K近邻
二、协同过滤(CF)——隐式评级及基于物品的过滤
隐式评级:不要求用户给出评级得分,观察用户的行为来获得结果(比如用户的点击行为,购买结果)
基于邻居的推荐系统最主要缺点:延迟性太差。
基于用户(内存)的过滤:(给定某个用户,寻找与其最相似的用户,并利用用户对物品的评级结果进行推荐)
- 扩展性问题:随着用户增长,计算量增长。
- 稀疏性问题:大部分推荐系统中,用户和商品都很多,但是用户评级的平均商品数目却很少。
基于物品(模型)的过滤:(先找到最相似的物品,并结合用户对物品的评级结果生成推荐)
tips:分数贬值(分数超过实际应得的分数)
-
调整后的余弦相似度
(归一化的评级结果,解决不同用户的评级区间不同问题):
-
根据余弦相似度得到相似度矩阵
用户u将对物品i的评分的预测值(评级结果)
Where,N是用户u的所有评级物品中的每个和i得分相似的物品。这里的“相似”指的是在矩阵中存在N和i的一个相似度得分值。
Si,N是i和N之间的相似度(来自相似度矩阵)。Ru,N是u给N的评级结果。
- 对评级结果进行归一化:
- 将归一化结果还原到原始minR分到maxR分范围:
Slope One
优点:简单
加权Slope One
- 计算所有物品对的偏差
物品i到物品j的平均偏差为:
card(Si,j(X)是所有同时对i和j进行评分的用户集合。(同时评价i,j物品的用户总数)
- 利用偏差进行预测
使用加权Slope One,MovieLens数据集实现一个简单的推荐系统
数据链接:www.grouplens.org
三、内容过滤及分类——基于物属性的过滤
一些小概念:
- 推荐系统中的“冷启动”:一个全新的乐队刚发布的专辑,由于乐队和专辑从没被评过分(或者由于全新从没被人购买过),因此它永远不会被推荐。
- 音乐网站pandora算法相似的推荐系统:每首歌都表示一个400维的数值向量。
- 之前的是社会过滤(协同过滤),这里是内容过滤。
- 归一化消除数据的偏斜性(特征尺度差异大),(归一化会涉及计算的开销)
在如下情况应该进行归一化:
1:所用数据挖掘方法基于特征的值来计算两个对象的距离;
2:不同特征的尺度不同。
- 标准分数: 标准差公式:
标准分数的缺点:会受到离群点的剧烈影响。
因此,改进的标准分数: 绝对标准差:
分类器实现:https://github.com/Vivian-K/datamining/tree/master
数据链接:http://archive.ics.uci.edu/ml/index.php
四、分类的进一步探讨——算法评估及KNN
- 10折交叉验证:将数据集随机分成10份,使用其中9份进行训练而将另外1份用作测试。该过程可重复10次,每次使用的测试数据都不同。
- n折交叉验证法:缺点:计算开销大;不能像分层抽样一样 偏差大。
- 混淆矩阵:行:实例实际属于的类别;列:分类器预测的类别。
10折交叉验证:数据还是上面的mpg
分成十份:代码 https://github.com/Vivian-K/datamining/tree/master (devide.py)
交叉验证测试代码:https://github.com/Vivian-K/datamining/tree/master (crossValidation.py)
- Kappa统计量:比较的是分类器与仅仅基于随机的分类器的性能。
- Rote分类器,记住整个训练数据,仅当测试实例的属性和某个训练样例完全匹配时才进行分类,缺点是某些测试记录不能被分类
- KNN,最近邻方法会有离群点的问题,因此引出K近邻。
皮马印第安人糖尿病数据集:https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes
代码:https://github.com/Vivian-K/datamining/tree/master (pimaKNN.py)
五、概率及朴素贝叶斯——朴素贝叶斯
- 近邻方法:惰性学习器(lazy learner)
- 贝叶斯方法:勤快学习器(eager learner)