K-modes 算法可在此处获得
我想对我的二进制数据集进行聚类。我需要指定我需要的集群数量作为输出:
KModes (n_clusters, init, n_init, verbose)
我的数据集包含 1000 行和 1000 行,我想计算我的集群之间的距离,以便知道我需要选择的集群的确切数量。我不知道如何比较它们。可能我想使用汉明距离,因为它是最适合在二进制数据之间进行比较的距离。
欢迎您提出任何建议。
K-modes 算法可在此处获得
我想对我的二进制数据集进行聚类。我需要指定我需要的集群数量作为输出:
KModes (n_clusters, init, n_init, verbose)
我的数据集包含 1000 行和 1000 行,我想计算我的集群之间的距离,以便知道我需要选择的集群的确切数量。我不知道如何比较它们。可能我想使用汉明距离,因为它是最适合在二进制数据之间进行比较的距离。
欢迎您提出任何建议。
下面是一些选择集群数量的技术K
。
最常见的是肘部方法和轮廓方法。
在这种方法中,您可以计算具有不同值的分数函数K
。您可以使用您建议的汉明距离或其他分数,例如色散。
然后,绘制它们,并在函数创建“肘部”的位置为 选择值K
。
该方法测量一个簇中的点到其他簇的距离。然后在视觉上你有让你选择的剪影图K
。
观察:
KMeans 算法非常漂亮,但与其他算法相比,它有点原始。如果您有兴趣让聚类算法自动为您计算出聚类的数量,因此您不必这样做,您可以使用Affinity Propagation
.
from sklearn.cluster import AffinityPropagation
from sklearn import metrics
from sklearn.datasets import make_blobs
# #############################################################################
# Generate sample data
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
#%matplotlib inline
from sklearn import datasets#Iris Dataset
iris = datasets.load_iris()
X = iris.data
# #############################################################################
# Compute Affinity Propagation
af = AffinityPropagation(preference=-50).fit(X)
cluster_centers_indices = af.cluster_centers_indices_
labels = af.labels_
n_clusters_ = len(cluster_centers_indices)
print('Estimated number of clusters: %d' % n_clusters_)
# #############################################################################
# Plot result
import matplotlib.pyplot as plt
from itertools import cycle
plt.close('all')
plt.figure(1)
plt.clf()
colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk')
for k, col in zip(range(n_clusters_), colors):
class_members = labels == k
cluster_center = X[cluster_centers_indices[k]]
plt.plot(X[class_members, 0], X[class_members, 1], col + '.')
plt.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col,
markeredgecolor='k', markersize=14)
for x in X[class_members]:
plt.plot([cluster_center[0], x[0]], [cluster_center[1], x[1]], col)
plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()
输出:Estimated number of clusters: 3