目录

1 K的选择

1.1 肘部法则(Elbow method)

1.2 目标法则

1.3 间隔统计量 Gap Statistic

1.4 关于K值选择的改进算法——ISODATA算法

2 聚类算法的评估

2.1 估计聚类趋势

2.2 判定数据簇数

2.3 测定聚类质量

2.3.1 轮廓系数(Silhouette Coefficient)

2.3.2 均方根标准偏差(Root-mean-square standard deviation,RMSSTD)

2.3.3 R方(R-Square)

2.3.4 改进的HubertΓ统计

1 K的选择

没有所谓最好的选择聚类数的方法,通常是需要根据不同的问题,人工进行选择的。选择的时候思考我们运用 K-均值算法聚类的动机是什么,然后选择能最好服务于该目标的聚类数

1.1 肘部法则(Elbow method)

改变聚类数K,然后进行聚类,计算损失函数,拐点处即为推荐的聚类数 (即通过此点后,聚类数的增大也不会对损失函数的下降带来很大的影响,所以会选择拐点)

由图可见,K值越大,距离和越小;并且,当K=3时,存在一个拐点,就像人的肘部一样;当K (1,3)时,曲线急速下降;当K>3时,曲线趋于平稳。手肘法认为拐点就是K的最佳值。

        但是也有损失函数随着K的增大平缓下降的例子,此时通过肘部法则选择K的值就不是一个很有效的方法了(下图中的拐点不明显,k=3,4,5有类似的功能) 。

手肘法是一个经验方法,缺点就是不够自动化。

1.2 目标法则

通常K均值聚类是为下一步操作做准备,例如:市场分割,社交网络分析,网络集群优化 ,下一步的操作都能给你一些评价指标,那么决定聚类的数量更好的方式是:看哪个聚类数量能更好的应用于后续目的。

例如对于T恤衫的尺码进行聚类的方法,如左图将其聚为3类(S,M,L),右图将其聚为5类(XS,S,M,L,XL)进行表示,这两种聚类都是可行的,我们可以 根据聚类后用户的满意程度或者是市场的销售额来决定最终的聚类数量 。

1.3 间隔统计量 Gap Statistic

Gap Statistic方法的优点是,不再需要肉眼判断,而只需要找到最大的Gap statistic所对应的K即可,因此该方法也适用于批量化作业。在这里我们继续使用上面的损失函数,当分为K簇时, 对应的损失函数记为Dk。Gap Statistic定义为:

其中E(logDk)logDk的期望,一般通过蒙特卡洛模拟产生。我们在样本所在的区域 内按照均匀分布随机地产生和原始样本数一样多的随机样本,并对这个随机样本做K-Means,从而得到一个Dk。如此往复多次,通常20次,我们可以得到20个logDk。对这20个数值求平均值,就得到了E(logDk)的近似值。那么Gap(K)有什么物理含义呢?它可以视为随机样本的损失与实际样本的损失之差。试想实际样本对应的最佳簇数为K,那么实际样本的损失应该相对较小,随机样本损失与实际样本损失之差也相应地达到最大值,从而Gap(K)取得最大值所对应的K值就是最佳的簇数。

1.4 关于K值选择的改进算法——ISODATA算法

当K值的大小不确定时,可以使用ISODATA算法。ISODATA的全称是迭代自组织数据分析法。在K均值算法中,聚类个数K的值需要预先人为地确定,并且在整个算法过程中无法更改。而当遇到高维度、海量的数据集时,人们往往很难准确地估计出K的大小。ISODATA算法就是针对这个问题进行了改进,它的思想也很直观。当属于某个类别的样本数过少时,把该类别去除;当属于某个类别的样本数过多、分散程度较大时,把该类别分为两个子类别。ISODATA算法在K均值算法的基础之上增加了两个操作,一是分裂操作,对应着增加聚类中心数;二是合并操作,对应着减少聚类中心数。ISODATA算法是一个比较常见的算法,其缺点是需要指定的参数比较多,不仅仅需要一个参考的聚类数量Ko,还需要制定3个阈值。下面介绍ISODATA算法的各个输入参数。

(1)预期的聚类中心数目。在ISODATA运行过程中聚类中心数可以变化,是一个用户指定的参考值,该算法的聚类中心数目变动范围也由其决定。具体地,最终输出的聚类中心数目常见范围是从的一半,到两倍

(2)每个类所要求的最少样本数目。如果分裂后会导致某个子类别所包含样本数目小于该阈值,就不会对该类别进行分裂操作。

