第一种 K-means

现在,我们暂时不去考虑原始数据的形式,假设我们已经讲其映射到了一个欧式空间上了,为了方便,我们用二维空间来展示,如下图所示:

图1 散点图

单纯用肉眼看,我们的大脑很快就能判断出,这些散点大致属于三个集群,其中两个很紧凑,一个很松散。我们的目的就是区分这些散点从属于哪个集群,同样为了方便,我们把三个集群图上不同的颜色,如下图所示:

图2 被标注颜色的散点图

人的大脑可以扫一眼就分辨出的集群,计算机却不会这么轻易做到,它无法仅通过形状就“大致看出来”,这就需要用到我们马上要讲的算法K-means了。K-means基于一个假设:对于每一个集群(cluster),我们都可以选出一个中心点(center),使得该cluster中的所有点到该cluster中心点的距离小于到其他cluster中心点的距离。当然,实际情况可能无法总是满足这个假设,但这是我们能达到的最好结果,而那些误差通常是固有存在的或者问题本身的不可分性造成的。所以,我们暂且认为这个假设是合理的。

在此基础上,我们来推导K-means的目标函数:假设有N个点,要分为K个cluster,K-means要做的就是最小化:

其中,rnk在数据点n被归类到clusterk时为1,否则为0。直接寻找rnk和μk来最小化J并不容易,不过我们可以采用迭代的办法,先固定μk,选择最优的rnk。可以看出,只要将数据点归类到离他最近的那个中心就能保证J最小。下一步则固定rnk,再求最优的μk。将J对uk求导并令导数等于0,很容易得到J最小的时候μk应该满足:

也就是uk的值应该是cluster k中所有数据点的平均值。由于每一次迭代都是为了取到更小的J,所有J会不断减小直到不变。这个迭代方法保证可k-means最终会达到一个极小值。

此处要做个说明,K-means不能保证总是能收敛到全局最优解,这与初值的选择有很大关系。因此在实际操作中,我们通常会多次选择初值跑K-means,并取其中最好的一次结果。K-means结束的判断依据可以是迭代到了最大次数,或者是J的减小已经小于我们设定的阈值。

总结一下,在众多聚类方法中,K-means属于最简单的一类。其大致思想就是把数据分为多个堆,每个堆就是一类。每个堆都有一个聚类中心(学习的结果就是获得这k个聚类中心),这个中心就是这个类中所有数据的均值,而这个堆中所有的点到该类的聚类中心都小于到其他类的聚类中心(分类的过程就是将未知数据对这k个聚类中心进行比较的过程,离谁近就是谁)。其实K-means算的上最直观、最方便理解的一种聚类方式了,原则就是把最像的数据分在一起,而“像”这个定义由我们来完成(类比把药材按照什么特征装入药匣) 。

第二种 高斯混合模型

下面,我们来介绍另外一种比较流行的聚类算法——高斯混合模型GMM(Gaussian Mixture Model)。GMM和K-means很相似,区别仅在于GMM中,我们采用的是概率模型P(Y|X),也就是我们通过未知数据X可以获得Y取值的一个概率分布,我们训练后模型得到的输出不是一个具体的值,而是一系列值的概率。然后我们可以选取概率最大的那个类作为判决对象,属于软分类soft assignment(对比与非概率模型Y=f(X)的硬分类hard assignment)。

GMM学习的过程就是训练出几个概率分布,所谓混合高斯模型就是指对样本的概率密度分布进行估计,而估计的模型是几个高斯模型加权之和(具体是几个要在模型训练前建立好)。每个高斯模型就代表了一个cluster。对样本中的数据分别在几个高斯模型上投影,就会分别得到在各个类上的概率。然后我们可以选取概率最大的类所为判决结果。

图3 两个高斯分布

得到概率有什么好处呢?拿下图中的两个高斯分布来说,(2.5,0) 属于其重合区域,它由两个分布产生的概率相等,你没办法说它属于那一边。这时,你只能猜测,选择2好像更好一点,于是你得出(2.5,0)属于左边的概率是51%,属于右边的概率是49%。然后,在用其他办法分别到底属于哪一边。可以想象,如果采用硬分类,分类的相似度结果要么0要么1,没有“多像”这个概念,所以,不方便多模型融合(继续判断)。

混合高斯模型的定义为:

其中K为模型的个数,πk为第k个高斯的权重,p(x|k)则为第k个高斯的概率密度函数,其均值为μk,方差为σk。我们对此概率密度的估计就是要求πk、μk和σk各个变量。求解得到的最终求和式的各项结果就分别代表样本x属于各个类的概率。

