K-means聚类分析(鸢尾花)

一、实验原理

        k-means算法是最为经典的基于划分的聚簇方法,是十大经典数据挖掘算法之一。简单地说k-means就是在没有任何监督信号的情况下将数据分为k份的一种方法。k-means算法的基本思想为:在数据集中根据一定策略选择k个点作为每个簇的初始中心,然后观察剩余的数据,将数据划分到距离这k个点最近的簇中,也就是说将数据划分成k个簇完成一次划分,但形成的新簇并不一定是最好的划分,因此生成的新簇中,重新计算每个簇的中心点,然后在重新进行划分,直到每次划分的结果保持不变。

算法步骤如下:

1) 随机选择K个中心点

2) 把每个数据点分配到离它最近的中心点;

3) 重新计算每类中的点到该类中心点距离的平均值;

4) 分配每个数据到它最近的中心点;

5) 重复步骤3和4,直到所有的观测值不再被分配或是达到最大的迭代次数.

  • 5
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供使用Python进行k-means聚类分析鸢尾花的示例代码,如下所示: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import load_iris iris = load_iris() X = pd.DataFrame(iris.data, columns=iris.feature_names) # 选择需要聚类的特征 features = ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] X = X[features] # 使用手肘法选择最优的k值 wcss = [] for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0) kmeans.fit(X) wcss.append(kmeans.inertia_) plt.plot(range(1, 11), wcss) plt.title('Elbow Method') plt.xlabel('Number of clusters') plt.ylabel('WCSS') plt.show() # 根据手肘法选择k=3 kmeans = KMeans(n_clusters=3, init='k-means++', max_iter=300, n_init=10, random_state=0) pred_y = kmeans.fit_predict(X) # 可视化聚类结果 plt.scatter(X.iloc[pred_y == 0, 0], X.iloc[pred_y == 0, 1], s=100, c='red', label='Cluster 1') plt.scatter(X.iloc[pred_y == 1, 0], X.iloc[pred_y == 1, 1], s=100, c='blue', label='Cluster 2') plt.scatter(X.iloc[pred_y == 2, 0], X.iloc[pred_y == 2, 1], s=100, c='green', label='Cluster 3') plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='yellow', label='Centroids') plt.title('Clusters of Iris') plt.xlabel(X.columns[0]) plt.ylabel(X.columns[1]) plt.legend() plt.show() ``` 在上述代码中,我们首先导入需要的库和数据集,然后选择需要聚类的特征,使用手肘法选择最优的k值,并使用KMeans函数进行聚类分析。最后,我们将聚类结果可视化展示出来,其中每个颜色表示一个簇,黄色的点表示该簇的质心。从图中可以看出,通过聚类分析可以将不同种类的鸢尾花分成不同的簇,并且不同簇之间的差异较大。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值