站点图标 多伦多书苑

Python机器学习手册:从数据预处理到深度学习

19.5 使用层次合并聚类算法

问题描述

使用聚类的层次来给观察值分组。

解决方案

使用Agglomerative聚类:

讨论

Agglomerative聚类是一个强大的、灵活的层次聚类算法。在Agglomerative聚类中,所有观察值一开始都是一个独立的聚类。接着,满足一定条件的聚类被合并。不断重复这个合并过程,让聚类不断增长,直到达到某个临界点。在scikit-learn中, AgglomerativeClustering使用linkage参数来决定合并策略,使其可以最小化下面的值:

1.合并后的聚类的方差(ward)。

2.两个聚类之间观察值的平均距离(average)。

3.两个聚类之间观察值的最大距离(complete)。

还有两个参数也很有用。第一个是affinity,它决定linkage使用何种距离度量(比如minkowski或者euclidean等)。第二个是n_clusters,它设定了聚类算法试图寻找的聚类的数量。也就是说,直到有n_clusters个聚类时,聚类的合并才结束。

和我们讨论的其他聚类算法一样,可以用labels_方法来查看每个观察值所属的聚类:


[1]编者注:本章中“分组”“分类”“聚类”几个词含义是相同的,其实指的都是cluster。考虑到语言的流畅性和易读性,并未全部统一表述为“聚类”。

Author:

退出移动版