开发者学堂课程【高校精品课-华东师范大学-人工智能基础:使用 K-Means 对 iris 聚类】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/920/detail/15586
使用 K-Means 对 iris 聚类
使用 KMeans 对鸢尾花数据集进行聚类
鸢尾花数据集是150朵花的测量记录。包括花瓣长度、宽度。花萼的长度、宽度以及花的类别。但是在这个过程中不需要类别标签,所以要想对鸢尾花数据集进行聚类。可以忽略花的类别标签。不过,标签对于算法性能的评价还是非常重要的。首先我们来对 iris 数据集进行聚类。
from sklearn import datasets
from sklearn.cluster import KMeans
iris =datasets.load_iris()
X=iris.data
y=iris.target#保留标签
clf=KMeans(n_clusters=3)
model=clf.fit(X)
predicted=model.predict(X)
#将预测值与标签真值进行对比
print(
‘
the predicted result:\n
’
,predicted)
print(
‘
the real answer:n
’
,y)
包含 sklearn 的 datasets 和 cluster 中的 KMeans 模块。使用 load_iris 导入 iris 数据集。X是 iris.data, y是iris.target 标签。初始化 KMeans。n_clusters=3,分成三类,接下来使用 fit, predict。预测出结果,把预测的predict 结果打印出来,并且把刚才保留的y标签打印出来,进行对比。首先查看程序的运行结果,预测结果为0、0、0、1、1、1、2、2、2等。
真值结果为0、0、0、1、1、1、2、2、2等。我再次运行。预测结果为1、1、1、2、2、2、0、0、0。真值不变。有时同学们会得到这样的一些结果。
与真值相比,预测结果看起来几乎全部都是判断错误。原因是这样的,由于聚类没有标签,所以聚类结果中的0、1、2与真值的0、1、2含义完全不同,聚类结果的0、1、2仅仅是类别编号,与它是哪种类别的花没有关系。这样看来,山鸢花(0类花)大部分只位于编号1的簇内
杂色鸢尾(1类花)大部分位于编号2的簇内。结果中可以看到有个别数据被误判成零。
维吉尼亚鸢尾花(2类花),大部分在结果中位于编号0的簇内。结果中也可以看到有个别数据。
被误判成2鸢尾花的标签虽然没有用作聚类依据。但对于算法性能的评价还是非常重要的。我们使用 KMeans对鸢尾花数据集进行聚类,聚类在很多方面发挥的作用。
比如小明,他双11购物就遇到了问题。小明在双11买了很多东西。可是,快递迟迟不来,小明太着急了,就跑去快递站查快递。到了快递站,他才发现那里的包裹堆成了山。
运货的司机们忙个不停,从城东跑到城西,从早跑到黑。安排,怎样才能让小明尽快拿到他日夜盼望的快递呢。