百面机器学习—1.特征工程

时间:2024-10-05 07:27:45

文章目录

      • 引言
      • 一、特征归一化
      • 二、类别型特征
      • 三、高维组合特征的处理
      • 四、组合特征
        • 1.怎么有效地找到组合特征?
      • 五、文本表示类型
        • 1.有哪些文本表示模型?
        • 2.模型有什么优缺点?
      • 六、Word2Vec
      • 七、图像数据不足的处理方法
        • 1.图像分类任务中,训练数据不足会带来什么问题?
        • 2.如何缓解数据量不足带来的问题?


插眼:

  • 百面机器学习—1.特征工程
  • 百面机器学习—2. 特征工程与模型评估要点总结
  • 百面机器学习—3.逻辑回归与决策树要点总结
  • 百面机器学习—模型基础知识
  • 百面机器学习—要点总结
  • 百面机器学习—与LDA要点总结
  • 百面机器学习—均值算法、EM算法与高斯混合模型要点总结
  • 百面机器学习—8.概率图模型之HMM模型
  • 百面机器学习—9.前馈神经网络面试问题总结
  • 百面机器学习—10.循环神经网络面试问题总结
  • 百面机器学习—11.集成学习(GBDT、XGBoost)面试问题总结
  • 百面机器学习—12.优化算法

引言

  参考:百面机器学习pdf:链接:/s/1QHWWEXxrOIOQgTycz3YX6Q
提取码:y01g

一、特征归一化

描述
  为了消除数据特征之间的量纲影响,我们需要对特征进行归一化,使得不同指标之间具有可比性,使得各指标处于同一数值量级,以便于分析。
方法:

  1. 线性函数归一化(Min-Max),将原始数据映射到[0,1]范围内

    from sklearn.preprocessing import MinMaxScaler
    
    • 1
  2. 零均值归一化(标准化),将原始数据映射到mean=0,std=1的分布上

    from sklearn.preprocessing import StandardScaler
    
    • 1

为什么需要对数值特征做归一化?
  以随机梯度下降为例,在学习率相同的情况下,经过归一化后的数据容易更快的通过梯度下降找到最优解。
在这里插入图片描述
  在实际运用中,通过梯度下降的算法求解的模型都需要归一化,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但对决策树模型并不适用,因为信息增益、信息增益比、基尼指数跟特征是否经过归一化是无关的。

二、类别型特征

描述
  类别特征指在有限选项内取值的特征,通常为字符串形式。除决策树等少数模型可以直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型都需要先将类别型特征直接转换成数值型特征。
在对数据进行预处理时,应该如何处理类别型特征?

  1. 序号编码
    通常处理类别间具有大小关系的数据,会按照大小关系给类别特征赋予一个数值ID

    from sklearn.preprocessing import OrdinalEncoder
    import numpy as np
    
    label = OrdinalEncoder()
    list = ['中国', '美国', '法国', '德国']
    list = np.array(list).reshape(-1,1)
    labels = label.fit_transform(list)
    print(labels)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    [[0.]
     [3.]
     [2.]
     [1.]]
    
    • 1
    • 2
    • 3
    • 4

    如果数据本身并不存在大小关系,使用该编码会给这个特征增加不存在的顺序关系,增加了噪声

  2. 独热编码—onehot编码
    通常用于处理类别间不具有大小关系的特征。

    from sklearn.preprocessing import LabelEncoder,OneHotEncoder
    import numpy as np
    
    label = LabelEncoder()
    labels = label.fit_transform(['中国', '美国', '法国', '德国'])
    print(labels)
    
    labels = np.array(labels).reshape(len(labels), 1)  # 先将X组织成(sample,feature)的格式
    # list = ['中国', '美国', '法国', '德国']
    # list = (list).reshape(-1,1)
    onehot = OneHotEncoder()
    onehot_label = onehot.fit_transform(labels)
    print(onehot_label.toarray())  # 这里一定要进行toarray(),转换成array格式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    [0 3 2 1]
    [[1. 0. 0. 0.]
     [0. 0. 0. 1.]
     [0. 0. 1. 0.]
     [0. 1. 0. 0.]]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    对于类别取值较多(转换成onehot编码维度会很高)的情况下注意如下问题:
    1.使用稀疏向量来节省空间
    2.需配合特征选择来降低维度,一方面在逻辑回归模型中,维度的增加会导致参数的数量的增加,容易引起过拟合问题;另一方面,只有部分维度对于分类、预测是有效的。

  3. 二进制编码—Binary Encoding
    先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。二进制编码本质上是利用二进制对ID进行哈希映射,最终得到0/1特征向量,维度少于独热编码,节省了空间。

三、高维组合特征的处理

什么是组合特征?
  为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。
如何处理高维组合特征?

利用降维方法来减少两个高维特征组合后需要学习的参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、组合特征

  将多种高维特征,如果只是简单的两两组合,依然会存在参数过多、过拟合问题,而且并不是所有的特征组合都是有意义的。因此我们需要有效的方法找到应该对哪些特征进行组合。

1.怎么有效地找到组合特征?

  基于决策树的特征组合寻找方法,每一条从根节点到叶结点的路径可以看做是一种特征组合方式。
在这里插入图片描述

五、文本表示类型

  文本是非结构化数据

1.有哪些文本表示模型?

在这里插入图片描述

2.模型有什么优缺点?

词袋模型:

含义:将每篇文章看成一袋子词,并忽略每个词出现的顺序。(将文章按单词分开,每篇文章表示成一个长向量,向量中的每一维代表一个单词)
在这里插入图片描述

N-gram模型:将连续出现的n个词组成的词组作为一个单独的特征放到向量表示中去

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

词嵌入:将词向量化,将每个词都映射到低维空间上的稠密向量

深度学习模型:深度学习模型的每一个隐层都可以认为对应着不同抽象层次的特征。
在这里插入图片描述

六、Word2Vec

这部分不做论述

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

  当训练一个图像分类模型时,如果训练样本比较少,该如何处理?
在这里插入图片描述

1.图像分类任务中,训练数据不足会带来什么问题?

  过拟合,模型泛化能力弱

2.如何缓解数据量不足带来的问题?

1.基于模型的方法,主要是采用降低过拟合风险的措施

包括简化模型、添加正则项、集成学习、Dropout超参数

2.基于数据的方法,主要是进行数据扩充。在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。
在这里插入图片描述

3.上采样与生成对抗网络
在这里插入图片描述

4.迁移学习
在这里插入图片描述