![Python机器学习与量化投资](https://wfqqreader-1252317822.image.myqcloud.com/cover/622/25462622/b_25462622.jpg)
2.2 经典爱丽丝
Iris(爱丽丝)数据集是机器学习最经典的数据集,全称是安德森鸢尾花卉数据集,是统计学习的必备数据集,图2.1是爱丽丝数据集的特征分类图。
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_1.jpg?sign=1739393676-IDR2zf1QEeBqVDbCew4xuR2LoX2YsdXx-0-7d90cccedba9863b5f13bf9a428c7f91)
图2.1 爱丽丝数据集的特征分类图
维基百科有专门的词条。
安德森鸢尾花卉数据集(Anderson's Iris data set),也称鸢尾花卉数据集(Iris flower data set)或费雪鸢尾花卉数据集(Fisher's Iris data set),是一类多重变量分析的数据集。它最初是埃德加·安德森从加拿大加斯帕半岛上的鸢尾属花朵中提取的地理变异数据,后由罗纳德·费雪作为判别分析的一个例子,并运用到统计学中。其数据集包含了50个样本,都属于鸢尾属下的三个亚属,分别是山鸢尾、变色鸢尾和维吉尼亚鸢尾。其4个特征被用作样本的定量分析,即花萼和花瓣的长度和宽度。基于这4个特征的集合,费雪发展了线性判别分析以确定其属种。
我们的目的就是通过编程,对这3种不同种类的爱丽丝植物的数据,采用专业的数据分析手段和人工智能算法,让程序自动判断植物的种类。
由于sklearn发布很早,当时还没有pandas等新一代数据分析软件,所以sklearn为了保证运行速度,直接使用NumPy模块库的ndarray多维数组作为数据源和内部的数据格式。
近几年发布的TensorFlow、MXNet等神经网络、深度学习平台,为了提高效率,在数据接口部分也直接使用NumPy模块库的ndarray多维数组格式。
不过NumPy模块库的ndarray多维数组是侧重性能的数据格式,在应用方面非常烦琐。
目前,随着pandas等新一代数据分析软件的普及和推广,以及一线开发人员对效率的考虑,越来越多的项目开始使用pandas的DataFrame数据框架作为数据保存格式,从而方便调试程序,交换数据。
本书的各个案例都是基于pandas优先的模式,尽量直接使用DataFrame数据框架作为程序中间数据,只是在必须使用NumPy模块库的ndarray多维数组格式时,才转换为相应的格式。
有关数据转换的细节,我们会在案例当中具体说明。全程采用pandas学习sklearn人工智能,方便初学者把握数据内部的结构和细节。
传统的sklearn人工智能文档,大部分直接采用NumPy数组模块,而NumPy是为了追求极限性能设计的模块库,很多算法函数非常复杂,不亚于汇编。
从某种程度上讲,绝大部分初学者的人工智能学习之路,在起步阶段就被NumPy这个模块库给吓退了。
本书全部采用现有的pandas命令,从数据源对sklearn进行整合,无须学习额外的语法,更加方便初学者入门。
案例2-1:经典爱丽丝
案例2-1的文件名是kb201_iris01.py,程序很简单,秉持着pandas优先的原则,只读取爱丽丝数据集当中的数据,并查看其中数据字段的内容。
第1组代码如下:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_2.jpg?sign=1739393676-UtmaMB2nS1xHBEGNOvrbtRgBpTnXs9xS-0-fad3962262c4f732a2757e0b3b1b3407)
第1组代码,运行结果如下:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_3.jpg?sign=1739393676-pZMwD1E5anwaR3JpCz1d3MdeTJe9gNf0-0-6278895a41eadbad6d44203b45e6be72)
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_4.jpg?sign=1739393676-plaLgsFhyPUMpRxEECY5NFhvCI1MIA0P-0-79dbe7bcd4af96737f60f20165a905c2)
案例2-1看起来简单,其实做了很多小优化和修改,比如取消了原始的数据列名称,用x1~x4代替。一方面更加通用,另一方面,更加符合人工智能、机器学习的本质。
此外,从输出信息来看,统计命令如下:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_5.jpg?sign=1739393676-RXqcwInCubNrPkrHzLYcYF17Y2Dk2tj7-0-350145e7ffe3f4c4d2ea30b911b340de)
在对应的输出信息当中没有xname的数据,因为xname字段是字符串,无法统计分析,需要先对其进行数字化处理,也就是常说的文字信息的矢量化运算。
第2组代码如下:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_6.jpg?sign=1739393676-9P5d4QP4OtY2eiegLVMFgFBI52ggHxUZ-0-787b372e2c3e81d7979e0af7572b22f4)
第2组代码当中的函数如下:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_7.jpg?sign=1739393676-977NYUIoL3UsN6IMtYTAQVcEviYphJig-0-c1c4f3f2ddf16561813d5279ea579782)
这是调用pandas的value_counts统计函数,用来查看xname数据的具体数据分布情况。
对于植物种类进行了简单的分类统计,共有3种,对应的输出信息如下:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_8.jpg?sign=1739393676-DaLp16jLunpT5rDFTuhZH3rH0TDkF68r-0-1bfb1b1b86e6904a5feb3c2f6a0ec002)
由输出信息可以看出,3种植物名称分别是:山鸢尾(Iris setosa)、变色鸢尾(Iris versicolor)和维吉尼亚鸢尾(Iris virginica)。
案例2-2:爱丽丝进化与文本矢量化
案例2-2的文件名是kb202_iris02.py,将根据xname的植物名称,设置一个新的数据字段xid,来完成这个文本信息的矢量化工作。
下面我们分组逐一讲解。
第1组代码,读取Iris数据文件,并保存到df变量:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_9.jpg?sign=1739393676-DionlctDlpNLovVBIyTWMUn9UPVC8oUL-0-f0be326f40fd4cb112d040d3a9af4c0b)
第2组代码,根据xname字段,按1、2、3分别设置xid字段,完成读取爱丽丝数据名称的矢量化操作。xid格式设置为int整数格式,并保存到文件iris2.csv中。
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_10.jpg?sign=1739393676-eWTq71uXTHuLNbpVLzddEgXHuAR0U1SJ-0-2310b407abcd584402c3bdb1d164dfb2)
我们已经将iris2.csv文件复制到dat目录下,在后面的案例中,大家可以直接使用这个文件作为数据源:data/iris2.csv。
第3组代码,输出修改后的df数据信息:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_11.jpg?sign=1739393676-5dU2LxMgt5nTrR52dJVniC1DmZVkWhxH-0-74ccd1ced58880c68dcb1084609d1fad)
对应的输出信息是:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_12.jpg?sign=1739393676-TZmDFiTketqS2rHDypOVFHuGADHESkM6-0-8cb0b1aa9f6268b5b835c92ae4916cfe)
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_13.jpg?sign=1739393676-zkpQuDU4rVqlOuyIYerizCbIomvT5ffD-0-1946e3d2f58b983f0eb8279439c213ea)
第4组代码,输出xname方面的分类统计信息:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_14.jpg?sign=1739393676-KmFV3bG7FlOV4YmCaMBAWzLCs8qPn70t-0-17cf6e9570a8e20be9f7f86010ad4938)
对应的输出信息是:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_15.jpg?sign=1739393676-Dc8UsmAeKXNL8gucX3tin34roH5kFL0X-0-7f011632205491d89798c32309848a4e)
第5组代码,输出xid方面的分类统计信息:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_16.jpg?sign=1739393676-L0KPlj5jwMA2nUw2z69WNibEDOyBWhlO-0-505676dcfd1ea0a937cbdae36bb51d33)
对应的输出信息是:
![](https://epubservercos.yuewen.com/835B27/13916128505951006/epubprivate/OEBPS/Images/txt002_17.jpg?sign=1739393676-A4qu2MVdOggmjxgQTHV2uKTWTeB8Fn6O-0-389f280abc2514db36256805a19c84fb)