1.如何衡量聚类算法的效果?

  • 聚类算法的结果不是某种标签输出,并且聚类的结果是不确定的,其优劣有业务的需求或者算法需求来决定,并没有正确答案

2.簇内平方和的缺点

  • 首先,它不是有界的,只知道inertia越小越好,是0最好。但是我们不知道,一个较小的inertia有没有达到模型的极限,能否继续提高

  • 计算容易受到特征的数目影响,数据维度很大时,interia的计算量会爆炸,不适合用来一次次评估模型

  • 会受到超参数k的影响,随着k越大,interia会越来越小,但不代表模型的效果越来越好

  • 使用inertia作为指标,会让聚类算法在一些细长簇,环形簇,或者不规则形状的聚类时,效果不佳:

聚类算法模型评价指标-LMLPHP

3.使用轮廓系数评价聚类算法

  • 轮廓系数【轮廓系数是最常用的聚类算法的评价指标】
    • 一般情况下,是对没有真实标签的数据进行探索,即不知道真正答案的数据进行聚类。这种聚类,是完全依赖于评价簇内的稠密程度(簇内差异小)和簇间的离散程度(簇外差异大)来评估聚类效果。
    • 轮廓系数是最常用的聚类算法的评价指标
      • 能够衡量样本与其自身所在的簇中的其他样本的相似度a【簇内相似度】,等于样本与同一簇中所有其他点之间的平均距离
      • 能够衡量样本与其他簇中的样本的相似度b【簇间相似度】,等于样本与下一个最近的簇中的所有点之间的平均距离
      • 根据聚类要求"",希望b永远大于a,并且越大越好
    • 轮廓系数计算公式【取值范围是(-1,1)】
      • 值越接近1表示样本与自己所在的簇中的样本很相似,并且与其它簇中的样本不相似。当样本与簇外的样本更相似时,轮廓系数为负。
      • 当轮廓系数为0时,代表两个簇中的样本相似度一致,两个簇应该是一个簇。

聚类算法模型评价指标-LMLPHP

  • 总结:
    • 轮廓系数越接近于1越好,负数则表示聚类效果非常差

    • 如果一个簇中的大多数样本具有较高的轮廓系数,则簇会有较高的总轮廓系数,则整个数据集的平均轮廓系数越高,即聚类效果最好

    • 如果许多样本点具有低轮廓系数甚至负数,则聚类效果不好,聚类的超参数k可能设定的太大或太小

4. 轮廓系数计算代码实现

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score
from sklearn.metrics import silhouette_samples
X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)
n_clusters=3
cluster=KMeans(n_clusters=n_clusters,random_state=0).fit(X)
y_pred=cluster.labels_ 
silhouette_score(X,y_pred)  #0.5882004012129721
silhouette_samples(X,y_pred)
11-10 11:41