在做参数估计的时候,常采用的方法是最大似然。最大似然法就是使样本点在估计的概率密度函数上的概率值最大。由于概率值一般都很小,N很大的时候这个连乘的结果非常小,容易造成浮点数下溢。所以我们通常取log,将目标改写成:

也就是最大化log - likelihood function,完整形式则为:

一般用来做参数估计的时候,我们都是通过对待求变量进行求导来求极值,在上式中,log函数中又有求和,若用求导的方法算,方程组将会非常复杂,所以我们不直接求导,而是采用EM(Expection Maximization)算法。这与K-means的迭代法相似,都是初始化各个高斯模型的参数,然后用迭代的方式,直至波动很小,近似达到极值。

总结一下,用GMM的优点是投影后样本点不是得到一个确定的分类标记,而是得到每个类的概率,这是一个重要信息。GMM每一步迭代的计算量比较大,大于k-means。GMM的求解办法基于EM算法,因此有可能陷入局部极值,这与初始值的选取十分相关。

第三种 层次聚类

不管是K-means,还是GMM,都面临一个问题,那就是k取几比较合适。比如在bag-of-words模型中,用k-means训练码书,那么应该选取多少个码字呢?为了不在这个参数的选取上花费太多时间,可以考虑层次聚类。

假设有N个待聚类的样本,对于层次聚类来说,基本步骤就是:

1. 把每个样本归为一类(初始化),计算每两个类之间的距离,也就是样本与样本之间的相似度;

2. 寻找各个类之间最近的两个类,把他们归为一类(这样类的总数就少了一个);

3. 重新计算新生成的这个类与各个旧类之间的相似度;

4. 重复2和3直到所有样本点都归为一类,结束。

整个聚类过程其实是建立了一棵树,在建立的过程中,可以通过在第二步上设置一个阈值,当最近的两个类的距离大于这个阈值,则认为迭代可以终止。另外关键的一步就是第三步,如何判断两个类之间的相似度有很多种方法。这里介绍一下三种:

· Single Linkage:又叫做nearest-neighbor ,就是取两个类中距离最近的两个样本的距离作为这两个集合的距离,也就是说,最近两个样本之间的距离越小,这两个类之间的相似度就越大。容易造成一种叫做Chaining 的效果,两个cluster 明明从“大局”上离得比较远,但是由于其中个别的点距离比较近就被合并了,并且这样合并之后Chaining 效应会进一步扩大,最后会得到比较松散的cluster 。

· Complete Linkage:这个则完全是Single Linkage 的反面极端,取两个集合中距离最远的两个点的距离作为两个集合的距离。其效果也是刚好相反的,限制非常大,两个cluster 即使已经很接近了,但是只要有不配合的点存在,就顽固到底,老死不相合并,也是不太好的办法。这两种相似度的定义方法的共同问题就是指考虑了某个有特点的数据,而没有考虑类内数据的整体特点。

· Average linkage:这种方法就是把两个集合中的点两两的距离全部放在一起求一个平均值,相对也能得到合适一点的结果。Average linkage的一个变种就是取两两距离的中值,与取均值相比更加能够解除个别偏离样本对结果的干扰。

以上这几种聚类的方法叫做agglomerative hierarchical clustering(自下而上),描述起来比较简单,但是计算复杂度比较高,为了寻找距离最近/远和均值,都需要对所有的距离计算个遍,需要用到双重循环。另外从算法中可以看出,每次迭代都只能合并两个子类,非常慢。

另外有一种聚类方法叫做divisive hierarchical clustering(自上而下),过程恰好是相反的,一开始把所有的样本都归为一类,然后逐步将他们划分为更小的单元,直到最后每个样本都成为一类。在这个迭代的过程中通过对划分过程中定义一个松散度,当松散度最小的那个类的结果都小于一个阈值,则认为划分可以终止。

图4 自上而下和自下而上的层次聚类

由于这种层次结构,普通的K-means也被称为一种flat clustering。

以上三种方法为无监督算法常用的聚类算法,可以根据数据情况选择适用的算法。事实上,在算法的选择上也十分有讲究,不仅要考虑数据维度,数据类型,还要考虑数据分布等等。

【采用】无监督核心聚类算法相关推荐

  1. 无监督域对抗算法:ICCV2019论文解析

    无监督域对抗算法:ICCV2019论文解析 Drop to Adapt: Learning Discriminative Features for Unsupervised Domain Adapta ...

  2. 广告行业中那些趣事系列60:详解超好用的无监督关键词提取算法Keybert

    导读:本文是"数据拾光者"专栏的第六十篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇从理论到实践介绍了超好用的无监督关键词提取算法Keybert,对于希望使用无 ...

  3. 强化学习经典算法笔记(十九):无监督策略学习算法Diversity Is All You Need

    强化学习经典算法笔记19:无监督策略学习算法Diversity Is All You Need DIAYN核心要点 模型定义 目标函数的构造 DIAYN算法细节 目标函数的优化 SAC的训练 判别器的 ...

  4. 无监督学习--K-means聚类算法学习

    无监督学习–K-means聚类算法学习 介绍:k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度比较低. 其处理过程如下: 1.随机选择k个点作为初始的聚类中心 ...

  5. 【机器学习基础】(六):通俗易懂无监督学习K-Means聚类算法及代码实践

    K-Means是一种无监督学习方法,用于将无标签的数据集进行聚类.其中K指集群的数量,Means表示寻找集群中心点的手段. 一. 无监督学习 K-Means 贴标签是需要花钱的. 所以人们研究处理无标 ...

  6. 【机器学习基础】通俗易懂无监督学习K-Means聚类算法及代码实践

    K-Means是一种无监督学习方法,用于将无标签的数据集进行聚类.其中K指集群的数量,Means表示寻找集群中心点的手段. 一. 无监督学习 K-Means 贴标签是需要花钱的. 所以人们研究处理无标 ...

  7. 吴恩达机器学习(十一)K-means(无监督学习、聚类算法)

    目录 0. 前言 1. K-means的算法流程 2. 代价函数(优化目标函数) 3. K 的选择 学习完吴恩达老师机器学习课程的无监督学习,简单的做个笔记.文中部分描述属于个人消化后的理解,仅供参考 ...

  8. 机器学习:无监督异常检测算法

    文章目录 应用场景 特征值选取 多元正态分布 总感觉不像机器学习算法...像个概率论的高级计算器. 应用场景 异常检测问题指,给定数据集,假定他们都是正常or异常的,当出现一个新样本时,判断该新样本是 ...

  9. 一种无监督人脸聚类方法(SOTA效果)

    Learning to Cluster Faces by Infomap Intorduction 采用了无监督方法infomap进行人脸聚类github,在公开数据集上MS-Celeb-1M.You ...

最新文章

  1. 美国年薪最高的高管是谁?彭博最新薪酬排名出炉,库克只排第二
  2. 英特尔将进行重大业务重组
  3. 姚班天才漆子超、IOI金牌得主陈启峰等联手进军AR领域:全员顶尖科技公司技术背景,打造“5G+AI+AR”先锋...
  4. How to Get Name of Months in ABAP/4
  5. linux图形开发工具
  6. shell脚本1——变量 $、read、``
  7. synchronized(八)
  8. JavaScript:Date 对象
  9. 利用WinSock进行无连接的通信
  10. SLAM_2019-ICCV_GSLAM:通用 SLAM 框架和基准
  11. Hvv近期0day总结四
  12. 数字图像处理与分析_图像增强
  13. 《博弈圣经》创业就是文化实践 创业人应具备博弈占优特征
  14. 全面的SWOT分析的技巧和策略
  15. 全面了解小微信贷风控
  16. 马尔可夫不等式、切比雪夫不等式、柯西-施瓦茨不等式
  17. 使用Android Studio开发widget安卓桌面插件
  18. 机器学习中SVM的损失函数,向量积
  19. JavaScript - 移动端网页特效
  20. 《上古天真论》第七讲文字版

热门文章

  1. linux 查找_如何在 Linux 上查找和删除损坏的符号链接 | Linux 中国
  2. c语言 指针函数 详解,[NOTE-C]C语言指针详解(一)
  3. 弹出硬盘时应用程序阻碍停用设备_7GB硬盘空间被Win 10“偷走”?微软系统的这些“潜规则”你掌握了吗?...
  4. 原字体_时隔25天,再次更新字体,ios1213
  5. php连接plc,PLC 几种常见的连接口和通讯协议
  6. 了解CUDA计算(一)
  7. 贷款违约预测--赛题理解
  8. spyder 崩溃解决方案
  9. 判断二叉树是否是平衡二叉树(dp tree)
  10. MATLAB应用实战系列(七十七)-【图像处理】COVID-19 防疫应用口罩检测