读书笔记_写给程序员的数据挖掘实践指南书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 写给程序员的数据挖掘实践指南 > 读书笔记
黄药师 写给程序员的数据挖掘实践指南 的书评 发表时间:2016-10-18 16:10:39

读书笔记

版权归作者所有,任何形式转载请联系作者。
作者:黄药师(来自豆瓣)
来源:https://www.douban.com/note/587325115/

第二章,协同过滤——爱你所爱(计算用户之间有多少共性)
曼哈顿距离(manhattan):各维直接相减(r=1)
欧氏距离(euclidean):利用勾股定理得到(r=2)
上确界距离:(r=∞)
注:r越大,某一维上的差异对最终影响越大

皮尔逊相关系数(pearson):不同用户评价尺度差异很大时,使用。(公式太复杂,参看下面的代码def pearson)
余弦相似度(cos):数据稀疏时,使用: x × y / (|x| × |y|) (结果为1代表完全相似,-1代表完全不相似)

k近邻:权重百分比 = pearson / ∑pearson。投影 = ∑(打分*权重百分比)

********************另********************
欧氏距离能够体现个体数值特征的绝对差异,
所以更多的用于需要从维度的数值大小中体现差异的分析,
如使用用户行为指标分析用户价值的相似度或差异。

余弦距离更多的是从方向上区分差异,而对绝对的数值不敏感,
更多的用于使用用户对内容评分来区分兴趣的相似度和差异,
同时修正了用户间可能存在的度量标准不统一的问题(因为余弦距离对绝对数值不敏感)。

用户对内容评分,按5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得到的结果是0.98,两者极为相似。但从评分上看X似乎不喜欢2这个 内容,而Y则比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如X和Y的评分均值都是3,那么调整后为(-2,-1)和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合现实。
********************另********************

第三章,协同过滤——基于物品的过滤
基于用户的过滤叫内存的协同过滤
基于物品的过滤叫模型的协同过滤

现基于模型,对用户a进行预测
1、先做产品之间的余弦相似度。(评分先减平均分,以抵消个人习惯影响)
2、归一化用户a的评分,将[1, 5]变为[-1, 1]
归一化公式:NR = 2 * (R-min) / (max-min) - 1
反归一化公式:R = (NR + 1) * (max-min) / 2 + min
3、∑(NR * cos) / ∑|cos| (两个商品的相似度越高,用户对此商品的打分,用来预测新商品时就越有效)
4、将上值再反归一化到[1, 5],得到最终分。

slope one算法
1、偏差(dev):a、b两商品的打分相减,求和后,除以打分人数。
2、(∑ (score + dev) * card) / ∑card (利用某人已有的打分,偏差出对该商品的打分,再以偏差人数为权重加权)

归一化:(推荐书目:the manga guide to statistics(漫画统计学))
标准差sd = √ ( ∑(x -  ̄x)^2 / card(x) )
标准分数 = (x -  ̄x) / sd

把均值改为中位数,可以减少离群点的剧烈影响: asd = (∑|x - x中位|) / card(x)
标准分数 = (x - x中位) / asd

近邻分类:找出离此商品最近的商品,看下用户对它的态度(或看它属于哪一类),得出结论。
问:为何书中用的是曼哈顿距离?

normalization将数归入到[0,1]:(value - min) / (max - min)
standardization使平均值变为0,效果比前者更好。

第五章,算法评估

注:不要把训练的数据用来测试。

10折交叉验证:分10份,9:1这样测10次。
留一法(leave one out):效率差,但结果准。而且不会像10折法一样,因为分法不同,而得出不同结果。
分层采样(stratification):10折时,每一类的数据均分到每一折里面。留一法不存在此问题。
混淆矩阵:一目了然,数据被错分到哪里去了。
kappa统计量:κ = (P(c) - P(r)) / (1 - P(r))
P(c)是实际分类的正确率,P(r)是随机分类的正确率
kappa > 0.75 结果相当好;< 0.4 结果不太理想;< 0 比随机结果还差

rote分类器:只对训练集中出现过的物品进行分类。
近邻分类器的问题:遇到离群点时会发生问题。
kNN:考察N个最近的邻居。距离的倒数做成权重百分比,乘以分数。

更多数据vs更好算法:一个更大的数据集比一个好的算法更有效。所以提高算法的性能使之能处理更多的数据,比单纯改良算法更实用。

