聚类(Clustering)
是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。也即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。
主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法。
K-means算法
k-means是划分方法中较经典的聚类算法之一。由于该算法的效率高,所以在对大规模数据进行聚类时被广泛应用。
k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。
k-means算法的处理过程如下:
首先,随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心;
对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;
然后重新计算每个簇的平均值。
这个过程不断重复,直到准则函数收敛。通常,采用平方误差准则
其中E是数据库中所有对象的平方误差的总和,p是空间中的点,mi是簇Ci的平均值[9]。该目标函数使生成的簇尽可能紧凑独立,使用的距离度量是欧几里得距离,当然也可以用其他距离度量。
经典k-means
算法有以下几个特点:
需要提前确定值
对初始质心点敏感
对异常数据敏感
层次聚类
根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。
凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。
聚合聚类需要预先确定三个要素:
-
距离或相似度
可以是马氏距离、相关系数、cosine等。
-
合并规则
类间距离最小、类间距离可以是最短距离、最长距离、中心距离等。
-
停止条件
类的个数达到阈值(极端情况下类的个数为1)、类的直径超过阈值。
如果采用欧氏距离为样本之间距离;类间距离最小为合并规则,其中最短距离为类间距离;类的个数为1,为停止条件:
输入: n个样本组成的样本集合及样本之间的距离
输出:对样本集合的一个层次化聚类
- 计算n个样本俩俩之间的欧氏距离{dij}{dij},记作矩阵D=[dij]n×nD=[dij]n×n。
- 构造n个类,每个类只包含一个样本。
- 合并类间距离最小的两个类,其中最短距离为类间距离,构建一个新类
- 计算新类与当前各类的距离。若类的个数为1,终止计算,否则回到步(3)
聚合层次聚类算法的复杂度为O(n3m)O(n3m),其中m为样本维度,n是样本个数。
DBSCAN特点:
可以对任意形状的稠密数据集进行聚类;
对数据集中的异常点不敏感;
初始值的设置几乎不会影响聚类结果
如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差;
调参复杂,主要需要对距离阈值Eps和邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。
DBSCAN聚类
DBSCAN算法是一种基于密度的聚类算法,聚类的时候不需要预先指定簇的个数,最终簇的个数不确定。
DBSCAN算法将数据点分为三类:
1、核心点:在半径Eps内含有超过MinPts数目的点。
2、边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内的点。
3、噪音点:既不是核心点也不是边界点的点。
DBSCAN算法流程:
1、将所有点标记为核心点、边界点或噪声点;
2、删除噪声点;
3、为距离在Eps之内的所有核心点之间赋予一条边;
4、每组连通的核心点形成一个簇;
5、将每个边界点指派到一个与之关联的核心点的簇中(哪一个核心点的半径范围之内)。
DBSCAN
算法有以下几个特点:
需要提前确定和值
不需要提前设置聚类的个数
对初值选取敏感,对噪声不敏感
对密度不均的数据聚合效果不好