本篇将讨论无监督学习中应用最为广泛的学习算法–聚类。

1、聚类算法

聚类是一种经典的无监督学习方法,无监督学习的目标是通过对无标记训练样本的学习,发掘和揭示数据集本身潜在的结构与规律,即不依赖于训练数据集的类标记信息。聚类则是试图将数据集的样本划分为若干个互不相交的类簇,从而每个簇对应一个潜在的类别。

聚类直观上来说是将相似的样本聚在一起,从而形成一个类簇(cluster)。那首先的问题是如何来度量相似性(similarity measure)呢?这便是距离度量,在生活中我们说差别小则相似,对应到多维样本,每个样本可以对应于高维空间中的一个数据点,若它们的距离相近,我们便可以称它们相似。那接着如何来评价聚类结果的好坏呢?这便是性能度量,性能度量为评价聚类结果的好坏提供了一系列有效性指标。

1.1 距离度量

谈及距离度量,最熟悉的莫过于欧式距离了,从年头一直用到年尾的距离计算公式:即对应属性之间相减的平方和再开根号。度量距离还有其它的很多经典方法,通常它们需要满足一些基本性质:

最常用的距离度量方法是**“闵可夫斯基距离”(Minkowski distance)**:

当p=1时,闵可夫斯基距离即曼哈顿距离(Manhattan distance)

当p=2时,闵可夫斯基距离即欧氏距离(Euclidean distance)

我们知道属性分为两种:连续属性离散属性(有限个取值)。对于连续值的属性,一般都可以被学习器所用,有时会根据具体的情形作相应的预处理,例如:归一化等;而对于离散值的属性,需要作下面进一步的处理:

若属性值之间存在序关系,则可以将其转化为连续值,例如:身高属性“高”“中等”“矮”,可转化为{1, 0.5, 0}。
若属性值之间不存在序关系,则通常将其转化为向量的形式,例如:性别属性“男”“女”,可转化为{(1,0),(0,1)}。

在进行距离度量时,易知连续属性和存在序关系的离散属性都可以直接参与计算,因为它们都可以反映一种程度,我们称其为“有序属性”;而对于不存在序关系的离散属性,我们称其为:“无序属性”,显然无序属性再使用闵可夫斯基距离就行不通了。

对于无序属性,我们一般采用VDM进行距离的计算,例如:对于离散属性的两个取值a和b,定义:

[外链图片转存失败(img-6Jcj5Xtw-1562057435017)(https://i.loli.net/2018/10/18/5bc84ed4e9560.png)]

于是,在计算两个样本之间的距离时,我们可以将闵可夫斯基距离和VDM混合在一起进行计算:

若我们定义的距离计算方法是用来度量相似性,例如下面将要讨论的聚类问题,即距离越小,相似性越大,反之距离越大,相似性越小。这时距离的度量方法并不一定需要满足前面所说的四个基本性质,这样的方法称为:非度量距离(non-metric distance)

1.2 性能度量

由于聚类算法不依赖于样本的真实类标,就不能像监督学习的分类那般,通过计算分对分错(即精确度或错误率)来评价学习器的好坏或作为学习过程中的优化目标。一般聚类有两类性能度量指标:外部指标内部指标

1.2.1 外部指标

即将聚类结果与某个参考模型的结果进行比较,以参考模型的输出作为标准,来评价聚类好坏。假设聚类给出的结果为λ,参考模型给出的结果是λ*,则我们将样本进行两两配对,定义:

显然a和b代表着聚类结果好坏的正能量,b和c则表示参考结果和聚类结果相矛盾,基于这四个值可以导出以下常用的外部评价指标:

1.2.2 内部指标

内部指标即不依赖任何外部模型,直接对聚类的结果进行评估,聚类的目的是想将那些相似的样本尽可能聚在一起,不相似的样本尽可能分开,直观来说:簇内高内聚紧紧抱团,簇间低耦合老死不相往来。定义:

基于上面的四个距离,可以导出下面这些常用的内部评价指标:


scikit-learn 中的 聚类算法 的比较

1.3 原型聚类

原型聚类即“基于原型的聚类”(prototype-based clustering),原型表示模板的意思,就是通过参考一个模板向量或模板分布的方式来完成聚类的过程,常见的K-Means便是基于簇中心来实现聚类,混合高斯聚类则是基于簇分布来实现聚类。

1.3.1 K-Means
KMeans 算法通过把样本分离成 n 个具有相同方差的类的方式来聚集数据,最小化称为惯量(inertia) 或 簇内平方和(within-cluster sum-of-squares)的标准(criterion)。该算法需要指定簇的数量。它可以很好地扩展到大量样本(large number of samples),并已经被广泛应用于许多不同领域的应用领域。
k-means 算法将一组 N 样本 X 划分成 K 不相交的簇 C, 每个都用该簇中的样本的均值$ \mu_j$ 描述。 这个均值(means)通常被称为簇的 “质心(centroids)”; 注意,它们一般不是从 X 中挑选出的点,虽然它们是处在同一个空间。
K-means(K-均值)算法旨在选择一个质心, 能够最小化惯性或簇内平方和的标准:
∑i=0nmin⁡μj∈C(∣∣xj−μi∣∣2)\sum_{i=0}^{n}\min_{\mu_j \in C}(||x_j - \mu_i||^2)i=0∑n​μj​∈Cmin​(∣∣xj​−μi​∣∣2)
惯性被认为是测量簇内聚程度的度量(measure)。 它有各种缺点:

  • 惯性假设簇是凸(convex)的和各项同性(isotropic),这并不是总是对的。它对 细长的簇或具有不规则形状的流行反应不佳。

  • 惯性不是一个归一化度量(normalized metric):我们只知道当惯量的值较低是较好的,并且零是最优的。但是在非常高维的空间中,欧氏距离往往会膨胀(这就是所谓的“维度诅咒/维度惩罚”(curse
    of dimensionality))。在 k-means 聚类算法之前运行诸如 PCA之类的降维算法可以减轻这个问题并加快计算速度。

K-means的思想十分简单,首先随机指定类中心,根据样本与类中心的远近划分类簇,接着重新计算类中心,迭代直至收敛。对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。但是其中迭代的过程并不是主观地想象得出,事实上,若将样本的类别看做为“隐变量”(latent variable),类中心看作样本的分布参数,这一过程正是通过EM算法的两步走策略而计算出,其根本的目的是为了最小化平方误差函数E:
E=∑i=1k∑x∈Ci∣∣x−μi∣∣22E = \sum\limits_{i=1}^k\sum\limits_{x \in C_i} ||x-\mu_i||_2^2E=i=1∑k​x∈Ci​∑​∣∣x−μi​∣∣22​

其中$ \mu_i$是簇Ci的均值向量,有时也称为质心,表达式为:
μi=1∣Ci∣∑x∈Cix\mu_i = \frac{1}{|C_i|}\sum\limits_{x \in C_i}xμi​=∣Ci​∣1​x∈Ci​∑​x

1)对于K-means算法,首先要注意的是k值的选择,一般来说,我们会根据对数据的先验经验选择一个合适的k值,如果没有什么先验知识,则可以通过交叉验证选择一个合适的k值。
2)在确定了k的个数后,我们需要选择k个初始化的质心,就像上图b中的随机质心。由于我们是启发式方法,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心,最好这些质心不能太近。

K-means的算法流程如下所示: 
输入是样本集D={x1,x2,…xm},聚类的簇树k,最大迭代次数N,输出是簇划分C={C1,C2,…Ck} 
1)从数据集D中随机选择k个样本作为初始的k个质心向量: {μ1,μ2,…,μk}
2)对于n=1,2,…,N

  • a) 将簇划分C初始化为Ct=∅t=1,2…k
  • b) 对于i=1,2…m,计算样本xi和各个质心向量μj(j=1,2,…k)的距离:dij=||xi−μj||22,将xi标记最小的为dij所对应的类别λi。此时更新Cλi=Cλi∪{xi}
  • c) 对于j=1,2,…,k,对Cj中所有的样本点重新计算新的质心μj=1|Cj|∑x∈Cjx
  • e) 如果所有的k个质心向量都没有发生变化,则转到步骤3)

3) 输出簇划分C={C1,C2,…Ck}

###1.3.2 学习向量量化(LVQ)

LVQ也是基于原型的聚类算法,与K-Means不同的是,LVQ使用样本真实类标记辅助聚类,首先LVQ根据样本的类标记,从各类中分别随机选出一个样本作为该类簇的原型,从而组成了一个原型特征向量组,接着从样本集中随机挑选一个样本,计算其与原型向量组中每个向量的距离,并选取距离最小的原型向量所在的类簇作为它的划分结果,再与真实类标比较。