第六章,朴素贝叶斯
近邻方法被称为惰性学习器(lazy learner),每次都要遍历。
贝叶斯方法被称为勤快学习器(eager learner),通过训练构建模型,通过模型进行分类。分类速度更快。

P(h|D) = P(h∩D) / P(D) = P(D|h) * P(h) / P(D)
先验概率P(h),后验概率P(h|D)
最大后验假设(the maximum a posteriori hypothesis): hmap = arg max P(D|h) * P(h) / P(D)
因为P(D)都一样,hmap = arg max P(D|h) * P(h)
P(h|D) ≈ P(D|h) * P(h)

推荐书:the numerati(当我们变成一堆数字)太虚不喜欢

P(x | y) = nc / n 调整为:
P(x | y) = (nc + mp) / (n + m) 《机器学习》第179页
其中m是等效样本容量,有多少种选择,如2
p为概率的先验估计,通常设为均匀分布,如0.5
这样防止出现概率0的情况,直接破坏结果。

贝叶斯就是计数,对于连续值比如考试分数:
方法一、可以按分数分为不同的类别,再套贝叶斯。
方法二、高斯分布。
总体标准差sd = √ ( ∑(x -  ̄x)^2 / card(x) )
样本标准差sd = √ ( ∑(x -  ̄x)^2 / (card(x) - 1) )
拿到所有数据时,前者更好;只拿到部分时,后者更优。

高斯分布就是正态分布,68%在一个标准差内,95%在两个标准差内。
通过公式算出某个取值的概率。

朴素贝叶斯 vs kNN:
贝叶斯需要的训练数据更少,性能更好。但无法学到特征间的相互作用,如我喜欢巧克力,也喜欢粥,但不喜欢巧克力加粥一起吃。
kNN不用假设数据有特定结构,但需要大量内存。训练集大时的好选择,如推荐系统、蛋白组学及图像分类等。

贝叶斯需要各属性之间互相独立,才能用乘法去算概率,然而很多时候并不满足,我们假装它满足然后去用,结果效果还不错。这里的假装就是“朴素”的来源。

第七章,非结构化文本分类
有序处理量太大,所以只看词的出现次数。

P(w|h) = (n + 1) / (n + |vocabulary|)
注:|vocabulary|为词汇表中的词数

概率相乘时,数字太小容易变成0,所以改用math.log()后相加。

停词:去掉对分类没有关系的词,如i a the等
停词不等于常见词,work write school等虽常见,但对分类有用。

反对观点,不要盲目停词,如:
1、只使用最频繁的词时,能够判定阿拉伯语文档的写作地(埃及、苏丹、叙利亚还是英国)
2、在线聊天时,性犯罪者更多的使用i me you

第八章,聚类
聚类的种类:
1、k-means聚类:需要确定最后分成多少组。
2、层次聚类:开始时每个实例都看成一个簇,每迭代一次就合并两个最相似的簇,直到最后只有一个簇。

聚类距离计算方式:
1、单连接聚类:使用两集合中相距最近的两个元素来计算长度。
2、全连接聚类:使用两集合中相距最远的两个元素来计算长度。
3、平均连接聚类:一个集合中所有元素到另一集中中所有元素距离的平均。

k-means聚类:
1、随机取n个点作为类别
2、将每个实例分到离它最近的类别
3、计算每个类别的平均点,作为新的中心点: ( ̄x,  ̄y,  ̄z, ....) 其中, ̄x = (x1 + x2 + x3 + ... xn) / n
4、以上面的中心点再次分类,直到结果不再变化为止

此算法开始改善较多,后期只是微调,所以为了降低运算时间,
将“所有点不再从一个类别移到另一类别”放宽到,
“只有不到1%的点会从一个另类移到另一类别”。

误差平方和SSE,也称为散度scatter:
计算每个点到所属中心点距离的平方,并求和。
SSE = ∑dist(c,x)^2

多次k-means聚类得到不同结果时,SSE小的结果更好。

k-means++聚类,更好的选择初始点:
1、先随机选一个中心点
2、计算每个实例离各中心点的距离(开始为1个中心点,每次增加一个中心点)
3、每个实例选一个最近距离,作为选中此实例为中心点的概率,选一个中心点
4、重复第2步,直到选够中心点为止

展开全文


推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

对“读书笔记”的回应

黄药师 2016-11-22 09:37:00
歪歪 :你在看机器学习的算法啊?

是的。这本比较简单,上下班看看一星期就刷完了,要深入要再看别的。

歪歪 2016-11-18 14:17:36

你在看机器学习的算法啊?