python代码实现kmeans对鸢尾花聚类

导入第三方库和模型

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

2、创建画图函数

def draw_result(train_x, labels, cents, title):
    n_clusters = np.unique(labels).shape[0]#获取类别个数
    color = ["red", "orange", "yellow"]
    plt.figure()#创建一个新的图形窗口并开始绘图
    plt.title(title)
    for i in range(n_clusters):#range(3)=range(0,3):0,1,2
        current_data = train_x[labels == i]#把标签一致得所有样本点全拿出来
        plt.scatter(current_data[:, 0], current_data[:,1], c=color[i])#只显示鸢尾花第一个指标和第二个指标的值
        plt.scatter(cents[i, 0], cents[i, 1], c="blue", marker="*", s=100)#显示中心的的样本
    return plt
""" 画出聚类后的图像
labels: 聚类后的label, 从0开始的数字
cents: 质心坐标
n_cluster: 聚类后簇的数量
color: 每一簇的颜色
"""

3、主函数调用kmeans

if __name__ == '__main__':
    iris = datasets.load_iris()#加载鸢尾花数据集
    iris_x = iris.data#数据部分,不带标签
    clf = KMeans(n_clusters=3, max_iter=10,n_init=10, init="k-means++",
    algorithm="full", tol=1e-4,n_jobs= -1,random_state=1)#创建聚类模型
    clf.fit(iris_x)#把样本150数据全部应用于聚类函数
    print("SSE = {0}".format(clf.inertia_))
    #inertia_ 属性表示聚类效果的评估指标,也称为簇内离差平方和(within-cluster sum of squares, WCSS)。它表示每个样本点到其所属簇的质心的距离的总和,该值越小表示样本点越接近于自己的簇中心,聚类效果越好。
    draw_result(iris_x, clf.labels_, clf.cluster_centers_, "kmeans").show()#plt.show() 显示图形
    '''
    iris_x:样本数据
    clf.labels_聚类聚出来的标签
    clf.cluster_centers_聚类出来的中心点
    "kmeans" 画图的标题
    ''' 

在这里插入图片描述

4、算法优缺点

优点

简洁明了,计算复杂度低。 K-means 的原理非常容易理解,整个计算过程与数学推理也不是很困 难。
收敛速度较快。通常经过几个轮次的迭代之后就可以获得还不错的效果。

缺点

