掘金 人工智能 前天 10:13
聚类是如何度量数据间的“远近”的?
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了聚类分析中距离度量的核心作用,强调了选择合适距离度量方法的重要性,它能帮助我们发现数据中隐藏的模式。文章详细介绍了包括闵可夫斯基距离、汉明距离、杰卡德距离和余弦距离等多种常用的距离度量方法,阐述了它们的原理、代码实现,并通过scikit-learn库提供了示例。此外,还讨论了距离度量需满足的非负性、同一性、对称性和三角不等式等基本性质,以及如何针对连续和离散属性选择合适的距离计算方式。本文旨在帮助读者理解并应用不同的距离度量方法,从而提升聚类分析的效果。

📏**闵可夫斯基距离**:作为一种通用的距离度量方法,通过调整参数p可以转换为曼哈顿距离(p=1)、欧几里得距离(p=2)或切比雪夫距离(p→∞),适用于不同的数据特征和空间结构。

🔢**汉明距离**:主要用于衡量两个等长字符串或序列之间的差异,通过计算对应位置上不同字符的个数来评估相似度,常用于离散属性的比较。

🤝**杰卡德距离**:用于衡量两个集合之间的相似性,通过计算交集与并集的比值来评估集合的重叠程度,适用于稀疏数据,能够有效处理集合差异。

📐**余弦距离**:通过计算向量夹角的余弦值来衡量方向上的相似性,常用于文本分析中,尤其适用于处理高维数据,关注向量的方向而非大小。

在聚类分析中,距离度量是核心概念之一,它决定了数据点之间的相似性或差异性,从而影响聚类结果的质量。

选择合适的距离度量方法,就像为数据选择合适的**“观察视角”**,能够帮助我们发现隐藏的模式结构。

本文将详细介绍几种常用的聚类距离度量方法,包括它们的原理、代码实现,以及这些方法满足的基本性质。

1. 常用距离度量

1.1. 闵可夫斯基距离(Minkowski Distance)

闵可夫斯基距离是一种通用的距离度量方法,它涵盖了多种常见的距离计算方式。

其公式为:D(x,y)=(i=1nxiyip)1pD(x,y)=\left(\sum_{i=1}^{n}|x_i-y_i|^p\right)^{\frac{1}{p}}

基于scikit-learn库计算这些距离非常简单:

from sklearn.metrics.pairwise import pairwise_distancesimport numpy as np# 示例数据x = np.array([[1, 2, 3]])y = np.array([[4, 5, 6]])# 计算不同 p 值的闵可夫斯基距离manhattan_distance = pairwise_distances(x, y, metric='manhattan')[0][0]euclidean_distance = pairwise_distances(x, y, metric='euclidean')[0][0]chebyshev_distance = pairwise_distances(x, y, metric='chebyshev')[0][0]print("曼哈顿距离:", manhattan_distance)print("欧几里得距离:", euclidean_distance)print("切比雪夫距离:", chebyshev_distance)## 输出结果:'''曼哈顿距离: 9.0欧几里得距离: 5.196152422706632切比雪夫距离: 3.0'''

1.2. 汉明距离(Hamming Distance)

汉明距离用于衡量两个等长字符串之间的差异,即对应位置上不同字符的个数。

它常用于离散属性的比较。

代码示例如下:

from sklearn.metrics import hamming_loss# 示例数据x = np.array([0, 1, 1, 0])y = np.array([1, 1, 0, 0])# 计算汉明距离hamming_distance = hamming_loss(x, y)print("汉明距离:", hamming_distance)## 输出结果:'''汉明距离: 0.5'''

1.3. 杰卡德距离(Jaccard Distance)

杰卡德距离用于衡量两个集合之间的相似性,定义为两个集合交集的大小与并集大小的比值的补数。

它适用于稀疏数据。

代码示例如下:

from sklearn.metrics import jaccard_score# 示例数据x = np.array([0, 1, 1, 0])y = np.array([1, 1, 0, 0])# 计算杰卡德距离jaccard_similarity = jaccard_score(x, y)jaccard_distance = 1 - jaccard_similarityprint("杰卡德距离:", jaccard_distance)## 输出结果:'''杰卡德距离: 0.6666666666666667'''

1.4. 余弦距离

余弦距离通过向量夹角衡量方向相似性,常用于文本分析。

它的公式是:cos(θ)=XYXYcos(\theta)=\frac{X\cdot Y}{||X||\cdot ||Y||}

实际使用常转换为余弦距离:距离 = 1 - 余弦相似度

代码示例如下:

from sklearn.metrics.pairwise import cosine_distancesimport numpy as np# 示例数据x = np.array([[1, 2, 3]])y = np.array([[4, 5, 6]])# 计算余弦距离cosine_dist = cosine_distances(x, y)[0][0]print("余弦距离:", cosine_dist)## 输出结果:'''余弦距离: 0.025368153802923787'''

2. 距离度量的基本性质

距离度量方法通常需要满足以下基本性质,以确保其合理性和有效性:

    非负性Non-negativity):距离必须是非负的,即D(x,y)0D(x,y)\geq 0

这意味着任意两个点之间的距离不能为负值。

    同一性Identity):当且仅当两个点相同时,距离为零,即D(x,y)=0D(x,y)=0当且仅当x=yx=y

这确保了距离能够区分不同的点。

    对称性Symmetry):距离是无方向的,即D(x,y)=D(y,x)D(x,y)=D(y,x)

这意味着从点xx到点yy的距离与从点yy到点xx的距离相同。

    三角不等式Triangle Inequality):对于任意三个点xxyyzz,满足D(x,z)D(x,y)+D(y,z)D(x,z)\leq D(x,y)+D(y,z)

这确保了距离的合理性,即直接从xxzz的距离不会超过经过yy的距离。

这些性质的意义在于,它们为距离度量提供了数学上的合理性,使得距离能够正确地反映数据点之间的相似性或差异性。

3. 连续属性与离散属性的距离

对于连续属性,常用的距离度量方法是欧几里得距离曼哈顿距离

这些方法基于数值的差值来计算距离,适用于数值型数据。

对于离散属性,常用的距离度量方法是汉明距离杰卡德距离

4. 总结

距离度量是聚类分析中的关键环节。通过选择合适的距离度量方法,可以更好地反映数据点之间的相似性或差异性。

本文介绍了几种常用的距离度量方法,包括闵可夫斯基距离、汉明距离和杰卡德距离等等,并通过代码示例展示了它们的使用方式。

同时,我们还探讨了距离度量的基本性质及其意义,以及如何针对连续属性和离散属性进行距离计算。

在实际应用中,选择哪种距离度量方法取决于数据的类型和聚类的目标。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

聚类分析 距离度量 闵可夫斯基距离 汉明距离 杰卡德距离
相关文章