《精通特征工程》读书笔记

一、机器学习流程

数据特性:

  • 错误数据:测量时的错误
  • 冗余数据:对同一数据的多次表述
  • 缺失数据

特征:

原始数据的数值表示
正确的特征应该适合当前的任务,并易于被模型所使用

特征工程:

在给定数据、模型和任务的情况下设计出最合适的特征
《精通特征工程》读书笔记_第1张图片

二、数值型数据

  • 合理性检查:正负等
  • 考虑特征的尺度:kmeans、knn、径向基核函数、所有使用欧氏距离的方法均需要,对特征进行标准化、区间计数
  • 数值型特征的分布:对数变换使变量的分布更加接近于高斯分布
  • 交互特征:将多个特征组合在一起

基本概念:

标量:

单独的数值型特征

向量:

标量的有序列表

空间:

向量位于向量空间中
模型的输入通常表示为数值向量

1、处理计数:

1.1 二值化:

《精通特征工程》读书笔记_第2张图片
强壮的用户偏好表示方法是将收听次数二值化,把所有大于1 的次数值设为1。

1.2 区间量化(分箱)

原始数据横跨了若干个数量级,这对很多模型来说都是个问题。
《精通特征工程》读书笔记_第3张图片
可以将点评数量分到多个箱子里面,去掉实际的计数值。区间量化可以将连续型数值映射为离散型数值,我们可以将这种离散型数值看作一种有序的分箱序列,它表示的是对密度的测量。

1.2.1 固定宽度分箱:

通过固定宽度分箱,每个分箱中会包含一个具体范围内的数值。

均匀分箱:
要将计数值映射到分箱,只需用计数值除以分箱的宽度,然后取整数部分。

指数分箱:
当数值横跨多个数量级时,最好按照10 的幂(或任何常数的幂)来进行分组:09、1099、100999、10009999
此时,要将计数值映射到分箱,需要取计数值的对数。

1.2.2 分位数分箱:

固定宽度分箱非常容易计算,但如果计数值中有比较大的缺口,就会产生很多没有任何数据的空箱子
根据数据的分布特点,进行自适应的箱体定位,就可以解决这个问题。

分位数是可以将数据划分为相等的若干份数的值。例如,中位数(即二分位数)可以将数据划分为两半,其中一半数据点比中位数小,另一半数据点比中位数大。
要计算分位数并将数据映射到分位数分箱中, 可以使用Pandas 库。
pandas.DataFrame.quantile 和pandas.Series.quantile 可以计算分位数。pandas.qcut 可以将数据映射为所需的分位数值。

1.3 对数变换

对数函数可以对大数值的范围进行压缩,对小数值的范围进行扩展。
《精通特征工程》读书笔记_第4张图片
对于具有重尾分布的正数值的处理,对数变换是一个非常强大的工具。(与高斯分布相比,重尾分布的概率质量更多地位于尾部。)它压缩了分布高端的长尾,使之成为较短的尾部,并将低端扩展为更长的头部。
《精通特征工程》读书笔记_第5张图片
《精通特征工程》读书笔记_第6张图片

1.4 指数变换:对数变换的推广

《精通特征工程》读书笔记_第7张图片
在这里插入图片描述
《精通特征工程》读书笔记_第8张图片
当应用Box-Cox 变换或更广义的指数变换时,必须确定参数λ 的值,这可以通过极大似然方法(找到能使变换后信号的高斯似然最大化的λ 值)或贝叶斯方法来完成,SciPy 的stats 包中有Box-Cox 变换的实现方法,并包括找到最优变换参数的功能。
相比对数变换,最优Box-Cox 变换对尾部的压缩更强,它使得尾部变平,跑到了红色等值斜线下面。
《精通特征工程》读书笔记_第9张图片

1.5 特征缩放/归一化

有些数值型特征可以无限制地增加,比如计数值。如果模型对输入特征的尺度很敏感,就需要进行特征缩放。顾名思义,特征缩放会改变特征的尺度,有些人将其称为特征归一化

1.5.1 min-max缩放

min-max 缩放可以将所有特征值压缩(或扩展)到[0, 1]区间中:
在这里插入图片描述
《精通特征工程》读书笔记_第10张图片