结果不稳定。 由于初始值随机设定,以及数据的分布情况,每次学习的结果往往会有一些差异。 无法解决样本不均衡的问题。
对于类别数据量差距较大的情况无法进行判断。 容易收敛到局部最优解。 在局部最优解的时候,迭代无法引起中心点的变化,迭代将结束。
受噪声影响较大。 如果存在一些噪声数据,会影响均值的计算,进而引起聚类的效果偏差。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python可以使用scikit-learn库来实现kmeans聚类鸢尾花。以下是一个简单的代码示例: ```python from sklearn.cluster import KMeans from sklearn.datasets import load_iris # 加载鸢尾花数据集 iris = load_iris() # 创建KMeans模型并拟合数据 kmeans = KMeans(n_clusters=3) kmeans.fit(iris.data) # 输出聚类结果 print(kmeans.labels_) ``` 在这个例子中,我们使用了scikit-learn库中的KMeans类来创建一个KMeans模型,并使用鸢尾花数据集进行拟合。我们将聚类数目设置为3,因为鸢尾花数据集中有3种不同的鸢尾花。最后,我们输出了聚类结果,即每个样本所属的聚类标签。 ### 回答2: K-means聚类是最常见的聚类算法之一,其主要思想是将数据集分成K个簇,使得簇内部数据点的相似度高于簇间数据点的相似度,达到最小化目标函数的效果。在这篇文章中,我们将使用Python实现K-means聚类算法,以聚类鸢尾花数据集为例。 步骤1:导入库 首先,我们需要导入一些必要的库包,包括numpy、pandas、matplotlib以及sklearn。 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans 步骤2:读取数据集 在此步骤中,我们需要使用pandas库读取鸢尾花数据集鸢尾花数据集包含150个样本,其中每个样本包含4个特征(sepal length, sepal width, petal length, petal width)。我们将其保存在名为“iris”的DataFrame中,并展示前5个样本。 iris = pd.read_csv('iris.csv') print(iris.head()) 步骤3:计算簇的数量 K-means算法中最重要的一个参数就是簇的数量,也就是K的值。在此步骤中,我们将使用手肘法来确定K的值。手肘法会计算每个点到其所属簇的质心的距离平方和(SSE),并将其绘制成一个折线图,我们会选择其中一个拐点作为K的值。我们可以使用以下代码实现。 sse = [] for k in range(1, 11): kmeans = KMeans(n_clusters=k, max_iter=1000) kmeans.fit(iris.iloc[:, 0:4]) sse.append(kmeans.inertia_) plt.plot(range(1, 11), sse) plt.title('Elbow Method') plt.xlabel('Number of clusters') plt.ylabel('SSE') plt.show() 根据上图,我们可以看到在K=3时出现了“手肘”,这意味着我们应该选择K=3。 步骤4:聚类 现在我们已经确定了簇的数量为3,使用sklearn中的KMeans类我们可以实现K-means聚类。以下代码演示了如何训练模型并预测簇标签。 kmeans = KMeans(n_clusters=3, max_iter=1000) kmeans.fit(iris.iloc[:, 0:4]) pred_cluster = kmeans.predict(iris.iloc[:, 0:4]) iris['Cluster'] = pred_cluster print(iris.head()) 步骤5:可视化结果 我们可以使用matplotlib包来可视化聚类结果。在此处,我们按照原始数据集中每个样本的两个特征(sepal length和petal length)绘制了K-means聚类后得到的簇。通过不同的颜色来表示不同的簇。以下是可视化结果的代码: plt.scatter(iris.loc[iris['Cluster']==0, 'sepal length'], iris.loc[iris['Cluster']==0, 'petal length'], c='red', label='Cluster 0') plt.scatter(iris.loc[iris['Cluster']==1, 'sepal length'], iris.loc[iris['Cluster']==1, 'petal length'], c='blue', label='Cluster 1') plt.scatter(iris.loc[iris['Cluster']==2, 'sepal length'], iris.loc[iris['Cluster']==2, 'petal length'], c='green', label='Cluster 2') plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 2], c='black', marker='*', label='Centroids') plt.title('K-means Clustering') plt.xlabel('sepal length') plt.ylabel('petal length') plt.legend() plt.show() 我们可以看到,聚类结果大致可分为三类,其中每一类被不同的颜色所代表,而模型找到的质心用星号表示,每个类别与其所属质心之间的距离均较小。 ### 回答3: 鸢尾花数据集是一个经典的模式识别数据集,由三种不同品种的鸢尾花(Setosa、Versicolor、Virginica)组成,每个品种有50个样本,鸢尾花数据集一共包含了150个样本。kmeans聚类是一种无监督的学习算法,它将数据集划分为k个不同的簇,每个簇内的样本相似性高,而不同簇之间的相似性较小。在本文中,我们将使用Python编程语言实现kmeans聚类算法,对鸢尾花数据集进行聚类。 首先,我们需要导入所需的Python库: ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import load_iris ``` 接下来,我们加载鸢尾花数据集并转换为pandas数据框: ```python iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) ``` 然后,我们使用KMeans算法进行聚类: ```python kmeans = KMeans(n_clusters=3, random_state=0) kmeans.fit(df) ``` 这里我们将鸢尾花数据集分为3个簇,随机选择初始中心点。 最后,我们可以将结果可视化: ```python plt.figure(figsize=(10, 7)) plt.scatter(df['sepal length (cm)'], df['petal length (cm)'], c=kmeans.labels_) plt.xlabel('Sepal Length (cm)') plt.ylabel('Petal Length (cm)') plt.show() ``` 最终的结果如下图所示: ![image-20210618141801423](https://cdn.jsdelivr.net/gh/17955362230/PicBed/images/202106181418061.png) 我们可以看到,使用kmeans聚类算法的结果非常好,它能够将数据集的三个品种分为不同的簇。这对于进一步的数据分析和模型训练非常有帮助。 总之,Python是一种非常强大和灵活的编程语言,可以用于实现各种机器学习算法。在本文中,我们演示了如何使用Python实现kmeans聚类算法并应用于鸢尾花数据集。如果您还需要了解更多关于机器学习和Python编程的知识,请继续关注我们的文章。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值