1.特征工程

1.1为什么需要对数值类型的特征做归一化?

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

  • 线性函数归一化( Min-Max Scaling )
  • 零均值归一化( Z-Score Normalization)

image.png
当然,数据归一化并不是万能的。在实际应用中,通过梯度下降法求解的模型通常是需要归一化的, 包括线性回归、逻辑回归、支持向量机、神经网络等模型。但对于决策树模型则并不适用,以C4.5 为例,决策树在进行节点分裂时主要依据数据集D关于特征x 的信息增益比,而信息增益比跟特征是否经过归一化是无关的,因为归一化并不会改变样本在特征X 上的信息增益。

1.2 在对数据进行预处理时,应该怎样处理类别型特征?

  • 序号编码(用于处理类别间具有大小关系的数据)

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

  • 独热编码(用于处理类别间不具有大小关系的特征)

    例如血型,一共有4个取值(A型血、B型血、AB型血、O型血),独热编码会把血型变成一个4维稀疏向量,A型血表示为(1,0, 0,0),B型血表示为(0,1,0,0),AB型表示为(0,0,1,0 ),o型血表示为(0,0,1)。对于类别取值较多的情况下使用独热编码需要注意以下问题。 (1)使用稀疏向量来节省空间。在独热编码下,特征向量只有某一维取值为1,其他位置取值均为0。因此可以利用向量的稀疏表示有效地节省空间,并且目前大部分的算法均接受稀疏向量形式的输入。 (2)配合特征选择来降低维度。高维度特征会带来几方面的问题。一是在K近邻算法中,高维空间下两点之间的距离很难得到有效的衡量;二是在逻辑回归模型中,参数的数量会随着维度的增高而增加,容易起过拟合问题;三是通常只有部分维度是对分类、预测有帮助,因此以考虑配合特征选择来降低维度。

  • 二进制编码

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

1.3 什么是组合特征?如何处理高维组合特征?

为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。

百面机器学习 - 图3 如表所示,新年这个特征,跟不同的国家这个特征组合起来,所代表的含义是不一样的。中国的新年是春节,美国的新年是元旦。 如果说,某些中国用户在2月份购物欲望大增,某些美国人在12月底购物狂热,很可能是跟各自国家的新年节日有关。而我们单独去分析新年和国家这两个特征的话,都无法解释这一现象,只有将其组合起来才可以挖掘出更深信息。

百面机器学习 - 图4

1.4 怎样有效地找到组合特征?

生产环境中,会面对多种高维特征,简单的进行两两组合,依然会造成参数过多的问题,所以非常有必要找到有意义的一些组合。

  • 通过对业务理解寻找有意义的特征。比如,物品有点击,展示,图片,描述等特征,我们是否可以将点击/展示作为新的特征呢?这个可以表示物品的点击率。
  • 利用GBDT的叶子节点的输出作为组合特征。
  • 对所有可能得组合,一次去除一个特征组合,计算指标,剔除影响小的。
  • 通过随机森林等,对组合特征尽性重要程度打分,去除打分低的

    1.7 在图像分类任务中,训练数据不足会带来什幺问题?如何缓解数据量不足带来的问题?

    一个模型所能提供的信息一般来源于两个方面,一是训练数据中蕴含的信息;二是在模型的形成过程中(包括构造、学习、推理等),人们提供的先验信息。当训练数据不足时,说明模型从原始数据中获取的信息比较少,这种情况下要想保证模型的效果,就需要更多先验信息。先验信息可以作用在模型上,例如让模型采用特定的内在结构、条件假设或添加其他一些约束条件;先验信息也可以直接施加在数据集上,即根据特定的先验假设去调整、变换或扩展训练数据,让其展现出更多的、更有用的信息,以利于后续模型的训练和学习。
    具体到图像分类任务上,训练数据不足带来的问题主要表现在过拟合方面,即模型在训练样本上的效果可能不错,但在测试集上的泛化效果不佳。
    根据上述讨论,对应的处理方法大致也可以分两类:
    一是基于模型的方法,主要是采用降低过拟合风险的措施,包括简化模型(如将非线性模型简化为线性模型)、添加约束项以缩小假设空间(如L1/L2正则项)、集成学习、Dropout超参数等;
    二是基于数据的方法,主要通过数据扩充(Data Augmentation),即根据一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。具体到图像分类任务中,在保持图像类别不变的前提下,可以对训练集中的每幅图像进行以下变换。
    除了直接在图像空间进行变换,还可以先对图像进行特征提取,然后在图像的特征空间内进行变换,利用一些通用的数据扩充或上采样技术,例如SMOTE ( Synthetic Minority Over-sampling Technique )算法。抛开上述这些启发式的变换方法,使用生成模型也可以合成一些新样本,例如当今非常流行的生成式对抗网络模型。
    此外,借助已有的其他模型或数据来进行迁移学习在深度学习中也十分常见。例如,对于大部分图像分类任务,并不需要从头开始训练模型,而是借用一个在大规模数据集上预训练好的通用模型,并在针对目标任务的小数据集上进行微调( fine-tune),这种微调操作就可以看成是一种简单的迁移学习