DIANA鸢尾花聚类可视化python代码

时间: 2023-07-22 22:21:09 浏览: 19
以下是使用Python和Scikit-learn库进行鸢尾花聚类可视化的代码: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.decomposition import PCA from sklearn.datasets import load_iris # 加载数据集 iris = load_iris() X = iris.data y = iris.target # 聚类 kmeans = KMeans(n_clusters=3, random_state=0).fit(X) y_kmeans = kmeans.predict(X) # PCA降维 pca = PCA(n_components=2) X_pca = pca.fit_transform(X) # 绘制散点图 plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_kmeans, cmap='viridis') centers = pca.transform(kmeans.cluster_centers_) plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5) plt.title('Iris Clustering Results') plt.xlabel('PCA Component 1') plt.ylabel('PCA Component 2') plt.show() ``` 代码将数据集加载到`X`和`y`变量中,使用KMeans聚类算法对数据进行聚类,然后使用PCA进行降维并将结果可视化。在可视化中,不同聚类被用不同的颜色表示,聚类中心被表示为黑色圆点。

相关推荐

为了更好地理解聚类结果,我们可以将聚类结果可视化出来。下面是对鸢尾花数据集进行 DIANA 聚类并可视化的 Python 代码: python import pandas as pd import numpy as np from scipy.spatial.distance import pdist, squareform import matplotlib.pyplot as plt # 读取数据 iris = pd.read_csv('iris.csv') # 提取特征列 X = iris.iloc[:, :-1].values # 计算距离矩阵 distances = pdist(X, metric='euclidean') # 将距离矩阵转化为方阵 sq_distances = squareform(distances) # 初始化聚类结果 clusters = [[i] for i in range(len(X))] # 迭代聚类过程 while len(clusters) > 1: # 计算各簇之间的距离 cluster_distances = [np.mean(sq_distances[clusters[i], :][:, clusters[j]]) for i in range(len(clusters)) for j in range(i+1, len(clusters))] # 找到距离最近的两个簇 min_index = np.argmin(cluster_distances) i, j = np.unravel_index(min_index, (len(clusters), len(clusters))) # 合并这两个簇 clusters[i] += clusters[j] del clusters[j] # 显示聚类结果 plt.figure(figsize=(10, 8)) colors = ['red', 'blue', 'green'] for i, cluster in enumerate(clusters): plt.scatter(X[cluster, 0], X[cluster, 1], c=colors[i], label='Cluster {}'.format(i+1)) plt.xlabel('Sepal Length') plt.ylabel('Sepal Width') plt.title('DIANA Clustering of Iris Dataset') plt.legend() plt.show() 这段代码与前面的代码类似,只是在聚类结果得到之后,我们使用 matplotlib 库将聚类结果可视化出来。具体地,我们用不同的颜色表示不同的簇,并在图例中标注了每个簇的编号。这里我们只使用了前两个特征(花萼长度和花萼宽度)进行可视化,因为只有两个特征可以直观地表示在二维空间中。 运行上述代码,可以得到以下聚类可视化结果: ![DIANA Clustering of Iris Dataset](https://i.imgur.com/kxJxJ8g.png) 从图中可以看出,DIANA 聚类算法将鸢尾花数据集分为了三个簇,其中蓝色簇(Cluster 2)包含了所有的 Setosa 鸢尾花,而红色簇(Cluster 1)和绿色簇(Cluster 3)则包含了各种 Versicolour 和 Virginica 鸢尾花。这表明 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) 图中的每个点代表一个样本,不同颜色的点代表不同的簇。通过可视化聚类结果,我们可以更直观地了解数据的聚类结构。
好的,我们可以使用DIANA(Divisive Analysis Clustering)算法来实现对鸢尾花数据集的聚类,并可视化聚类结果。首先,我们需要导入必要的库和数据集: python import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_iris iris = load_iris() X = iris.data 然后,我们可以定义一个DIANA函数,该函数将输入数据集、聚类数和最大迭代次数,并返回一个包含每个样本所属聚类的标签的向量。 python from scipy.spatial.distance import pdist, squareform def diana(X, n_clusters, max_iter): # 初始化所有数据为同一个聚类 labels = np.zeros(X.shape[0]) # 对整个数据集进行聚类 centroids = np.mean(X, axis=0) # 设置当前聚类数为1 current_clusters = 1 # 循环迭代,将数据集分裂为n_clusters个聚类 while current_clusters < n_clusters: # 找到最大距离的聚类进行分裂 max_dist = -1 max_cluster_index = -1 for i in range(current_clusters): cluster_data = X[labels==i] # 计算聚类内部点的距离矩阵 dist_matrix = squareform(pdist(cluster_data)) # 计算距离矩阵中的最大距离 max_dist_in_cluster = np.max(dist_matrix) # 记录最大距离的聚类 if max_dist_in_cluster > max_dist: max_dist = max_dist_in_cluster max_cluster_index = i # 对最大距离的聚类进行K-Means聚类 cluster_data = X[labels==max_cluster_index] kmeans = KMeans(n_clusters=2, max_iter=max_iter) kmeans.fit(cluster_data) cluster_labels = kmeans.labels_ # 更新标签 labels[labels==max_cluster_index] = cluster_labels + current_clusters # 更新质心 centroids[max_cluster_index] = np.mean(cluster_data[cluster_labels==0], axis=0) centroids = np.vstack([centroids, np.mean(cluster_data[cluster_labels==1], axis=0)]) current_clusters += 1 return labels 接下来,我们可以使用该函数对鸢尾花数据集进行聚类,并将结果可视化。 python # 将数据集聚类为3个类别 labels = diana(X, 3, 100) # 绘制聚类结果 plt.scatter(X[:, 0], X[:, 1], c=labels) plt.xlabel('Sepal Length') plt.ylabel('Sepal Width') plt.title('Iris Clustering with DIANA') plt.show() 这将生成一个散点图,其中每个点的颜色表示其所属的聚类标签。 ![iris_diana](https://user-images.githubusercontent.com/57250843/135742192-8b3f3a8d-7e60-4a8b-a9f0-7e8e7b5f7d75.png) 这就是使用DIANA算法实现对鸢尾花数据集的聚类并可视化的过程。希望这可以帮助你解决问题。

最新推荐

基于单片机温度控制系统设计--大学毕业论文.doc

基于单片机温度控制系统设计--大学毕业论文.doc

"REGISTOR:SSD内部非结构化数据处理平台"

REGISTOR:SSD存储裴舒怡,杨静,杨青,罗德岛大学,深圳市大普微电子有限公司。公司本文介绍了一个用于在存储器内部进行规则表达的平台REGISTOR。Registor的主要思想是在存储大型数据集的存储中加速正则表达式(regex)搜索,消除I/O瓶颈问题。在闪存SSD内部设计并增强了一个用于regex搜索的特殊硬件引擎,该引擎在从NAND闪存到主机的数据传输期间动态处理数据为了使regex搜索的速度与现代SSD的内部总线速度相匹配,在Registor硬件中设计了一种深度流水线结构,该结构由文件语义提取器、匹配候选查找器、regex匹配单元(REMU)和结果组织器组成。此外,流水线的每个阶段使得可能使用最大等位性。为了使Registor易于被高级应用程序使用,我们在Linux中开发了一组API和库,允许Registor通过有效地将单独的数据块重组为文件来处理SSD中的文件Registor的工作原

如何使用Promise.all()方法?

Promise.all()方法可以将多个Promise实例包装成一个新的Promise实例,当所有的Promise实例都成功时,返回的是一个结果数组,当其中一个Promise实例失败时,返回的是该Promise实例的错误信息。使用Promise.all()方法可以方便地处理多个异步操作的结果。 以下是使用Promise.all()方法的示例代码: ```javascript const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = Promise.resolve(3)

android studio设置文档

android studio默认设置文档

海量3D模型的自适应传输

为了获得的目的图卢兹大学博士学位发布人:图卢兹国立理工学院(图卢兹INP)学科或专业:计算机与电信提交人和支持人:M. 托马斯·福吉奥尼2019年11月29日星期五标题:海量3D模型的自适应传输博士学校:图卢兹数学、计算机科学、电信(MITT)研究单位:图卢兹计算机科学研究所(IRIT)论文主任:M. 文森特·查维拉特M.阿克塞尔·卡里尔报告员:M. GWendal Simon,大西洋IMTSIDONIE CHRISTOPHE女士,国家地理研究所评审团成员:M. MAARTEN WIJNANTS,哈塞尔大学,校长M. AXEL CARLIER,图卢兹INP,成员M. GILLES GESQUIERE,里昂第二大学,成员Géraldine Morin女士,图卢兹INP,成员M. VINCENT CHARVILLAT,图卢兹INP,成员M. Wei Tsang Ooi,新加坡国立大学,研究员基于HTTP的动态自适应3D流媒体2019年11月29日星期五,图卢兹INP授予图卢兹大学博士学位,由ThomasForgione发表并答辩Gilles Gesquière�

MutableDenseMatrix' object has no attribute 'flatten'

根据提供的引用内容,可以看出这是一个关于Python中矩阵操作的问题。具体来说,'MutableDenseMatrix' object has no attribute 'flatten'的错误提示表明,矩阵对象没有名为'flatten'的属性。因此,我们需要使用其他方法来展平该矩阵对象。 以下是一种可能的解决方案: ```python # 导入必要的库 from sympy import Matrix # 创建一个矩阵对象 mat = Matrix([[1, 2], [3, 4]]) # 将矩阵对象转换为列表 mat_list = mat.tolist() # 将列表展平 flat

MySQL 75道面试题及答案.docx

MySQL 75道面试题及答案.docx

HAL多学科开放获取档案库的作用及代理重加密和认证委托的研究

0HAL编号:tel-038172580https://theses.hal.science/tel-038172580提交日期:2022年10月17日0HAL是一个多学科开放获取档案库,用于存储和传播科学研究文档,无论其是否发表。这些文档可以来自法国或国外的教育和研究机构,也可以来自公共或私人研究中心。0HAL多学科开放获取档案库旨在存储和传播法国或国外的教育和研究机构、公共或私人实验室发表或未发表的研究文档。0代理重加密和认证委托的贡献0Anass Sbai0引用此版本:0Anass Sbai. 代理重加密和认证委托的贡献. 离散数学[cs.DM]. 皮卡第朱尔大学, 2021. 法语. �NNT:2021AMIE0032�. �tel-03817258�0博士学位论文0专业“计算机科学”0提交给科技与健康学院博士学位学校0皮卡第朱尔大学0由0Anass SBAI0获得皮卡第朱尔大学博士学位0代理重加密和认证委托的贡献0于2021年7月5日,在评审人的意见后,面向考试委员会进行

已有一个已排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中

已有一个已排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中,可以使用二分查找的方法来提高查找效率。具体实现如下: ```python def insert_num(arr, num): left = 0 right = len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == num: arr.insert(mid, num) return arr elif arr[m

基于单片机的语音门铃设计毕业论文.doc

基于单片机的语音门铃设计毕业论文.doc