特征工程

1 特征归一化

特征归一化针对数值类型的特征。

1.1 种类

线性函数归一化 (Min-Max Scaling)

该归一化对数据做线变换,是结果映射到 [ 0 , 1 ] [0,1] [0,1] 的范围,实现的是等比缩放。公式为:
X n o r m = X − X m i n X m a x − X m i n X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}} Xnorm=XmaxXminXXmin

零均值归一化(Z-score Normalization)

该归一化对数据映射到均值为 0 0 0,方差为 1 1 1 的分布上。公式为:
z = X − μ σ z=\frac{X-\mu}{\sigma} z=σXμ
其中 μ \mu μ σ \sigma σ 分别为原始特征的均值和方差。

1.2 理由

  1. 使得不同尺度的特征具有可比性。如身高(1.6~1.8)和体重(50~100),分析出来的结果会倾向于数值差别比较大的体重特征。归一化使各特征指标处于同一数量级,以便进行分析。
  2. 提高梯度下降收敛速度。联想椭圆(未归一化)和圆(归一化处理),归一化之后可能需要更少的迭代次数即可找到最优解。
  3. 例外:归一化不是万能的。线性回归、逻辑回归、SVM和神经网络可以归一化。但归一化不适用于决策树,因为决策树特征的选取是依据特征的信息增益比的大小,而信息增益比跟特征是否经历过特征归一化没有关系。

2 类别型特征

类别型特征(Categorical feature)是指例如性别,血型等只能在有限选项内取值的特征。输入形式通常为字符串。这种输入形式对于逻辑回归、SVM来说是无法处理的,只有将类别型特征转换成数值型特征后才行。

2.1 转换方法

序号编码(Ordinal encoding)

很好理解,就是将类别间具有大小关系的特征赋予一定的序号,这个序号反映了原始类别之间的大小关系。例如身高有“高”,“中”,“低”三个类别,那么就可以将他们转化成 3 > 2 > 1 3>2>1 3>2>1 这样的形式,使转换之后大小关系仍然得以保留。

独热编码(One-hot encoding)

处理不具有大小关系的特征。如血型(A, B, AB, O)。独热编码会把血型变成一个4维稀疏向量,A为 ( 1 , 0 , 0 , 0 ) (1,0,0,0) (1,0,0,0),B为 ( 0 , 1 , 0 , 0 ) (0,1,0,0) (0,1,0,0),AB为 ( 0 , 0 , 1 , 0 ) (0,0,1,0) (0,0,1,0),O为 ( 0 , 0 , 0 , 1 ) (0,0,0,1) (0,0,0,1)
需要注意的问题:

  1. 使用稀疏向量来节省空间。因为特征向量只有某一维为1,其他位置均为0。因此可以用向量稀疏表示来节省空间。大部分算法均支持稀疏表示。
  2. 配合特征选择来降低维度。高维度会带来几个问题:一是KNN算法中,高维空间下两点之间的距离很难得到有效的衡量;而是在逻辑回归中,参数的数量会随着维度的增高而增加,容易造成过拟合的问题;三是高维的特征往往只有部分维度对于分类、预测是有贡献的。

二进制编码(Binary encoding)

第一步:先用序号编码给每个类别予以编号ID,
第二部:将类别ID转换成二进制编码作为最终结果。
本质:利用二进制对ID进行哈希映射。
相比于独热编码:维数较少,节省了空间,降低了过拟合的风险。

二进制编码和独热编码的比较
血型类别ID二进制表示独热编码
A10011000
B20100100
AB30110010
O41000001

3 高维组合特征的处理

3.1 组合特征

以逻辑回归为例,假设数据的特征向量为 X = ( x 1 , x 2 , . . . , x k ) X=(x_1,x_2,...,x_k) X=(x1,x2,...,xk),则有,
Y = s i g m o i d ( ∑ i ∑ j w i j &lt; x i , x j &gt; ) Y=sigmoid(\sum_i\sum_jw_{ij}&lt;x_i,x_j&gt;) Y=sigmoid(ijwij<xi,xj>)
其中 &lt; x i , x j &gt; &lt;x_i,x_j&gt; <xi,xj> 表示 x i x_i xi x j x_j xj 的组合特征, w i j w_{ij} wij 的维度为 ∣ x i ∣ ⋅ ∣ x j ∣ |x_i|\cdot |x_j| xixj ∣ x i ∣ |x_i| xi 表示特征 x i x_i xi 不同取值的个数。

3.2 高维组合特征处理

假设两个特征的取值个数分比为 m , n m, n m,n,当他们较小是, w w w 的维度大小可以接受。但是当他们较大时,需要学习的参数的规模 m × n m\times n m×n 就非常大。
这时可以将这两个特征用 k k k 维的低维向量来表示 ( k ≪ m , k ≪ n k\ll m,k\ll n km,kn),
Y = s i g m o i d ( ∑ i ∑ j w i j &lt; x i , x j &gt; ) Y=sigmoid(\sum_i\sum_jw_{ij}&lt;x_i,x_j&gt;) Y=sigmoid(ijwij<xi,xj>)
其中 w i j = x i ′ ⋅ x j ′ w_{ij}=x_i&#x27;\cdot x_j&#x27; wij=xixj x i ′ x_i&#x27; xi x j ′ x_j&#x27; xj 分别表示 x i x_i xi x j x_j xj 对应的低维向量(?个人觉得应该是做了一个低维映射,只是不知道怎么映射的)。