1.5.2 特征标准化/方差缩放

在这里插入图片描述
缩放后的特征均值为0,方差为1。如果初始特征服从高斯分布,那么缩放后的特征也服从高斯分布。
《精通特征工程》读书笔记_第11张图片
不要“中心化”稀疏数据!

1.5.3 l 2 l^{2} l2归一化

将初始特征值除以一个称为ℓ2 范数的量,ℓ2 范数又称为欧几里得范数。
在这里插入图片描述
在这里插入图片描述
《精通特征工程》读书笔记_第12张图片
不论使用何种缩放方法,特征缩放总是将特征除以一个常数(称为归一化常数)。因此,它不会改变单特征分布的形状。
与对数变换不同,特征缩放不改变分布的形状,只有数据尺度发生了变化。
《精通特征工程》读书笔记_第13张图片
如果输入特征的尺度差别非常大,就会对模型训练算法带来数值稳定性方面的问题。在这种情况下,就应该对特征进行标准化。

1.6 交互特征

两个特征的乘积可以组成一对简单的交互特征。
可以捕获特征之间的交互作用,因此这些特征对就称为交互特征。
在这里插入图片描述
如果线性模型中包含有交互特征对,那它的训练时间和评分时间就会从O(n) 增加到O(n2),其中n 是单一特征的数量。

有若干种方法可以绕过高阶交互特征所带来的计算成本。我们可以在构造出所有交互特征之后再执行特征选择,或者,也可以更加精心地设计出少量复杂特征。

精心设计的复杂特征需要昂贵的成本,所以数量不能太多,它们可以减少模型的训练时间,但特征本身会消耗很多计算能力,这增加了模型评分阶段的计算成本。

1.7 特征选择

特征选择技术可以精简掉无用的特征,以降低最终模型的复杂性,它的最终目的是得到一个简约模型,在不降低预测准确率或对预测准确率影响不大的情况下提高计算速度。

为了得到这样的模型,有些特征选择技术需要训练不止一个待选模型。换言之,特征选择不是为了减少训练时间(实际上,一些技术会增加总体训练时间),而是为了减少模型评分时间。
特征选择技术可以分为以下三类:
过滤:
过滤技术对特征进行预处理,以除去那些不太可能对模型有用处的特征。例如,我们可以计算出每个特征与响应变量之间的相关性或互信息,然后过滤掉那些在某个阈值之下的特征。它们有可能无法为模型选择出正确的特征。我们最好谨慎地使用预过滤技术,以免在有用特征进入到模型训练阶段之前不经意地将其删除。
打包技术:
成本非常高昂,但它们可以试验特征的各个子集,这意味着我们不会意外地删除那些本身不提供什么信息但和其他特征组合起来却非常有用的特征。将模型视为一个能对推荐的特征子集给出合理评分的黑盒子。
嵌入式方法:
将特征选择作为模型训练过程的一部分。例如,特征选择是决策树与生俱来的一种功能,因为它在每个训练阶段都要选择一个特征来对树进行分割。另一个例子是ℓ1 正则项,它可以添加到任意线性模型的训练目标中。
ℓ1 正则项鼓励模型使用更少的特征,而不是更多的特征,所以又称为模型的稀疏性约束。
嵌入式方法在计算成本和结果质量之间实现了某种平衡。

五、分类变量

定义: 用来表示类别或标记的,又称无序变量

1、编码

1.1 one-hot编码

使用一组比特位,每个比特位表示一种可能的类别。
如果变量不能同时属于多个类别,那么这组值中就只有一个比特位是开的。
可以通过sklearn.preprocessing.OneHotEncoder实现。
每个比特位表示一个特征,因此,一个可能有k 个类别的分类变量就可以编码为一个长度为k 的特征向量。
《精通特征工程》读书笔记_第14张图片

1.2 虚拟编码

one-hot 编码的问题是它允许有k 个自由度,而变量本身只需要k-1 个自由度。虚拟编码在进行表示时只使用k-1 个特征,除去了额外的自由度。
在这里插入图片描述
没有被使用的那个特征通过一个全零向量表示,称为参照类。
虚拟编码和one-hot 编码都可以通过Pandas包中的pandas.get_dummies 来实现,指定drop_first标志来生成虚拟编码。
使用虚拟编码的模型结果比使用one-hot 编码的模型结果更具解释性。

