当前位置:   article > 正文

【百面机器学习】第一章 特征工程_特征工程 向量

特征工程 向量

百面机器学习开篇一句话非常经典:对于一个机器学习问题,数据和特征往往决定了结果的上限,而模型和算法的选择及优化则是在逐步接近这个上限。

一、特征工程

1、特征工程定义

对原始数据进行一系列的工程处理,将其提炼为特征,作为输入供算法和模型使用。从本质上来讲,特征工程是一个表示和展现数据的过程,在世界工作中,特征工程还包括对数据的一些预处理工作。

2、原始数据类型:

原始数据类型常用的有两种:

  • 结构化数据:可以看做关系数据库中的一张表,每行代表一个样本,每列都有清晰的定义,有数值型/类别型两种基本的类型。
  • 非结构化数据:样本包含的信息,无法用简单的数值标识,也没有清晰的类别定义。每条数据的大小各不相同。包括文本,图像,视频等。

二、特征归一化(数值型特征)

1、为什么要进行特征归一化:

举个例子,

  • 分析一个人身高/体重 对健康的影响,如果身高取值范围是[1.6m-1.8m],体重取值范围是[50kg-100kg],显然数值差别比较大的体重的特征会对结果产生更大的影响。
  • 在一定的学习率下,差值范围大的特征需要较多的迭代才能找到最优解。下面两个图,同样进行梯度下降求解,特征归一化后迭代次数更少。

   图2-1 特征归一化前                                                         图2-2 特征归一化后

因此,需要需要将所有的特征都统一到一个大致相同的数值区间内,使得不同指标之间具有可比性,更新速度能够保持一致。

2、特征归一化的方法

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

       对原始数据进行线性变换,使结果映射到[0, 1]区间。假设原始数据最大值为X_{max},最小值为X_{min},归一化公式为:

       X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}}    

  • 零均值归一化(Z-Score Normalization)

       将原始数据映射到均值为0,标准差为1的分布上。假设原始特征的均值为\mu,标准差为\sigma,归一化公式为:

       z=\frac{x-\mu}{\sigma}

3、所有模型中都需要进行特征归一化吗?

显然不是。

通过梯度下降求解的模型通常是需要归一化的,包括线性回归,逻辑回归,SVM,神经网络等;

对于决策树模型,只要参照特征x的信息增益比进行分裂,则不需要对特征的值进行归一化。

三、类别型特征

1、类别型特征表示方法:

  • 序号编码(Ordinal Encoding):通常用于处理类别间具有大小关系的数据。如成绩分档,高>中>低。编码方法:按照大小关系,对类别特征赋予一个数值ID,编码后大小关系保持不变。
  • 独热编码(One-hot Encoding):通常用于处理类别间不具有大小关系的特征,如血型,A,B,AB,O;假设特征有K个取值,则该特征表示为一个K维的稀疏向量,只有某一维取值为1,其他维度取值为0。
     对于类别较多的情况,需要注意:
    • 利用向量的稀疏表示来节省空间(向量的稀疏表示入门可以参考https://www.cnblogs.com/yifdu25/p/8385204.html
    • 配合特征选择来降低维度
      • 特征维度过高会带来哪些问题:
      • K临近算法中,高维空间下两点距离很难衡量
      • 逻辑回归中,参数的个数会随着特征维度的增高而增加,容易引起过拟合问题
      • 只有部分维度对任务的求解有帮助
  • 二进制编码(Binary Encoding)
    • 先用序号编码给每个类别一个类别ID
    • 在对每个类别ID化成对应的二进制编码
    • 相对独热编码,节省了存储空间。

 

四、组合特征(结构化特征)

如何选取特征组合:决策树 

如何处理高维特征组合:特征降维(矩阵分解)如何有效的构造决策树?梯度提升决策树

注:这里要说三个概念,特征组合,特征交叉(feature crosses),合成特征(synthetic feature)

https://segmentfault.com/a/1190000014799038?utm_source=tag-newest

  • 特征组合,就是特征交叉,将一个特征与其本身或者其他特征相乘或者求笛卡尔积。有助于表示非线性特征。
  • 合成特征:由一个或者多个输入特征衍生而来的特征。生成方式包括:
    • 组合特征
    • 两个特征相除
    • 对连续特征进行分桶

 

五、文本表示模型(非结构化特征)

1、词袋模型(Bag of Words)

将每篇文章看做一袋子词,并忽略词出现的顺序。即整篇文章以词为单位切分,并表示为一个长向量。向量的每一维代表一个单词,该维的权重表示每个这个词在文章中的重要程度。这个重要程度通常用TF-IDF(Term Frequency-Inverse Document Frequency)来表示。
           TF(t,d)=\frac{n_{d,t}}{n_{d}} (n_{d,t} 单词t在文档d中出现的次数,n_{d}文档d中单词的总数)
          IDF(t) = log\frac{\left | d \right |}{\left | d_{t} \right |+1}  ( \left | d \right |文章的总数,\left | d_{t} \right |包含单词t的文章总数)
         TF-IDF(t,d)=TF(t,d)\cdot IDF(t)

  • 缺点:
    • 忽略了词出现的顺序

2、N-gram模型

将连续出现的n(n\leqslant N)组成的词组(N-gram)作为一个单独的特征,放到向量表示中去,构成N-gram模型。

3、主题模型(Topic Model)

用于从文本中发现有代表性的主题,并能够计算出每篇文章中的主题分布,例如LDA模型

4、词嵌入模型(Word Embedding)

词嵌入模型是词向量化模型的统称,核心思想是将每个词映射为低维空间(通常K=50\sim 300维)的一个稠密向量。K维空间中的每一维都可以看做一个隐含的主题。

  • Word2Vec
    一种浅层神经网络模型,有两种网络结构:
    • CBOW(Continues Bag of Words):根据上下文预测当前词的生成概率
    • Skip-gram:根据当前词预测上下文的生成概率
    • 都包括输入层,映射层和输出层:
      • 输入层:每个词有独热编码表示
      • 中间层:K个隐含单元的单层神经网络(最终词向量是K维),输入层和映射层之间是NxK维权重矩阵,映射层输入时K维向量
      • 输出层:隐含层和输出层之间是KxN维权重矩阵,输出层是N维向量
      • 对输出层向量应用Softmax激活函数,可以计算出每个单词的生成概率。word2vec的目的在于学习权重矩阵,可以选择两个权重矩阵中的一个,作为N个单词的K维表示形式。
  • 注:
    • word2vec 与LDA的区别和联系:(没看懂。。。TODO)

一篇文章有N个词,就要表示成NxK维的矩阵。在实际应用中,如果将NxK维的矩阵直接输入到模型中,很难得到满意的结果。因此需要深度模型自动进行特征工程。

5、深度学习模型

能够很好的对文本进行建模,抽取出一些高层的语义特征。

  • 卷积神经网络
  • 循环神经网络

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

图像数据不足时容易出现过拟合。

对应的处理方法有两类:

  • 基于模型,采用降低过拟合风险的措施,包括简化模型,添加约束项(L1/L2正则项),集成学习,DropOut超参数等。
  • 基于数据:数据扩充(Data Augmentation),根据一些先验只是,在保持特定信息的前提下, 对原始数据进行适当大变换,以达到扩充数据集的效果。

(此处提到了迁移学习,与对抗网络模型,没太看懂 TODO)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/997249
推荐阅读
相关标签
  

闽ICP备14008679号