13.机器学习基础:数据预处理与特征工程

数据预处理、特征工程和特征学习

在深入研究模型开发之前,我们还必须解决另一个重要问题:将数据输入神经网络之前,如何准备输入数据和目标?许多数据预处理方法和特征工程技术都是和特定领域相关的(比如只和文本数据或图像数据相关)。以下是所有数据领域通用的基本方法。

神经网络的数据预处理

数据预处理的目的是使原始数据更适于用神经网络处理,包括向量化、标准化、处理缺失值和特征提取。

向量化

神经网络的所有输入和目标都必须是浮点数张量(在特定情况下可以是整数张量)。无论是什么数据都必须首先将其转换为张量,这一步叫做数据张量化(data vectorization)

标准值化

在手写数字分类中,开始时图像数据被编码为0255范围内的整数,表示灰度值。将这一数据输入网络之前,你需要将其转换为float格式并处以255,这一就得到01范围内的浮点值。一般来说,将取值相对较大的数据(比如多为整数,比网络权重的初始值大很多)或异质数据(heterogeneous data,比如数据的一个特征在01范围内,另一个特征在100200之内)输入到神经网络中是不安全的。**这么做可能导致较大的梯度更新,进而导致网络无法收敛。**为了让网络的学习变得更容易,输入的数据应该具有以下特征:

  • 取值较小:大部分值都应该在0~1范围内。
  • 同质性(homogenous):所有特征的取值都应该在大致相同的范围内。

此外,下面这种更严格的标准化方法也很常见,而且很有用,虽然不一定总是必须的

  • 将每个特征分别标准化,使其平均值为0。
  • 将每个特征分别标准化,使其标准差为1。

这对于Numpy 数组很容易实现

# 假设x是一个形状为(samples, features)的二维矩阵。
x -= x.mean(axis=0)
x /= x.std(axis=0)
处理缺失值

你的数据中有时候可能会有缺失值。在神经网络中,将缺失值设为0是安全的,只要0不要是一个有意义的值。网络中能够从数据中学到0意味着缺失数据,并且会忽略这个值。

注意:如果测试数据中可能有缺失值,而网络是在没有缺失值的数据上训练的,那么网络不可能学会忽略缺失值。在这种情况下,你应该人为生成一些有缺失值的训练样本:多次复制一些训练样本,然后删除测试数据中可能缺失的某些特征。

特征工程

**特征工程(feature engineering)**是指将数据输入模型之前,利用你自己关于数据和机器学习算法的知识对数据进行硬编码的变化,以改善模型的效果。多数情况下,一个机器学习模型无法从完全任意的数据进行学习。呈现给模型的数据应该便于模型进行学习。

特征工程的本质:用更简单的方式表达问题,从而使问题变得更容易。它通常需要深入理解问题。

深度学习出现之前,特征工程曾经非常重要,因为经典的浅层算法没有足够大的假设空间来自己学习有用的表示。将数据呈现给算法的方式对解决问题至关重要。 例如卷积神经网络在MNIST数字分类问题上取得成功之前,其解决方法通常是基于硬编码的特征,比如数字图像中的圆圈格式、图像中每个数字的高度、像素值的直方图。

幸运的是,对于现代深度学习,大部分特征工程都是不需要的,因为神经网络能够从原始的数据中自动提取有用的特征。这并不是意味着,只要使用深度神经网络,就无需担心特征工程。原因有以下两点:

  • 良好的特征仍然可以让你用更少的资源更优雅的解决问题。例如,使用卷积神经网络来读取钟面上的时间是非常可笑的。
  • 良好的特征可以让你用更少的数据解决问题。深度学习模型自主学习特征的能力依赖于大量的训练数据。如果只有很少的样本,那么特征的信息价值就变得十分重要。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值