1.3 效果编码

效果编码与虚拟编码非常相似,区别在于参照类是用全部由-1 组成的向量表示的。
《精通特征工程》读书笔记_第15张图片
它的线性回归模型更容易解释。

1.4 各种分类变量编码的优缺点

one-hot: 编码有冗余,同一个问题有多个有效模型,非唯一性有时候比较难以解释。优点是每个特征都明确对应一个类别,而且可以把缺失数据编码为全零向量,模型输出也是目标变量的总体均值。
虚拟编码: 编码没有冗余,可以生成唯一的可解释的模型,缺点是不太容易处理缺失数据。
效果编码: 编码没有冗余,可以生成唯一的可解释的模型,但全由-1组成的向量是个密集向量,计算、存储成本高。
一般用one-hot编码或者效果编码。
当类别的数量变得非常大时,这3 种编码方式都会出现问题,所以需要另外的策略来处理
超大型分类变量。

2、大型分类变量

如定向广告和欺诈检测。
也可以用一般的one-hot。

2.1 特征散列化

散列函数是一种确定性函数,它可以将一个可能无界的整数映射到一个有限的整数范围
[1, m] 中。
可能有多个值被映射为同样的输出,称为碰撞
均匀散列函数可以确保将大致相同数量的数值映射到m个分箱中。
散列函数在保持特征空间的同时,又可以在机器学习的训练和评价周期中减少存储空间和处理时间。
《精通特征工程》读书笔记_第16张图片
举例来说,如果初始特征是一篇文档中的单词,那么不管输入散列函数的有多少唯一单词,散列化之后的特征都应该是固定长度为m 的词汇表。
如果模型中涉及特征向量和系数的内积运算,那么就可以使用特征散列化,比如线性模型
和核方法。
除非m 达到10 亿的级别,否则不能将预测误差降低到可接受的水平,在这种情况下,不会有足够的空间节省。
特征散列化的一个缺点是散列后的特征失去了可解释性,只是初始特征的某种聚合。

2.2 分箱计数

从广告点击率预测到硬件分支预测,很多应用都对它进行了改造并使用。
不使用分类变量的值作为特征,而是使用目标变量取这个值的条件概率。换句话说,我们不对分类变量的值进行编码,而是要计算分类变量值与要预测的目标变量之间的相关统计量。
《精通特征工程》读书笔记_第17张图片
分箱计数将一个分类变量转换为与其值相关的统计量,它可以将一个大型的、稀疏的、二值的分类变量表示(如one-hot 编码生成的结果)转换为一个小巧的、密集的、实数型的数值表示。

如何处理稀有类:
1)back-off:
将所有稀有类的计数累加到一个特殊分箱中的简单技术。如果类别的计数大于一个确定的阈值,那么就使用它自己的计数统计量;否则,就使用back-off 分箱的统计量。
2)最小计数图:
不管是稀有类还是频繁类,所有类别都通过多个散列函数进行映射,每个散列函数的输出范围m 都远远小于类别数量k。在计算统计量时,需要使用所有散列函数进行计算,并返回结果中最小的那个统计量。
《精通特征工程》读书笔记_第18张图片

防止数据泄露:
数据泄露会使模型中包含一些不应该有的信息,这些信息可以使模型获得某种不现实的优势,从而做出更加精确的预测。出现数据泄露有多种原因,比如测试数据泄露到训练数据中,或者未来数据泄露到过去数据中。只要模型获得了在生产环境中实时预测时不应该接触到的信息,就会发生数据泄露。
为了防止出现这个问题,需要严格隔离计数收集(用来计算分箱计数统计量)和训练,使用过去的数据点进行计数,使用当前的数据点进行训练(将分类变量映射到我们前面收集到的历史统计量上),再使用未来的数据点进行测试。这可以解决数据泄露问题,但会引发前面提过的流程延迟问题(输入统计量以及模型会滞后于当前数据)。
《精通特征工程》读书笔记_第19张图片

