前言
聚类是一种无监督学习问题。
它经常用来在输入数据的特征空间中寻找分组,例如基于顾客行为将消费者分组。
聚类算法有很多种,没有哪一种聚类算法适用于所有的问题。不过,有必要去探究多种聚类算法,以及每种算法的不同配置,这样在遇到问题时才能做出合适的选择。
在本文中,你将会了解如何选择合适的聚类算法,并且使用python和scikit-learn去实现它们。
目录
全文分为三大部分:
- 聚类问题
- 聚类算法
- 聚类算法的实例
3.1 安装相应的包
3.2 聚类数据集
3.3 近邻传播
3.4 凝聚聚类
3.5 BIRCH聚类
3.6 DBSCAN聚类
3.7 K-Means聚类
3.8 Mini-Batch K-Means聚类
3.9 Mean Shift聚类
3.10 OPTICS聚类
3.11 谱聚类
3.12 高斯混合模型
一 、聚类问题
聚类是无监督学习,可以自动发现数据中的自然分组。不像监督学习(预测模型等),聚类算法只解释输入数据,并且在特征空间中发现自然分组或者簇。
一个簇通常是特征空间中的一个集中密度区域,该范围(数据行)里的样本更加接近本簇,而不是其他簇。簇会有一个中心(质心),该中心可能是一个样本或者特征空间点,簇还会有一个边界或者范围。
聚类作为一种数据分析技术来帮助了解更多关于问题域的信息,即所谓的模式发现或知识发现。
举几个例子:
- 系统进化树可以认为是人工聚类分析的结果;
- 将正常数据与异常值分隔开是一种聚类问题;
- 根据自然行为将集群进行分组,称为市场细分;
聚类还能作为一种特征工程,样本被标记上簇标签,作为新的一组特征。
对已经识别的簇判定其准确性是非常主观的,尽管有很多量化的判定规则,但可能仍需要该领域的专家来确认。
聚类算法
聚类算法有很多种。
很多算法使用相似度或者距离测量在特征空间中的例子用来发现观测到的区域的粘稠度。同样的,在规整数据之前使用聚类算法是一种很好的做法。
“
中心对所有的聚类分析来说是一种在被聚类的个体之间相似度或者不相似度程度的概念。一个聚类的方法能够将对象根据相似度的概念分组。
”
— Page 502, The Elements of Statistical Learning: Data Mining, Inference, and Prediction, 2016.
一些聚类算法需要你去指定或者猜测这个簇的数量在数据中,然而其他的需要指定在案例中可能会被考虑为“closed" 或者”connected"观察点之间的最小距离。“
因此,聚类分析是一种迭代的过程,在这个过程中确定簇的主观评价反馈到算法参数方面的改变直到一个需要的或者合适的结果被得到。
scikit-learn库提供了很多不同的聚类方法去选择。
10种最流行的算法如下列所示:
近邻传播
凝聚聚类
BIRCH聚类
DBSCAN聚类
K-Means聚类
Mini-Batch K-Means聚类
Mean Shift聚类
OPTICS聚类
谱聚类
高斯混合模型
每个算法提供了不同的方式去发现来自不同组自然数据的挑战。
没有最好的聚类算法,在不使用受控的实验条件下也不太容易发现最好的聚类算法。
再这个教程中,我们会回顾使用10种种来自于scikit-learn库最流行的算法。
实例将会提供使用这些例子并且再你自己的数据上进行使用这些方法进行测试。</