漫谈:机器学习中距离和相似性度量方法
2013-08-07 22:33
288 查看
在机器学习和数据挖掘中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如 K 最近邻(KNN)和 K 均值(K-Means)等等。根据数据特性的不同,可以采用不同的度量方法。一般而言,定义一个距离函数 d(x,y), 需要满足下面几个准则:
1) d(x,x) = 0 // 到自己的距离为0
2) d(x,y) >= 0 // 距离非负
3) d(x,y) = d(y,x) // 对称性: 如果 A 到 B 距离是 a,那么 B 到 A 的距离也应该是 a
4) d(x,k)+ d(k,y) >= d(x,y) // 三角形法则: (两边之和大于第三边)
这篇博客主要介绍机器学习和数据挖掘中一些常见的距离公式,包括:
闵可夫斯基距离
欧几里得距离
曼哈顿距离
切比雪夫距离
马氏距离
余弦相似度
皮尔逊相关系数
汉明距离
杰卡德相似系数
编辑距离
DTW 距离
KL 散度
View Code
先从信息熵说起,假设一篇文章的标题叫做“黑洞到底吃什么”,包含词语分别是 {黑洞, 到底, 吃什么}, 我们现在要根据一个词语推测这篇文章的类别。哪个词语给予我们的信息最多?很容易就知道是“黑洞”,因为“黑洞”这个词语在所有的文档中出现的概率太低啦,一旦出现,就表明这篇文章很可能是在讲科普知识。而其他两个词语“到底”和“吃什么”出现的概率很高,给予我们的信息反而越少。如何用一个函数 h(x) 表示词语给予的信息量呢?第一,肯定是与 p(x) 相关,并且是负相关。第二,假设 x 和 y 是独立的(黑洞和宇宙不相互独立,谈到黑洞必然会说宇宙),即 p(x,y) = p(x)p(y), 那么获得的信息也是叠加的,即 h(x, y) = h(x) + h(y)。满足这两个条件的函数肯定是负对数形式:
对假设一个发送者要将随机变量 X 产生的一长串随机值传送给接收者, 接受者获得的平均信息量就是求它的数学期望:
这就是熵的概念。另外一个重要特点是,熵的大小与字符平均最短编码长度是一样的(shannon)。设有一个未知的分布 p(x), 而 q(x) 是我们所获得的一个对 p(x) 的近似,按照 q(x) 对该随机变量的各个值进行编码,平均长度比按照真实分布的 p(x) 进行编码要额外长一些,多出来的长度这就是 KL 散度(之所以不说距离,是因为不满足对称性和三角形法则),即:
KL 散度又叫相对熵(relative entropy)。了解机器学习的童鞋应该都知道,在 Softmax 回归(或者 Logistic 回归),最后的输出节点上的值表示这个样本分到该类的概率,这就是一个概率分布。对于一个带有标签的样本,我们期望的概率分布是:分到标签类的概率是 1, 其他类概率是 0。但是理想很丰满,现实很骨感,我们不可能得到完美的概率输出,能做的就是尽量减小总样本的 KL 散度之和(目标函数)。这就是 Softmax 回归或者 Logistic 回归中 Cost function 的优化过程啦。(PS:因为概率和为 1,一般的 logistic 二分类的图只画了一个输出节点,隐藏了另外一个)
待补充的方法:
卡方检验 Chi-Square
衡量 categorical attributes 相关性的 mutual information
Spearman's rank coefficient
Earth Mover's Distance
SimRank 迭代算法等。
参考资料:
距离和相似性度量
Machine Learning: Measuring Similarity and Distance
What is Mahalanobis distance?
Cosine similarity, Pearson correlation, and OLS coefficients
机器学习中的相似性度量
动态时间归整 | DTW | Dynamic Time Warping
1) d(x,x) = 0 // 到自己的距离为0
2) d(x,y) >= 0 // 距离非负
3) d(x,y) = d(y,x) // 对称性: 如果 A 到 B 距离是 a,那么 B 到 A 的距离也应该是 a
4) d(x,k)+ d(k,y) >= d(x,y) // 三角形法则: (两边之和大于第三边)
这篇博客主要介绍机器学习和数据挖掘中一些常见的距离公式,包括:
闵可夫斯基距离
欧几里得距离
曼哈顿距离
切比雪夫距离
马氏距离
余弦相似度
皮尔逊相关系数
汉明距离
杰卡德相似系数
编辑距离
DTW 距离
KL 散度
1. 闵可夫斯基距离
闵可夫斯基距离(Minkowski distance)是衡量数值点之间距离的一种非常常见的方法,假设数值点 P 和 Q 坐标如下:#!/usr/bin/python2 # -*- coding:UTF-8 -*- # code related at: http://blog.mckelv.in/articles/1453.html import sys distance = lambda a,b : 0 if a==b else 1 def dtw(sa,sb): ''' >>>dtw(u"干啦今今今今今天天气气气气气好好好好啊啊啊", u"今天天气好好啊") 2 ''' MAX_COST = 1<<32 #初始化一个len(sb) 行(i),len(sa)列(j)的二维矩阵 len_sa = len(sa) len_sb = len(sb) # BUG:这样是错误的(浅拷贝): dtw_array = [[MAX_COST]*len(sa)]*len(sb) dtw_array = [[MAX_COST for i in range(len_sa)] for j in range(len_sb)] dtw_array[0][0] = distance(sa[0],sb[0]) for i in xrange(0, len_sb): for j in xrange(0, len_sa): if i+j==0: continue nb = [] if i > 0: nb.append(dtw_array[i-1][j]) if j > 0: nb.append(dtw_array[i][j-1]) if i > 0 and j > 0: nb.append(dtw_array[i-1][j-1]) min_route = min(nb) cost = distance(sa[j],sb[i]) dtw_array[i][j] = cost + min_route return dtw_array[len_sb-1][len_sa-1] def main(argv): s1 = u'干啦今今今今今天天气气气气气好好好好啊啊啊' s2 = u'今天天气好好啊' d = dtw(s1, s2) print d return 0 if __name__ == '__main__': sys.exit(main(sys.argv))
View Code
6. 概率分布之间的距离
前面我们谈论的都是两个数值点之间的距离,实际上两个概率分布之间的距离是可以测量的。在统计学里面经常需要测量两组样本分布之间的距离,进而判断出它们是否出自同一个 population,常见的方法有卡方检验(Chi-Square)和 KL 散度( KL-Divergence),下面说一说 KL 散度吧。先从信息熵说起,假设一篇文章的标题叫做“黑洞到底吃什么”,包含词语分别是 {黑洞, 到底, 吃什么}, 我们现在要根据一个词语推测这篇文章的类别。哪个词语给予我们的信息最多?很容易就知道是“黑洞”,因为“黑洞”这个词语在所有的文档中出现的概率太低啦,一旦出现,就表明这篇文章很可能是在讲科普知识。而其他两个词语“到底”和“吃什么”出现的概率很高,给予我们的信息反而越少。如何用一个函数 h(x) 表示词语给予的信息量呢?第一,肯定是与 p(x) 相关,并且是负相关。第二,假设 x 和 y 是独立的(黑洞和宇宙不相互独立,谈到黑洞必然会说宇宙),即 p(x,y) = p(x)p(y), 那么获得的信息也是叠加的,即 h(x, y) = h(x) + h(y)。满足这两个条件的函数肯定是负对数形式:
对假设一个发送者要将随机变量 X 产生的一长串随机值传送给接收者, 接受者获得的平均信息量就是求它的数学期望:
这就是熵的概念。另外一个重要特点是,熵的大小与字符平均最短编码长度是一样的(shannon)。设有一个未知的分布 p(x), 而 q(x) 是我们所获得的一个对 p(x) 的近似,按照 q(x) 对该随机变量的各个值进行编码,平均长度比按照真实分布的 p(x) 进行编码要额外长一些,多出来的长度这就是 KL 散度(之所以不说距离,是因为不满足对称性和三角形法则),即:
KL 散度又叫相对熵(relative entropy)。了解机器学习的童鞋应该都知道,在 Softmax 回归(或者 Logistic 回归),最后的输出节点上的值表示这个样本分到该类的概率,这就是一个概率分布。对于一个带有标签的样本,我们期望的概率分布是:分到标签类的概率是 1, 其他类概率是 0。但是理想很丰满,现实很骨感,我们不可能得到完美的概率输出,能做的就是尽量减小总样本的 KL 散度之和(目标函数)。这就是 Softmax 回归或者 Logistic 回归中 Cost function 的优化过程啦。(PS:因为概率和为 1,一般的 logistic 二分类的图只画了一个输出节点,隐藏了另外一个)
待补充的方法:
卡方检验 Chi-Square
衡量 categorical attributes 相关性的 mutual information
Spearman's rank coefficient
Earth Mover's Distance
SimRank 迭代算法等。
参考资料:
距离和相似性度量
Machine Learning: Measuring Similarity and Distance
What is Mahalanobis distance?
Cosine similarity, Pearson correlation, and OLS coefficients
机器学习中的相似性度量
动态时间归整 | DTW | Dynamic Time Warping
相关文章推荐
- 漫谈:机器学习中距离和相似性度量方法
- 漫谈:机器学习中距离和相似性度量方法
- 漫谈:机器学习中距离和相似性度量方法
- 漫谈:机器学习中距离和相似性度量方法
- 漫谈:机器学习中距离和相似性度量方法
- 漫谈:机器学习中距离和相似性度量方法
- 漫谈:机器学习中距离和相似性度量方法
- 转载 漫谈机器学习中的距离和相似性度量方法
- 漫谈:机器学习中距离和相似性度量方法
- 漫谈:机器学习中距离和相似性度量方法
- 【转载 + ADD】 漫谈:机器学习中距离和相似性度量方法
- 漫谈:机器学习中距离和相似性度量方法
- 漫谈:机器学习中距离和相似性度量方法
- 【机器学习】【基本理论】漫谈:机器学习中距离和相似性度量方法
- 机器学习中的距离和相似性度量方法
- 机器学习中距离和相似性度量方法
- 机器学习中常用的距离和相似性度量方法
- 机器学习中距离和相似性度量方法
- 机器学习之距离和相似性度量方法
- 机器学习中距离和相似性度量方法