无界计数:
通常更好的做法是使用归一化后的计数,这样就可以保证把计数值限制在一个可知的区间中。
另一种方法是进行对数变换,这样可以强加一个严格的边界,但当计数值非常大时,变换结果的增加速度是非常慢的。

总结:

《精通特征工程》读书笔记_第20张图片

五、数据降维:PCA

数据降维就是在保留重要信息的同时消除那些“无信息量的信息”。
“无信息量”在PCA里关注的是线性相关性。
PCA 的核心思想是,使用一些新特征代替冗余特征,这些新特征能恰当地总结初始特征空
间中包含的信息。

数学推导:

和前面一样,令X 表示n×d 的数据矩阵,其中n 是数据点的数量,d 是特征的数量。令x
是表示单个数据点的列向量(所以x 是X 中一行的转置)。令v 是表示新特征的向量,即
要找出的主成分。
《精通特征工程》读书笔记_第21张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在我们的问题表示中,从来没有涉及过均值E(Z),它是个自由变量。这个问题的一种解决方法是,从所有数据点中减去均值,从而将其从公式中除掉。这样,结果数据集的均值就是0,这意味着方差就是Z2 的期望值。从几何意义上说,减去均值的效果就是将数据中心化。
在这里插入图片描述
当随机变量的均值为0 时,它们的协方差与线性相关度E(Z1Z2) 一致。
《精通特征工程》读书笔记_第22张图片
在这里插入图片描述
主成分:第一种表示形式:
在这里插入图片描述
这里的限制条件强制w 与自己的内积为1,这等价于w 必须具有单位长度。这样做的原因
是我们只关心w 的方向,不关心它的大小。w 的大小是个不必要的自由度,所以我们可以
将它设定为任意值,从而除去它的影响。
主成分:矩阵-向量表示形式:
在这里插入图片描述
结果就
是,最优的w 就是X 的主要左奇异向量,也就是XTX 的主特征向量。投影数据就称为原
始数据的主成分。

主成分的通用解:

《精通特征工程》读书笔记_第23张图片

特征转换:

令X = UΣVT 是X 的奇异值分解,且Vk 是列中包含前k 个左奇异向量的矩阵。X 的维度是n×d,其中d 是初始特征的数量,Vk 的维度是d×k。
在这里插入图片描述
《精通特征工程》读书笔记_第24张图片

PCA实现:

《精通特征工程》读书笔记_第25张图片

转换后的特征都是不相关的。即每对特征向量之间的内积都是0。

有时候,还应该通过归一化把特征的长度变为1。在信号处理领域,这种操作称为白化。
这样做可以得到一组特征,彼此之间的相关度为0,与自身的相关度为1。数学上,将
PCA 转换乘以奇异值的倒数,就可以实现白化。
《精通特征工程》读书笔记_第26张图片
白化与数据降维是彼此独立的,可以分别进行。
在这里插入图片描述
ZCA 生成的白化数据与初始数据是最接近的(用欧氏距离衡量)。

确定要使用的主成分的数目(k):
方法一:
在使用PCA 进行数据降维时,必须确定要使用的主成分的数目(k)。和所有超参数一样,这个数目可以根据最终模型的质量来进行优化,但也有一些不需要昂贵计算成本的启发式方法。
选择k 的一种可行方法是要求主成分能解释一定比例的总方差,在k 个主成分上的投影的方差为:
在这里插入图片描述
这个方差就是X 第k 大奇异值的平方。奇异值的排序列表称为矩阵的谱(spectrum)。因
此,要确定使用多少主成分,可以对数据矩阵做一个简单的谱分析,并选定能解释足够方
差的阈值。
《精通特征工程》读书笔记_第27张图片
方法二:
这一种方法涉及数据集的本征维数,也可以通过矩阵的谱来确定。
简单地说,如果谱中包含一些非常大的奇异值和一些非常小的奇异值,我们就可以只保留那些非常大的奇异值,丢弃其余奇异值。有时候,谱中其余的奇异值不是非常小,但头部和尾部的值之间有比较大的缺口,这也是一个非常合理的界限。