4 组合特征

随意的两两组合特征会导致参数过多,过拟合的问题,而且并非所有的组合均有意义。这里使用了构造决策树的方法来组合特征。具体的可以采用梯度提升决策树,每次都在构建的决策树的残差的基础上构建一个决策树。决策树的构建见统计学习方法。这里不多说。

5 文本表示模型

文本:非结构化数据。

5.1 词袋模型(Bag of Words)

将每篇文章看成一袋子词,忽略每个词出现的顺序。将文本以词为单位切开,每篇文章可以表示为一个词向量,向量中每一维表示一个词,该词对应的权重则反映了这个词在文章中的重要程度。常用的计算权重的方法是 TF-IDF(Term frequency-Inverse document frequency)。公式为
T F − I D F ( t , d ) = T F ( t , d ) × I D F ( t ) TF-IDF(t,d)=TF(t,d)\times IDF(t) TFIDF(t,d)=TF(t,d)×IDF(t)
右边第一项表示单词 t t t 在文档 d d d 中出现的概率,第二项是逆文档频率,用来衡量单词 t t t 对表达语义所起的重要性。简单地说就是如果一个词在很多的文章中出现,如“的”,那么对于区分文章特殊语义的贡献就较小,因此对这个词的权重做一些惩罚。
连续的单词在一起时才有具体意义的时候,可采用N-gram来将连续出现的n个词组成的词组作为一个单独的特征放到向量表示中去,构成 N-gram 模型
另外,一词多词性现象也是要考虑的。实际中,会对单词进行词干抽取(Word stemming) 处理,将不同词性的单词统一成为同一词干的形式。

5.2 主题模型

从文本库中发现有代表性的主题(每个主题上面词的分布特性),计算出每篇文章的主题分布。

5.3 词嵌入与深度学习

词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成一个低维空间上的一个稠密向量。得出的结果往往要结合深度学习神经网络来处理,因为神经网络很好地抓住了文本的特征,自动地进行特征工程。

6 Word2Vec

在这里插入图片描述
CBOW(Continuous bag of words)目标是根据上下文出现的词语来预测当前词的生成概率,Skip-gram是根据当前词来预测上下文各词的生成概率。
输入层中的每个词由独热编码方式表示。映射层中,K个隐藏单元的取值由N维输入变量和隐藏单元之间的 N × K N\times K N×K 维权重矩阵计算得到。在CBOW中,还需要将各输入此所计算出的隐含单元求和。Skip-gram输出层向量是一个N维向量,每维与词汇表中的一个单词相对应。最后,对输出层向量应用 Softmax 激活函数,可以计算出每个单词的生成概率。Softmax 激活函数的定义为:
P ( y = w n ∣ x ) = e x n ∑ k = 1 N e x i P(y=w_n|x)=\frac{e^{x_n}}{\sum_{k=1}^N e^{x_i}} P(y=wnx)=k=1Nexiexn
训练得到维度为 N × K N\times K N×K K × N K\times N K×N 的两个权重矩阵之后,可以选择其中一个作为N个词的K维向量表示。

7 图像数据不足时的处理方法

训练数据不足时,模型从原始数据中获取的信息比较少,这就需要更多先验信息来保证模型的效果。先验信息可以作用在:模型上(模型采用特定的内在结构、条件先设或添加其他一些约束条件)和数据集上(根据特定的先验假设去调整、变换或扩展训练数据)。

7.1 基于模型的方法

采用降低过拟合风险的措施:

  1. 简化模型,如非线性改为线性
  2. 添加约束项以缩小假设空间(参见NYU机器学习课上讲的)
  3. 集成学习
  4. Dropout超参数

7.2 基于数据的方法

主要通过数据扩充。下面的是针对图像分类任务中对每幅图像进行一下变换:

  1. 一定程度内的旋转、平移、缩放、裁剪、填充、左右翻转等,这些变换对应着同一个目标在不同角度的观察结果
  2. 对图像中的像素添加噪声扰动,比如椒盐噪声,高斯白噪声
  3. 颜色变换
  4. 改变图像的亮度,清晰度,对比度和锐度
  5. 先对图像进行特征提取,然后在图像的特征空间进行变换,利用一些通用的数据扩充或上采样技术
  6. 生成模型来合成新样本(自编码器好像可以)。如生成对抗网络。

迁移学习。借用一个在大规模数据集上预训练好的通用模型,并在针对目标任务的小数据集上进行微调。因为往往一个好的模型本身已经能够达到很好地效果了。(可参见吴恩达的一篇关于模型的论文,有的时候一个随机初始化的优秀的模型已经赢在起跑线了)。

参考

读书笔记,内容来源于《百面机器学习》。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值