神经网络的数据预处理
数据预处理的目的是使原始数据更适合神经网络处理,包括向量化、标准化、处理缺失值和特征提取。
向量化
神经网络的输入和目标都必须是浮点数张量。
值标准化
将取值较大的数据或异质数据(heterogeneous data)输入网络不安全,会造成较大的梯度更新,导致网络无法收敛。输入数据应有以下特征:
- 取值较小:在 0 - 1 范围内;
- 同质性(homogenous):所有特征值的取值在大致相同的范围;
下面是更严格的标准化方法 - 将每个特征分别标准化,使其平均值为0;
- 将每个特征分别标准化,使其标准差为1。
# 假设 x 是一个形状为(samples, features)的二维矩阵
x -= x.mean(axis=0)
x /= x.std(axis=0)
处理缺失值
处理数据中可能会有缺失值。在神经网络中,一般设置为0(只要0不是一个有意义的值)。网络能够学到0是缺失值,并忽略这个值。
如果测试集中有缺失值,而训练集上没有,则要手动造成一些有缺失值的训练样本。
特征工程
特征工程(feature engineering)是指:在输入数据之前,利用自己关于数据和机器学习算法的知识,对数据进行硬编码变换(不是模型学到的),以改善模型的效果。
特征工程本质:用更简单的方式表述问题,从而使问题变得更容易。
特征工程重要的原因:
1、良好的特征可以使用更少的资源,更优雅的解决问题;
2、良好的特征可以使用更少的数据解决问题。
网友评论