(3)最大方差。用于控制某个类别中样本的分散程度。当样本的分散程度超过这个阈值时,且分裂后满足(1),进行分裂操作。

(4)两个聚类中心之间所允许最小距离。如果两个类靠得非常近(即这两个类别对应聚类中心之间的距离非常小),小于该阈值时,则对这两个类进行合并操作。

如果希望样本不划分到单一的类中,可以使用模糊C均值或者高斯混合模型。

2 聚类算法的评估

人具有很强的归纳思考能力,善于从一大堆碎片化的事实或者数据中寻找普遍规律,并得到具有逻辑性的结论。以用户观看视频的行为为例,可以存在多种直观的归纳方式,比如从喜欢观看内容的角度,可以分为动画片、偶像剧、科幻片等;从常使用的设备角度,可以分为台式电脑、手机、平板便携式设备、电视等;从使用时间段上看,有傍晚、中午、每天、只在周末观看的用户,等等。对所有用户进行有效的分组对于理解用户并推荐给用户合适的内容是很重要的。通常这类问题没有观测数据的标签或者分组信息,需要通过算法模型来寻求数据内在的结构和模式

数据的聚类依赖于实际需求,同时也依赖于数据的特征度量以及评估数据相似性的方法。相比于监督学习,非监督学习通常没有标注数据,模型、算法的设计直接影响最终的输出和模型的性能。为了评估不同聚类算法的性能优劣,我们需要了解常见的数据簇的特点。

  • 以中心定义的数据簇:这类数据集合倾向于球形分布,通常中心被定义为质心,即此数据簇中所有点的平均值。集合中的数据到中心的距离相比到其他簇中心的距离更近。
  • 以密度定义的数据簇:这类数据集合呈现和周围数据簇明显不同的密度,或稠密或稀疏。当数据簇不规则或互相盘绕,并且有噪声和离群点时,常常使用基于密度的簇定义。
  • 以连通定义的数据簇:这类数据集合中的数据点和数据点之间有连接关系,整个数据簇表现为图结构。该定义对不规则形状或者缠绕的数据簇有效。
  • 以概念定义的数据簇:这类数据集合中的所有数据点具有某种共同性质。

由于数据以及需求的多样性,没有一种算法能够适用于所有的数据类型、数据簇或应用场景,似乎每种情况都可能需要一种不同的评估方法或度量标准。例如,K均值聚类可以用误差平方和来评估,但是基于密度的数据簇可能不是球形,误差平方和则会失效。在许多情况下,判断聚类算法结果的好坏强烈依赖于主观解释。尽管如此,聚类算法的评估还是必需的,它是聚类分析中十分重要的部分之一。

聚类评估的任务是估计在数据集上进行聚类的可行性,以及聚类方法产生结果的质量。这一过程又分为三个子任务。

2.1 估计聚类趋势

这一步骤是检测数据分布中是否存在非随机的簇结构。如果数据是基本随机的,那么聚类的结果也是毫无意义的。我们可以观察聚类误差是否随聚类类别数量的增加而单调变化,如果数据是基本随机的,即不存在非随机簇结构,那么聚类误差随聚类类别数量增加而变化的幅度应该较不显著,并且也找不到一个合适的K对应数据的真实簇数。

另外,我们也可以应用霍普金斯统计量(Hopkins Statistic)来判断数据在空间上的随机性。首先,从所有样本中随机找n个点,记为,对其中的每一个点,都在样本空间中找到一个离它最近的点并计算它们之间的距离,从而得到距离向量;然后,从样本的可能取值范围内随机生成n个点,记为,对每个随机生成的点,找到一个离它最近的样本点并计算它们之间的距离,得到 的计算方式是另外生成一个均匀分布,从这个分布里采样数据,计算与数据集D中数据点的最近距离得到  )。霍普金斯统计量H可以表示为

如果样本接近随机分布,那么的取值应该比较接近,即H的值接近于0.5(如果D也是一个均匀分布的话,那么  就会很接近,H就会接近0.5);如果聚类趋势明显,则随机生成的样本点距离应该远大于实际样本点的距离,即 ,H的值接近于1(D中的数据不是均匀分布的,那么  就会大于  ,H就会大于0.5,就有可能存在簇)。

2.2 判定数据簇数

确定聚类趋势之后,我们需要找到与真实数据分布最为吻合的簇数,据此判定聚类结果的质量。数据簇数的判定方法有很多,例如手肘法和Gap Statistic方法。需要说明的是,用于评估的最佳数据簇数可能与程序输出的簇数是不同的。 例如,有些聚类算法可以自动地确定数据的簇数,但可能与我们通过其他方法确定的最优数据簇数有所差别。

2.3 测定聚类质量

给定预设的簇数,不同的聚类算法将输出不同的结果,如何判定哪个聚类结果的质量更高呢?在无监督的情况下,我们可以通过考察簇的分离情况和簇的紧凑情况来评估聚类的效果。定义评估指标可以展现面试者实际解决和分析问题的能力。事实上测量指标可以有很多种,以下列出了几种常用的度量指标。

2.3.1 轮廓系数(Silhouette Coefficient)

Silhouette method 会衡量对象和所属簇之间的相似度——即内聚性(cohesion)。当把它与其他簇做比较,就称为分离性(separation)。该对比通过 silhouette 值来实现,后者在 [-1, 1] 范围内。Silhouette 值接近 1,说明对象与所属簇之间有密切联系;反之则接近 -1。若某模型中的一个数据簇,生成的基本是比较高的 silhouette 值,说明该模型是合适、可接受的。

方法:

1)计算样本i到同簇其他样本的平均距离a(i)。a(i)越小,说明样本i 越应该被聚类到该簇。将a(i)称为样本i 的簇内不相似度。簇C中所有样本的a(i)均值称为簇C的簇不相似度。

2)计算样本i到其他某簇C(j)的所有样本的平均距离b(ij),称为样本i与簇C(j)的不相似度。定义为样本i的簇间不相似度:b(i) =min{bi1, bi2, …, bik},b(i)越大,说明样本i越不属于其他簇。

3)根据样本 i 的簇内不相似度a i 和簇间不相似度b i ,定义样本 i 的轮廓系数:

4)判断:

  • s(i)接近1,则说明样本i聚类合理
  • s(i)接近-1,则说明样本i更应该分类到另外的簇
  • 若s(i) 近似为0,则说明样本i在两个簇的边界上

a(i)反映的是i所属簇中数据的紧凑程度b(i)反映的是该簇与其他临近簇的分离程度。显然,b(i)越大,a(i)越小,对应的聚类质量越好。

        所有样本的s(i )的均值称为聚类结果的轮廓系数,是该聚类是否合理、有效的度量。但是,其缺陷是计算复杂度为O(n^2),需要计算距离矩阵,那么当数据量上到百万,甚至千万级别时,计算开销会非常巨大。

2.3.2 均方根标准偏差(Root-mean-square standard deviation,RMSSTD)

用来衡量聚结果的同质性,即紧凑程度,定义为:

其中Ci代表第i个簇,ci是该簇的中心,x∈Ci代表属于第i个簇的一个样本点,ni为第i个簇的样本数量,P为样本点对应的向量维数。可以看出,分母对点的维度P做了惩罚,维度越高,则整体的平方距离度量值越大。 ,其中n为样本点的总数,NC为聚类簇的个数,通常NC<<n,因此 的值接近点的总数,为一个常数。综上,RMSSTD可以看作是经过归一化的标准差。 

2.3.3 R方(R-Square)

可以用来衡量聚类的差异度,定义为

其中D代表整个数据集,c代表数据集D的中心点,从而 代表将数据集D看作单一簇时的平方误差和。与上一指标RMSSTD中的定义相同, 代表将数据集聚类之后的平方误差和,所以RS代表了聚类之后的结果与聚类之前相比,对应的平方误差和指标的改进幅度。

2.3.4 改进的HubertΓ统计

通过数据对的不一致性来评估聚类的差异,定义为

其中 表示点x到点y之间的距离, 代表点x所在的簇中心与点y所在的簇中心cj之间的距离, 为所有(x,y)点对的个数,因此指标相当于对每个点对的和做了归一化处理。理想情况下,对于每个点对(x,y),如果d(x,y)越小,对应的 也应该越小(特别地,当它们属于同一个聚类簇时,);当d(x,y)越大时, 的取值也应当越大,所以Γ值越大说明聚类的结果与样本的原始距离越吻合,也就是聚类质量越高。

此外,为了更加合理地评估不同聚类算法的性能,通常还需要人为地构造不同类型的数据集,以观察聚类算法在这些数据集上的效果,几个常见的例子如图5.10~图5.14所示。

3 三种典型聚类算法的分析比较(K-means算法、AGNES算法、DBSCAN算法)

K-means算法、AGNES算法、DBSCAN算法分别是聚类算法中基于划分、层次、密度的三种典型算法。通过对上述三种算法的简单分析比较,我们可以依据实际情况选取最为合适的算法对数据集进行聚类,从而得到最佳的效果。

1 K-Means算法与AGNES算法比较

K-Means算法的时间复杂度和空间复杂度都较低,即使对于大型数据集,也是简单高效的。而AGNES算法的时间复杂度高,并不适合大型数据集。此外,对于AGNES算法一旦凝聚形成了新簇,就不会对此再发生更改。虽然,k-means算法与AGNES算法都需要指定划分的簇数,但由于k-means算法需要挑选初始中心点,故其对初始值的设置很敏感。一般而言,上述两种算法都对非凸数据集无法起到良好的聚类效果,但在中小型数据集中挖掘得到球形簇的效果较好。

2 K-Means算法与DBSCAN算法比较

与K-Means算法相比,DBSCAN算法不需要明确K值,即不需要事先指定形成簇类的数量。此外,DBSCAN算法可以发现任意形状的簇类,也能够识别出噪声点。而K-Means算法对噪声和离群值非常敏感,并且对非凸数据集的聚类效果不佳。当数据集较大时,K-Means算法容易陷入局部最优。虽然DB—SCAN算法具有众多优点,但其对两个参数eps和Minpts的设置却非常敏感,导致聚类的效果与参数值的选取有较大关系。

3 AGNES算法与DBSCAN算法比较

AGNES算法可解释性好,能产生高质量的聚类,但其时间复杂度较高,不适合大型数据集。同时,AGNES算法与K-Means算法类似,倾向于得到凸型的cluster,对非凸数据集并不能得到較好的聚类效果。而DBSCAN算法可以发现任意形状的簇类。

总结:

(1)K-Means算法:

  • 优点:

    1. 时间复杂度和空间复杂度都较低,即使对于大型数据集,也是简单高效的
    2. 原理简单,实现起来较为容易
    3. 结果可解释性较好
  • 缺点
    1. 需要指定划分的簇数
    2. 由于k-means算法需要挑选初始中心点,故其对初始值的设置很敏感。
    3. 对非凸数据集无法起到良好的聚类效果,但在中小型数据集中挖掘得到球形簇的效果较好。
    4. 对噪声和离群值非常敏感
    5. 当数据集较大时,K-Means算法容易陷入局部最优
    6. 样本点只能被划分到单一的类中。

(2)AGNES算法:

  • 优点:

    1. 可解释性好,能产生高质量的聚类
    2. 能够根据需要在不同的尺度上展示对应的聚类结果
  • 缺点:
    1. 需要指定划分的簇数
    2. 时间复杂度高,并不适合大型数据集
    3. 聚类层次信息需要存储在内存中,内存消耗大
    4. AGNES算法一旦凝聚形成了新簇,就不会对此再发生更改
    5. 对非凸数据集无法起到良好的聚类效果,但在中小型数据集中挖掘得到球形簇的效果较好

(3)DBSCAN算法:

  • 优点:

    1. DBSCAN算法不需要明确K值,即不需要事先指定形成簇类的数量
    2. DBSCAN算法可以发现任意形状的簇类,也能够识别出噪声点
  • 缺点:
    1. 对两个参数eps和Minpts的设置却非常敏感,导致聚类的效果与参数值的选取有较大关系。
    2. 如果数据样本集越大,收敛时间越长

(4)高斯混合模型

        与K均值算法​​​​​​​都是使用EM算法来求解。

  • 优点:

    1. ​​​​​​​​​​​​​​​​​​​​​可以给出一个样本属于某类的概率是多少
    2. 不仅仅可以用于聚类, 还可以用于概率密度的估计
    3. 并且可以用于生成新的样本点。
  • 缺点:​​​​​​​​​​​​​​
    1. 需要指定K值
    2. 往往只能收敛于局部最优

详解EM算法与混合高斯模型(Gaussian mixture model, GMM)_林立民爱洗澡的博客-CSDN博客_gaussian mixture model

