在进去聚类情况分析前,我们需要为我们的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()