在本文中,我们将学习如何使用 Python 中的 Scipy 模块来实现层次聚类树状图。首先,让我们讨论一些相关的基础概念。
层次聚类需要创建具有从上到下预定顺序的聚类。它是一种无监督机器学习算法,用于对未标记的数据点进行聚类。
#### 如何执行?
- 在开始时,每个数据点都应被视为一个独立的簇。
- 将开始时的簇数量记为 K。
- 通过组合两个最近的数据点形成一个簇,从而得到 K-1 个簇。
- 通过组合两个距离最近的簇形成更多的簇,从而得到 K-2 个簇。
- 重复上述四个步骤,直到创建出一个单一的大簇。
- 一旦创建了簇,就使用树状图将其划分为多个簇。
#### 层次聚类的类型
1. 分裂聚类
分裂聚类,也称为自顶向下聚类方法,将所有观察结果分配给单个簇,然后将该簇划分为两个最不相似的簇。
2. 凝聚聚类
在凝聚或自底向上的聚类方法中,每个观察结果都被分配给其自己的簇。
#### 算法
1. 单链接
单链接聚类通常产生的簇是将个体顺序添加到单个组中。两个簇之间的距离定义为它们两个最近数据点之间的距离。
L(a , b) = min(D(xai , xbj))
2. 全链接
全链接聚类通常产生的簇是分离良好且紧凑的。两个簇之间的距离定义为每个簇中两个数据点之间的最长距离。
L(a , b) = max(D(xai , xbj))
3. 平均距离
简单平均算法将簇之间的距离定义为每个成员之间的平均距离,并进行加权,使得两个簇对最终结果具有相等的影响。
L(a , b) = Tab / ( Na * Nb)
**Tab**: 两个簇之间所有成对距离的总和。
**Na and Nb**: 分别为簇 a 和 b 的大小。
树状图是一种用于可视化簇之间关系的树状图。树状图中垂直线的距离越长,这些簇之间的距离就越远。解释树状图的关键在于专注于任何两个对象连接在一起的高度。
树状图示例:
假设我们有六个簇:P、Q、R、S、T 和 U。散点图上显示的这六个观察结果的聚类层次树状图如下:
!image根据给定散点图绘制的树状图
树状图的组成部分:
!image树状图的组成部分
- 树状图的分支被称为进化枝。这些进化枝根据它们的相似或不同程度进行排列。
- 树状图的每个进化枝都有一个或多个叶子。P、Q、R、S、T 和 U 是树状图的叶子:
- 三叶:P, Q, R
- 二叶:S, T
- 单叶:U
实现层次聚类和绘制树状图
为了实现层次聚类并绘制树状图,我们将使用以下几种方法:
- hierarchy 模块 提供了层次和凝聚聚类的函数。
- 为了执行层次聚类,我们使用 scipy.cluster.hierarchy.linkage 函数。该函数的参数包括:
> 语法: scipy.cluster.hierarchy.linkage(ndarray , method , metric , optimal_ordering)
- 为了将层次聚类绘制为树状图,我们使用 scipy.cluster.hierarchy.dendrogram 函数。
> 语法: scipy.cluster.hierarchy.dendrogram(Z , p , truncatemode , colorthreshold , getleaves , orientation , labels , countsort , distancesort , showleafcounts , noplot , nolabels , leaffontsize , leafrotation , leaflabelfunc , showcontracted , linkcolorfunc , ax , abovethreshold_color)
示例 1:标准树状图
Python
“
目录
Python program to plot the hierarchical
clustering dendrogram using SciPy
Import the python libraries
import numpy as np
from scipy.cluster import hierarchy
import matplotlib.pyplot as plt
Create an array
x = np