我正在尝试使用Sklearn的Minibatch K-Means对图像片段进行聚类,以重现this paper的结果。以下是我的数据集的一些信息:
我可以获得一些关于如何设置Minibatch KMeans参数的指导吗?目前,惯性开始收敛,但随后它再次突然上升,然后算法终止:
Minibatch iteration 48/1300:mean batch inertia: 22.392906, ewa inertia: 22.500929
Minibatch iteration 49/1300:mean batch inertia: 22.552454, ewa inertia: 22.509173
Minibatch iteration 50/1300:mean batch inertia: 22.582834, ewa inertia: 22.520959
Minibatch iteration 51/1300:mean batch inertia: 22.448639, ewa inertia: 22.509388
Minibatch iteration 52/1300:mean batch inertia: 22.576970, ewa inertia: 22.520201
Minibatch iteration 53/1300:mean batch inertia: 22.489388, ewa inertia: 22.515271
Minibatch iteration 54/1300:mean batch inertia: 22.465019, ewa inertia: 22.507231
Minibatch iteration 55/1300:mean batch inertia: 22.434557, ewa inertia: 22.495603
[MiniBatchKMeans] Reassigning 766 cluster centers.
Minibatch iteration 56/1300:mean batch inertia: 22.513578, ewa inertia: 22.498479
[MiniBatchKMeans] Reassigning 767 cluster centers.
Minibatch iteration 57/1300:mean batch inertia: 26.445686, ewa inertia: 23.130030
Minibatch iteration 58/1300:mean batch inertia: 26.419483, ewa inertia: 23.656341
Minibatch iteration 59/1300:mean batch inertia: 26.599368, ewa inertia: 24.127225
Minibatch iteration 60/1300:mean batch inertia: 26.479168, ewa inertia: 24.503535
Minibatch iteration 61/1300:mean batch inertia: 26.249822, ewa inertia: 24.782940
Minibatch iteration 62/1300:mean batch inertia: 26.456175, ewa inertia: 25.050657
Minibatch iteration 63/1300:mean batch inertia: 26.320527, ewa inertia: 25.253836
Minibatch iteration 64/1300:mean batch inertia: 26.336147, ewa inertia: 25.427005
我制作的图像补丁看起来不像论文的作者所得到的。我是否可以获得有关如何为MiniBatchKmeans设置参数以获得更好结果的指导?以下是我目前的参数:
kmeans = MiniBatchKMeans(n_clusters=self.num_centroids, verbose=True, batch_size=self.num_centroids * 20,compute_labels=False,
答案 0 :(得分:8)
您看到的行为由reassignment_ratio
参数控制。 MiniBatchKMeans试图避免创建过度不平衡的类。每当最小和最小的尺寸的比例。最大的群集低于此值,群集低于阈值的中心随机重新初始化。这就是
[MiniBatchKMeans] Reassigning 766 cluster centers.
数量越多,即使在良好的聚类中,群集大小的预期扩展(因此最小/最大比率越小)越大。默认设置为reassignment_ratio=0.01
这对于1600个集群而言太大了。对于超过1000的簇大小,我通常只使用reassignment_ratio=0
。在这种情况下,我还没有看到重新任命的改进。
如果您想尝试重新分配,请查看reassignment_ratio=10**-4
之类的内容是否优于0。请密切关注日志消息。如果一次重新分配多于1个或2个集群,则应该进一步减少reassignment_ratio
。您可能还希望增加max_no_improvement
以确保算法有足够的时间从重新分配引入的随机化中恢复,因为这可能会使事情变得更糟,至少在最初时,即使它使您超出局部最小值长期来说。
增加批量大小也可能有助于避免某些群集的重新分配触发因采样变化而变小。