kmeans算法中的sse_聚类算法的评估指标

聚类算法的评估包括内部和外部评价指标,如SSE(和方差)、轮廓系数、Calinski-Harabaz指数等内部指标,以及纯度、NMI、ARI等外部指标。这些指标衡量类内相似度、类间差异、聚类与已知标签的匹配程度。SSE越低,聚类效果越好;轮廓系数在[-1,1]区间,值越高表示聚类效果越好。外部评价指标如纯度和NMI则基于已知类别信息,高分表示聚类结果与真实情况更吻合。" 93045521,7353532,Java并发编程:ConcurrentHashMap深度解析,"['并发编程', 'Java集合', '线程安全', '数据结构', 'ConcurrentHashMap']
摘要由CSDN通过智能技术生成

在学习聚类算法得时候并没有涉及到评估指标,主要原因是聚类算法属于非监督学习,并不像分类算法那样可以使用训练集或测试集中得数据计算准确率、召回率等。那么如何评估聚类算法得好坏呢?好的聚类算法,一般要求类簇具有:

  • 高的类内 (intra-cluster) 相似度
  • 低的类间 (inter-cluster) 相似度
fcd038e831831e6e4297c11107c48f47.png

对于聚类算法大致可分为 2类度量标准:

  • 内部评估的方法:通过一个单一的量化得分来评估算法好坏;该类型的方法
  • 外部评估的方法:通过将聚类结果与已经有“ground truth”分类进行对比。要么通过人类进行手动评估,要么通过一些指标在特定的应用场景中进行聚类用法的评估。不过该方法是有问题的,如果真的有了label,那么还需要聚类干嘛,而且实际应用中,往往都没label;另一方面,这些label只反映了数据集的一个可能的划分方法,它并不能告诉你存在一个不同的更好的聚类算法。

内部评价指标

当一个聚类结果是基于数据聚类自身进行评估的,这一类叫做内部评估方法。如果某个聚类算法聚类的结果是类间相似性低,类内相似性高,那么内部评估方法会给予较高的分数评价。不过内部评价方法的缺点是:

  • 那些高分的算法不一定可以适用于高效的信息检索应用场景;
  • 这些评估方法对某些算法有倾向性,如k-means聚类都是基于点之间的距离进行优化的,而那些基于距离的内部评估方法就会过度的赞誉这些生成的聚类结果。

这些内部评估方法可以基于特定场景判定一个算法要优于另一个,不过这并不表示前一个算法得到的结果比后一个结果更有意义。这里的意义是假设这种结构事实上存在于数据集中的,如果一个数据集包含了完全不同的数据结构,或者采用的评价方法完全和算法不搭,比如k-means只能用于凸集数据集上,许多评估指标也是预先假设凸集数据集。在一个非凸数据集上不论是使用k-means还是使用假设凸集的评价方法,都是徒劳的。

SSE(和方差)

该统计参数计算的是拟合数据和原始数据对应点的误差的平方和,计算公式如下:

a1b4920f5cb24d8da8dbe9c5155ee9e7.png

SSE越接近于0,说明模型选择和拟合更好,数据预测也越成功。

#断崖碎石图选取最优K值import pandas as pd  from sklearn.cluster import KMeans  import matplotlib.pyplot as plt  '利用SSE选择k'  SSE = []  # 存放每次结果的误差平方和  for k in range(1,9):      estimator = KMeans(n_clusters=k)  # 构造聚类器      estimator.fit(df[['calories','sodium','alcohol','cost']])      SSE.append(estimator.inertia_)  N = range(1,9)  plt.xlabel('k')  plt.ylabel('SSE')  plt.plot(N,SSE,'o-')  plt.show()

轮廓系数 Silhouette Coefficient

轮廓系数适用于实际类别信息未知的情况。对于单个样本,设a是与它同类别中其他样本的平均距离,b是与它距离最近不同类别中样本的平均距离,其轮廓系数为:

79786e47edbbc9305336cbf102eda857.png

对于一个样本集合,它的轮廓系数是所有样本轮廓系数的平均值。轮廓系数的取值范围是[-1,1],同类别样本距离越相近不同类别样本距离越远,分数越高。缺点:不适合基高密度的聚类算法DBSCAN。

from sklearn import metricsfrom sklearn.metrics import pairwise_distancesfrom sklearn import datasetsdataset = datasets.load_iris()X = dataset.datay = dataset.target import numpy as npfrom sklearn.cluster import KMeanskmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)labels = kmeans_model.labels_metrics.silhouette_score(X, labels, metric='euclidean')

Calinski-Harabaz Index

在真实的分群label不知道的情况下,Calinski-Harabasz可以作为评估模型的一个指标。Calinski-Harabasz指标通过计算类中各点与类中心的距离平方和来度量类内的紧密度,通过计算各类中心点与数据集中心点距离平方和来度量数据集的分离度,CH指标由分离度与紧密度的比值得到。从而,CH越大代表着类自身越紧密,类与类之间越分散,即更优的聚类结果。

4f02b8c7dd5a148d8e4633299cbaafaf.png

其中m为训练样本数,k是类别个数,是类别之间协方差矩阵,是类别内部数据协方差矩阵,为矩阵的迹。也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。同时,数值越小可以理解为:组间协方差很小,组与组之间界限不明显。

优点

  • 当 cluster (簇)密集且分离较好时,分数更高,这与一个标准的 cluster(簇)有关。
  • 得分计算很快与轮廓系数的对比,最大的优势:快!相差几百倍!毫秒级。

缺点

  • 凸的簇的 Calinski-Harabaz index(Calinski-Harabaz 指数)通常高于其他类型的 cluster(簇),例如通过 DBSCAN 获得的基于密度的 cluster(簇)。所以不适合基于密度的聚类算法,DBSCAN。
import numpy as npfrom sklearn.cluster import KMeanskmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)labels = kmeans_model.labels_print(metrics.calinski_harabaz_score(X, labels))

Compactness(紧密性)(CP)

CP计算每一个类各点到聚类中心的平均距离CP越低意味着类内聚类距离越近。著名的 K-Means 聚类算法就是基于此思想提出的。缺点:没有考虑类间效果。

089327e2a7bb10e1b0a403c283ae1776.png
2aa8e1fcb68ec22f1c187f4823f9a9a0.png

Separation(间隔性)(SP)

SP计算各聚类中心两两之间平均距离,SP越高意味类间聚类距离越远。缺点:没有考虑类内效果。

73d62786c513fef598fb658d8b7a4a3c.png

Davies-Bouldin Index(戴维森堡丁指数)(分类适确性指标)(DB)(DBI)

DB计算任意两类别的类内距离平均距离(CP)之和除以两聚类中心距离求最大值。DB越小意味着类内距离越小同时类间距离越大。该指标的计算公式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值