《机器学习:算法视角(原书第2版)》 —3.4.5 数据预处理

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

3.4.5 数据预处理

如果在训练网络之前准备好分析输入和目标,机器学习算法往往会更有效地学习。作为最基本的例子,我们使用的神经元给出0和1的输出,因此如果目标值不是0和1,那么它们应该被转换为0和1。事实上,无论使用何种激活函数输出层神经元,将目标缩放到0到1之间都是正常的。这有助于防止权重不必要地变得太大。缩放输入也有助于避免此问题。

缩放输入数据最常用的方法是独立处理每个数据维度,使每个维度具有零均值和单位方差,或者只是进行缩放以使最大值为1且最小值为-1。这两种缩放都有类似的效果,但第一种更好一点,因为它不允许异常值占主导地位。这些缩放通常被称为数据归一化(normalisation),或者有时称为标准化(standardisation)。虽然归一化对于每个算法都不是必不可少的,但它通常是有益的,而对于我们将看到的一些其他算法,归一化将是必不可少的。

NumPy可以通过np.mean()和np.var()很简单地做数据归一化。只需要明白每一个axis所代表的含义:axis=0表示对列求和,axis=1表示对行求和。注意到这里只有输入变量进行了归一化。这样做不一定总是正确,但是这里目标变量的值已经是0和1了,这是感知器可能的输出,所以我们不想改变。

 image.png

这里有一件事需要小心,如果你用这种方法对训练集和测试集分别进行了归一化,那么同一个点在两个集合中就会有所不同,因为两个集合的均值和方差很可能是不一样的。基于这个原因,最好在把数据集分为训练集和测试集之前,对数据进行归一化。

可以在不事先了解数据集的情况下完成归一化。 但是,通常可以通过适当的方式来对数据进行预处理。比如说,第0列是每个人怀孕的次数(我提到过所有的实验对象都是女性吗?),第7列是每个人的年龄。先来看怀孕的变量,只有相当少的实验对象怀孕了8次或是8次以上,所以与其写明具体的数字,我们不如用统一用8来代替这些数字。同样,最好把年龄也量化成一系列的范围,如21~30、31~40等(数据集中的最小年龄为21)。这又可以通过使用np.where函数来实现,如同在以下代码段中一样。如果你对其他的值也进行这样的或是相似的处理,那么应该能让结果有大幅度的提高。

 image.png

现在,我们能做的最后一件事就是进行基本的特征选择(feature selection)。我们每次去掉一个不同的特征,然后试着在所得的输入子集上训练分类器,看结果是否有所提高。如果去掉某一个特征能够使结果有所改进,我们就彻底去掉它,然后再尝试能否去掉其他特征。这是一个测试输出与每一个特征的相关性(correlation)的过于简单的方法。在2.4.2节讨论协方差时,有一种更好的方法。我们还可以考虑维度约简(dimensionality reduction),这种方法将用更少的维度来表示数据,同时不会损失相关信息。第6章将对维度约简进行详细讨论。

既然我们已经理解了在一个比逻辑函数更好的例子上如何使用感知器,接下来将要研究另一种线性方法,它来源于统计学而不是神经网络。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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