机器学习聚类算法

来源:互联网 发布:for循环遍历json 编辑:程序博客网 时间:2024/05/21 07:50

(1)层次聚类:

层次聚类算法:

自下而上聚合层次聚类方法(或凝聚层次聚类)。这种自下而上策略就是最初将每个对象(自身)作为一个簇,然后将这些簇进行聚合以构造越来越大的簇,直到所有对象均聚合为一个簇,或满足一定终止条件为止。

自顶向下分解层次聚类方法(或分裂层次聚类)。这种策略的作法与自下而上策略的作法相反。它首先将所有对象看成一个簇的内容,将其不断分解以使其变成越来越小但个数越来越多的小簇,直到所有对象均独自构成一个簇,或满足一定终止条件为止。

层次聚类的流程:

凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。 这里给出采用最小距离的凝聚层次聚类算法流程:

(1) 将每个对象看作一类,计算两两之间的最小距离;
(2) 将距离最小的两个类合并成一个新类;
(3) 重新计算新类与所有类之间的距离;
(4) 重复(2)、(3),直到所有类最后合并成一类。

层次聚类算法的分析:

层次聚类法的优点是可以通过设置不同的相关参数值,得到不同粒度上的多层次聚类结构;在聚类形状方面,层次聚类适用于任意形状的聚类,并且对样本的输入顺序是不敏感的。 

层次聚类的不足之处是算法的时间复杂度大,层次聚类的结果依赖聚类的合并点和分裂点的选择。并且层次聚类过程最明显的特点就是不可逆性,由于对象在合并或分裂之后,下一次聚类会在前一次聚类基础之上继续进行合并或分裂,也就是说,一旦聚类结果形成,想要再重新合并来优化聚类的性能是不可能的了。聚类终止的条件的不精确性是层次聚类的另一个缺点,层次聚类要求指定一个合并或分解的终止条件,比如指定聚类的个数或是两个距离最近的聚类之间最小距离阈值。

(2)K-均值聚类:

K-均值聚类算法:

在聚类分析中,K-均值聚类算法(k-means algorithm)是无监督分类中的一种基本方法,其也称为C-均值算法,其基本思想是:通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。 

K-均值聚类的流程:

假设要把样本集分为c个类别,算法如下: 

(1)适当选择c个类的初始中心; 
(2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类, 
(3)利用均值等方法更新该类的中心值; 
(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变(目标函数收敛),则迭代结束,否则继续迭代

层次聚类算法的分析:

(1)对于离群点和孤立点敏感:
离群点检测的LOF算法,通过去除离群点后再聚类,可以减少离群点和孤立点对于聚类效果的影响。
(2)k值选择:
可以通过在一开始给定一个适合的数值给k,通过一次K-means算法得到一次聚类中心。对于得到的聚类中心,根据得到的k个聚类的距离情况,合并距离最近的类,因此聚类中心数减小,当将其用于下次聚类时,相应的聚类数目也减小了,最终得到合适数目的聚类数。可以通过一个评判值E来确定聚类数得到一个合适的位置停下来,而不继续合并聚类中心。重复上述循环,直至评判函数收敛为止,最终得到较优聚类数的聚类结果。
(3)初始聚类中心的选择:
首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。
(4)只能发现球状簇:
只能获取球状簇的根本原因在于,距离度量的方式。如果数据集中有不规则的数据,往往通过基于密度的聚类算法更加适合,比如DESCAN算法。

(3)基于密度的聚类DBscan:

DBSCAN聚类算法:

对象的ε-邻域:给定对象在半径 ε内的区域。
核心对象:对于给定的数目m,如果一个对象的ε-邻域至少包含 m 个对象,则称该对象为核心对象。
直接密度可达:给定一个对象集合D,如果 p 是在核心对象 q 的ε-邻域内,我们说从对象 q 出发到对象p是直接密度可达的。
密度可达:如果存在一个对象链p1、p2…pn,p1=q,pn=p,对 pi∈D,(1≤i≤n),pi+1是从 pi(核心对象) 关于 ε 和 m 直接密度可达的,则对象 p 是从核心对象 q 关于 ε 和 m 密度可达的。
密度相连:如果对象集合D中存在一个核心对象o,使得对象 p 和 q 是从 o 关于 ε 和 m 密度可达的,那么对象 p 和 q 是关于 ε 和 m 密度相连的。
簇:密度相连的点的最大集合。
噪声:不包含在任何簇中的对象称为噪声。

DBSCAN聚类的流程 :

扫描整个数据集,找到任意一个核心点,对该核心点进行扩充。扩充的方法是寻找从该核心点出发的所有密度相连的数据点(注意是密度相连)。遍历该核心点的邻域内的所有核心点(因为边界点是无法扩充的),寻找与这些数据点密度相连的点,直到没有可以扩充的数据点为止。最后聚类成的簇的边界节点都是非核心数据点。之后就是重新扫描数据集(不包括之前寻找到的簇中的任何数据点),寻找没有被聚类的核心点,再重复上面的步骤,对该核心点进行扩充直到数据集中没有新的核心点为止。数据集中没有包含在任何簇中的数据点就构成异常点。

DBSCAN聚类算法的分析:

优点:
1. 与K-means方法相比,DBSCAN不需要事先知道要形成的簇类的数量。
2. 与K-means方法相比,DBSCAN可以发现任意形状的簇类。
3. 同时,DBSCAN能够识别出噪声点。
4.DBSCAN对于数据库中样本的顺序不敏感,即Pattern的输入顺序对结果的影响不大。但是,对于处于簇类之间边界样本,可能会根据哪个簇类优先被探测到而其归属有所摆动。
缺点:
1. DBScan不能很好反映高尺寸数据。
2. DBScan不能很好反映数据集变化的密度。
3.对于高维数据,点之间极为稀疏,密度就很难定义了。