Python实现Iris数据集(鸢尾花卉数据集)kmeans聚类

 一,鸢尾花Iris数据集解析

 

 

二,绘制Iris数据集散点图,数据集已经给出具体类别

from sklearn import datasets
import matplotlib.pyplot as plt

#加载数据集,是一个字典类似Java中的map
lris_df = datasets.load_iris()


#挑选出前两个维度作为x轴和y轴,你也可以选择其他维度
x_axis = lris_df.data[:,0]
y_axis = lris_df.data[:,2]

#c指定点的颜色,当c赋值为数值时,会根据值的不同自动着色
plt.scatter(x_axis, y_axis, c=lris_df.target)
plt.show()

 

 三,Python使用kmeans聚类,并绘制新的聚类散点图。

from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

#加载数据集,是一个字典类似Java中的map
lris_df = datasets.load_iris()

#挑选出前两个维度作为x轴和y轴,你也可以选择其他维度
x_axis = lris_df.data[:,0]
y_axis = lris_df.data[:,2]


#这里已经知道了分3类,其他分类这里的参数需要调试
model = KMeans(n_clusters=3)

#训练模型
model.fit(lris_df.data)

#选取行标为100的那条数据,进行预测
prddicted_label= model.predict([[6.3, 3.3, 6, 2.5]])

#预测全部150条数据
all_predictions = model.predict(lris_df.data)

#打印出来对150条数据的聚类散点图
plt.scatter(x_axis, y_axis, c=all_predictions)
plt.show()

 

四,也可以聚成两类:

#将类别参数改成2
model = KMeans(n_clusters=2)

 

 五,kmeans算法流程

      1)随机选取k个点作为种子点(这k个点不一定属于数据集,k个点就代表有k类)

      2)分别计算每个数据点到k个种子点的距离,离哪个种子点最近,就属于哪类

      3)重新计算k个种子点的坐标(简单常用的方法是求坐标值的平均值作为新的坐标值)

      4)重复2、3步,直到种子点坐标不变或者循环次数完成

è¿éåå¾çæè¿°

 六,kmeans的不足

 

    1)初始分类数目k值很难估计,不确定应该分成多少类才最合适(ISODATA算法通过类的自动合并和分裂,得到较为合理的类型数目k)(meanshift也可以不用提前知道分多少类别,参考博文:https://blog.csdn.net/u010916338/article/details/86495308

    2)不同的随机种子会得到完全不同的结果(K-Means++算法可以用来解决这个问题,其可以有效地选择初始点)

  • 33
    点赞
  • 363
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: K-means聚类算法是一种无监督学习算法,常用于数据聚类分析。Python中可以使用scikit-learn库实现K-means聚类算法。下面是使用Python实现鸢尾花数据集的K-means聚类算法的示例代码: ```python from sklearn.cluster import KMeans from sklearn.datasets import load_iris # 加载鸢尾花数据集 iris = load_iris() X = iris.data # 构建K-means模型 kmeans = KMeans(n_clusters=3, random_state=0) # 训练模型 kmeans.fit(X) # 输出聚类结果 print(kmeans.labels_) ``` 以上代码中,首先使用`load_iris()`函数加载鸢尾花数据集,然后使用`KMeans()`函数构建K-means模型,指定聚类数为3。接着使用`fit()`函数训练模型,并使用`labels_`属性输出聚类结果。 注意:以上代码仅为示例,实际应用中需要根据具体情况进行参数调整和模型优化。 ### 回答2: kmeans聚类算法是机器学习中经典的算法之一,其原理是将数据集进行划分,划分成不同的类别,每个类别中的数据点都具有相似的特征。在kmeans算法中,我们需要给定k个聚类中心,然后根据数据聚类中心的距离,将其分配到相应的聚类中心所代表的类别中。算法会不断迭代更新聚类中心,直至聚类中心不发生变化或达到最大迭代次数为止。本文将介绍如何使用Python实现kmeans算法,并以鸢尾花数据集为例进行演示。 鸢尾花数据集是一个经典的分类问题,由R.A. Fisher在1936年介绍,包含了三类不同种类的鸢尾花Iris setosa、Iris virginica、Iris versicolor。每种鸢尾花的萼片长度、萼片宽度、花瓣长度、花瓣宽度都被测量,因此可以通过这些特征来进行分类。 我们使用Python中的Scikit-learn库来实现kmeans算法,并对鸢尾花数据集进行聚类,操作步骤如下: 1. 导入所需的库,包括numpy,pandas和sklearn.cluster。 ```python import numpy as np import pandas as pd from sklearn.cluster import KMeans ``` 2. 加载数据集,可以从Scikit-learn库中直接加载鸢尾花数据集iris。我们将其存储为一个数据框,并查看前几行数据。 ```python from sklearn.datasets import load_iris iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) df.head() ``` 3. 根据kmeans算法,我们需要为数据集指定k值。在这个例子中,我们将k值设为3,以便与鸢尾花的三个类别对应。 ```python kmeans = KMeans(n_clusters=3) ``` 4. 将数据集传递给kmeans算法进行拟合。 ```python kmeans.fit(df) ``` 5. 输出聚类中心的坐标。 ```python kmeans.cluster_centers_ ``` 6. 输出每个数据点所属的类别。 ```python kmeans.labels_ ``` 通过以上步骤,我们成功地使用Python实现kmeans算法,并对鸢尾花数据集进行了聚类。通过输出每个数据点所属的类别,我们可以看到算法的分类结果。由于数据集已经被正确地标记为三个不同的类别,所以我们可以将算法得出的结果和真实结果进行比较。 在这个例子中,我们只使用了一种聚类算法,并且只针对鸢尾花数据集进行了演示。在实际应用中,我们需要根据数据集的特点选择不同的聚类算法,并根据问题来确定最合适的k值。 ### 回答3: Kmeans聚类算法是一种常见的无监督学习算法,在对未标注数据进行分类、群体分析、数据降维等方面具有广泛应用。这个算法的实现需要指定数据类别的个数,以及用于衡量每个数据点离其所属类别中心点的距离,通常采用欧式距离或余弦距离。在本次任务中,我们将介绍如何使用Python实现Kmeans聚类算法对鸢尾花数据集进行分类。 鸢尾花数据集是一个常用的分类和聚类算法数据集,包括三种鸢尾花:Setosa、Versicolour和Virginica,每种花分别有50个样本,总共有150个样本。每个样本记录有四个特征变量:花萼长度、花萼宽度、花瓣长度和花瓣宽度,我们可以使用这四个变量用于聚类分析。以下是实现Kmeans聚类算法的步骤: 1. 计算距离:使用欧式距离计算每个样本和指定类别中心点的距离。 2. 初始化类别中心点:随机初始化每组类别的中心点。 3. 执行聚类:将每个样本分配到距离最近的中心点组中。 4. 重新计算类别中心点:重新计算每组聚类的中心点。 5. 重复步骤3和4,直到类别中心点不再移动。 现在,我们使用Python语言根据以上步骤实现Kmeans聚类算法: import numpy as np from sklearn import datasets # 加载鸢尾花数据集 iris = datasets.load_iris() X = iris.data y = iris.target # 指定聚类数为3,随机初始化每个类别的中心点 K = 3 C = np.random.rand(K, X.shape[1]) # 定义两个向量之间的欧式距离 def distance(x1, x2): return np.sqrt(np.sum((x1 - x2)**2)) # 聚类 def kmeans(X, C): # 记录每个样本的所属类别 clusters = np.zeros(len(X)) # 初始化距离无限大 distance_to_centroid = np.ones(len(X)) * np.inf # 迭代至中心点不再移动 while True: for i, x in enumerate(X): # 计算距离 distances = [distance(x, c) for c in C] # 选取距离最近的类别 cluster = np.argmin(distances) # 更新聚类 clusters[i] = cluster distance_to_centroid[i] = distances[cluster] # 重新计算中心点 new_C = np.array([X[clusters == k].mean(axis=0) for k in range(K)]) # 最终停止条件 if np.allclose(new_C, C): break C = new_C return clusters # 运行聚类算法 clusters = kmeans(X, C) # 打印聚类结果 print(clusters) 输出结果为每个样本所属的类别:0、1、2。 通过以上实现,我们可以使用Python轻松地实现Kmeans聚类算法对鸢尾花数据集进行分类。当然,对于更复杂的数据集Kmeans聚类算法依旧是一个优秀的无监督学习算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值