Для определения оптимального k-среднего значения для данного набора данных используется python - PullRequest
0 голосов
/ 10 апреля 2020

Я довольно новичок в python и подобных вещах. Сейчас у меня есть задача проанализировать набор данных и определить его оптимальное значение Kmean с помощью метода локтя и силуэта.

dataset information

Как показано на рисунке Мой набор данных имеет три характеристики: один - вес испытуемого, второй - содержание холестерина в крови человека, третий - пол испытуемого («0» означает женщину, «1» означает мужчину)

Сначала я использую метод локтя, чтобы увидеть значение w css при различных значениях k

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
wcss = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
    kmeans.fit(data)
    wcss.append(kmeans.inertia_)
plt.plot(range(1, 11), wcss)
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()

и получить график ниже: Elbow Result

Затем я использовал метод силуэта, чтобы посмотреть на оценку силуэта:

from sklearn.metrics import silhouette_score

sil = []

for k in range(2, 6):
  kmeans = KMeans(n_clusters = k).fit(data)  
  preds = kmeans.fit_predict(data)
  sil.append(silhouette_score(data, preds, metric = 'euclidean'))


plt.plot(range(2, 6), sil)
plt.title('Silhouette Method')
plt.xlabel('Number of clusters')
plt.ylabel('Sil')
plt.show()

for i in range(len(sil)):
 print(str(i+2) +":"+ str(sil[i]))

И получил следующие результаты: enter image description here

Может кто-нибудь предложить Как я могу выбрать оптимальный Kmean? Я провел небольшое исследование, кто-то сказал, что чем выше s-оценка, тем лучше (в моем случае номер кластера должен быть 2?), Но в некоторых других случаях они не просто используют номер кластера, имеет наивысшую оценку.

Другая мысль состоит в том, что здесь я включил пол как одну особенность. Должен ли я сначала разделить свои данные на два класса по полу, а затем объединить их отдельно?

1 Ответ

1 голос
/ 12 апреля 2020

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

Надеюсь, это поможет.

...