若划分结果正确,则对应原型向量向这个样本靠近一些
若划分结果不正确,则对应原型向量向这个样本远离一些

LVQ算法的流程如下所示:

###1.3.3 高斯混合聚类

现在可以看出K-Means与LVQ都试图以类中心作为原型指导聚类,高斯混合聚类则采用高斯分布来描述原型。现假设每个类簇中的样本都服从一个多维高斯分布,那么空间中的样本可以看作由k个多维高斯分布混合而成

对于多维高斯分布,其概率密度函数如下所示:

[外链图片转存失败(img-Mwf9tSmm-1562057435020)(https://i.loli.net/2018/10/18/5bc84fb870d98.png)]

其中u表示均值向量,∑表示协方差矩阵,可以看出一个多维高斯分布完全由这两个参数所确定。接着定义高斯混合分布为:

[外链图片转存失败(img-7kE7J1cU-1562057435020)(https://i.loli.net/2018/10/18/5bc84fb876794.png)]

α称为混合系数,这样空间中样本的采集过程则可以抽象为:(1)先选择一个类簇(高斯分布),(2)再根据对应高斯分布的密度函数进行采样,这时候贝叶斯公式又能大展身手了:

此时只需要选择PM最大时的类簇并将该样本划分到其中,看到这里很容易发现:这和那个传说中的贝叶斯分类不是神似吗,都是通过贝叶斯公式展开,然后计算类先验概率和类条件概率。但遗憾的是:这里没有真实类标信息,对于类条件概率,并不能像贝叶斯分类那样通过最大似然法美好地计算出来,因为这里的样本可能属于所有的类簇,这里的似然函数变为:

可以看出:简单的最大似然法根本无法求出所有的参数,这样PM也就没法计算。这里就要召唤出之前的EM大法,首先对高斯分布的参数及混合系数进行随机初始化,计算出各个PM(即γji,第i个样本属于j类),再最大化似然函数(即LL(D)分别对α、u和∑求偏导 ),对参数进行迭代更新

高斯混合聚类的算法流程如下图所示:

1.4 密度聚类

密度聚类则是基于密度的聚类,它从样本分布的角度来考察样本之间的可连接性,并基于可连接性(密度可达)不断拓展疆域(类簇)。其中最著名的便是DBSCAN算法

简单来理解DBSCAN便是:找出一个核心对象所有密度可达的样本集合形成簇。首先从数据集中任选一个核心对象A,找出所有A密度可达的样本集合,将这些样本形成一个密度相连的类簇,直到所有的核心对象都遍历完。DBSCAN算法的流程如下图所示:


那么我们什么时候需要用DBSCAN来聚类呢?一般来说,如果数据集是稠密的,并且数据集不是凸的,那么用DBSCAN会比K-Means聚类效果好很多。如果数据集不是稠密的,则不推荐用DBSCAN来聚类。

下面对DBSCAN算法的优缺点做一个总结。

DBSCAN的主要优点有:

1) 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。

2) 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。

3) 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。

DBSCAN的主要缺点有:

1)如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。

2) 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。

3) 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。
1.5 层次聚类

层次聚类是一种基于树形结构的聚类方法,常用的是自底向上的结合策略(AGNES算法)。假设有N个待聚类的样本,其基本步骤是:

1.初始化–>把每个样本归为一类,计算每两个类之间的距离,也就是样本与样本之间的相似度;
2.寻找各个类之间最近的两个类,把他们归为一类(这样类的总数就少了一个);
3.重新计算新生成的这个类与各个旧类之间的相似度
4.重复2和3直到所有样本点都归为一类,结束。

可以看出其中最关键的一步就是计算两个类簇的相似度,这里有多种度量方法:

* 单链接(single-linkage):取类间最小距离。

* 全链接(complete-linkage):取类间最大距离

* 均链接(average-linkage):取类间两两的平均距离

层次聚类法的算法流程如下所示:

