首页 分享 初识分类(鸢尾花卉数据集)

初识分类(鸢尾花卉数据集)

来源:花匠小妙招 时间:2025-02-17 15:05

注:本文用到的模块如Numpy,Scipy,matplotlib等都可以在 pythonlibs 里下载并使用pip安装,如果没有安装过这里有安装教程。

本文提供的代码基于windows的python2.x,数据和代码都可以在github上打包下载。

机器是否能够识别出图像中的花朵种类?从机器学习的角度来说,我们可以通过以下方式解决这个问题:先让机器学习一下每种花朵的样本数据,然后让它根据这些信息,对未标识出花朵种类的图像进行分类。这个过程就叫做分类(或者叫监督学习),这是一个已经研究了几十年的经典问题。

Iris数据集(Iris dataset,也称鸢尾花卉数据集)是源自20世纪30年代的经典数据集。它是最早应用统计分类的现代示例之一。

数据中包含有不同种类的Iris花朵的数据,这些种类可以通过它们的形态来识别。时至今日,我们已经可以通过基因签名(genomic signature)来识别这些分类。但在20世纪30年代,人们还不确定DNA是不是基因信息的载体。

测量的是每个花朵的以下四个属性:

花萼长度

花萼宽度

花瓣长度

花瓣宽度

一般来说,我们把数据中所有的测量结果都叫做特征。

此外,每个花朵所属的种类都已经标出。现在的问题是:如果看到这种植物的一个新花朵,我们能否通过它的四个特征来预测它的种类?

这就是监督学习或分类问题; 对于给定的带有类别标签的样本,我们要设计出一种规则,实现对其他样本的预测。这跟垃圾邮件分类问题是一样的:根据用户标出的垃圾邮件和非垃圾邮件样本,我们能否判定一个新来的信息是否是垃圾邮件?

在这个时候,Iris数据集可以很好的满足我们的需求。它的规模很小(只包含150个样本,每个样本有4个特征,共有3种分类),很容易可视化地显示出来并进行处理。

我们通过以下代码,对这四个特征进行两两组合(共6种组合)来展示两个特征之间的相关性。

figure1.py

from matplotlib import pyplot as plt from sklearn.datasets import load_iris import numpy as np data = load_iris() features = data['data'] feature_names = data['feature_names'] target = data['target'] pairs = [(0,1), (0,2), (0,3), (1,2), (1,3), (2,3)] for i,(p0,p1) in enumerate(pairs): plt.subplot(2,3,i+1) for t, marker, c in zip(xrange(3), '>ox', 'rgb'): plt.scatter(features[target == t, p0], features[target == t, p1], marker=marker, c=c) plt.xlabel(feature_names[p0]) plt.ylabel(feature_names[p1]) plt.xticks([]) plt.yticks([]) plt.savefig("01.png")

下图中的每一个子图都画出了所有数据点在其中两个维度上的映射。外面的那一组点(三角形)代表的是山鸢尾花(Iris Setosa),中间的(圆圈)代表的是变色鸢尾花(Iris Versicolor),用x标记的是维吉尼亚鸢尾花(Iris Virginica)。

构建第一个分类模型

如果我们的目标是区分这三种花朵的类型,根据上图不难发现,根据花瓣(petal)长度似乎就可以将山鸢尾花(三角形表示)跟其他两类花朵区分开。我们写一点代码来寻找切分点在哪里,如下所示:

simple_threshold.py

import numpy as np from sklearn.datasets import load_iris data=load_iris() features = data['data'] labels = data['target_names'][data['target']] plength = features[:,2] is_setosa = (labels == 'setosa') print("Maxinum of setosa: {0}." .format(plength[is_setosa].max())) print("Minimum of others: {0}." .format(plength[~is_setosa].min()))

输出结果如下:

Maxinum of setosa: 1.9.
Minimum of others: 3.0.

现在我们可以通过花瓣长度将山鸢尾花和其他两类花区分开,而且效果非常好,不会出现任何错误。然而,我们却无法立即找到区分维吉尼亚鸢尾花(Iris Virginica)和变色鸢尾花(Iris Vesicolor)的最佳阈值。我们甚至会发现永远都不可能找到完美的划分。不过,我们还是可以尝试一下。下面通过pred(预测结果)和virginica(真实标签)的比较次数的平均值,可以得到正确结果所占的比例,即正确率,我们寻找后两种花分类的最佳阈值。

stump.py

from matplotlib import pyplot as plt from sklearn.datasets import load_iris data = load_iris() features = data['data'] labels = data['target_names'][data['target']] setosa = (labels == 'setosa') features = features[~setosa] labels = labels[~setosa] virginica = (labels ==

相关知识

初识分类(鸢尾花卉数据集)
python利用c4.5决策树对鸢尾花卉数据集进行分类(iris)
实验一:鸢尾花数据集分类
数据分析(Python)入门—鸢尾植物数据集处理
决策树可视化:鸢尾花数据集分类(附代码数据集)
KNN算法实现鸢尾花数据集分类
鸢尾花卉数据集的主成分分析与K近邻分类
Jupiter Notebook:IRIS 数据集/鸢尾花数据集
基于SVM的鸢尾花数据集分类实现[使用Matlab]
Python实现C4.5决策树在鸢尾花数据集上的分类应用

网址: 初识分类(鸢尾花卉数据集) https://www.huajiangbk.com/newsview1675302.html

所属分类:花卉
上一篇: 21公顷水生植物观赏区,60余种
下一篇: 鸢尾花分类:逻辑回归实战解析

推荐分享