k-means 中的轮廓计算

数据挖掘 Python 聚类 scikit-学习 k-均值
2022-03-03 18:06:47

我正在尝试用 k-means 计算轮廓。但是,我的值非常接近 0,并且集群非常清楚地分开。你知道问题出在哪里吗?这是代码:

n_samples, n_features = data.shape
n_digits=2
labels=data[:,-1]
data=data[:,:-1]
sample_size = 300

print("n_digits: %d, \t n_samples %d, \t n_features %d"
      % (n_digits, n_samples, n_features))
print(79 * '_')
print('% 9s' % 'init'
      '    time  inertia    homo   compl  v-meas     ARI AMI  silhouette')

def bench_k_means(estimator, name, data):
    t0 = time()
    estimator.fit(data)
    print('% 9s   %.2fs    %i   %.3f   %.3f   %.3f   %.3f   %.3f    %.3f'
          % (name, (time() - t0), estimator.inertia_,
             metrics.homogeneity_score(labels, estimator.labels_),
             metrics.completeness_score(labels, estimator.labels_),
             metrics.v_measure_score(labels, estimator.labels_),
             metrics.adjusted_rand_score(labels, estimator.labels_),
             metrics.adjusted_mutual_info_score(labels,  estimator.labels_),
             metrics.silhouette_score(data, estimator.labels_,
                                      metric='euclidean',
                                      sample_size=sample_size)))         

pca = PCA(n_components=n_digits).fit(data)
bench_k_means(KMeans(init=pca.components_, n_clusters=n_digits, n_init=1),
              name="PCA-based",
              data=data)

print(79 * '_')

获得的轮廓为 0.052,这轮廓是获得的 k-means 聚类。

谢谢,

莱娅

1个回答

由于每个簇中的点沿分隔线的方向相当分散,因此簇内的平均距离可能不会比到另一个簇中点的平均距离小得多(如您所愿)。一个小的正值可能是合理的。(也许看看沿第二个主成分的点分布。大的分布可能是问题所在。)