十个机器学习高频面试问题

总结十个机器学习高频面试问题。


偏差与方差

定义

偏差: 衡量预测的期望值和真实值的差
方差: 衡量预测的期望值和预测值的差平方和

Err = Bias^2 + Variance + 噪声

偏差描述拟合能力,方差描述模型的稳定性

导致偏差的是模型错误的假设,导致方差的是模型的复杂度相对于训练集过高

深度学习

拟合能力强,训练误差小,方差较大,降低泛化误差——正则化方法

偏差与方差的权衡

  • 训练不足 你和能力不够 偏差主导
  • 拟合能力增强 方差主导
  • 过拟合

生成模型与判别模型

区别

  • 判别模型直接学习决策函数或者条件概率分布
  • 生成模型学习联合概率分布,然后根据条件概率公式计算

联系

  • 生成模型可以得到判别模型,反之不可以
  • 存在隐变量时,只能使用生成模型

优缺点

判别模型:

  • 优点: 直接预测,准确率高; 对数据抽象,可以使用特征简化学习过程
  • 缺点: 不能反映数据本身特性

生成模型:

  • 可以反映联合概率分布
  • 学习收敛速度快
  • 存在隐变量也可以使用
  • 缺点: 学习和计算比较复杂

常见模型

  • 判别模型: K近邻 感知机 决策树 LR 最大熵 SVM boost 条件随机场
  • 生成模型: 朴素贝叶斯 隐马尔科夫 混合高斯 贝叶斯 马尔科夫随机场

先验概率和后验概率

垃圾邮件分类器

  1. 先验概率 P(S) P(H) 0.5
  2. 一个词语的后验概率p(S|W)
  3. 15个垃圾邮件概率最高的词,求联合概率P
  4. 设置阈值 P>0.9认为垃圾

此处输入图片的描述

  • 先验概率:
    事件发生前的预判概率。可以是基于历史数据的统计,可以由背景常识得出,也可以是人的主观观点给出 一般都是单独事件概率,如P(x),P(y)。
  • 后验概率:
    事件发生后求的反向条件概率;或者说,基于先验概率求得的反向条件概率。概率形式与条件概率相同。
    条件概率:
    一个事件发生后另一个事件发生的概率。一般的形式为P(x|y)表示y发生的条件下x发生的概率。

贝叶斯公式求条件概率:

P(y|x) = ( P(x|y) * P(y) ) /P(x)

最大似然理论: 认为P(X|Y)最大的类别Y,就是当前文档所属类别


超参数选择

穷举搜索,所有候选参数尝试:

设置训练集,验证集,测试集 —— 验证集用来调参

  • 网格搜索
  • 高维空间中对一定区域遍历
  • 高维空间中随机选择若干参数

余弦相似度(Cos距离)与欧氏距离的区别和联系

  1. 欧式距离和余弦相似度都能度量 2 个向量之间的相似度
  2. 放到向量空间中看,欧式距离衡量两点之间的直线距离,而余弦相似度计算的是两个向量之间的夹角
  3. 没有归一化时,欧式距离的范围是 (0, +∞],而余弦相似度的范围是 (0, 1];余弦距离是计算相似程度,而欧氏距离计算的是相同程度(对应值的相同程度)
  4. 归一化的情况下,可以将空间想象成一个超球面(三维),欧氏距离就是球面上两点的直线距离,而向量余弦值等价于两点的球面距离,本质是一样。

混淆矩阵、模型度量指标:准确率、精确率、召回率、F1 值等

准确率 ACC = TP+TN/TP+FN+TN+FP
精确率 precision = TP/TP+FP
召回率 recall = TP/TP+FN
F1 精确率和召回率的调和均值 2/F = 1/P+1/R


如何处理数据中的缺失值

  1. 缺失值较多,舍弃
  2. 缺失值较少,填充
    • 异常值填充
    • 均值
    • 相邻数据
    • 插值
    • 拟合

关联规则挖掘的 3 个度量指标:支持度、置信度、提升度

  • 支持度
  • 置信度
  • 提升度

信息量,信息熵,交叉熵,KL散度和互信息(信息增益)

K-L散度:

  • 非负 PQ相同分布,KL散度为0
  • 不对称

针对 Q 最小化交叉熵等价于最小化 P 对 Q 的 KL 散度,因为 Q 并不参与被省略的那一项。

最大似然估计中,最小化 KL 散度其实就是在最小化分布之间的交叉熵。


logistic回归

推导

负对数函数作为损失,极大似然法,最大化对数函数


SVM

推导

SMO 选取违背KKT条件最大的一对ai aj 固定a 求其他参数 更新a

最大间隔超平面背后的原理

  • 相当于在最小化权重时对训练误差进行了约束——对比 L2 范数正则化,则是在最小化训练误差时,对权重进行约束
  • 相当于限制了模型复杂度——在一定程度上防止过拟合,具有更强的泛化能力

与L2相比


决策树

ID3 C4.5

前者使用信息增益来进行特征选择,而后者使用信息增益比。

CART

回归树使用平方误差最小化,分类使用基尼指数最小化


集成学习

boosting

Boosting(提升)方法从某个基学习器出发,反复学习,得到一系列基学习器,然后组合它们构成一个强学习器。

AdaBoost

推导

  1. 初始化权值分布
  2. 基分类器,计算分类误差em
  3. 计算权值分布的系数 am ——用于加权表决
  4. 更新训练集权值分布
  5. 构建基学习器的线性组合
  1. 每一轮如何改变数据的权值或概率分布?——开始时,每个样本的权值是一样的,AdaBoost 的做法是提高上一轮弱分类器错误分类样本的权值,同时降低那些被正确分类样本的权值。
  2. 如何将弱分类器组合成一个强分类器?—— AdaBoost 采取加权表决的方法(加法模型am)。具体的,AdaBoost 会加大分类误差率小的基学习器的权值,使其在表决中起到更大的作用,同时减小分类误差率大的基学习器的权值。

