余弦距离作为 KMeans 中的相似性度量

机器算法验证 k-均值 距离 欧几里得 余弦距离
2022-02-13 09:09:02

我目前正在解决一个问题,我必须使用余弦距离作为 k 均值聚类的相似性度量。但是,标准的 k-means 聚类包(来自 Sklearn 包)使用欧几里德距离作为标准,并且不允许您更改它。

因此,我的理解是通过下面的代码规范化我的原始数据集。然后我可以运行 kmeans 包(使用欧几里得距离);是否与我将距离度量更改为余弦距离一样?

from sklearn import preprocessing  # to normalise existing X
X_Norm = preprocessing.normalize(X)

km2 = cluster.KMeans(n_clusters=5,init='random').fit(X_Norm)

如果我对此的数学理解不正确,请告诉我。

1个回答

应该是一样的,因为归一化向量余弦相似度和欧几里得相似度是线性连接的。这是解释:

余弦距离实际上是余弦相似度:cos(x,y)=xiyixi2yi2.

现在,让我们看看我们可以对归一化向量的欧几里得距离做什么(xi2=yi2=1)

||xy||2=(xiyi)2=(xi2+yi22xiyi)=xi2+yi22xiyi=1+12cos(x,y)=2(1cos(x,y))

请注意,对于归一化向量cos(x,y)=xiyixi2yi2=xiyi

因此,您可以看到归一化向量的这些距离之间存在直接的线性联系。