day6 AI面试刷题
1. 什么是集成学习算法?
参考答案:
集成学习(Ensemble Learning)就是将多个机器学习模型组合起来,共同工作已达到优化算法的目的。集成学习的一般步骤是:1. 生产一组“个体学习器”(Individual learner);2. 用某种策略将它们结合起来。
个体学习器通常由一个学习算法通过数据训练产生。在同质集成(系统中个体学习器的类型相同)中,个体学习器又被称为“基学习器”;而在异质集成(系统中个体学习的类型不同)中,个体学习器又被称为“组建学习器”(Component Learner)。
集成学习的思想类似于我们俗话常说的“三个臭皮匠胜过一个诸葛亮”。
2. 集成学习主要有哪几种框架, 并简述它们的工作过程?
参考答案:
集成学习主要的集成框架有:Bagging,Boosting 和 Stacking。其中 Bagging 和 Boosting 为同质集成,而 Stacking 为异质集成。
- Bagging (Bootstrap Aggregating): Bagging的核心思想为并行地训练一系列各自独立的同类型,然后再将各个模型的输出结果按照某种策略进行聚合(例如分类中可采用投票策略,回归中可采用平均策略)。Bagging方法主要分为两个阶段:
- Bootstrap阶段,即采用有放回的抽样方法,将训练集分为n个子样本;并用基学习器对每组样本分别进行训练,得到n个基模型。
- Aggregating阶段,将上一阶段训练得到的n个基模型组合起来,共同做决策。在分类任务中,可采用投票法。比如相对多数投票法,即将结果预测为得票最多的类别。而在回归任务中可采用平均法,即将每个基模型预测得到的结果进行简单平均或者加权平均来获得最终的预测结果。
- Boosting:Boosting的核心思想为串行地训练一系列前后依赖的同类模型,即后一个模型用来对前一个模型的输出结果进行纠正。Boosting算法是可将弱学习器提升为强学习的算法。学习过程是:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本进行调整,使得先前基学习器预测错误的训练样本在后续训练中收到更多关注,然后将当前基学习器集成到集成学习器中并基于调整后的样本分布来训练下一个基学习器,如此重复进行,直至基学习器数目达到事先指定的值T。
- Stacking: Stacking 的核心思想为并行的训练一系列各自独立的不同类型模型,然后通过训练一个元模型(meta-model)来将各个模型的输出结果进行结合。也可以用两个阶段来描述 Stacking 算法:
- 第一阶段:分别采用全部训练样本训练n个组件模型,要求这些个体学习器必须是异构的,也就是说采用的学习方法不同;比如可以分别是线性学习器,SVM,决策树模型和深度模型。
- 第二阶段:训练一个元模型(meta-model)来将各个组件模型的输出结果进行结合。具体过程是,将各个学习器在训练集上得到的预测结果作为训练特征和训练集的真实结果组成新的训练集;用这个新组成的训练集来训练一个元模型。这个元模型可以是线性模型或者树模型。
3. Boosting算法有哪两类,它们之间的区别是什么?
参考答案:
Boosting算法主要有AdaBoost(Adaptive Boost)自适应提升算法和Gradient Boosting 梯度提升算法。最主要的区别在于两者如何识别和解决模型的问题。
AdaBoost 用分错的数据样本来识别问题,通过调整分错的数据样本的权重来改进模型。Gradient Boosting通过负梯度来识别问题,通过计算负梯度来改进模型。
4. 什么是偏差和方差?
参考答案:
偏差指的是预测值的期望与真实值之间的差距,偏差越大,预测值越偏离真实数据的标签。
方差描述的是预测值的变化范围,离散程度,也就是离预测值期望的距离,方差越大,数据的分布越分散。
可通过打靶射击的例子来做类比理解,我们假设一次射击就是一个机器学习模型对一个样本进行预测,射中红色靶心位置代表预测准确,偏离靶心越远代表预测误差越大。
偏差则是衡量射击的蓝点离红圈的远近,射击位置即蓝点离红色靶心越近则偏差越小,蓝色离红色靶心越远则偏差越大;方差衡量的是射击是否稳定,即射击的位置蓝点是否聚集,蓝点越集中则方差越小,蓝点越分散则方差越大。
5. 为什么说Bagging可以减少弱分类器的方差,而Boosting 可以减少弱分类器的偏差?
参考答案:
Bagging算法对数据重采样,然后在每个样本集训练出来的模型上取平均值。假设有n个随机变量,方差记为
σ
2
\sigma^2
σ2,两两变量之间的相关性是
0
<
ρ
<
1
0\lt\rho\lt 1
0<ρ<1,则 n 个随机变量均值的方差为:
v
a
r
(
1
n
∑
i
=
1
n
X
i
)
=
σ
2
n
+
n
−
1
n
ρ
σ
2
\begin{aligned} var(\frac{1}{n}\sum^n_{i=1}X_i)=\frac{\sigma^2}{n}+\frac{n-1}{n}\rho\sigma^2 \end{aligned}
var(n1i=1∑nXi)=nσ2+nn−1ρσ2
上式中随着n增大,第一项趋于0,第二项趋于
ρ
σ
2
\rho\sigma^2
ρσ2,所以Bagging能够降低整体方差。在随机变量完全独立的情况下,n个随机变量的方差为
σ
2
n
\frac{\sigma^2}{n}
nσ2,n个随机变量的方差是原来的
1
n
\frac{1}{n}
n1。
Bagging 算法对 n 个独立不相关的模型的预测结果取平均,方差可以得到减少,如果模型之间相互独立,则集成后模型的方差可以降为原来的 1 n \frac{1}{n} n1,但是在现实情况下,模型不可能完全独立。为了追求模型的独立性,Bagging的方法做了不同的改进,比如随机森林算法每次选取节点分裂属性时,会随机抽取一个属性子集,而不是从所有的属性中选取最优属性,这就为了避免弱分类器之间过强的关联性,通过训练集的重采样也能够带来弱分类器之间的一定独立性。这样多个模型学习数据,不会像在单模型的情形中,模型因为学习到数据某个特殊的特征而造成方差过高。
设单模型的期望为
μ
\mu
μ,则 Bagging 的期望预测为:
E
(
1
n
∑
i
=
1
n
X
i
)
=
1
n
E
(
∑
i
=
1
n
X
i
)
=
E
(
X
i
)
≈
μ
E(\frac{1}{n}\sum^n_{i=1}X_i)=\frac{1}{n}E(\sum^n_{i=1}X_i)=E(X_i)\approx\mu
E(n1∑i=1nXi)=n1E(∑i=1nXi)=E(Xi)≈μ
说明 Bagging 整体模型的期望近似于单模型的期望,这意味整体模型的偏差也与单模型的偏差近似。所以Bagging不能减少偏差。
在 Boosting 算法训练过程中,我们计算弱分类器的错误和残差,作为下一个分类器学习目标调整的依据,这个过程本身就是在不断减小损失函数的值,其偏差自然逐步下降,但是由于是采用这种串行和自适应的策略,各子模型之间是强相关的,于是子模型之和并不能显著降低方差,所以说 Boosting 主要还是靠降低偏差来提升模型性能。