百面机器学习—2. 特征工程与模型评估要点总结

时间:2024-10-26 07:16:36

文章目录

    • 一、 特征归一化与标准化问题
      • 1. 什么是归一化?
      • 2. 有哪些归一化方法?
      • 3. 为什么要对数值类型特征做归一化?
      • 4. 标准化与归一化的区别
    • 二、 组合特征的相关问题
      • 1. 什么是组合特征?
      • 2. 怎么处理高维组合特征?
      • 3. 怎样有效的找到组合特征?
    • 三、如何处理类别型特征?
    • 四、文本处理部分问题
      • 1.什么是词袋模型?
      • -IDF怎么计算的?
      • 3. 主题模型
      • 4. 什么是词嵌入模型?
      • 5. 如何理解word2vec?
    • 五、总结分类问题和回归问题评价指标
    • 六、ROC与AUC
      • 1.什么是ROC?如何绘制ROC?
      • 2. 如何计算AUC?
    • 七、过拟合与欠拟合
      • 1.什么是过拟合与欠拟合?
      • 2.如何处理过拟合与欠拟合?
    • 八、如何处理数据中的缺省值?
    • 九、类别不平衡问题
      • 1.为什么类别不平衡问题会影响结果?
      • 2.如何处理类别不平衡问题?


插眼:

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

一、 特征归一化与标准化问题

1. 什么是归一化?

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

2. 有哪些归一化方法?

在这里插入图片描述

3. 为什么要对数值类型特征做归一化?

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

4. 标准化与归一化的区别

我是这么理解的,这些可以统一称为归一化,这里的“一”指的同一量级。
最大最小归一化(Min-Max)与均值归一化对异常值敏感,零均值归一化对异常值的鲁棒性更强

二、 组合特征的相关问题

1. 什么是组合特征?

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

2. 怎么处理高维组合特征?

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

3. 怎样有效的找到组合特征?

如果只是简单的两两组合,依然会存在参数过多、过拟合问题,而且并不是所有的特征组合都是有意义的。因此我们需要有效的方法找到应该对哪些特征进行组合。基于决策树的特征组合寻找组合特征,每一条从根节点到叶结点的路径可以看做是一种特征组合的方式。

三、如何处理类别型特征?

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

  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.什么是词袋模型?

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

-IDF怎么计算的?

词袋模型常用TF-IDF来计算权重,公式为:
T F − I D F ( t , d ) = T F ( t , d ) × I D F ( t ) TF-IDF(t,d)=TF(t,d)×IDF(t) TFIDF(t,d)=TF(t,d)×IDF(t)
其中TF(t,d)为单词t在文档d中出现的频率,IDF(t)是逆文档频率,用来衡量单词t对表达语义所起的重要性,表示为
I D F ( t ) = l o g [ ( 文 章 总 数 ) / ( 句 含 单 词 t 的 文 章 总 数 + 1 ) ] IDF(t)=log{[(文章总数)/(句含单词t的文章总数+1)]} IDF(t)=log[()/(t+1)]
直观的解释是,如果一个单词在非常多的文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,因此对权重做一定惩罚。

3. 主题模型

主题模型用于从文本库中发现有代表性的主题(得到每个主题上面词的分布特性),并且能够计算出每篇文章的主题分布

4. 什么是词嵌入模型?

词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成低维空间(通常K=50 ~ 300 维)上的一个稠密向量( DenseVector )。K维空间的每一维也可以看作一个隐含的主题,只不过不像主题模型中的主题那样直观。
由于词嵌入将每个词映射成一个K维的向量,如果一篇文档有N个词,就可以用一个N*K维的矩阵来表示这篇文档,但是这样的表示过于底层。在实际应用中,如果仅仅把这个矩阵作为原文本的表示特征输入到机器学习模型中,通常很难得到令人满意的结果。因此,还需要在此基础之上加工出更高层的特征。在传统的浅层机器学习模型中,一个好的特征工程往往可以带来算法效果的显著提升。而深度学习模型正好为我们提供了一种自动地进行特征工程的方式,模型中的每个隐层都可以认为对应着不同抽象层次的特征。从这个角度来讲,深度学习模型能够打败浅层模型也就顺理成章了。卷积神经网络和循环神经网络的结构在文本表示中取得了很好的效果,主要是由于它们能够更好地对文本进行建模,抽取出一些高层的语义特征。与全连接的网络结构相比,卷积神经网络和循环神经网络一方面很好地抓住了文本的特性,另一方面又减少了网络中待学习的参数,提高了训练速度,并且降低了过拟合的风险。

5. 如何理解word2vec

请阅读这篇文章

五、总结分类问题和回归问题评价指标

在这里插入图片描述

六、ROC与AUC

1.什么是ROC?如何绘制ROC?

