初识分类(鸢尾花卉数据集)
注:本文用到的模块如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余种 |
下一篇: 鸢尾花分类:逻辑回归实战解析 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039