算法要点:

开始时,训练集中所有数据具有均匀的权值分布
计算分类误差率,实际上就是计算所有分类错误的数据的权值之和
G_m(x) 的系数 α_m 表示该学习器在最终学习器中的重要性;公式 表明当分类错误率 e_m <= 1/2 时,α_m >= 0,并且 α_m 随 e_m 的减小而增大
被基分类器分类错误的样本权值会扩大,而分类正确的权值会缩小——不改变训练数据,而不断改变训练数据权值的分布,使训练数据在基学习器的学习中起到不同的作用,这是 AdaBoost 的一个特点。

是一种特殊的前向分步算法

提升树 boosting tree

  • 以决策树为基学习器,对分类问题使用二叉分类树,回归问题使用二叉回归树。
  • 解决回归问题时,通过不断拟合残差得到新的树。
  • 提升树模型可表示为决策树的加法模型
  • 然后通过最小化损失函数决定下一个决策树的参数
  • 对于二分类问题,提升树算法只需要将AdaBoost 算法中的基学习器限制为二叉分类树即可

GBDT

  • GBDT 是以决策树为基学习器、采用 Boosting 策略的一种集成学习模型
  • 与提升树的区别:残差的计算不同,提升树使用的是真正的残差,梯度提升树用当前模型的负梯度来拟合残差。

XGBoost

  1. 定义一棵树
  2. 对损失函数加入正则项,包括L2权重衰减和对叶子数限制
  3. 使用牛顿法代替梯度下降法 —— 前者使用一阶+二阶导数作为残差,后者只使用了一阶导数
  4. 传统 CART树寻找最优切分点的标准是最小化均方差;XGBoost 通过最大化得分公式来寻找最优切分点

XGBoost 的一些内部优化

  • 在寻找最佳分割点时,传统的方法会枚举每个特征的所有可能切分点。XGBoost 实现了一种近似的算法,大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。
  • XGBoost 考虑了训练数据为稀疏值的情况,可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率,paper 提到能提高 50 倍。
  • 特征列排序后以块的形式存储在内存中,在迭代中可以重复使用;虽然 Boosting 算法迭代必须串行,但是在处理每个特征列时可以做到并行。
  • 按照特征列方式存储能优化寻找最佳的分割点,但是当以行计算梯度数据时会导致内存的不连续访问,严重时会导致 cache miss,降低算法效率。Paper 中提到,可先将数据收集到线程内部的 buffer,然后再计算,提高算法的效率。
  • XGBoost 还考虑了数据量比较大的情况,当内存不够时怎么有效的使用磁盘,主要是结合多线程、数据压缩、分片的方法,尽可能的提高算法的效率。

bagging

基于并行策略:基学习器之间不存在依赖关系,可同时生成。

  • 利用自助采样法对训练集随机采样,重复进行 T 次;
  • 基于每个采样集训练一个基学习器,并得到 T 个基学习器;
  • 预测时,集体投票决策。
  • 自助采样法:对 m 个样本的训练集,有放回的采样 m 次;此时,样本在 m 次采样中始终没被采样的概率约为 0.368 (1/e),即每次自助采样只能采样到全部样本的 63% 左右。

随机森林

stacking

基于串行策略:初级学习器与次级学习器之间存在依赖关系,初学习器的输出作为次级学习器的输入。

  • 先从初始训练集训练 T 个不同的初级学习器;
  • 利用每个初级学习器的输出构建一个次级数据集,该数据集依然使用初始数据集的标签;
  • 根据新的数据集训练次级学习器;
  • 多级学习器的构建过程类似。
  • 为了降低过拟合的风险,一般会利用交叉验证的方法使不同的初级学习器在不完全相同的子集上训练

    以 k-折交叉验证为例:

    • 初始训练集 D={(x_i, y_i)} 被划分成 D1, D2, .., Dk;
    • 记 h_t 表示第 t 个学习器,并在除 Dj 外的数据上训练;
    • 当 h_t 训练完毕后,有 z_it = h_t(x_i);
    • T 个初级学习器在 x_i 上共产生 T 个输出;
    • 这 T 个输出共同构成第 i 个次级训练数据 z_i = (z_i1, z_i2, …, z_iT),标签依然为 y_i;
    • 在 T 个初级学习器都训练完毕后,得到次级训练集 D’={(z_i, y_i)}

为什么使用决策树作为基学习器?

(1). 决策树的表达能力和泛化能力,可以通过剪枝快速调整;
(2). 决策树可以方便地将样本的权重整合到训练过程中; (boosting
(3). 决策树是一种不稳定的学习器; (bagging
所谓不稳定,指的是数据样本的扰动会对决策树的结果产生较大的影响;

为什么不稳定的学习器更适合作为基学习器?

  • 不稳定的学习器容易受到样本分布的影响(方差大),很好的引入了随机性;这有助于在集成学习(特别是采用 Bagging 策略)中提升模型的泛化能力。
  • 为了更好的引入随机性,有时会随机选择一个属性子集中的最优分裂属性,而不是全局最优(随机森林)

Boosting/Bagging 与 偏差/方差 的关系

简单来说,Boosting 能提升弱分类器性能的原因是降低了偏差;Bagging 则是降低了方差;


Author: Ykk
Link: https://ykksmile.top/posts/32025/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.