利用python内置K-Means聚类算法实现鸢尾花数据的聚类

在进去聚类情况分析前,我们需要为我们的IDLE安装sklearn库,scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口,可以让用户简单、高效地进行数据挖掘和数据分析。

python中安装sklearn机器学习库

pip install numpy
pip install scipy
pip install sklearn

如果安装过程中出现报错的话,就根据报错的信息来安装所需要的组件,最终的目的是为了能够成功的安装sklearn库。

K-Means聚类

然后下面我们来从sklearn库中引入K-Means聚类算法及导入鸢尾花数据集。

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

就这样就能够实现K-Means聚类算法的引入及鸢尾花数据集的引入,是不是很简单,很方面!

iris = load_iris()
X = iris.data[:] 

下面我们将引入的数据样式print出来看看。

......
 [6.7 3.3 5.7 2.5]
 [6.7 3.  5.2 2.3]
 [6.3 2.5 5.  1.9]
 [6.5 3.  5.2 2. ]
 [6.2 3.4 5.4 2.3]
 [5.9 3.  5.1 1.8]]
(150, 4)

所引入的鸢尾花数据的形式就如上述所示,共有150行4个特征数据。

然后我们用图像来展示下数据点的分布情况

#绘制数据分布图
plt.scatter(X[:, 0], X[:, 1], c = "red", marker='o', label='see')
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(loc=2)
plt.show()

这样就能够看到数据点的分布如下:

好了,下面我们来看下聚类情况,假设我们规定要聚的类别为3个,也就是设定K=3,则有

estimator = KMeans(n_clusters=3)#构造聚类器
estimator.fit(X)#聚类
label_pred = estimator.labels_ #获取聚类标签

这样我们同样用图像来输出最终的聚类情况如下;

输出图像的代码为:

#绘制k-means结果
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0[:, 1], c = "red", marker='o', label='label0')
plt.scatter(x1[:, 0], x1[:, 1], c = "green", marker='*', label='label1')
plt.scatter(x2[:, 0], x2[:, 1], c = "blue", marker='+', label='label2')
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(loc=2)
plt.show()

看到上面的聚类效果其实并不理想,这样我们选择鸢尾花的最后两个特征来看下效果:

首先修改数据为:

X = iris.data[:,2:] ##表示我们只取特征空间中的后两个维度

 聚类效果为:

从上述两种聚类效果来分析,能够看出当选取鸢尾花最后两个特征作为聚类数据时,聚类的效果更好。

这样我们给出完整的代码为:

#############K-means-鸢尾花聚类############
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
#from sklearn import datasets
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:] ##表示我们只取特征空间中的后两个维度
#绘制数据分布图
plt.scatter(X[:, 0], X[:, 1], c = "red", marker='o', label='see')
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(loc=2)
plt.show()


estimator = KMeans(n_clusters=3)#构造聚类器
estimator.fit(X)#聚类
label_pred = estimator.labels_ #获取聚类标签
#绘制k-means结果
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0[:, 1], c = "red", marker='o', label='label0')
plt.scatter(x1[:, 0], x1[:, 1], c = "green", marker='*', label='label1')
plt.scatter(x2[:, 0], x2[:, 1], c = "blue", marker='+', label='label2')
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.legend(loc=2)
plt.show()

 

发布了9 篇原创文章 · 获赞 18 · 访问量 7万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览