如何衡量数据点之间的相似或相异程度是聚类算法的基础问题,会直接影响聚类分析的效果,最直观的方法是使用距离函数或者相似性函数。
常见的相似或相异程度计算方法。
1。计算公式
1。闵可夫斯基距离
很多距离计算方法都可以归结为基于向量p范数的距离,即闵可夫斯基距离。
dij=(sumsh=1 | xihxjh | p) 1/pdij=(sumh=1 s | xihxjh | p) 1/p
2。欧氏距离
参数p=2,闵可夫斯基距离退化为欧几里得距离,使用欧氏距离的聚类算法大多只能发现低维空间中呈超球分布的数据,并且对数据集中的噪声比较敏感。
3。城市街区距离
参数p=1,闵可夫斯基距离演变为街区距离,街区距离可以有效提高模糊聚类算法对噪声或者孤立点的鲁棒性。
4。一口距离
参数p=无穷,闵可夫斯基距离演变为一口距离。
5。余弦相似度
6。Mahalanobis距离
Mahalanobis距离为原特征空间中的数据在线性投影空间欧式距离,使用Mahalanobis距离能够使得聚类算法成功发现数据集里成超椭球型分布的类簇,但是Mahalanobis距离会带来较大的计算量。
7。选择距离
选择距离对数据集里的噪声不敏感。
8。特征加权距离
2。代码
代码,
import numpy as np 时间=a np.array ([1、2、3、4]) 时间=b np.array ([4、3、2、1) print aprint b # Euclidean distancedistEu =, np.sqrt (np.sum ((a - b) * * 2) print “Euclidean distance =, distEu # City-block distancedistCb =, np.sum (np.abs (a - b)) print “City-block distance =, distCb # Sup distancedistSup =,马克斯(np.abs (a - b)) print “Sup distance =, distSup # Cosine similaritycosineSimi =, np.dot (a, b),/, (np.sqrt (np.sum (* * 2)), *, np.sqrt (np.sum (b * * 2))) print “Cosine similarity =, cosineSimi # Alternative distancebeta =, 0.5 distalter =, 1,安康;np.exp (-beta *, np.sqrt (np.sum ((a 安康;b) * * 2))) print “Alternative distance =, distAlter # Feature weighted distanceweigh =, np.array ([0.5, 0.3, 0.1, 0.1]) 时间=distFea np.sqrt (np.dot(重量,np.abs (a - b))) print “Feature weighted  distance =,”,distFea
输出,
[1, 2, 3, 4) (4,3,2,1]Euclidean distance =,, 4.472135955 city-block distance =,, 8 sup distance =,, 3 cosine similarity =,, 0.666666666667 alternative distance =,, 0.89312207434 feature weighted distance =,
1.48323969742,