Я довольно новичок в python и подобных вещах. Сейчас у меня есть задача проанализировать набор данных и определить его оптимальное значение Kmean с помощью метода локтя и силуэта.
Как показано на рисунке Мой набор данных имеет три характеристики: один - вес испытуемого, второй - содержание холестерина в крови человека, третий - пол испытуемого («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()
и получить график ниже:
Затем я использовал метод силуэта, чтобы посмотреть на оценку силуэта:
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]))
И получил следующие результаты:
Может кто-нибудь предложить Как я могу выбрать оптимальный Kmean? Я провел небольшое исследование, кто-то сказал, что чем выше s-оценка, тем лучше (в моем случае номер кластера должен быть 2?), Но в некоторых других случаях они не просто используют номер кластера, имеет наивысшую оценку.
Другая мысль состоит в том, что здесь я включил пол как одну особенность. Должен ли я сначала разделить свои данные на два класса по полу, а затем объединить их отдельно?