zoukankan      html  css  js  c++  java
  • 机器学习-特征工程

    1. 特征归一化

    为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。

    对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。最常用的方法主要有以下两种。

    备注:有道云笔记支持的是KATEX语法


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

    它对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对原始数据的等比缩放。归一化公式如下:

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

    其中,X为原始数据,X_max、X_min分别是数据最大值和最小值。

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

    它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为u、标准差为$sigma$,那么归一化公式定义为:

    z = frac{x - u}{sigma}
    

    1.3 回答为什么需要对数值型特征做归一化?

    通过对数值进行归一化,进行更少的迭代就能得到最优解。形象地说,将数据分布由椭圆形由细又长,拉成圆形,梯度下降地更快。

    2. 类别型特征

    类别型特征(Categorical Feature)主要是指性别(男、女)、血型(A、B、AB、O)等只在有限选项内取值的特征。类别型特征原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。


    2.1 数据预处理,如何处理类别型特征

    2.1.1 序号编码(Ordinal Encoding)

    序号编码通常用于处理类别间具有大小关系的数据。例如成绩,可以分为低、中、高三档,并且存在“高>中>低”的排序关系。序号编码会按照大小关系对类别型特征赋予一个数值ID,例如高表示为3、中表示为2、低表示为1,转换后依然保留了大小关系。

    2.1.2 独热编码(One-hot Encoding)

    独热编码通常用于处理类别间不具有大小关系的特征。例如血型,一共有4个取值(A型血、B型血、AB型血、O型血),独热编码会把血型变成一个4维稀疏向量,A型血表示为(1,0,0,0),B型血表示为(0,1,0,0),AB型表示为(0,0,
    1,0),O型血表示为(0,0,0,1)。

    对于类别取值较多的情况下使用独热编码需要注意以下问题。

    1. 使用稀疏向量来节省空间。所谓稀疏,指的就是含有0比较多。具体就是,在独热编码下,特征向量只有某一维取值为1,其他位置均为0.
    2. 配合特征选择来降低维度。 高维度特征会带来几方面的问题。 一是在K
      近邻算法中, 高维空间下两点之间的距离很难得到有效的衡量; 二是在逻辑回归
      模型中, 参数的数量会随着维度的增高而增加, 容易引起过拟合问题; 三是通常
      只有部分维度是对分类、 预测有帮助, 因此可以考虑配合特征选择来降低维度。
    2.1.3 二进制编码

    二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。以A、B、AB、O血型为例,表1.1是二进制编码的过程。A型血的ID为1,二进制表示为001;B型血的ID为2,二进制表示为010;以此类推可以得到AB型血和O型血的二进制表示。可以看出,二进制编码本质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,且维数少于独热编码,节省了存储空间。

    3. 组合特征

    具体用一种基于决策树的特征组合寻找的方法,去说明什么是组合特征。

    假设有如下图的决策树:

    于是,每一条从根节点到叶节点的路径都可以看成一种特征组合的方式。

    4. 文本表示模型

    4.1 词袋模型和N-gram模型

    最基础的文本表示模型是词袋模型。顾名思义,就是将每篇文章看成一袋子词,并忽略每个词出现的顺序。具体地说,就是将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反映了这个词在原文章中的重要程度。常用TF-IDF来计算权重,公式为:

    其中TF(t,d)为单词t在文档d中出现的频率,IDF(t)是逆文档频率,用来衡量单词t对表达语义所起的重要性,表示为:

    直观的解释是,如果一个单词在非常多的文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,因此对权重做一定惩罚。

    将文章进行单词级别的划分有时候并不是一种好的做法,比如英文中的natural language processing(自然语言处理)一词,如果将natural,language,processing这3个词拆分开来,所表达的含义与三个词连续出现时大相径庭。通常,可以将连续出现的n个词(nsN)组成的词组(N-gram)也作为一个单独的特征放到向量表示中去,构成N-gram模型。另外,同一个词可能有多种词性变化,却具有相似的含义。在实际应用中,一般会对单词进行词干抽取(Word Stemming)处理,即将不同词性的单词统一成为同一词干的形式。

    4.2 主题模型

    从文本库中发现有代表性的主题,并且能够计算出每篇文章的主题分布。

    4.3 词嵌入与深度学习模型

    词嵌入是一类将词向量化的模型的统称。

    核心思想:将每个词 都映射成低维空间(通常K=50~300维)上的一个稠密向量(Dense Vector)。K维空间的每一个维也可以看作一个隐含的主题。

    由于词嵌入将每个词映射成一个K维的向量,如果一篇文档有N个词,就可以用一个NxK维的矩阵来表示这篇文档,但是这样的表示过于底层。在实际应用中,如果仅仅把这个矩阵作为原文本的表示特征输入到机器学习模型中,通常很难得到令人满意的结果。因此,还需要在此基础之上加工出更高层的特征。在传统的浅层机器学习模型中,一个好的特征工程往往可以带来算法效果的显著提升。

    而深度学习模型正好为我们提供了一种自动地进行特征工程的方式,模型中的每个隐层都可以认为对应着不同抽象层次的特征。从这个角度来讲,深度学习模型能够打败浅层模型也就顺理成章了。

    常用的词嵌入模型:谷歌提出的Word2Vec。

    5. 图像数据不足的处理方法

    图像数据不足时,很容易造成过拟合。

    常用的解决办法:

    1. 基于模型的方法
      1. 简化模型(网络模型,非线性变线性)
      2. 集成学习
      3. Dropout超参数调节
      4. 添加约束项L1/L2正则项
    2. 基于数据的方法
      1. 数据增强(Data Augmentation)
        1. 一定程度的随机旋转、平移、缩放、裁剪、填充、左右翻转
        2. 对图像中的像素添加噪声扰动,如椒盐噪声、高斯白噪声
        3. 颜色变换
        4. 改变图像的亮度、清晰度、对比度、锐度等。
      2. 用生成对抗网络GAN生成新样本
    3. 进行迁移学习(在预训练好的模型上,针对目标任务的小数据进行微调fine-tune)
  • 相关阅读:
    你好,明天
    一句话实现星级评价
    react路由
    react插件包
    react 组件列表
    css小demo
    react的项目坑
    配置react-sass
    node-sass下载失败 关于webpack
    react render
  • 原文地址:https://www.cnblogs.com/wemo/p/10508583.html
Copyright © 2011-2022 走看看