机器学习数据分析之-轮廓系数(评估聚类结果)

在学习使用k-means算法进行负载聚类分析时看到了这样的图,查了之后是用轮廓系数来评估分类结果的准确度或者称合适度。
这里写图片描述

silhouette 是一个衡量一个结点与它属聚类相较于其它聚类的相似程度。
取值范围-1到1,值越大表明这个结点更匹配其属聚类而不与相邻的聚类匹配。
如果大多数结点都有很高的silhouette value,那么聚类适当。若许多点都有低或者负的值,说明分类过多或者过少。
定义
轮廓系数结合了凝聚度和分离度,其计算步骤如下:
1.对于第i个对象,计算它到所属簇中所有其他对象的平均距离,记为ai(体现凝聚度)
2.对于第i个对象和不包含该对象的任意簇,记为bi(体现分离度)
3.第i个对象的轮廓系数为si=(bi-ai)/max(ai,bi)
scikit-learn 中的轮廓系数
对应 scikit-learn 方法是 sklearn.metrics.silhouette_score。该方法是计算所有样本的平均值,另一个方法 silhouette_samples 会返回所有样本的轮廓系数。在文档中提到,轮廓系数需要聚类数大于2,小于(样本数-1)。方法包括几个参数,最终返回一个 float 的轮廓系数,通常是在全部样本上的。

X:二维样本,通常为[n_samples, n_features],当 metric 设置为”precomputed”时,应为[n_samples, n_samples]方阵
labels:一维矩阵,每个样本所属簇的 label
metric:预计算”precomputed”,或者为一个可调用的函数计算两个实例之间的距离。如果为 string,则必须是metrics.pairwise.pairwise_distances 中 metric 可选的(‘cityblock’, ‘cosine’, ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’ 或‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’)——好多啊。
sample_size:随机取样一部分计算平均值,int 类型
random_state:当sample_size 为非空时用来生成随机采样。给定一个种子,或者使用 numpy.RandomState
**kwds:其他可选的 key-value 参数

参考
http://buptguo.com/2016/05/31/learn-ml-from-scikit-learn-silhouette-analysis/
https://blog.csdn.net/u014470581/article/details/51166758

猜你喜欢

转载自blog.csdn.net/u012679583/article/details/80316619
今日推荐