AI面试100题(五)
什么是集成学习
集成学习是将多个机器学习模型组合起来,共同工作达到优化算法的目的。
集成学习的一般步骤是:
- 生产一组个体学习器(基学习器)
- 用某种策略将它们结合起来
个体学习器通常由一个现有的学习算法从训练数据产生。通常训练时只采用一部分数据训练,采样方法又可以分为放回采样和不放回采样。这样不同的学习器看到的数据集也不同,学到的学习器准确率也不一样。
最后可以通过类似多数表决的方法选出最终输出结果。
集成学习主要有哪几种框架?分别简述这几种集成学习框架的工作过程
集成学习主要有Bagging、Boosting和Stacking。
Bagging
Bagging的核心思想为并行地训练一系列各自独立的同类模型,然后再将各个模型的输出结果按照某种策略进行聚合。Bagging方法主要分为两个阶段:
- Bootstrap阶段,即采用有放回的抽样方法,将训练集分为n个子样本集;并用基学习器对每组样本分别进行训练,得到n个基模型。
- Aggregating阶段,将上一阶段训练得到的n个基模型组合起来,共同做决策。在分类任务中,可采用投票法。而在回归任务中可采用平均法。
Stacking
Stacking的核心思想为并行地训练一系列各自独立的不同类模型,然后通过训练一个元模型来将各个模型的输出结果进行结合。也可以用两个阶段来描述Stacking算法:
- 阶段一,分别采用全部训练数据训练n个组件模型,要求这些个体学习器必须是异构的,也就是学习器采用的学习方法不同(比如SVM和逻辑回归)。
- 阶段二,训练一个元模型来将各个组件模型的输出结果进行结合。具体过程是,将各个学习器在训练集上得到的预测结果作为训练特征和训练集的真实结果组成新的训练集;用这个新组成的训练集来训练一个元模型。这个元模型可以是线性模型或树模型。
Boosting
Boosting的核心思想为串行地训练一系列前后依赖的同类模型,即后一个模型用来对前一个模型的输出结果进行纠正。Boosting算法是可将弱学习器提升为强学习的算法。
学习过程是:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训样本进行调整,使先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此反复进行,直到基学习器数目达到时事先指定的值
T
T
T,最终将这
T
T
T个基学习器进行结合。
Boosting算法有哪两类,它们之间的区别是什么
Boosting算法主要有AdaBoost自适应提升算分和Gradient Boosting梯度提升算分。最主要的区别在于两者如何识别和解决模型的问题。AdaBoost用分错的数据样本来识别问题,通过调整分错的数据样本的权重来改进模型。Gradient Boosting通过负梯度来识别问题,通过计算负梯度来改进模型。
什么是偏差和方差
偏差指的是预测值的期望与真实值之间的差距,偏差越大,预测值越偏离真实数据的标签。
方差描述的是预测值的变化范围,离散程度,也就是离预测值期望的距离,方差越大,数据的分布越分散。
偏差可以认为是模型还没有拟合得很好,而导致的问题。误差可以理解为,噪声影响导致的。比如人工操作等。
我们假设一次设计就是一个机器学习模型对一个样本进行预测,射中红色靶心位置代表预测准确,偏离越远代表预测误差越大。偏差则是衡量射击的蓝点离红圈的远近,射击位置即蓝点离红色靶心越近则偏差越小;
方差衡量的是射击的蓝点是否聚集,蓝点越集中则方差越小,越分散则方差越大。
为什么说Bagging可以减少弱分类器的方差,而Boosting可以减少弱分类器的偏差?
Bagging算法对数据重采样,然后在每个样本集训练出来的模型上取平均值。假设有n个随机变量,方差记为
δ
2
\delta^2
δ2,两两变量之间的相关性是
0
<
ρ
<
1
0<\rho<1
0<ρ<1,则n个随机变量的均值的方差为:
v
a
r
(
1
n
∑
i
=
1
n
X
i
)
=
δ
2
n
+
n
−
1
n
ρ
δ
2
var \left(\frac{1}{n} \sum_{i=1}^n X_i\right ) = \frac{\delta^2}{n} + \frac{n-1}{n}\rho\delta^2
var(n1i=1∑nXi)=nδ2+nn−1ρδ2
上式中随着n增大,第一项趋于0,第二项趋于
ρ
δ
2
\rho\delta^2
ρδ2,所以Bagging能降低整体方差。在随机变量完全独立的情况下,n个随机变量的方差为
δ
2
n
\frac{\delta^2}{n}
nδ2,n个随机变量的方差是原来的
1
n
\frac{1}{n}
n1。
Bagging算法对n个独立不相关的模型的预测结果取平均,方差可以得到减少,如果模型之间相互独立,则集成后模型的方差可以降为原来的 1 n \frac{1}{n} n1,但是在现实情况下,模型不可能完全独立,为了追求模型的独立性,Bagging的方法做了不同的改进,比如随机森林算法中,每次选取节点分裂属性时,会随机选取一个属性子集,而不是从所有的属性中选最优属性,这就为了避免弱分类器之间过强的关联性,通过训练集的重采样也能够带来弱分类器之间的一定独立性,这样多个模型学习数据,不会因为一个模型学习到数据某个特殊特性而造成方差过高。