来源:原始 Jupyter Notebook。内容已转换为网页阅读格式;下载原文件。
聚类算法非常多,更新也非常快,这是因为聚类不存在客观标准,给定数据集,总能从某个角度找到以往算法未覆盖的某种标准从而设计出新算法,相对其他机器学习算法而言,聚类的知识还不够系统化。
通过聚类得到的类或簇,本质是样本的子集,如果一个聚类方法假定一个样本只属于一个类,那么该方法称为 硬聚类(hard clustering),如果一个样本可以属于多个类,则称为 软聚类(soft clustering)。
周志华老师的《机器学习》将聚类算法分为三大类:原型聚类(prototype-based clustering)、密度聚类(density-based clustering)和层次聚类(hierarchical clustering)。
- 原型聚类假设聚类结构能通过一组原型刻画,它首先对原型进行初始化,然后对原型进行迭代更新求解,其代表算法有 k 均值算法(k-means),学习向量量化算法(learning vector quantization,简称 LVQ),高斯混合聚类算法(mixture-of-Gaussian)。
- 密度聚类假设聚类结构能通过样本分布的紧密程度来确定,通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果,代表算法为 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)。
- 层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构,数据集的划分可采用自底向上的聚合策略,比如 AGNES算法(AGglomerative NESting),也可以采用自顶向下的分拆策略,比如 DIANA算法(DIvisive ANAlysis)。AGNES 和 DIANA 都不能对已合并或已分拆的聚类簇进行回溯调整,BIRCH、ROCK 等算法对此进行了改进。