聚类分析是一种方法。这种方法把东西分组。组内的东西很相似。组间的东西不相似。我们生活中就有聚类。超市货物分类是一种聚类。图书按主题摆放也是聚类。聚类分析就是数学上的分类。
很多人研究聚类分析。他们写了很多文章。这些文章是参考文献。参考文献帮助我们学习。我们看看这些文献。
很早以前就有人聚类。生物学家需要分类植物。动物学家需要分类动物。他们靠眼睛看。他们靠经验分。这种方法慢。这种方法可能错。后来有了计算机。计算机可以处理很多数据。人们开始用数学方法聚类。
一个重要方法是K均值聚类。麦奎因提出了这个方法。那是一九六七年。他的文章很出名。文章名字叫《用于多元观测分类和分析的一些方法》。文章提出了K均值算法。这个算法很简单。这个算法很有效。算法先随机选K个中心点。每个点算到中心的距离。距离近就归为一类。然后重新计算中心点。再重新分类。一直重复到中心点不变。这个方法很快。这个方法适合大数据。但这个方法要提前指定K。K不知道就难办。初始中心点影响结果。不同起点可能得出不同分组。
另一个常见方法是层次聚类。约翰逊一九六七年写了文章。文章叫《层次聚类方法》。层次聚类有两种方式。一种从下往上。一种从上往下。从下往上叫聚合式。开始每个点是一类。最近的两类合并。一直合并成一类。从上往下叫分裂式。开始所有点一类。分成两类。再继续分。直到每个点一类。这种方法不用指定K。这种方法给出树状图。树状图可以看到不同层次的分组。但这种方法计算量很大。大数据用起来慢。
还有基于密度的方法。埃斯特等人一九九六年提出了DBSCAN。文章叫《基于密度的带噪声空间聚类发现算法》。这个方法找密集区域。密集区域连成一片就是一类。稀疏地方是噪声。这个方法能发现任意形状的类。这个方法不用指定K。这个方法能处理噪声。但密度变化大的数据效果不好。边界点处理起来麻烦。
基于模型的方法也重要。模型假设数据来自某种分布。比如高斯混合模型。用期望最大化算法估计参数。模型确定后就可以聚类。这种方法有概率解释。这种方法比较严格。但模型假设不对结果就不好。
聚类效果需要评价。评价指标分两种。一种有外部标签。一种没有外部标签。有标签用兰德指数。有标签用互信息。这些指标比较聚类结果和真实标签。没有标签用轮廓系数。没有标签用戴维森堡丁指数。这些指标看类内紧不紧。这些指标看类间远不远。
聚类用在很多地方。市场研究用聚类。客户分成不同群组。每个群组喜好不同。公司可以定制产品。公司可以定制广告。生物信息学用聚类。基因表达数据分组。发现可能功能相似的基因。图像分割用聚类。相似像素分成一块。找出图片中的物体。文档处理用聚类。新闻文章按主题分组。方便人们浏览阅读。
聚类面临一些问题。高维数据不好聚类。维度太高距离难算。所有点都显得差不多。这叫维度灾难。解决方法有降维。降维后用聚类。不同尺度影响结果。变量单位不同。大数字会主导距离。需要提前标准化数据。数据缺失也麻烦。有些记录缺一些值。处理缺失需要技巧。
选择方法要看数据。数据球形分布用K均值。数据流形分布用谱聚类。数据密度不均用DBSCAN。数据有层次结构用层次聚类。没有最好的方法。只有合适的方法。
最近的研究方向很多。一个方向是处理大数据。数据太大内存放不下。需要在线聚类算法。数据流不断过来。需要增量聚类算法。另一个方向是深度学习。用神经网络学特征。用特征再做聚类。还有一个方向是鲁棒性。数据有错误。数据有噪声。算法要稳定。算法要可靠。
参考文献可以在图书馆找到。网上数据库也能找到。比如知网。比如谷歌学术。搜索“聚类分析”出现很多文章。读文章要看作者。看发表时间。看期刊会议。好期刊文章质量高。经典文章引用次数多。
学习聚类要动手实践。理论看懂后写代码试试。用Python语言。用R语言。都有现成的聚类函数。自己调参数。自己看结果。用真实数据试一试。比如鸢尾花数据集。比如葡萄酒数据集。慢慢就明白了。
聚类分析是工具。工具帮我们认识数据。数据背后有规律。规律帮我们做决定。参考文献记录前人智慧。我们站在前人肩膀上。我们看得更远。我们做得更好。