智能高科网

python层次聚类莺尾花数据

来源:www.mchinamag.com   时间:2023-10-14 20:43   点击:184  编辑:admin   手机版

Python层次聚类莺尾花数据

层次聚类是一种常用的无监督学习算法,可以用于将数据集中的样本分组成一系列层次化的簇。在本文中,我们将使用Python来实现一个层次聚类算法,并将其应用于鸢尾花数据集。

1. 数据集介绍

鸢尾花数据集(Iris dataset)是机器学习中的经典数据集之一,它包含了三种不同的鸢尾花(Setosa、Versicolor和Virginica)的样本数据。每个样本数据包含了4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。该数据集一共包含150个样本数据。

2. 层次聚类算法

层次聚类算法是一种自下而上的聚类方法,它从每个样本数据作为一个初始簇开始,然后通过计算样本间的距离来合并簇,直到所有样本被聚为一个簇,或者达到预设的聚类个数。

层次聚类算法根据合并簇时的度量方法和合并策略的不同,可以分为凝聚(Agglomerative)和分裂(Divisive)两种类型。

在凝聚层次聚类中,我们首先将每个样本作为一个簇,然后计算两两样本间的距离,并选择距离最近的两个簇进行合并,直到达到预设的聚类个数。

在分裂层次聚类中,我们首先将所有样本合并为一个簇,然后逐渐将簇分裂成更小的簇,直到达到预设的聚类个数。

3. Python实现

下面我们将使用Python来实现一个凝聚层次聚类算法,并将其应用于鸢尾花数据集。

python import numpy as np from scipy.spatial.distance import pdist, squareform def hierarchical_clustering(data, num_clusters): num_samples = data.shape[0] distances = squareform(pdist(data)) clusters = [[i] for i in range(num_samples)] while len(clusters) > num_clusters: min_distance = np.inf merge_indices = None for i in range(len(clusters)): for j in range(i + 1, len(clusters)): distance = np.min(distances[np.ix_(clusters[i], clusters[j])]) if distance < min_distance: min_distance = distance merge_indices = (i, j) i, j = merge_indices clusters[i].extend(clusters[j]) del clusters[j] labels = np.zeros(num_samples, dtype=int) for cluster_id, cluster in enumerate(clusters): labels[cluster] = cluster_id return labels

上述代码首先使用numpy和scipy库导入所需模块。然后我们定义了一个层次聚类函数`hierarchical_clustering`,该函数接受数据和预设的聚类个数作为输入,并返回样本的聚类标签。

在函数内部,我们首先计算出样本间的距离矩阵。然后初始化每个样本为一个簇,并将每个簇保存在一个列表中。

接下来,我们使用一个循环来不断合并距离最近的两个簇,直到达到预设的聚类个数。合并簇的过程是通过计算两个簇中所有样本的最小距离来完成的。

最后,我们将聚类结果保存在一个标签数组中,并返回该数组作为函数的输出。

4. 聚类结果可视化

接下来,我们将使用`matplotlib`库来可视化鸢尾花数据集的聚类结果。

python import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.decomposition import PCA iris = load_iris() data = iris.data labels = hierarchical_clustering(data, num_clusters=3) pca = PCA(n_components=2) reduced_data = pca.fit_transform(data) plt.scatter(reduced_data[:, 0], reduced_data[:, 1], c=labels) plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') plt.title('Hierarchical Clustering of Iris Dataset') plt.show()

上述代码首先使用`sklearn`库导入所需模块,并加载鸢尾花数据集。然后我们调用之前实现的层次聚类函数来获取样本的聚类标签。

接下来,我们使用主成分分析(PCA)进行降维,将数据映射到二维空间。然后使用`matplotlib`库的`scatter`函数将样本点按照聚类标签进行可视化展示。

最后,我们设置横纵坐标的标签和标题,并调用`show`函数显示图像。

5. 总结

本文使用Python实现了一个凝聚层次聚类算法,并将其应用于鸢尾花数据集。通过对数据集进行聚类分析,我们可以更好地理解数据之间的关系和结构。

层次聚类算法是一种广泛应用于数据挖掘和机器学习任务的无监督学习算法。它具有简单易懂、可解释性强等优点,适用于处理各种类型的数据。

希望本文的内容对你有所帮助,如果你对层次聚类算法或鸢尾花数据集还有其他疑问,欢迎在下方留言讨论。

参考文献:

  • Scipy documentation: Hierarchical clustering
  • Sklearn documentation: Iris dataset
  • Matplotlib documentation: Scatter plot

原文链接:og.com/article/12345

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片