详解聚类评估
- 详解聚类评估
-
- 估计聚类趋势
- 判定数据簇数
- 测定聚类质量
详解聚类评估
估计聚类趋势
这一步骤是检测数据分布中是否存在非随机的簇结构 。
如果数据是基本随机的,那么聚类的结果也是毫无意义的 。
方法一:观察聚类误差是否随聚类类别数量的增加而单调变化
如果数据是基本随机的,即不存在非随机簇结构。那么聚类误差随聚类类别数量增加而变化的幅度应该较不显著,并且也找不到一个合适的 K 对应数据的真实簇数。
方法二:Hopkins Statistic(霍普金斯统计量)
判断数据在空间上的随机性
如果样本接近随机分布 H 的值接近于 0.5
如果聚类趋势明显 H 的值接近于 1
判定数据簇数
K-均值这样的算法需要数据集的簇数作为参数,簇数也可以看作是数据集的有趣并且重要的概括统计量。因此,在使用聚类算法导出详细的簇之前,估计簇数是可取的。
方法一:经验法
方法二:手肘法
给定k>0,使用像K-均值这样的算法对数据集聚类,并计算簇内方差和var(k)。然后,绘制var关于k的曲线。曲线的第一个(或最显著的)拐点暗示“正确的”簇数。
方法三:交叉验证法
将数据分为m部分;用m-1部分获得聚类模型,余下部分评估聚类质量(测试样本与类中心的距离和);对k>0重复m次,比较总体质量,选择能获得最好聚类质量的k
测定聚类质量
外在方法(有监督方法)
需要基准数据。用一定的度量评判聚类结果与基准数据的符合程度。
(基准是一种理想的聚类,通常由专家构建)
Jaccard Coefficient, JC(Jaccard系数)
结果值均在[0,1]区间,值越大越好。
purity(纯度)
sklearn 中 Purity 的实现
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metric.compute_purity(labels_pred, labels_true)
Fowlkes and Mallows Index, FMI(FM指数)
sklearn中FMI的实现
>>> from sklearn import metrics
>>> labels_true =<