分类和聚类——1.从鸢尾花数据集与KNN说起

预计阅读时间:15min

这是一个全新的系列——机器学习系列。鉴于我的研究方向和兴趣,我打算在这个系列中,从简到难系统地回顾各类机器学习方法,包括最优化,监督学习与无监督学习,神经网络,强化学习,迁移学习等内容。对于一些重大的AI成就或者有趣的AI应用,也可能会做些介绍和解读。我会尽量做成一个简单易懂,直观有趣的系列,也希望我和其他对机器学习感兴趣的小伙伴们在这个系列中有所收获吧!

◆◆◆◆◆

说到分类和聚类,那就不得不提鸢尾花卉数据集(Iris),Iris数据集是常用的分类实验数据集,由Fisher于1936收集整理。鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。这四个属性分别是花萼长度,花萼宽度,花瓣长度以及花瓣宽度。通过这四种属性,预测鸢尾花卉属于山鸢尾(Setosa),变色鸢尾(Versicolour),维吉尼亚鸢尾(Virginica)三个种类中的哪一类,便是一个典型的分类/聚类问题。

◆◆◆◆◆

对数据集有一定的认识了,我们来看看分类和聚类:分类和聚类是常见的机器学习任务,他们的区别主要在于分类(classification)是有监督的,而聚类(clustering)是无监督的。有监督学习是指学习的训练数据有带有标签,标签指示了数据的真实类别。而无监督学习的数据没有标签,需要通过聚类算法将相似的数据分为一类。今天我们了解一种经典分类方法——K-邻近算法(k-nearest neighbors)。

KNN算法的思路非常简单易懂:

准备一个有标签训练集,已包含类别信息;

对于一个需要进行分类的目标样本,计算它到其他样本点的欧几里得距离

将目标样本的类别设定为到该目标样本点欧几里得距离最近的k个训练集样本点中多数样本的类别

这样,就完成了对新样本的分类任务。

◆◆◆◆◆

KNN算法原理简单易于实现,不想造轮子的话也有很多现成的python库实现,以下采用sklearn库演示对IRIS数据集的KNN分类,首先加载所需的库和数据集:

我们先来看看Iris数据集的统计特性:

得到三个品种的四种属性的平均值:

可以看出山鸢尾和其他两个品种的鸢尾花相差较大,而变色鸢尾和维吉尼亚鸢尾各项数据较为接近。我们把鸢尾花的四种属性两两组合,画图直观的看看三种鸢尾花的异同。进行数据可视化:

在图中,可以更清晰的发现山鸢尾的属性值和另外两个品种相差较大,较为便于区分出来。变色鸢尾和维吉尼亚鸢尾的各项数据也在一定程度上有些差异,但差异不大并有一定的混叠。

采用留出法将数据分割为训练数据和测试数据,测试数据占30%,并采用KNN对测试数据进行分类并打印结果,其中KNeighborsClassifier() 的默认参数 n_neighbors=5,即根据最近的五个样本点来决定目标样本的类别:

45个测试样本的真实品种如下

(0、1、2分别代表Setosa、Versicolour、Virginica)(左右滑动查看)

KNN预测品种如下:(左右滑动查看)

有2个错误预测(标红),其他预测均准确。预测结果可视化:

圆点颜色代表样本的真实类别,而圆点上的X的颜色代表预测类别,可以看到预测错误的样本有两个,位置都在变色鸢尾和维吉尼亚鸢尾样本交界附近。

◆◆◆◆◆

到此,对鸢尾花数据集的KNN分类就实现了。到这里,我们机器学习系列就算是开始了,小伙伴们有神马想法的话,欢迎在下方留言~~

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190103G1FK3X00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券