内容参考于该博客,叙述得较为全面:https://blog.csdn.net/liuy9803/article/details/80762862
我在此基础上再稍微做点总结和补充:
****************************** 需要给定实际类别信息 labels_true **************************************
1. 同分类的评价指标:混淆矩阵(precision、recall、F-measure)
2.均一性(Homogeneity):指每个簇中只包含单个类别的样本。如果一个簇中的类别只有一个,则均一性为1;如果有多个类别,计算该类别下的簇的条件经验熵H(C|K),值越大则均一性越小。
metrics.homogeneity_score(labels_true, labels_pred)
3. 完整性(Completeness)指同类别样本被归类到相同的簇中。如果同类样本全部被分在同一个簇中,则完整性为1;如果同类样本被分到不同簇中,计算条件经验熵H(K|C),值越大则完整性越小。
metrics.completeness_score(labels_true, labels_pred)
4. 单独考虑均一性或完整性都是片面的,因此引入两个指标的加权平均V-measure。如果β>1则更注重完整性,如果β<1则更注重均一性。
metrics.v_measure_score(labels_true, labels_pred)
5. 杰卡德相似系数(Jaccard Similarity Coefficient)
6. 皮尔逊相关系数(Pearson Correlation Coefficient)
7. 兰德指数RI与调整兰德指数ARI
metrics.adjusted_rand_score(labels_true, labels_pred)
8. 互信息MI与调整互信息AMI
metrics.adjusted_mutual_info_score(labels_true, labels_pred)
metrics.mutual_info_score(labels_true, labels_pred)
metrics.normalized_mutual_info_score(labels_true, labels_pred)
9. Fowlkes-Mallows scores
metrics.fowlkes_mallows_score(labels_true, labels_pred)
***************************************** 数据集结构未知 **************************************************
1. Davies-Boulding指数(DBI)
2. Dunn 指数(DI)
3. 距离计算:(1)闵可夫斯基距离(Minkowski);(2)KL距离;(3)夹角余弦相似度;(4)轮廓系数(Silhouette Coefficient)
metrics.silhouette_score(X, labels, metric='euclidean')
4. Calinski-Harabaz Index
这个计算简单直接,得到的Calinski-Harabasz分数值ss越大则聚类效果越好。Calinski-Harabasz分数值ss的数学计算公式是:
也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。
在scikit-learn中, Calinski-Harabasz Index对应的方法是metrics.calinski_harabaz_score.
在真实的分群label不知道的情况下,可以作为评估模型的一个指标。
同时,数值越小可以理解为:组间协方差很小,组与组之间界限不明显。
与轮廓系数的对比,笔者觉得最大的优势:快!相差几百倍!毫秒级
>>> import numpy as np
>>> from sklearn.cluster import KMeans
>>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
>>> labels = kmeans_model.labels_
>>> from sklearn import metrics
>>> metrics.calinski_harabaz_score(X, labels)
560.39...