Как идентифицировать и разделить кластеры, используя K-средства в Python? - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь найти кластеры в наборе данных, используя метод K-средних.Я получил количество кластеров из метода локтя, но не знаю, как идентифицировать и разделить эти кластеры для дальнейшего анализа каждого кластера, например, применения линейной регрессии к каждому кластеру.Мой набор данных содержит более двух переменных.

Я получил количество кластеров из метода локтя

Применение Kmeans

distortions = []
K = range(1,10)
for k in K:
kmeanModel = KMeans(n_clusters=k).fit(df)
kmeanModel.fit(df)
distortions.append(sum(np.min(cdist(df, kmeanModel.cluster_centers_, 'euclidean'), axis=1))**2 / df.shape[0])

Метод локтя для количества кластеров

plt.plot(K, distortions, 'bx-')
plt.xlabel('k')
plt.ylabel('Distortion')
plt.title('The Elbow Method showing the optimal k')
plt.show()

1 Ответ

1 голос
/ 10 июля 2019

Предположим, вы обнаружили, что значение k является оптимальным числом кластеров для ваших данных с использованием метода Elbow.

Таким образом, вы можете использовать следующий код для разделения данных на разные кластеры:

kmeans = KMeans(n_clusters=k, random_state=0).fit(df)
y = kmeans.labels_    # Will return the cluster numbers for each datapoint
y_pred = kmeans.predict(<unknown_sample>)    # If want to predict for a new sample

После этого вы можете разделить данные на основе кластеров следующим образом:

for i in range(k):
    cluster_i = df[y == i, :]    # Subset of the datapoints that have been assigned to the cluster i
    # Do analysis on this subset of datapoints.

Более подробную информацию о различных параметрах можно найти по этой ссылке: https://scikit -learn.org / stable / modules / generate / sklearn.cluster.KMeans.html

...