一、算法思想
鸢尾花数据集:共收集了三类鸢尾花,即Setosa鸢尾花Versicolour鸢尾花和Virginica鸢尾花,每一类鸢尾花收集了50条样本记录,共计150条。数据集包括4个属性,四个属性的单位都是cm,属于数值变量,四个属性均不存在缺失值的情况,字段如下:sepal length(萼片长度)、sepal width(萼片宽度)、petal length(花瓣长度)、petal width (花瓣宽度)。
K-means算法:根据样本之间的距离或者说是相似性(亲疏性),把越相似、差异越小的样本聚成一(簇),最后形成多个簇,使同一个簇内部的样本想似度高,不同簇之间差异性高。
二、流程图
三、实验结果
四、源代码
from sklearn.datasets import load_iris
import pandas as pd
import matplotlib.pyplot as plt
iris =load_iris()
pd.DataFrame(data=iris.data,columns=iris.feature_names)
x= iris.data[:,:4]
#%%
from sklearn.cluster import KMeans
estimator = KMeans(n_clusters=3)#构造聚类器
estimator.fit(x)
label = estimator.labels_#获取聚类标签
x0 = x[label==0]
x1 = x[label==1]
x2 = x[label==2]
#%%
#二维
plt.scatter(x0[:, 0], x0[:, 1], c = "red", label='Setosa')
plt.scatter(x1[:, 0], x1[:, 1], c = "blue", label='Versicolour')
plt.scatter(x2[:, 0], x2[:, 1], c = "green", label='Virginica')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
plt.legend(loc=2)
plt.show()
#%%
#三维
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(1,figsize=(8,6))
ax = Axes3D(fig,elev=-150,azim=110)
ax.scatter(x0[:, 0], x0[:, 1],x0[:,2] ,c="red",label='Setosa')
ax.scatter(x1[:, 0], x1[:, 1],x1[:,2] , c="blue",label='Versicolour')
ax.scatter(x2[:, 0], x2[:, 1],x2[:,2] , c="green",label='Virginica')
ax.set_xlabel(iris.feature_names[0])
ax.w_xaxis.set_ticklabels([])
ax.set_ylabel(iris.feature_names[1])
ax.w_yaxis.set_ticklabels([])
ax.set_zlabel(iris.feature_names[2])
ax.w_zaxis.set_ticklabels([])
ax.legend(loc=2)
plt.show()
#%%
#四维
fig = plt.figure(1,figsize=(8,6))
ax = Axes3D(fig,elev=-150,azim=110)
x= iris.data[:,:1]
y=iris.data[:,1:2]
z=iris.data[:,2:3]
c=iris.data[:,3:4]
img= ax.scatter(x,y,z,c=c,cmap=plt.hot())