PCA的缺点:

  • 转换过程复杂
  • 得到的结果难以解释
  • 计算成本昂贵
  • SVD流式计算、SVD更新、根据子样本计算SVD非常困难
  • 由于巨大的异常值的存在,最好不要对原始计数使用PCA
  • 对于数量超过几千的特征,PCA的计算成本非常昂贵
  • PCA转换丢弃了数据中的一些信息,下游模型的训练成本更低,但精确度也下降了

PCA最精彩的应用是在时间序列中进行异常检测。
当从图像中学习时,在预处理阶段可以使用ZCA。在自然图像中,邻接像素通常具有相似
的颜色,ZCA 白化可以除去这种相关性。

总结:

关于PCA 我们应该记住的主要两点是它的原理(线性投影)和目标(最大化投影数据的方差)。
PCA 的解要用到协方差矩阵的特征值分解,它与数据矩阵的SVD 联系非常紧密。还可以这样形象地理解PCA:将数据挤入一张尽量松软的薄饼中。
适合应用在预处理阶段,特别是特征之间存在线性相关性的时候。

七、非线性特征化与k-均值模型堆叠

流形能够展开的关键在于,即使一个大的流形看上去非常复杂,但它的每个数据点的邻近
区域通常可以非常好地近似为一块平面。换句话说,可以通过多个小平面使用局部结构组
成全局结构。非线性数据降维也称为非线性嵌入或流形学习。
非线性嵌入可以非常有效地将高维数据压缩为低维数据,常用于二维空间或三维空间中的可视化。
《精通特征工程》读书笔记_第28张图片
思想:给定一个聚类,数据点可以用它的簇成员向量来表示。如果簇的数量小于初始的特征数量,那么相对于初始表示,这种新表示就具有更少的维度,初始数据就被压缩进一个更低维度的空间。
《精通特征工程》读书笔记_第29张图片
如果可以容忍每个数据点的最大近似误差是r 的话,那么簇的数目就是O(1/rd),其中d 是数据初始特征空间的维度。
聚类算法可以分析数据的空间分布,因此,k-均值特征化可以生成数据的压缩空间索引,供下一阶段的模型使用。这就是模型堆叠的一个例子。
带有k-均值簇特征的逻辑回归模型是可能与非线性分类器相媲美的。

密集特征化

如果不使用one-hot 编码的簇隶属关系,还可以使用一个密集向量来表示数据点,这个向
量由数据点到每个簇中心点距离的倒数组成。相对于简单的二值化簇分配,这种方式可以
保留更多的信息,只不过表示方式是密集的。
** 两种方式比较:**

  • one-hot 编码的簇隶属关系可以提供一种非常轻量的、稀疏的表示,但需要一个比较大的k 值来表示形状复杂的数据。
  • 距离倒数表示法是密集的,对于建模的各个步骤来说代价更高,但优点是可以使用更小的k。

评价

使用k-均值将空间数据转换为特征是模型堆叠的一个实例,其中一个模型的输入是另一个
模型的输出。另一个堆叠实例是使用决策树类型模型(随机森林或梯度提升树)的输出作为线性分类器的输入。近年来,模型堆叠已经成为了一种越来越流行的技术,因为训练和维护非线性模型的成本非常高昂。堆叠的核心思想是将非线性放入特征中,再使用一种非常简单的、通常是线性的模型作为最后一层。特征生成器可以在线下训练,这意味着我们可以使用昂贵的、需要更多计算能力和内存的模型来生成有用的特征。位于顶层的简单模型可以快速适应在线数据中快速的分布变化。这是一种精确度和速度之间的权衡,这种策略通常使用在像定向广告这样需要快速适应数据分布变化的应用中。
模型堆叠的核心思想:
先使用复杂的基础层(通常带有昂贵的模型)生成良好的(通常是非线性的)特征,再与简单快速的顶层模型组合起来。这样通常能实现模型准确率和速度之间的正确平衡。
《精通特征工程》读书笔记_第30张图片
逻辑回归的训练和预测对于数据点数量和特征维度都是线性的。RBF SVM 的训练成本很
高,因为需要对输入数据的每对数据点计算核矩阵。与训练过程相比,RBF SVM 的预测
成本很低,它对于支持向量的数量s 和特征维度d 是线性的。GBT 的训练和预测与数据量
和模型大小呈线性关系(t 棵树,每棵树最多2m 个叶子节点,其中m 是树的最大深度)。
kNN 的简单实现根本不需要训练时间,因为训练数据本身就是实质上的模型。由此造成的
代价体现在预测时间上,预测时的输入必须使用所有初始训练数据进行评价,还需要部分
排序以找出k 个最近邻。

