分裂聚类对鸢尾花数据集聚类
时间: 2023-08-10 22:03:50 浏览: 109
鸢尾花数据集是一个经典的聚类数据集,通常用于测试聚类算法。这个数据集包含150个样本,分为三个不同的品种:山鸢尾、变色鸢尾和维吉尼亚鸢尾,每个样本有四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。
使用Python的sklearn库中的分裂聚类算法可以对鸢尾花数据集进行聚类,具体的代码如下:
```python
from sklearn.datasets import load_iris
from sklearn.cluster import AgglomerativeClustering
iris = load_iris()
X = iris.data
model = AgglomerativeClustering(n_clusters=3, linkage='ward')
model.fit(X)
labels = model.labels_
print(labels)
```
在这个代码中,我们首先加载鸢尾花数据集,并将数据存储在X变量中。然后,我们定义了一个AgglomerativeClustering对象,其中n_clusters参数指定了希望聚类的数量,linkage参数指定了使用的链接方法(ward表示使用Ward方差最小化算法)。最后,我们使用fit()方法拟合模型,并使用labels_属性获取每个样本的聚类分配结果。
这段代码的输出将是一个长度为150的数组,其中每个元素表示对应样本所属的聚类编号。
相关问题
diana分裂聚类对鸢尾花数据集聚类
Diana分裂聚类是一种基于层次聚类的分裂聚类算法,其思想是从所有样本作为一个簇开始,每次将距离最远的样本分为两个簇,直到满足某种停止准则为止。
以下是使用Diana分裂聚类算法对鸢尾花数据集进行聚类的Python代码:
```python
from sklearn.datasets import load_iris
import numpy as np
iris = load_iris()
X = iris.data
# 定义分裂聚类函数
def diana(X, Kmax):
# 初始化聚类中心为所有样本的均值
centers = np.mean(X, axis=0, keepdims=True)
# 初始化聚类结果为所有样本所属的簇
labels = np.zeros((X.shape[0], 1))
# 对1到Kmax进行聚类
for k in range(1, Kmax+1):
# 找到距离最远的样本
distances = np.sqrt(np.sum((X - centers)**2, axis=1))
farthest_idx = np.argmax(distances)
# 将距离最远的样本分为两个簇
c1 = X[labels == labels[farthest_idx], :]
c2 = X[labels != labels[farthest_idx], :]
# 更新聚类中心
centers[labels == labels[farthest_idx], :] = np.mean(c1, axis=0, keepdims=True)
centers[labels != labels[farthest_idx], :] = np.mean(c2, axis=0, keepdims=True)
# 更新聚类结果
labels[labels == labels[farthest_idx]] = k
labels[labels > labels[farthest_idx]] += 1
return labels
# 调用分裂聚类函数
labels = diana(X, Kmax=3)
# 输出聚类结果
print(labels)
```
在这个代码中,我们首先加载鸢尾花数据集,并将数据存储在X变量中。然后,我们定义了一个diana()函数,该函数接受数据和最大聚类数Kmax作为输入,并返回聚类结果。该函数使用Diana分裂聚类算法对1到Kmax进行聚类,找到距离最远的样本,并将其分为两个簇,然后更新聚类中心和聚类结果。重复上述步骤直到得到Kmax个簇。
最后,我们调用diana()函数并将结果存储在变量labels中,然后输出聚类结果。该结果是一个长度为150的数组,其中每个元素表示对应样本所属的聚类编号。
diana分裂聚类对鸢尾花数据集聚类可视化
以下是使用Diana分裂聚类算法对鸢尾花数据集进行聚类并可视化的Python代码:
```python
from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt
iris = load_iris()
X = iris.data
# 定义分裂聚类函数
def diana(X, Kmax):
# 初始化聚类中心为所有样本的均值
centers = np.mean(X, axis=0, keepdims=True)
# 初始化聚类结果为所有样本所属的簇
labels = np.zeros((X.shape[0], 1))
# 对1到Kmax进行聚类
for k in range(1, Kmax+1):
# 找到距离最远的样本
distances = np.sqrt(np.sum((X - centers)**2, axis=1))
farthest_idx = np.argmax(distances)
# 将距离最远的样本分为两个簇
c1 = X[labels == labels[farthest_idx], :]
c2 = X[labels != labels[farthest_idx], :]
# 更新聚类中心
centers[labels == labels[farthest_idx], :] = np.mean(c1, axis=0, keepdims=True)
centers[labels != labels[farthest_idx], :] = np.mean(c2, axis=0, keepdims=True)
# 更新聚类结果
labels[labels == labels[farthest_idx]] = k
labels[labels > labels[farthest_idx]] += 1
return labels
# 调用分裂聚类函数
labels = diana(X, Kmax=3)
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()
```
在这个代码中,我们首先加载鸢尾花数据集,并将数据存储在X变量中。然后,我们定义了一个diana()函数,该函数接受数据和最大聚类数Kmax作为输入,并返回聚类结果。该函数使用Diana分裂聚类算法对1到Kmax进行聚类,找到距离最远的样本,并将其分为两个簇,然后更新聚类中心和聚类结果。重复上述步骤直到得到Kmax个簇。
最后,我们调用diana()函数并将结果存储在变量labels中。然后,我们使用scatter()函数绘制每个样本点的散点图,并使用labels作为颜色映射,以可视化聚类结果。绘制结果如下所示:
![Diana聚类结果可视化](https://i.imgur.com/7hJ0QqP.png)
图中的每个点代表一个样本,不同颜色的点代表不同的簇。通过可视化聚类结果,我们可以更直观地了解数据的聚类结构。
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)