《机器学习:算法视角(原书第2版)》 —3.4.4 另一个示例:皮马印第安人数据集

举报
华章计算机 发表于 2019/12/21 15:10:13 2019/12/21
【摘要】 本节书摘来自华章计算机《机器学习:算法视角(原书第2版)》 一书中第3章,第3.4.4节,作者是[新西兰] 史蒂芬·马斯兰(Stephen Marsland),高 阳 商 琳 等译。

3.4.4 另一个示例:皮马印第安人数据集

UCI机器学习数据库(http://archive.ics.uci.edu/ml/)拥有许多用于演示和测试机器学习算法的数据集。为了测试感知器和线性回归算法,我们将使用其中一个广为人知的数据集。它提供了一组居住在美国亚利桑那州的皮马印第安人的八个测量数据,类别是每个人是否患有糖尿病。该数据集可以从UCI数据库中下载得到(名为Pima),并且文件夹中含有一个文件,对每个不同变量的含义进行了细致的说明。

下载它之后,导入相关的模块(NumPy是为了使用数组的方法,PyLab是为了绘制数据曲线,并且从本书网站中导入感知器的代码),然后把数据载入到Python中。需要的代码如下所示(并不是所有的import行都会立即用到,但在之后的深入学习中这些都将成为必需的):

 image.png

os.chdir这一行的路径显然需要根据你存储数据集的位置做出相应改变。在np.loadtxt()命令中,delimiter具体说明用于分割数据点的字符。np.shape()命令显示有768个数据点,在文件中以行的形式排列,每一行包含9个数字。其中有数据的8个维度,以及表示数据类别的第9个元素(以8为索引,因为Python是从0开始索引的)。这种文件的每一行(或是数组的每一行)都有一个数据点的排列方式,将会贯穿于本书之中。

观察一下数据集。显然,你不可能一下子把所有的内容都在图中标记出来,因为那样需要想象8个维度。但是你可以标记数据的任何一个二维子集。看一些这样的例子。为了能够在图中看到数据的两个不同的类别,你需要了解如何使用np.where命令。学会了之后,你将能用不同的形状和颜色来标识它们。pl.plot命令在Matplotlib库中,所以你需要先导入(通过import pylab as pl)。假设你设计了某种方法把一种类别的索引存放在indices0中,另一种类别的索引存放在indices1中,你可以使用:

 image.png

在图中标记数据的前两个维度,两个类别分别用圆和叉来表示,看上去类似于图3-12。pl.ion()命令确保数据真正被标记了,而pl.show()命令只有在你使用Eclipse的时候才需要,并且确保当程序停止运行的时候图像不会消失。显而易见,在只有这些特征的情况下,你无法找到对这两种类别的线性划分方法。然而,你应该研究一些其他特征的组合,看看能不能找到更好的方法。

下一步就是试着在整个数据集上使用感知器。你需要尝试不同的学习速率的值,以及不同的循环次数,但是你会发现正确率在50%~70%左右(结果是使用混淆矩阵的方法confmat()得到的)。这并不是太差,但也不是那么好。同时,结果相当不稳定,有时候结果只有30%的正确率,甚至低于随机水平,这令人很失望。

image.png

image.png

 图3-12 皮马印第安人数据集的前两个维度用×和o分别指代两类

 

这显然是不公正的测试,因为我们使用了训练时所用的同样的数据来测试网络。我们已在2.2节讨论过,但是现在将使用一种快捷的方法,即使用序号为偶数的数据点来训练,使用序号为奇数的数据点来测试。这可以通过使用“:”运算符规定起始点、终点以及步长来简单地实现。NumPy将在我们留下的空白里填上合适的数组的起点或终点。

 image.png

目前,我们不想担心训练和测试数据,而是更关心如何改进结果。我们可以通过稍微准备数据或预处理数据来做得更好。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。