k-均值+LR 是唯一一个对于训练数据的规模(O(nd))和模型大小(O(kd))在
训练时间和预测时间上都是线性的组合。它的复杂度与GBT 最为相似,GBT 的成本与数
据点数量、特征维度和模型大小(O( 2 m 2^{m} 2mt))呈线性关系。但很难说是k-均值+LR 还是GBT能得到更小巧的模型,这取决于数据的空间性质。

如果需要特别防止数据泄露,可以分割出一个单独的数据集来完成簇的导出,就像分箱计数中做的那样。
k-均值特征化适合实数型、有界的、能在空间中形成块状密集区域的数值特征。块状区域
可以是任意形状,因为我们可以增加簇的数量来近似它们。

八、自动特征生成:图像特征提取和深度学习

1 最简单的图像特征

1.1 不同颜色在图像中的比例(直方图)

不够

1.2 测量图像之间的像素值差异

过于严格

2 人工特征提取:SIFT和HOG

SIFT:尺度不变特征转换
使用小块图像的统计量
最初是为了提取我们感兴趣的点的相关特征,用于对象识别,现在也可以提取整个图像的特征
HOG:梯度方向直方图

2.1 图像梯度

相邻像素在值上的差异称为图像梯度
计算图像梯度
最简单的方式是先沿着图像的横轴(x)和纵轴(y)分别计算像素值的差异,然后将计算结果组合到一个二维向量中。这需要两个一维差分操作,可以用向量掩膜或滤波器方便地表示。
如掩膜[1, 0, –1] 既可以计算左邻和右邻之间的差异,也可以计算上邻和下邻之间的差异,这取决于应用掩码的方向。
要对图像应用滤波器,可以执行一个卷积操作:先对滤波器做个翻转,再与一小块图像做内积,然后移动到下一小块。
卷积:
在这里插入图片描述
《精通特征工程》读书笔记_第31张图片

2.2 梯度方向直方图

SIFT 和HOG 都是这样做的。具体说来,它们计算(归一化)梯度向量的直方图作为图像特征。直方图将数据分装到多个箱子中,并计算出每个箱子中数据点的数量,这是一种(未归一化的)经验分布。
归一化可以保证所有计数的总和为1,用数学语言说就是它具有单位 ℓ 1 ℓ^{1} 1 范数。
SIFT 和HOG 给出了一种表示方法,将图像梯度按照它们的方向角θ 进行分箱,按照每个梯度的大小进行加权。
具体步骤
(1) 将0°~ 360°进行等宽分箱。
(2) 对于邻域中的每个像素,在与其方向角θ 对应的分箱中添加一个权重w。w 是该像素的梯度大小与其他相关信息的一个函数。例如,这种信息可以是该像素与小块图像中心点距离的倒数。指导思想是,如果梯度大,权重也应该大,而且靠近图像邻域中心的像素的重要程度要高于那些远离中心的像素。
(3) 对直方图进行归一化。

几个对模型产生影响的因素:
1)需要多少个分箱,0°~ 360°(有符号梯度)还是0°~ 180°(无符号梯度)?
更多的分箱可以对梯度方向进行粒度更细的量化,由此可以保留关于初始梯度的更多信息。但是,过多的分箱不但没必要,还会导致对训练数据的过拟合。
分箱范围应该是0°~ 360°(这会保留沿着y 轴的梯度的正负号),还是0°~ 180°(这不会保留垂直梯度的正负号)呢?在首次提出HOG 方法的论文中,作者(Dalal and Triggs, 2005)通过实验确定了范围为0°~ 180°的9 分箱方式是最好的,而SIFT 论文(Lower, 2004)则推荐0°~ 360°的8 分箱方式。

