聚类算法:聚类算法中的距离度量
引言
1. 聚类算法概述
聚类算法是一种无监督学习方法,用于将数据集中的样本分组到不同的簇中,使得同一簇内的样本彼此相似,而不同簇的样本彼此相异。这种相似性通常通过计算样本之间的距离来衡量。聚类算法广泛应用于数据挖掘、机器学习、图像分析、生物信息学等领域,帮助我们发现数据的内在结构和模式。
2. 距离度量在聚类中的重要性
距离度量是聚类算法的核心组成部分,它定义了数据点之间的相似度或差异度。选择合适的距离度量对于聚类结果的准确性和有效性至关重要。不同的距离度量方法适用于不同类型的数据和聚类需求,例如欧氏距离适用于数值型数据,而余弦相似度则更适合于文本数据的聚类。
距离度量方法
3. 欧氏距离
欧氏距离是最常用的距离度量方法之一,它计算两个点在多维空间中的直线距离。对于两个n维向量( x ⃗ = ( x 1 , x 2 , . . . , x n ) \vec{x} = (x_1, x_2, ..., x_n) x=(x1,x2,...,xn) )和( y ⃗ = ( y 1 , y 2 , . . . , y n ) \vec{y} = (y_1, y_2, ..., y_n) y=(y1,y2,...,yn) ),欧氏距离定义为:
d ( x ⃗ , y ⃗ ) = ∑ i = 1 n ( x i − y i ) 2 d(\vec{x}, \vec{y}) = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2} d(x,y)=i=1∑n(xi−yi)2
3.1 示例代码
import numpy as np
def euclidean_distance(x, y):
"""
计算两个向量之间的欧氏距离
:param x: 向量x
:param y: 向量y
:return: 欧氏距离
"""
return np.sqrt(np.sum((x - y) ** 2))
# 示例数据
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
# 计算距离
distance = euclidean_distance(x, y)
print("欧氏距离:", distance)
4. 曼哈顿距离
曼哈顿距离,也称为城市街区距离,计算两个点在多维空间中沿轴方向的总距离。对于两个n维向量( x ⃗ \vec{x} x )和( y ⃗ \vec{y} y ),曼哈顿距离定义为:
d ( x ⃗ , y ⃗ ) = ∑ i = 1 n ∣ x i − y i ∣ d(\vec{x}, \vec{y}) = \sum_{i=1}^{n}|x_i - y_i| d(x,y)=i=1∑n∣xi−yi∣
4.1 示例代码
import numpy as np
def manhattan_distance(x, y):
"""
计算两个向量之间的曼哈顿距离
:param x: 向量x
:param y: 向量y
:return: 曼哈顿距离
"""
return np.sum(np.abs(x - y))
# 示例数据
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
# 计算距离
distance = manhattan_distance(x, y)
print("曼哈顿距离:", distance)
5. 余弦相似度
余弦相似度用于衡量两个非零向量之间的角度,适用于高维空间中的文本数据聚类。余弦相似度的值范围在-1到1之间,值越接近1表示两个向量越相似。
similarity ( x ⃗ , y ⃗ ) = cos ( θ ) = x ⃗ ⋅ y ⃗ ∣ ∣ x ⃗ ∣ ∣ ⋅ ∣ ∣ y ⃗ ∣ ∣ \text{similarity}(\vec{x}, \vec{y}) = \cos(\theta) = \frac{\vec{x} \cdot \vec{y}}{||\vec{x}|| \cdot ||\vec{y}||} similarity(x,y)=cos(θ)=∣∣x∣∣⋅∣∣y