机器学习算法(十二):聚类相关推荐

  1. Spark机器学习实战 (十二) - 推荐系统实战

    0 相关源码 将结合前述知识进行综合实战,以达到所学即所用.在推荐系统项目中,讲解了推荐系统基本原理以及实现推荐系统的架构思路,有其他相关研发经验基础的同学可以结合以往的经验,实现自己的推荐系统. 1 ...

  2. 机器学习算法--无监督学习--聚类

    机器学习算法–无监督学习–聚类 一.原型聚类 特点:需要预先指定簇的个数K 1.K-Means Python实现K-Means算法: Python实现K-Means算法 原理:从数据集中选择K个样本作 ...

  3. 运筹学与最优化方法_[公开课]运筹学之线性规划算法十二讲

    运筹学之线性规划算法十二讲 这是最美好的时代,同样带来最无助的希望:这是最丰富多彩的时代,思想同样的匮乏:这是最互联互通的时代,一样找不到自己和同路的人:这是最光明的时代,我们依然要经过黑暗的摸索和摸 ...

  4. [2022]李宏毅深度学习与机器学习第十二讲(必修)-Reinforcement Learning RL

    [2022]李宏毅深度学习与机器学习第十二讲(必修)-Reinforcement Learning RL 做笔记的目的 What is RL Policy Gradient Version 1 Ver ...

  5. 机器学习算法(二):基于决策树的分类预测

    机器学习算法(二):基于决策树的分类预测 决策树的介绍和应用 简介 决策树构建的伪代码 特征划分选择 信息增益 信息增益率 基尼系数 应用场景 优缺点 基于企鹅数据集的决策树实战 Step1:函数库导 ...

  6. 机器学习 (十二)让你轻松理解K-means 聚类算法

    前言 你还记得菜市场卖菜的吗?书店卖书的或者是平时去超市买东西时的物品,它们是不是都根据相似性摆放在一起了呢,饮料.啤酒.零食分布在各自区域,像这样各级事物的相似特点或特性组织在一起的方法,在机器学习 ...

  7. 机器学习算法(二十六):文本表示模型

    目录 1 词袋模型 2 TF-IDF 2.1 TF(Term Frequency) 2.2 IDF(Inverse Document Frequency) 2.3 TF-IDF 2.4 用scikit ...

  8. 机器学习算法(二十四):最近邻算法 KNN(k-nearest neighbor)

    目录 1 基于实例的学习 2 k-最近邻法 2.1 算法概述 2.2 kNN算法的一般流程 2.3 距离公式 2.4 k值的选择 2.5 KNN特点 2.5.1 特点 2.5.2 KNN算法的优势和劣 ...

  9. 机器学习(十二)朴素贝叶斯分类

    朴素贝叶斯分类 原文地址:http://blog.csdn.net/hjimce/article/details/46054739   作者:hjimce 本篇博文是我学习<机器学习实战> ...

  10. 机器学习算法总结之聚类:K-means

    写在前面 在前面学习的ML算法中,基本都是有监督学习类型,即存在样本标签.然而在机器学习的任务中,还存在另外一种训练样本的标签是未知的,即"无监督学习".此类任务中研究最多.应用最 ...

最新文章

  1. day07 -文件的基本操作
  2. matlab生成实指数序列、matlab茎状图
  3. HTML css嵌套的一个例子
  4. IP: 169.254.0.0/16 地址用途
  5. Maven学习总结(51)——Maven 常用属性和常量说明
  6. PLC电力线载波简介
  7. php vld 安装,PHP性能之语言性能优化:vld
  8. Coverity 配置coverity扫描python静态代码检测
  9. 搭建安装kubesphere平台——在 Linux 上以 All-in-One 模式,附安装步骤—{全篇踩坑排坑记} kubernetes:k8s
  10. 计算机无法投影,win10专业版投影失败提示:你的电脑不能投影到其他屏幕的解决办法...
  11. 互联网思维心得体会1500字_互联网思维心得分享
  12. PHP数据库CURD接口与实现(接口实战)
  13. 【毕业设计】基于大数据的京东消费行为分析与可视化 - python 机器学习
  14. 上楼梯(df和dp解法)
  15. JavaScript计算圆周率(解析几何+定积分)
  16. Python验证码识别:利用pytesser识别简单图形
  17. 为什么都瞧不起培训班出来的程序员?
  18. 叮咚智能音箱怎样与台式计算机,叮咚智能音箱怎么使用
  19. 使用Pyecharts进行奥运会可视化分析!
  20. STM32单片机WIFI物联网可燃气烟雾报警监控系统MQ4MQ2

热门文章

  1. K8S与Vault集成,进行Secret管理
  2. 手机Web开发框架 Mobl
  3. Web3时代加密元宇宙才是唯一可行的道路
  4. 护眼灯和白炽灯哪个更保护眼睛?推荐真正护眼的护眼灯
  5. raise ImportError(“html5lib not found, please install it“) ImportError: html5lib not found
  6. 用python做股票因子分析_Python与量化多因子——机器学习方法在因子合成上的应用...
  7. 618小红书品牌营销复盘「保姆级教学」 !
  8. 核心能力:产品认知能力
  9. BN层的解释说明(包含梯度消失和梯度爆炸的原理及解决方法)
  10. php fopen 指定路径,fopen 系统找不到指定路径 PHP文件包含详细讲述