2)哪种权重函数?
HOG论文比较了:向量本身的长度、长度的平方或平方根、二值化,或在高端或低端进行裁剪。其中不做任何处理的普通长度在作者的实验中效果最好。
SIFT 使用的也是梯度本身的长度。此外,它还想避免由于图像窗口位置的微小变化而导致的特征描述符中的突变,因此,它使用一种从窗口中心进行测量的高斯距离函数,对来自邻域边缘的梯度赋予较低的权重。
SIFT 还试图避免由于单个图像梯度方向的微小变化而导致的在梯度方向直方图中发生的较大变化。使用了一种插值技巧,将权重从一个单独梯度扩展到相邻方向的分箱。根分箱(梯度所在的分箱)获得的投票是1 乘以加权的梯度长度。每个相邻分箱获得的投票是1-d,其中d 是直方图分箱单位与根分箱之间的差。
在这里插入图片描述
3)如何定义领域?领域如何覆盖图像?
HOG 和SIFT 都采用了图像邻域的一种双层表示法:首先将邻接的像素组成单元,然后再
将邻接的单元组织成块。先在每个单元上计算方向直方图,再将单元直方图向量连接起
来,构成整个块的最终特征描述符。
SIFT 使用16 像素×16 像素的单元,组织成8 个方向上的分箱,然后按照4×4 单元的块进行分组,这样图像邻域就有4×4×8=128 个特征。
HOG 论文试验了矩形和圆形的单元和块。矩形单元称为R-HOG 块。能找到的最优R-HOG 设置是8 像素×8 像素的9 方向分箱,再分组成为2×2 单元的块。圆形单元称为C-HOG 块,具体设置是可变的,由中心单元的半径、单元是否按放射状划分、外部单元的宽度等因素确定。
如何覆盖整个图像:
不论邻域如何组织,它们通常通过重叠来形成整个图像的特征向量。换句话说,单元和块沿着水平方向和垂直方向在图像中平移,但每次只移动几个像素,以覆盖整个图像。
4)使用哪种类型的归一化?
一般情况下,计算机视觉中的图像特征化首先要进行全局颜色归一化,目的就是消除照明和对比度上的差异。
对于SIFT 和HOG,事实证明只要对特征进行了归一化,这种预处理就不是必要的了。
《精通特征工程》读书笔记_第32张图片
SIFT流程

3 通过深度神经网络学习图像特征

从表面上看,堆叠神经网络的机制似乎与SIFT 和HOG 的图像梯度直方图相去甚远。但从AlexNet 的可视化可以看出,它的最初几层本质上就是计算边缘梯度和其他一些简单模式,与SIFT 和HOG 非常相似。随后的几层将局部模式组合成更全局化的模式。最终结果是一个特征提取器,比以前的提取器要许多。
AlexNet 包括全连接层、卷积响应归一化层和最大池化层。

3.1 全连接层

全连接神经网络就是所有输入特征的线性函数集合。
在这里插入图片描述
其中W 的每一行都是一个权重向量,可以将整个输入向量x 映射为z 中的一个输出。b 是一个由标量组成的向量,表示每个神经元固定的偏移(或偏差)。
每个输入都可以用于每个输出。
全连接层包含最大可能数目的参数(输入数× 输出数),因此它非常昂贵。如此密集的连接可以让网络探测包含所有输入的全局模式。AlexNet 的最后两层是全连接层。全连接层的输出彼此之间还是独立的,依输入情况而定。

3.2 卷积层

卷积层仅使用输入的一个子集来生成输出。
转换过程在输入中“移动”,每次使用若干特征生成输出。
可以对不同输入集合使用同样的权重,而不用为每个输入集合学习新权重。
卷积算子接受两个函数作为输入,生成一个函数作为输出。它要先翻转一个输入函数,再将它沿着另一个函数移动,并输出在每个点上递增的曲线下的面积:
在这里插入图片描述
理解卷积:

