层次聚类算法的优缺点解析 层次聚类算法解析( 三 )


这里,最小距离是3,因此我们将合并第1点和第2点:

层次聚类算法的优缺点解析 层次聚类算法解析

文章插图
层次聚类算法的优缺点解析 层次聚类算法解析

文章插图

让我们看一下更新的集群,并相应地更新邻近矩阵:
这里取了两个标记(7,10)的最大值来替换该集群的标记 。也可以取最小值或平均值,而不是最大值 。现在,我们将再次计算这些集群的邻近矩阵:
第3步: 我们将重复步骤2,直到只剩下一个集群 。
首先查看邻近矩阵中的最小距离,然后合并最近的一对集群 。重复这些步骤后,我们将获得如下所示的合并集群:
我们从5个集群开始,最后只有一个集群 。这就是聚合层次聚类的工作原理 。但问题仍然存在—我们如何决定集群的数量?让我们在下一节中介绍 。
如何选择层次聚类中的聚类数
准备好回答这个自从开始学习以来就一直存在的问题了吗?为了获得用于层次聚类的聚类数量,我们使用了一种叫做树图的令人敬畏的概念 。
树图是一种树状图,记录合并或分裂的序列 。
让我们回到师生示例 。每当合并两个聚类时,树图将记录这些聚类之间的距离并以图形表示 。我们来看看树状图是怎样的:

层次聚类算法的优缺点解析 层次聚类算法解析

文章插图
层次聚类算法的优缺点解析 层次聚类算法解析

文章插图

我们在x轴上有数据集的样本,在y轴上有距离 。每当合并两个集群时,我们将在这个树图中加入它们,并且连接的高度将是这些点之间的距离 。接下来我们来构建树图:
下面花点时间处理上面的图像 。我们首先合并样本1和2,这两个样本之间的距离为3(参考上一节中的第一个邻近矩阵) 。让我们在树图中绘制这个:

层次聚类算法的优缺点解析 层次聚类算法解析

文章插图
层次聚类算法的优缺点解析 层次聚类算法解析

文章插图

合并了样本1和2 。垂直线表示这些样本之间的距离 。同样,我们绘制了合并聚类的所有步骤,最后,我们得到了这样的树图:
我们可以清楚地看到层次聚类的步骤 。树形图中垂直线的距离越大,这些集群之间的距离就越大 。
现在,我们可以设置一个阈值距离并绘制一条水平线(通常,设置阈值使其截断最高的垂直线) 。我们将此阈值设置为12并绘制一条水平线:
集群的数量将是与使用阈值绘制的线相交的垂直线的数量 。在上面的例子中,由于红线与2条垂直线相交,我们将有2个簇 。一个集群将有一个样本(1,2,4),另一个集群将有一个样本(3,5) 。很简单,对吧?
这就是我们如何在层次聚类中使用树形图来确定聚类的数量 。在下一节中,我们将实现层次聚类,这将帮助您理解我们在本文中学到的所有概念 。
使用层次聚类解决批发商客户细分问题
是时候用Python弄脏我们的手了!
我们将解决批发商客户细分问题 。数据托管在UCI机器学习存储库中 。这个问题的目的是根据各种产品类别(如牛奶,杂货店,地区等)的年度支出来细分批发商的客户 。
让我们先探索数据然后应用层次聚类来划分客户群 。
首先导入所需的库:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
【层次聚类算法的优缺点解析 层次聚类算法解析】%matplotlib inline
加载数据并查看前几行:
data = https://www.0579wy.com/article/pd.read_csv(‘Wholesale customers data.csv’)
data.head()
有多种产品类别 – 生鲜,牛奶,杂货等 。这些值代表每个客户购买每种产品的单位数量 。我们的目标是从这些数据中创建可以将相似客户分组在一起的集群 。当然,我们将使用层次聚类来解决这个问题 。
但在应用层次聚类之前,我们必须对数据进行标准化,以使每个变量的衡量标准相同 。为什么这很重要?因为如果标准不同,模型可能会变得偏向具有更高等级的变量,如生鲜或牛奶(参见上表) 。
那么,让我们首先规范化数据并将所有变量带到相同的比例:
from sklearn.preprocessing import normalize
data_scaled = normalize(data)
data_scaled = pd.DataFrame(data_scaled, columns=data.columns)
data_scaled.head()
我们可以看到所有变量的规模几乎都相似 。首先绘制树图来帮助我们确定这个特定问题的聚类数量:
import scipy.cluster.hierarchy as shc

推荐阅读