Позвольте мне объяснить один из моих подходов, я знаю, что это отнимает много времени, но если вам нужно что-то простое-глупое, вот оно:
Когда я пытаюсь найти оптимальное количество кластеров, я просто сделайте для l oop от 2 до n, используя разное количество центроидов в каждой итерации, подберите модель и напечатайте оценку силуэта.
Я выбираю модель с лучшим или одним из лучших результатов, если есть определенное c количество кластеров, совпадающих с группами в объекте.
Пример кода:
for i in range(2, 30):
model = MiniBatchKMeans(n_clusters=i)
model.fit(vectors_)
score = silhouette_score(vectors_, model.labels_)
print("Number clusters: {}, Silhouette score is {})".format(i, score))
Может выводиться что-то вроде:
Number clusters: 2, Silhouette score is 0.519799469615586)
Number clusters: 3, Silhouette score is 0.6105084877652616)
Number clusters: 4, Silhouette score is 0.6177814923806652)
Number clusters: 5, Silhouette score is 0.623432421353322)
Number clusters: 6, Silhouette score is 0.6454444674454114)
Number clusters: 7, Silhouette score is 0.5614716290406436)
Number clusters: 8, Silhouette score is 0.5585556926568208)
Number clusters: 9, Silhouette score is 0.565265125745878)
......
Так что я бы выбрал 6 кластеров.