本文是对聚类分析较为简单的介绍,笔者自从大二开始接触数学建模,就使用过Q型聚类和R型聚类,但是一直到研一结束,都没有一个具体的认识,浅尝辄止,不敢言通。最近参加研究生数学建模比赛,又用到了R型聚类方法,才算是有了一丝了解。作为非计算机专业的学生,深感各种算法浩如烟海,想要全部掌握,非人力所能及。最近初入博士生涯,也渐觉面面俱到很难实现,术业有专攻比较现实。本文整理聚类分析方法的皮毛,作为一个小小的总结,以待后续的学习。
本文基本内容来源于司守奎《数学建模算法与应用》(第2版)和matlab官方网页,在其基础上进行个人的理解和改进。
聚类分析介绍 Cluster analysis
聚类分析是一种无监督的分类方法,即不预先指定类别。根据分类对象不同,聚类分析可以分为样本聚类(Q型)和变量聚类(R型)。样本聚类是针对观测样本进行分类,而变量聚类则是试图找出彼此独立且有代表性的自变量,而又不丢失大部分信息,变量聚类是一种降维的方法。
聚类分析方法在大数据的挖掘处理过程中起着重要的作用。目前主流的聚类分析方法有系统聚类法,快速聚类法,两步聚类法。这些聚类方法的特点和适用范围如下(不算全面):
(1)系统聚类法(分层聚类法)
基本思想:开始将每个样本自成一类;然后求两两之间的距离,将距离最近的两类合成一类;如此重复,直到所有样本都合为一类为止。
适用范围:既适用于样本聚类,也适用于变量聚类。并且距离分类准则和距离计算方法都有多种,可以依据具体情形选择。
(2)快速聚类法(K-均值聚类法)
基本思想:按照指定分类数目,选择个初始聚类中心;计算每个观测量(样本)到各个聚类中心的距离,按照就近原则将其分别分到放入各类中;重新计算聚类中心,继续以上步骤;满足停止条件时(如最大迭代次数等)则停止。
使用范围:要求用户给定分类数目,只适用于样本聚类(Q型),不适用于变量聚类(R型)。
(3)两步聚类法(智能聚类方法)
基本思想:先进行预聚类,然后再进行正式聚类。
适用范围:属于智能聚类方法,用于解决海量数据或者具有复杂类别结构的聚类分析问题。可以同时处理离散和连续变量,自动选择聚类数,可以处理超大样本量的数据。
聚类方法的选择 Choose Cluster Analysis Method
根据MATLAB官网的介绍Choose Cluster Analysis Method,目前其统计和机器学习工具箱提供了以下聚类方法:
- Hierarchical Clustering 层次聚类
- k-Means and k-Medoids Clustering k均值和k中位数聚类
- Density-Based Spatial Clustering of Applications with Noise (DBSCAN) 基于密度的聚类算法
- Gaussian Mixture Model 高斯混合模型
- k-Nearest Neighbor Search and Radius Search 最近邻检索
- Spectral Clustering 谱聚类
这些方法具有各自的特点,该网页对其进行了对比,对比的内容包括:
- Basis of Algorithm 算法基础
- Input to Algorithm 输入算法
- Requires Specified Number of Clusters 需要指定数量的集群
- Cluster Shapes Identified 识别出的团簇形状
- Useful for Outlier Detection 对异常值检测有用
上面的内容还是很有用的,我觉得很有价值,不过不想看了。
简单聚类的实现
官网也给出了以上聚类分析方法的应用实例,比如Cluster Analysis就是k均值聚类和层次聚类的示例。该示例使用聚类分析来检查观测值或对象的相似性和相异性。数据通常可以自然划分到观测值组或簇中,同一簇中对象的特性是相似的,不同簇中对象的特性是相异的。
不过我已经不想看了,今年2月份,因为疫情的原因在家学习,闲来无事萌生了撰写博客的想法,至今也写了一些,算是个人学习的简单总结。在整个过程中也收获了很多,也帮助到了一些同样在学习的同道中人。
傻瓜攻略系列一开始就是想把自己掌握的一些方法整理下来,以备不时之需,但是慢慢地,我就开始计划着,要把MATLAB机器学习和深度学习工具箱的方法都学会,我也的确这样做了,代价是七月份到现在的遍地开花没有结果。之前看过一篇文章,说读博士千万不要想着什么都会,爱因斯坦也说过,学的越多越认识到自己的无知。我现在有些认识到自己的狂妄和无知了。
韩愈说:“闻道有先后,术业有专攻。”此言不虚,有人本科就发论文,有人早早就掌握了一门技术。我现在需要做的,并不是掌握多少种看似高级实则无用的方法,而是通过实际的科研活动,在不断的尝试和失败中学习如何做科研,学习如何成为一名合格的博士研究生。所以这篇博客不是傻瓜攻略的结束,而是我遍地开花阶段的结束。下一步,我的博客写作不会停,但是希望我是因为学习到了一项技能而写博客,而不是为了写博客去学习什么。
聚类结果的展示
下面这个网页里的可视化程序看上去颇有几分高大上的感觉,推荐一波。哪位看官学会了记得分享给大家,哈哈
可视化多变量数据
笔者的其他博客,欢迎大家阅读学习,共同进步
傻瓜攻略(一)——MATLAB主成分分析代码及结果分析实例