python实现层次聚类的方法

  • Post category:Python

Python 中实现层次聚类的方法有很多种,这里我们介绍一种基于scikit-learn库的层次聚类方法。

1. 层次聚类方法

层次聚类是将数据集分层次分成多个类别的一种聚类方法。遵循自底向上的聚合策略或自上而下的分裂策略。层次聚类方法通常使用基于距离的指标来度量不同类别之间的差异,然后将它们划分为不同的类别。分类树的层次结构可以以Dendrogram的形式可视化。

2. Scikit-learn库的层次聚类方法

Scikit-learn库提供了AgglomerativeClustering类,它是一种基于层次聚类的聚类算法。该类构建具有原始样本作为叶节点的树形结构,并通过定义距离度量和聚合规则来将叶节点组成类别。

2.1 代码示例

以下是一个简单的示例,演示如何使用AgglomerativeClustering算法来对Iris数据集进行层次聚类:

# 导入包
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
from sklearn import datasets

# 加载Iris数据集
iris = datasets.load_iris()
X = iris.data

# 构建模型
agg_clustering = AgglomerativeClustering(n_clusters=3, linkage='ward')
agg_clustering.fit(X)

# 显示分类结果
labels = agg_clustering.labels_
plt.scatter(X[:,0], X[:,1], c=labels)
plt.show()

在上面的示例中,我们使用Iris数据集,并构建了一个AgglomerativeClustering的模型。 我们设置了聚类数量为3,其距离度量方式为”ward”。

2.2 另一个示例

以下是另一个示例,演示如何在股市数据集上使用层次聚类方法:

# 导入包
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering

# 加载数据
data = pd.read_csv('data.csv', index_col=0)
X = data.values

# 构建模型
agg_clustering = AgglomerativeClustering(n_clusters=4, linkage='ward')
agg_clustering.fit(X)

# 显示股票分类结果
labels = agg_clustering.labels_
tickers = data.index.tolist()
for i in range(len(tickers)):
    print(tickers[i], labels[i])

# 显示聚类热力图
fig, ax = plt.subplots(figsize=(10, 10))
cax = ax.matshow(data.transpose(), interpolation='nearest', cmap='gnuplot')
ax.set_xticklabels(['']+tickers)
ax.set_yticklabels(['']+tickers)
plt.title('股票聚类热力图')
plt.colorbar(cax)
plt.show()

在上面的示例中,我们首先加载了一个股市数据集,然后构建了一个AgglomerativeClustering的模型。 我们设置了聚类数量为4,其距离度量方式为”ward”。最后使用热力图的方式对聚类结果进行可视化。