机器学习笔记[七]:聚类相关推荐

  1. 机器学习笔记七:损失函数与风险函数

    一.损失函数 回顾之前讲过的线性回归模型,我们为了要学习参数使得得到的直线更好的拟合数据,我们使用了一个函数 这个函数就是比较模型得到的结果和"真实值"之间的"差距&qu ...

  2. 机器学习笔记(九)聚类

    9.聚类 有必要回顾下前文所涉及的机器学习主流分类,有监督学习中根据预测结果离散和连续属性分为分类和回归两大类,常见的算法有:线性模型.决策树.神经网络.支持向量机.贝叶斯分类器以及集成学习. 本文开 ...

  3. 七月算法机器学习笔记8 聚类算法

    七月算法(http://www.julyedu.com) 12月份 机器学习在线班 学习笔记

  4. 机器学习笔记七——特征工程之特征处理

    特征处理 1.类别型特征的处理-特征编码 1.1 处理少量特征 1.2处理大量的类别特征 2.文本特征的处理--文本形式转换为向量形式 2.1 词集模型 2.2 词袋(Bag-of-Words,Bow ...

  5. 机器学习笔记(七)贝叶斯分类器

    7.贝叶斯分类器 7.1贝叶斯决策论 贝叶斯决策论(Bayesiandecision theory)是概率框架下实施决策的基本方法.对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如 ...

  6. 机器学习笔记: 聚类 模糊聚类与模糊层次聚类(论文笔记 Fuzzy Agglomerative Clustering :ICAISC 2015)

    前言:模糊层次聚类是参考了论文"A Spatial-Temporal Decomposition Based Deep Neural Network for TimeSeries Forec ...

  7. 机器学习笔记 (聚类) 层次聚类 Agglomerative Clutsering(Single-linkage、Complete-linkage,Group average)

    1 Agglomerative Clutsering 这是一种自底而上的层次聚类方法.大致可以分为三步: 1.将每一个元素单独定为一类 2.每一轮都合并指定距离(对指定距离的理解很重要)最小的类 3. ...

  8. 机器学习笔记七之机器学习诊断

    本节目录: 评估假设 模型选择和交叉验证 诊断偏差和方差 正则化和偏差/方差 学习曲线 小结 假设我们需要用一个线性模型来预测房价,当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差,下一步 ...

  9. arctanx麦克劳林公式推导过程_机器学习笔记(七)——初识逻辑回归、不同方法推导梯度公式

    一.算法概述 逻辑回归(Logistic)虽带有回归二字,但它却是一个经典的二分类算法,它适合处理一些二分类任务,例如疾病检测.垃圾邮件检测.用户点击率以及上文所涉及的正负情感分析等等. 首先了解一下 ...

最新文章

  1. 如何成为一名Android架构师,乃至高级架构师,文末有路线图
  2. 软件缺陷的状态有哪些??
  3. C语言判别输入的东东
  4. S6 文件备份与压缩命令
  5. 春节特惠活动┃数学无用论??我们欠孩子真正的数学阅读
  6. PC中存在多个Python版本,在指定的版本中安装包或者模块
  7. Java常用性能分析工具 jconsole、jvisualvm、 jstat、jinfo、jmap、jhat、jstack
  8. LeetCode 128. 最长连续序列(Longest Consecutive Sequence)
  9. 又有无人车数据集开源,2019段加州通勤小视频等你撩 | 资源
  10. mysql 多个表union查询_mysql查询两个表,UNION和where子句
  11. mac电池损耗百分比怎么查看
  12. css3中border-image的用法(fill 、border-image-outset 、border-image-width)
  13. 可用性测试启发式评估十条原则介绍
  14. linux 命令赋权,linux赋权命令
  15. 用安卓软件MT管理器破解元气骑士内购,小白照着也可以成功!
  16. mysql数据库的实例_MySQL数据库实例-解释汇总
  17. 洛谷P4939 Agent2(树状数组差分)
  18. 启用新博客域名 www.qiuchengjia.cn
  19. 模拟音频处理器:Excite Audio Lifeline Console Mac
  20. 交互设计:非原型,不设计

热门文章

  1. 火绒安全警报:疑似方正集团子公司签名泄露 遭黑客利用盗取Steam账号
  2. 产业主导者洗牌的时间,到了
  3. 周傲英、熊辉、李飞飞助阵!期待与你的大数据之约(附大会终版日程)
  4. /var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间
  5. HSC-1th writeup
  6. 计算机专业课考研攻略,考研计算机专业课组成原理特点及复习攻略
  7. 全网最全、最新MyBatis框架核心知识,这篇文章包你这辈子也忘不掉MyBatis!!
  8. 大批量数据修改时发现有一行数据被锁住了,一直处于等待状态的问题解决
  9. 如何取消ssh验证密码
  10. linux 硬链接占空间吗,硬链接到底占不占用磁盘空间?