ищет оптимальный k-кластер в огромных векторах - PullRequest
2 голосов
/ 05 февраля 2020

У меня есть 569 векторов, которые я хочу сгруппировать с помощью K-Means. Но сначала мне нужно найти оптимальный K-кластер. Я попытался с помощью метода локтя, используя функцию KElbowVizualizer из пакета YellowBrick, но он не может показать точное количество K-кластеров. Так что теперь я ищу альтернативу для этого.

Есть идеи, как найти оптимальный k-кластер?

Это код, который я использовал с KElbowVisualizer:

from sklearn.cluster import MiniBatchKMeans
from sklearn.feature_extraction.text import TfidfVectorizer
from yellowbrick.cluster import KElbowVisualizer

vec = TfidfVectorizer(
      stop_words = 'english',
      use_idf=True
)

vectors_= vec.fit_transform(df1)

model = MiniBatchKMeans()
titleKElbow = "The Optimal K-Cluster with Elbow Method"
visualizer = KElbowVisualizer(model, k=(2,30), metric='silhouette', timings=False, title = titleKElbow, size=(1080, 720))
visualizer.fit(vectors_)
visualizer.show(outpath="G:/My Drive/0. Thesis/Results/kelbow_minibatchkmeans.png")

1 Ответ

1 голос
/ 05 февраля 2020

Позвольте мне объяснить один из моих подходов, я знаю, что это отнимает много времени, но если вам нужно что-то простое-глупое, вот оно:

Когда я пытаюсь найти оптимальное количество кластеров, я просто сделайте для 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 кластеров.

...