《python深度学习》笔记---4.3、数据预处理、特征工程和特征学习
一、总结
一句话总结:
神经网络的数据预处理:向量化、标准化、处理缺失 值和特征提取。
特征工程:利用你自己关于数据和机器学习算法(这里指神经网络)的知识对数据进行硬编码的变换(不是模型学到的),以改善模型的效果。
1、神经网络的数据预处理?
【向量化、标准化、处理缺失值和特征提取】:数据预处理的目的是使原始数据更适于用神经网络处理,包括向量化、标准化、处理缺失 值和特征提取。
2、模型的超参数(hyperparameter)?
层数或每层大小:开发模型时总是需要调节模型配置,比如选择层数或每层大小[这叫作模型的超 参数(hyperparameter),以便与模型参数(即权重)区分开]。
3、数据预处理常见方式?
数据向量化:浮点数张量:神经网络的所有输入和目标都必须是浮点数张量(在特定情况下可以是整数张量)。无论 处理什么数据(声音、图像还是文本),都必须首先将其转换为张量,这一步叫作数据向量化 (data vectorization)
值标准化:归一化:在手写数字分类的例子中,开始时图像数据被编码为0~255 范围内的整数,表示灰度值。 将这一数据输入网络之前,你需要将其转换为 float32 格式并除以255,这样就得到0~1 范围内的浮点数。
处理缺失值:将缺失值设置为0是安全的:一般来说,对于神经网络,将缺失值设置为0 是安全的,只要0 不是一个有意义的值。网 络能够从数据中学到 0 意味着缺失数据,并且会忽略这个值。
4、数据向量化 ?
浮点数张量:神经网络的所有输入和目标都必须是浮点数张量(在特定情况下可以是整数张量)。无论 处理什么数据(声音、图像还是文本),都必须首先将其转换为张量,这一步叫作数据向量化 (data vectorization)
5、值标准化?
归一化:在手写数字分类的例子中,开始时图像数据被编码为0~255 范围内的整数,表示灰度值。 将这一数据输入网络之前,你需要将其转换为 float32 格式并除以255,这样就得到0~1 范围内的浮点数。
6、处理缺失值?
将缺失值设置为0是安全的:一般来说,对于神经网络,将缺失值设置为0 是安全的,只要0 不是一个有意义的值。网 络能够从数据中学到 0 意味着缺失数据,并且会忽略这个值。
7、特征工程(feature engineering)?
对数据进行硬编码的变换:是指将数据输入模型之前,利用你自己关于数据和机器学习算法(这里指神经网络)的知识对数据进行硬编码的变换(不是模型学到的),以改善模型的效果。
8、特征工程 实例(时钟例子)?
(x, y)坐标:比如你可以编写5 行 Python 脚本,找到时钟指针对应的黑色 像素并输出每个指针尖的 (x, y) 坐标,这很简单。然后,一个简单的机器学习算法就可以学会这 些坐标与时间的对应关系。
时钟指针的角度theta:进行坐标变换,将 (x, y) 坐标转换为相对于图像中心的极坐标。这样 输入就变成了每个时钟指针的角度 theta。现在的特征使问题变得非常简单,根本不需要机器 学习,因为简单的舍入运算和字典查找就足以给出大致的时间。
特征工程的本质:用更简单的方式表述问题:从而使问题变得更容易。它通常需要 深入理解问题
9、特征工程的本质?
用更简单的方式表述问题:从而使问题变得更容易。它通常需要 深入理解问题
10、深度学习出现之前,特征工程曾经非常重要?
没有足够大的假设空间:因为经典的浅层算法没有足够大的假设空间来自己学习有用的表示。
数据呈现方式至关重要:将数据呈现给算法的方式对解决问题至关重要。
硬编码特征:例如,卷积神经网络 在 MNIST 数字分类问题上取得成功之前,其解决方法通常是基于硬编码的特征,比如数字图像 中的圆圈个数、图像中每个数字的高度、像素值的直方图等。
11、对于现代深度学习,为什么大部分特征工程都是不需要的?
因为神经网络能够从原始 数据中自动提取有用的特征。
12、这是否意味着,只要使用深度神经网络,就无须担心特征工程呢? 并不是这样,原因有两点?
更少资源:良好的特征仍然可以让你用更少的资源更优雅地解决问题。例如,使用卷积神经网络来 读取钟面上的时间是非常可笑的
更少数据:良好的特征可以让你用更少的数据解决问题。深度学习模型自主学习特征的能力依赖于 大量的训练数据。如果只有很少的样本,那么特征的信息价值就变得非常重要。
二、内容在总结中
博客对应课程的视频位置: