如何在sklearn中将曼哈顿距离用于SpectralCluster

时间:2019-04-03 15:41:48

标签: python scikit-learn

我正在尝试在Sklearn中将曼哈顿距离用于SpectralClustering()。我试图将affinity参数设置为manhattan,但出现以下错误。

  

ValueError:未知的内核“曼哈顿”

我应该使用哪个正确的内核名称?有人可以帮忙吗?基本上,我想使用SpectralClustering通过kmeans距离度量来实现manhattan

以下是用于设置SpectralClustering()的代码行:

clustering = SpectralClustering(n_clusters=10, affinity='manhattan', assign_labels="kmeans")
clustering.fit(X)

2 个答案:

答案 0 :(得分:3)

official documentation on Spectral Clustering告诉您可以使用sklearn.metrics.pairwise_kernels支持的任何内容。不幸的是,曼哈顿距离还没有成对内核。

如果足够的话,您可以像这样使用linear距离:

clustering = SpectralClustering(n_clusters=10, affinity='linear', assign_labels="kmeans")

答案 1 :(得分:1)

sklearn.metrics.pairwise_kernels中不支持曼哈顿距离,这就是ValueError的原因。

From Documentation:

  

度量标准的有效值为::
  [“ rbf”,“ Sigmoid”,“多项式”,“ poly”,“线性”,“余弦”]

linearmanhattan距离度量是不同的,您可以从提到的示例here:

中了解
>>> import numpy as np
>>> from sklearn.metrics import pairwise_distances
>>> from sklearn.metrics.pairwise import pairwise_kernels
>>> X = np.array([[2, 3], [3, 5], [5, 8]])
>>> Y = np.array([[1, 0], [2, 1]])
>>> pairwise_distances(X, Y, metric='manhattan')
array([[ 4.,  2.],
       [ 7.,  5.],
       [12., 10.]])
>>> pairwise_kernels(X, Y, metric='linear')
array([[ 2.,  7.],
       [ 3., 11.],
       [ 5., 18.]])

sklearn.metrics.pairwise_distance下可以使用曼哈顿距离功能

现在,将曼哈顿距离测量与光谱簇结合使用的更简单方法是

>>> from sklearn.cluster import SpectralClustering
>>> from sklearn.metrics import pairwise_distances
>>> import numpy as np
>>> X = np.array([[1, 1], [2, 1], [1, 0],
...               [4, 7], [3, 5], [3, 6]])

>>> X_precomputed = pairwise_distances(X, metric='manhattan')
>>> clustering = SpectralClustering(n_clusters=2, affinity='precomputed', assign_labels="discretize",random_state=0)
>>> clustering.fit(X_precomputed)
>>> clustering.labels_
>>> clustering