kmeans聚类算法python实现鸢尾花数据集_利用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()

标签:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值