我正在尝试在Sklearn中将曼哈顿距离用于SpectralClustering()
。我试图将affinity
参数设置为manhattan
,但出现以下错误。
ValueError:未知的内核“曼哈顿”
我应该使用哪个正确的内核名称?有人可以帮忙吗?基本上,我想使用SpectralClustering
通过kmeans
距离度量来实现manhattan
。
以下是用于设置SpectralClustering()
的代码行:
clustering = SpectralClustering(n_clusters=10, affinity='manhattan', assign_labels="kmeans")
clustering.fit(X)
答案 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的原因。
度量标准的有效值为::
[“ rbf”,“ Sigmoid”,“多项式”,“ poly”,“线性”,“余弦”]
linear
和manhattan
距离度量是不同的,您可以从提到的示例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