李宏毅机器学习笔记(十三)——无监督学习(一):聚类算法

文章目录

  • 一.什么是数据聚类
  • 二.基于GMM的聚类
  • 三.k-means聚类法
  • 四.层次凝聚聚类
  • 五.DBSCAN聚类法

一.什么是数据聚类

  如果我们想要对全部都是无标签的数据进行分类,这时候数据聚类就是一大类方式。聚类的意思顾名思义,按照一定的法则,将部分“相近的”数据聚成同一类,给它们相同的标签即可。
  下面介绍几种比较有代表性的聚类方法。文章中的GIF图来源于以下文章:https://www.sohu.com/a/225353030_99992181。

二.基于GMM的聚类

  在半监督学习中我们已经讲过在部分数据有标签的情况下如何用GMM进行所谓的样本训练了。在这里,我们要自己去定义类的数量,之后随机初始化对应的多元高斯分布,然后以同样的操作使用EM算法即可。(当然最开始计算每个类别出现的概率,这个也可以随机,一般是每个类别的数量相同)
李宏毅机器学习笔记(十三)——无监督学习(一):聚类算法_第1张图片
  由于EM算法本身是收敛的,因此这样做我们可以保证最后的结果是收敛的。
  这种方法的优点在于我们不仅可以知道每个点在哪个类,我们还可以知道每个点在所有类的概率,非常的舒服,变为了连续型的数据。但缺点在于我们还是不知道到底应该分成多少类,而且这样做确实是比较麻烦的。

三.k-means聚类法

  我们将基于GMM的聚类法进行简化,不再关注后验概率,而只是通过计算每个点到各个聚类中心的距离,来确定每个点该分到哪个类,然后同样使用EM算法来通过不断地迭代来收敛。
  因此算法的步骤如下:
  1.初始化聚类的数量和聚类中心,一般来说我们都会选择比较分散的几个点作为聚类中心。将数据的每个维度的量纲进行标准化,保证几何距离有意义。
  2.(E步)计算每个点到聚类中心的距离,距离的定义可以自己决定,一般是几何距离;之后标记到对应的类别中。
  3.(M步)通过对每个类别中所有的点取平均,来更新聚类中心。如果每个中心的移动距离改变的很小或者没有改变(这时说明E步每个点的标签都没有改变),那算法结束;否则回到第2步。
李宏毅机器学习笔记(十三)——无监督学习(一):聚类算法_第2张图片  这种方法十分简单易行,不仅好理解而且计算速度很快,对于n个点的图,算法复杂度是 Θ ( n ) \Theta(n) Θ(n)的。但缺点也十分明显,只能知道是哪一类的,不知道属于这类的具体概率;而且同样我们不知道到底要聚成多少类比较好。

四.层次凝聚聚类

  这种聚类的原理就是,改为自底向上进行聚类,同时将聚类的信息存储在二叉树中。步骤如下:
  1.从目前的图中找到距离最小的两个点,当然这个距离也是自己去定义的,之后把这个点作为树的两个叶节点,然后去掉这两个点,加入一个点作为新类。注:新加入的点并不是这两个点的算数平均,因为这两个点也可能是经过了不同数量的原始点的聚类得到的;应是按照这两个点所谓的代表着原始点的数量来进行加权平均。这时如果之剩下一个点则算法结束,聚类完成。
  2.计算图中剩下所有的点到这个新点的距离,重复步骤1。
李宏毅机器学习笔记(十三)——无监督学习(一):聚类算法_第3张图片
  这样做其实我们操作完之后,想聚成多少类都是十分容易计算出结果的,因此可以抵消一部分由于我们不知道类别数量带来的负面影响。当然,这样做其实是一种暴力式的做法。我们最开始要计算 O ( n 2 ) O(n^2) O(n2)个距离,加上后续点的加入,我们一共要计算 O ( n 3 ) O(n^3) O(n3)个距离。在这n次中都是从 O ( n 2 ) O(n^2) O(n2)个距离中选出最小的,因此时间复杂度达到了O(n^2),由于要存储树状信息,因此额外需要 Θ ( n ) \Theta(n) Θ(n)的复杂度。实际操作起来会很慢。

五.DBSCAN聚类法

  其实思想上类似于我们半监督学习中基于密度假设的聚类。但一般来说我们还是要自己设定两个超参数:一个是 ϵ \epsilon ϵ的值,一个是MinPts的值。
李宏毅机器学习笔记(十三)——无监督学习(一):聚类算法_第4张图片
  动图如下图所示。

  这种方法的优点在于我们无需自己去定义类别的数量就可以进行聚类,而且可以有效的排除噪声点。同时聚类的速度是非常快的,也是只需要 Θ ( n ) \Theta(n) Θ(n)的时间就可以完成。
  但这样做的缺点也很明显:我们基于了每个类之中都比较密集,而类与类的边界处数据量很少的特点;对于不符合这种特点的数据集来说,这种方法完全不适用。同时两个超参数的选择可能也会对结果有很大的影响,现实中可能要多取几个数值来多做几次聚类,查看效果。

你可能感兴趣的:(聚类,机器学习)