聚类(Clustering) 是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。也即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。
一般过程:
- 数据准备:特征标准化和降维
- 特征选择:从最初的特征中选择最有效的特征,并将其存储在向量中
- 特征提取:通过对选择的特征进行转换形成新的突出特征
- 聚类:基于某种距离函数进行相似度度量,获取簇
- 聚类结果评估:分析聚类结果,如距离误差和(SSE)等
划分式聚类方法
k-means
流程:
- 创建k个点作为初始质心(随机选择)
- 当任意一个点的簇的分破欸结果发生改变时
- 对数据集中的每个数据点
- 对每个质心
- 计算质心和数据点之间的距离
- 将数据点分配到距离其最近的簇
- 对每个质心
- 对每个簇,计算簇中所有点的均值并且将均值作为质心
- 对数据集中的每个数据点
k-means++
流程:
- 随机选取一个数据点作为初始的聚类中心
- 当聚类中心数量小于k
- 计算每个数据点与当前已有聚类中心的最短距离,用D(x)表示,这个值越大,表示被选取为下一个聚类中心的概率越大,最后使用轮盘法选取下一个聚类中心
bi-kmeans
流程:
- 将所有的点视为一个簇
- 当簇的个数小于k时
- 对每一个簇
- 计算总误差
- 在给定的簇上面进行k-means聚类(k=2)
- 计算将该簇一分为二之后的总误差
- 选取使得误差最小的那个簇进行划分操作
- 对每一个簇
基于密度的方法
k-means算法对于凸性数据具有良好的效果,能够根据距离来将数据分为球状类的簇,但对于非凸形状的数据点,就无能为力了。
基于密度的聚类方法 需要定义两个参数和M,分别表示密度的领域半径和领域密度阈值。
DBSCAN
特点在于:
- 需要提前确定密度邻域半径和领域密度阈值
- 不需要提前设置聚类的个数
- 对初值选取敏感,对噪声不敏感
- 对密度不均的数据聚合效果不好
OPTICS
OPTICS(Ordering Points To Identify the Clustering Structure, OPTICS)是DBSCAN算法的一种有效扩展,主要解决对输入参数敏感的问题。即选取有限个邻域参数[公式] 进行聚类,这样就能得到不同邻域参数下的聚类结果。
层次化聚类算法
层次聚类算法 (hierarchical clustering) 是一种贪心算法,将数据集划分为一层一层的 clusters,后面一层生成的 clusters 基于前面一层的结果。层次聚类算法一般分为两类:
- Agglomerative 层次聚类:又称自底向上(bottom-up)的层次聚类,每一个对象最开始都是一个 cluster,每次按一定的准则将最相近的两个 cluster 合并生成一个新的 cluster,如此往复,直至最终所有的对象都属于一个 cluster。这里主要关注此类算法。
- Divisive 层次聚类: 又称自顶向下(top-down)的层次聚类,最开始所有的对象均属于一个 cluster,每次按一定的准则将某个 cluster 划分为多个 cluster,如此往复,直至每个对象均是一个 cluster。
核聚类
通过一个非线性映射,将输入空间中的数据点映射到高维特征空间中,并选取合适的Mercer核函数代替非线性映射的内积,在特征空间中进行聚类
优点:
- 普适的
- 通过非线性映射增加了数据点线性可分的概率,即能较好地分辨、提取并放大有用的特征,从而实现更为准确的聚类,算法收敛速度也较快。
支持向量聚类
支持向量聚类(Support Vector Clustering, SVC)属于核聚类的一种,它以支持向量机(Support Vector Machine, SVM)为工具进行聚类。
利用高斯核,将数据空间中的数据点映射到一个高维的特征空间中。再在特征空间中寻找一个能包围所有数据点象的半径最小的球,将这个球映回到数据空间,则得到了包含所有数据点的等值线集。这些等值线就是簇的边界。每一条闭合等值线包围的点属于同一个簇
两个阶段:
SVC训练阶段
- SVC训练阶段
- 包括高斯核宽度系数的确定、核矩阵的计算、Lagrange乘子的计算、支持向量的选取和高维特征空间中特征球半径的计算
- 聚类分配阶段
- 聚类分配阶段首先生成邻接矩阵,然后根据邻接矩阵进行聚类分配
优势:
- 能产生任意形状的簇边界;
- 能分析噪声数据点且能分离相互交叠的簇。这是许多聚类算法无法做到的
谱聚类
谱聚类想法的起源:如何在给定长度的线条下围出一个最大的面积,也可理解为,在给定面积下如何使用更短的线条
。如何在给定一张图,拿出“更短”的边来将其“更好”地切分。