我对python和clusttering之类的东西还很陌生。现在我的任务是分析一组数据,并使用肘部和轮廓法确定其最佳Kmean
如图所示,我的数据集有三个特征,一个是受试者的体重,第二个是受试者的血液胆固醇含量,第三个是受试者的性别(“0”表示女性,“1”表示男性)
我首先使用弯头方法查看不同k值下的wcss值
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?),但在其他一些情况下,他们并不是简单地使用聚类数得分最高
另一个想法是,在这里我将性别作为一个特征,我是否应该首先按性别将我的数据分为两类,然后分别对它们进行聚类
K-means算法非常容易受到特征测量范围的影响,在您的情况下,性别是一个二元变量,只取值
0
和1
,但其他两个特征是更大范围的测量,我建议您先对数据进行标准化,然后再进行绘图,这样可以在肘部曲线和轮廓方法之间产生一致的结果希望这有帮助
相关问题 更多 >
编程相关推荐