Python实现Iris数据集(鸢尾花卉数据集)kmeans聚类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010916338/article/details/86487890

 一,鸢尾花Iris数据集解析

 

 

二,绘制Iris数据集散点图,数据集已经给出具体类别

from sklearn import datasets
import matplotlib.pyplot as plt

#加载数据集,是一个字典类似Java中的map
lris_df = datasets.load_iris()


#挑选出前两个维度作为x轴和y轴,你也可以选择其他维度
x_axis = lris_df.data[:,0]
y_axis = lris_df.data[:,2]

#c指定点的颜色,当c赋值为数值时,会根据值的不同自动着色
plt.scatter(x_axis, y_axis, c=lris_df.target)
plt.show()

 

 三,Python使用kmeans聚类,并绘制新的聚类散点图。

from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

#加载数据集,是一个字典类似Java中的map
lris_df = datasets.load_iris()

#挑选出前两个维度作为x轴和y轴,你也可以选择其他维度
x_axis = lris_df.data[:,0]
y_axis = lris_df.data[:,2]


#这里已经知道了分3类,其他分类这里的参数需要调试
model = KMeans(n_clusters=3)

#训练模型
model.fit(lris_df.data)

#选取行标为100的那条数据,进行预测
prddicted_label= model.predict([[6.3, 3.3, 6, 2.5]])

#预测全部150条数据
all_predictions = model.predict(lris_df.data)

#打印出来对150条数据的聚类散点图
plt.scatter(x_axis, y_axis, c=all_predictions)
plt.show()

四,也可以聚成两类:

#将类别参数改成2
model = KMeans(n_clusters=2)

 

 五,kmeans算法流程

      1)随机选取k个点作为种子点(这k个点不一定属于数据集,k个点就代表有k类)

      2)分别计算每个数据点到k个种子点的距离,离哪个种子点最近,就属于哪类

      3)重新计算k个种子点的坐标(简单常用的方法是求坐标值的平均值作为新的坐标值)

      4)重复2、3步,直到种子点坐标不变或者循环次数完成

è¿éåå¾çæè¿°

 六,kmeans的不足

 

    1)初始分类数目k值很难估计,不确定应该分成多少类才最合适(ISODATA算法通过类的自动合并和分裂,得到较为合理的类型数目k)

    2)不同的随机种子会得到完全不同的结果(K-Means++算法可以用来解决这个问题,其可以有效地选择初始点)

猜你喜欢

转载自blog.csdn.net/u010916338/article/details/86487890