在数据科学领域,聚类分析是一种常用的无监督学习方法,用于将数据集中的样本划分为若干个相似的组。层次聚类(Hierarchical Clustering)是其中一种方法,与K均值聚类(K-Means Clustering)等其他聚类方法相比,层次聚类不需要预先指定聚类的数量,而是通过构建一个层次结构来展示数据点之间的关系。本文将详细介绍层次聚类的基本概念、方法,并以Python代码示例展示如何对商场客户数据进行分析和客户细分。
层次聚类分析中有几个重要的概念需要了解,包括链接方法(Linkage Methods)和距离计算(Distance Calculation)。链接方法决定了如何计算两个聚类之间的距离,常见的链接方法包括单链接(Single Linkage)、平均链接(Average Linkage)、完全链接(Complete Linkage)等。距离计算则涉及到如何度量数据点之间的相似性,常用的距离度量包括欧几里得距离(Euclidean Distance)和曼哈顿距离(City Block Distance)等。
在Python中,可以使用scipy库中的层次聚类函数来实现这一分析。以下是一个简单的代码示例,展示了如何使用层次聚类对商场客户数据进行分析。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.cluster import AgglomerativeClustering
# 加载数据集
dataset = pd.read_csv('Mall_Customers.csv')
X = dataset.iloc[:, [3, 4]].values
# 构建层次聚类模型
model = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
model.fit(X)
# 绘制树状图
plt.figure(figsize=(10, 7))
dendrogram(linkage(X, method='ward'))
plt.title('层次聚类树状图')
plt.xlabel('客户')
plt.ylabel('欧几里得距离')
plt.show()
在上述代码中,首先加载了商场客户数据集,然后使用AgglomerativeClustering类构建了一个层次聚类模型,并指定了聚类的数量为5。接着,使用dendrogram函数绘制了树状图,以可视化数据点之间的层次关系。
层次聚类的结果可以通过树状图进行可视化,树状图展示了数据点之间的层次关系和距离。通过观察树状图,可以确定最佳的聚类数量。例如,如果希望找到5个聚类,可以观察树状图中的垂直距离,找到最长的垂直距离,而不需要跨越任何水平线的位置,这通常对应于最佳的聚类数量。
# 绘制聚类结果
plt.scatter(X[y_hc == 0, 0], X[y_hc == 0, 1], s=100, c='red', label='聚类1')
plt.scatter(X[y_hc == 1, 0], X[y_hc == 1, 1], s=100, c='blue', label='聚类2')
plt.scatter(X[y_hc == 2, 0], X[y_hc == 2, 1], s=100, c='green', label='聚类3')
plt.scatter(X[y_hc == 3, 0], X[y_hc == 3, 1], s=100, c='cyan', label='聚类4')
plt.scatter(X[y_hc == 4, 0], X[y_hc == 4, 1], s=100, c='magenta', label='聚类5')
plt.title('客户聚类结果(层次聚类模型)')
plt.xlabel('年收入(千美元)')
plt.ylabel('消费评分(1-100)')
plt.legend()
plt.show()