首先先理解混淆矩阵的概念
混淆矩阵中有Postitive(阳性)、Negative(阴性)、False(伪)、True(真)的概念
预测类别为0的为Negative(阴性),预测类别为1的为Postitive(阳性)
预测错误的为False(伪)、预测正确为True(真)
在这里插入图片描述
在这里插入图片描述
动态调整阈值,即可绘制ROC曲线

2. 如何计算AUC?

AUC是ROC曲线下面的面积

七、过拟合与欠拟合

1.什么是过拟合与欠拟合?

过拟合是指模型对于训练数据拟合呈过当的情况,反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差。欠拟合指的是模型在训练和预测时表现都不好的情况。
在这里插入图片描述

2.如何处理过拟合与欠拟合?

降低过拟合风险的方法

  1. 从数据入手,获得更多的训练数据。增加实验数据是解决过拟合问题最有效的手段,因为更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。
  2. 降低模型复杂度。在数据较少时,模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如,在神经网络模型中减少网络层数、神经元个数等;在决策树模型中降低树的深度、进行剪枝等。
  3. 正则化方法。给模型的参数加上一定的正则约束
  4. 集成学习方法。集成学习是把多个模型集成在一起,来降低单—模型的过拟合风险,如Bagging方法。

降低欠拟合风险的方法

  1. 添加新特征。当特征不足或者现有特征与样本标签的相关性不强时,模型容易出现欠拟合。通过挖掘“上下文特征”“ID类特征”“组合特征”等新的特征,往往能够取得更好的效果。在深度学习潮流中,有很多模型可以帮助完成特征工程,如因子分解机、梯度提升决策树
  2. 增加模型复杂度。简单模型的学习能力较差,通过增加模型的复杂度可以使模型拥有更强的拟合能力。例如,在线性模型中添加高次项,在神经网络模型中增加网络层数或神经元个数等。
  3. 减小正则化系数。正则化是用来防止过拟合的,但当模型出现欠拟合现象时,则需要有针对性地减小正则化系数。

八、如何处理数据中的缺省值?

  1. 直接使用含有缺失值的数据:某些算法(如决策树)可以直接使用含有缺失值的情况。
    优点是直接使用原始数据,排除了人工处理缺失值带来的信息损失。缺点是只有少量的算法支持这种方式。
  2. 删除含有缺失值的数据。如果样本中包含大量的缺失值,只有少量的有效值,则该方法可以接受,否则会损失大量的信息。
  3. 缺失值补全。这是最常用的一种方法,优点是可以保留信息,缺点是会引入额外的误差。最常用的是均值插补/同类均值插补,其他的一些方法如:建模预测、高维映射、多重插补、压缩感知及矩阵补全

九、类别不平衡问题

1.为什么类别不平衡问题会影响结果?

通常在机器学习中都有一个基本假设:不同类别的训练样本数目相当。若假设不成立则使得基于该假设下的方法不能很好的工作。

2.如何处理类别不平衡问题?

再缩放

一般的分类问题最终的输出是一个概率分布,我们可以通过将p和一个阈值,如0.5进行比较,若 p > 0.5 p>0.5 p>0.5判断该类是正类。因而 p / ( 1 − p ) p/(1-p) p/(1p)刻画的是正类可能性与反类可能性的比值。当存在类别不平衡时,假设 N t N_t Nt表示正类样本数目, N f N_f Nf表示反类样本数目,则观测几率是 N t / N f N_t/N_f Nt/Nf ,假设训练集是真实样本总体的无偏采样,因此可以用观测几率代替真实几率。于是只要分类器的预测几率高于观测几率就应该判断为正类。即如果 p / ( 1 − p ) > N t / N f p/(1-p)>N_t/N_f p/(1p)>Nt/Nf ,则说明正类预测的概率更高,故而预测为正类。
通常分类器是通过概率进行分类的,因而可以令 ¯ p / ( 1 − ¯ p ) = p / ( 1 − p ) × N f / N ( t ) ¯p/(1-¯p)=p/(1-p)×N^f/N^(t ) ¯p/(1¯p)=p/(1p)×Nf/N(t) ,然后比较 ¯ p ¯p ¯p和设定的阈值的大小进行分类。
再缩放虽然简单,但是由于“训练集是真实样本总体的无偏采样”这个假设往往不成立,所以无法基于训练集观测几率来推断出真实几率。

欠采样

删除一些样本,使得正负样本数量接近。
欠采样若随机抛弃反类,则可能丢失一些重要信息。常用方法是将反类划分成若干个集合供不同学习器使用,这样对每个学习器来看都是欠采样,但是全局来看并不会丢失重要信息。

重采样

增加一些样本,使得正负样本数量接近,但不能简单对原样本进行重复采样,否则会出现严重的过拟合问题。通常可以使用一些重采样的方法,如SMOTE

不均衡样本集采样—SMOTE算法与ADASYN算法


如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!
在这里插入图片描述