我正在尝试使用 K-Means 聚类对 Imagenet 数据集的样本进行聚类。
在这种方法中,我使用了以下 2 种方法来获得最佳集群数量。
Cluster : 2 | Silhouette score : 0.036273542791604996
Cluster : 3 | Silhouette score : -0.00300691369920969
Cluster : 4 | Silhouette score : 0.0025101888459175825
Cluster : 5 | Silhouette score : -0.005924953147768974
Cluster : 6 | Silhouette score : -0.00808520708233118
Cluster : 7 | Silhouette score : -0.006091121584177017
Cluster : 8 | Silhouette score : -0.00549863139167428
Cluster : 9 | Silhouette score : -0.014739749021828175
Cluster : 10 | Silhouette score : -0.021131910383701324
Cluster : 11 | Silhouette score : -0.04057755321264267
Cluster : 12 | Silhouette score : -0.012825582176446915
Cluster : 13 | Silhouette score : -0.012340431101620197
Cluster : 14 | Silhouette score : -0.032936643809080124
Cluster : 15 | Silhouette score : -0.04154697805643082
Cluster : 16 | Silhouette score : -0.04323640838265419
在剪影分析中,它看起来只有集群 4 才显示出更好的价值。其余的集群似乎被错误地分配给了错误的集群。
在这种情况下,需要考虑哪个指标?
更新:
我使用 PCA 减少了特征的维度。以下是肘部和轮廓分析的更新图表。但是,我没有看到集群有任何改进。根据剪影,样本没有被分配到最近的集群。
用最新的图更新问题,VGGNet 已被 Resnet50 取代
代码片段:
for i in range(lower_range, upper_range):
# For Elbow curve
kmeans_cluster = KMeans(n_clusters = i)
kmeans_cluster_fit = kmeans_cluster.fit(features_list_np)
loss = kmeans_cluster_fit.inertia_
error.append(kmeans_cluster_fit.inertia_)
# For Silhoutte analysis
preds = kmeans_cluster.fit_predict(features_list_np)
score = silhouette_score(features_list_np, preds)
score_list.append(score)
sample_score = silhouette_samples(features_list_np, preds)
sample_score_list.append(sample_score)
print("Cluster : {} | Loss : {} | Silhoutte Score : {}".format(i, loss, score))
zero_samples = 0
positive_samples = 0
negative_samples = 0
for each_sample in sample_score:
if each_sample == 0:
zero_samples += 1
if each_sample > 0:
positive_samples += 1
if each_sample < 0:
negative_samples += 1
print("Cluster : {} | Silhouette sample distribution - Zero : {} | Positive : {} | Negative : {}".format(i, zero_samples, positive_samples, negative_samples))
zero_list.append(zero_samples)
pos_list.append(positive_samples)
neg_list.append(negative_samples)
也应该重视剪影分数或剪影样本。因为在某些情况下,剪影分数较少,但具有正值的样本数量较多。
谢谢你,
KK



