我正在研究Kmeans聚类,但与监督学习不同,我无法确定聚类算法的性能指标。在训练数据后如何评估准确性?
回答:
对于kmeans
,你可以找到它的inertia_
。这可以让你了解kmeans
算法的表现如何。
kmeans = KMeans(...)# 假设你已经在上面拟合了数据kmeans.inertia_ # 越小越好
或者,你也可以调用score()
函数,它会返回同样的值,但符号会是负的。因为我们认为分数越大越好,但对于kmeans
,较小的inertia_
反而更好。所以,为了保持一致性,对其进行了额外的取反处理。
# 使用数据X调用scorekmeans.score(X) # 越大越好
这是分析kmeans
性能的基本形式。实际上,如果你将聚类数量设得过高,score()
会相应增加(换句话说,inertia_
会减少),因为inertia_
只是每个点到其所属聚类中心的平方距离之和。所以如果你增加聚类的数量,每个点都会得到一个非常近的中心,整体距离的平方和会减少。尽管在这种情况下聚类的质量很差。因此,为了更好的分析,你应该找出silhouette score
,或者更好地使用silhouette diagram
。
你可以在以下笔记本中找到所有这些实现:09_unsupervised_learning.ipynb
与此存储库对应的书籍是:Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 第二版。这是一本学习所有这些细节的好书。