思想:
卷积算子捕获线性系统的效果,而线性系统将接收的信号与它的响应函数相乘,求出当前响应在所有过去输入上的总和。
g(t) 也称为滤波器。
二维卷积滤波器:
《精通特征工程》读书笔记_第33张图片
在图像处理中,二维卷积滤波器也称为核或掩膜。
当对一张图像应用卷积滤波器时,不一定要定义一个能覆盖整个图像的大型滤波器。相反,只要能覆盖几个像素的小型滤波器就可以了,可以沿着图像的水平方向或垂直方向移动并应用同一个滤波器。

这种滤波器每次只能在一个小的像素邻域内提取信息,卷积神经网络识别的是局部模式,而非全局模式。
AlexNet 中的卷积层是三维的,也就是说它们处理的是来自于前一层的三维像素(表示三维图像空间的数组值)。第一个卷积神经网络接受原始RGB 图像并学习出卷积滤波器,可用于在所有三个颜色通道上的局部图像邻域。随后的几层接受输入的三位像素,沿着空间和核维度进行处理。

3.3 ReLU变换

神经网络的输出通常被传递到另一种非线性变换中,这种非线性变换又称为激活函数
常用的激活函数包括tanh 函数(一个位于-1 和1 之间的平滑非线性函数)、sigmoid 函数(一个位于0 和1 之间的平滑非线性函数),以及所谓的线性整流函数(ReLU)。
ReLU:它的负数部分都被归零。也就是说,它裁剪掉了负数部分,保留了无界的正数部分。
《精通特征工程》读书笔记_第34张图片

ReLU 变换对非负函数没有效果,如原始图像或高斯滤波器。然而,训练后的神经网络,不管是全连接类型还是卷积类型,都可能输出负值。AlexNet 使用ReLU 变换而不是其他变换,在训练时可以更快地收敛
它在所有卷积层和全连接层都使用ReLU。

3.4 响应归一化层

《精通特征工程》读书笔记_第35张图片
在这里插入图片描述

3.5 池化层

池化层将多个输入组合成一个输出。当卷积滤波器在图像上移动时,每处理一个邻域都会生成一个输出。池化强制一个局部图像邻域生成一个值,而不是多个值。这可以减少深度学习网络中间层的输出数量,从而有效降低网络在训练数据时出现过拟合的概率。
有多种方法可以池化输入:求平均值、求和(或计算广义的范数)或取最大值。池化可以沿着图像或中间输出层移动进行。AlexNet 使用重叠的最大值池化,在图像中以两个像素(或输出)的步长进行移动,在3 个邻居之间进行池化:

3.6 AlexNet的结构:

AlexNet 包括5 个卷积层、2 个响应归一化层、3 个最大值池化层和2 个全连接层。加上最终的分类输出层,模型中一共有13 个神经网络层,形成了8 个层组
《精通特征工程》读书笔记_第36张图片
《精通特征工程》读书笔记_第37张图片
注意,AlexNet 的体系结构令我们想起了SIFT/HOG 特征提取器的梯度直方图—归一化—阈值—归一化体系(见图8-6),只是它具有更多的层。(这就是“深度学习”中“深度”的由来。)然而,与SIFT/HOG 不同的是,卷积核与全连接权重是从数据中学习出来的,而不是预先定义的。而且,SIFT 中的归一化步骤是在整个图像区域的特征向量之间进行的,而AlexNet 中的响应归一化层是在卷积核之间执行归一化的。
从一个较高的角度来看,这个模型首先从局部图像邻域提取模式。每个后续的层都建立在前面的层的输出之上,有效地覆盖了初始图像的连续大片区域。因此,即使前5 个卷积层都只有较小的核宽度,后面的层还是能构造出更为全局化的模式,最后的全连接层则是最为全局化的。
由模型中学习出的卷积核的前两层的可视化。第一层包括不同方向上的灰度边缘和纹理探测器、色团和纹理。第二层似乎包括各种平滑模式探测器:
《精通特征工程》读书笔记_第38张图片
《精通特征工程》读书笔记_第39张图片

近年来的一次技术飞跃是在计算机视觉领域使用深度神经网络,目的是使图像的特征提取得到更好的发展。

九、回到特征:建立学术论文推荐器

你可能感兴趣的:(《精通特征工程》读书笔记)