初学ML笔记N0.6——聚类方法

来源:互联网 发布:淘宝seo搜索优化工具 编辑:程序博客网 时间:2024/05/21 07:50

聚类的定义


  • 聚类就是按数据的相似性,将其划分为多个类别,从而使内别内的相似度大,内别间的相似度小。
  • 它是一种无监督学习方式,即不需要先给定样本进行学习。

相似度的度量方式


聚类的目的就是为了将相似样本的样本分到同一个类别里。那么,首先要考虑的便是如何度量这个相似。下面给出几种常见的度量方式:

图片

闵可夫斯基距离里,当p=2时,便是我们熟知的欧氏距离,可见,它的适用范围属于能在坐标轴里描绘的点的样本集。
关于各种相似性的度量,可参考下面这篇博客的详细解释:

http://www.cnblogs.com/heaad/archive/2011/03/08/1977733.html

K-means算法


算法首先随机地选择K个对象,每个对象初始地代表了一个簇的平均值或中心。对剩余的每个对象根据其与各个簇中心的距离,将其赋给最近的簇。然后重新计算出每个簇的中心,然后继续将每个点赋给最近的簇。这个过程不断重复,直到准则函数收敛。
其中,准则函数常常使用最小平方误差函数MSE,其定义如下:

图片

这里面E代表所有样本的平方误差总和,p是每个样本点,mi是簇Ci的中心点的值。
总结下,K-means如下:
- 输入:n个样本值,给定簇的数目k
- 输出:平方误差收敛后的k个簇

以下是一个实例,其中,k=2:

图片

  • 注:K-means是初值敏感的,若开始的K个点选择不当,最后分类的结果也会不当。

对于K-means算法有一个更进一步的算法,叫做 二分K-均值聚类算法。
顾名思义,二分K-均值聚类算法就是每次对数据集(子数据集)采取k=2的k-均值聚类划分,子数据集的选取则有一定的准则。二分K-均值聚类算法首先将所有点作为一个簇,第一步是然后将该簇一分为二,之后的迭代是:在所有簇中根据SSE选择一个簇继续进行二分K-均值划分,直到得到用户指定的簇数目为止。
选择哪一个簇进行划分取决于对”其划分是否可以最大程度降低SSE的值。这需要将每个簇都进行二分划分,然后计算该簇二分后的簇SSE之和并计算其与二分前簇SSE之差(当然SSE必须下降),最后选取差值最大的那个簇进行二分。

对于K-means算法的缺点如下:

  1. 必须事先给出k值,也就是要事先知道需要生成簇的数量。
  2. 适用于坐标系下的聚类,因为需要寻找中心值及距离。
  3. 不适合发现非凸形状的簇或者大小差别较大的簇。
  4. 噪声数据如孤立点,对结果影响比较大。

层次聚类算法


  • 凝聚的层次聚类,AGENES算法:

它首先把每个对象作为一个簇,然后相似度高的簇被一步步合并。两个簇间的距离由这两个不同簇中距离最近的数据点对的相似度来确定。此过程反复进行,直到合并到要求的簇的数目。

  • 分裂的层次聚类,DIANA算法:

它首先将所有样本置于一个簇里,然后逐渐细分为越来越小的簇(细分的原则可选择欧氏距离或者其他),直到达到要求的簇的数目。

密度聚类算法


密度聚类算法的思想是根据样本点周围的密度来确定其属于哪个分类。它是一种连续查找密度相近的点,并把它们划分为一类的过程。
- 这种算法的好处在于,它不受形状的限制,只要密度是连续的,那么我们就可以认为其是一类;其次,它对噪声数据不敏感,因为噪声数据一般是孤立的点,所以对其影响不大。
- 它的缺点是因为要计算每个点一定范围内的密度,所以计算的复杂度比较大。

DBSCAN算法(利用密度相连概念进行聚类):

  • 它将簇定义为密度相连的点的最大集合,能够把具有高密度的不同区域划分为不同的簇,它可以在噪声环境中发现任意形状的簇。

有一个比喻比较适合它,比如在每个城市市区里,人口密度总是较大的,然而在城市与城市结合部里, 密度总是很低,而这些低密度区域,正是对不同城市的划分界限。可见,这种算法还是很合理。

下面要思考的问题便是,如何定义密度的连续?首先定义几个概念:

  • 核心对象:如果一个样本的ε-邻域内至少包含了m个对象,那么这个对象就是核心对象。当然,这里的ε与m都是人为指定的。
  • 密度可达:如果p在核心对象q的ε-领邻域内,我们就说p从q出发是直接密度可达的。当然,密度可达是具有传导性的,b从a出发密度可达,c从b出发密度可达,那么就可以说c从a出发密度可达了。
  • 密度相连:样本中,存在一个对象o,使得对象p与对象q都是从出发密度可达,那么就说p与q是密度相连的了。
  • 簇:一个簇是最多的密度相连的样本的集合。

DBSCAN算法的过程就是 若样本p的ε-邻域内包含多余m个对象后,就被创建为以p为核心对象的新簇。然后其反复寻找从这些核心点出发的密度可达的对象,此过程中,便把能密度可达的簇合并为同一个簇。当没有样本点可以继续添加时,整个聚类就结束了。

密度最大值算法:

  • 局部密度ρi ,其值为 到对象i的距离小于d的对象的个数。其中,选择d的标准 通常是 使得平均每个点的邻居数量为所有点的 1%~2%
  • 高局部密度点距离δi,其定义为 在密度高于对象 i 的所有对象中,到对象i 最近的距离的值,即为其值。(注:只有密度是局部或者全局最大的点 才会有远大于正常值得高局部密度距离值)

    结论:

  • ρi与δi均较大的点,则为簇中心。(簇中心密度高、点多,所以ρi大;而只有另外的簇中心才有可能比它密度更大,所以δi大)

  • ρi较小,δi较大的点,则为异常点。(异常点通常是孤立点,密度低所以ρi小)

找出簇中心后,既可以按照K-means来分类,也可以直接用DBSCAN算法,即密度可达的方式进行聚类。实践中,后者更稳妥。
实例:

图片

如上如,1跟10是簇中心,26、27、28为异常点。

谱聚类算法


首先,这里的谱,就是指矩阵的谱,即为矩阵特征值的集合。
谱聚类,是基于图论的一种聚类方法,通过构造样本的拉普拉斯矩阵,并对其特征向量进行聚类,到达间接聚类样本的目的。

  • 首先,自然是要构造拉普拉斯矩阵。直接给出结论,L=D-W。
    矩阵W是样本点的邻接矩阵,W=(ωij),它是一个二维矩阵,存储两两样本间的相似程度值(我们规定自身对自身的相似度为0,这一点要注意),即图的权值。这个值得大小,可以用本文开篇的几种方式来计算。注意,它是一个对称矩阵。
    矩阵D叫做度矩阵,它是一个对角阵,即把W矩阵的每一行全部累加到其对角线上的元素上去(也就是求了每个节点的度),其余位置全部置0。

  • 接着,根据我们预想的分类数量K,求出W的特征值按大小排列后前K个值所对应的特征向量u1、u2、、、uk。

  • 然后根据这些特征向量构造矩阵U=(u1,u2,,,uk)∈R^n*k
    对其求转置得到U^T , 它的每一个列向量均为K维空间的一个点。

  • 最后对这n个k维空间的点进行聚类(例如K-means聚类法)。
    注:样本中的每一个点即对应于U^T 里的每一个向量,即是一种映射关系。事实上,这里是对样本进行了升高维度的一种处理方式。

0 0
原创粉丝点击