深度学习面试题专栏08
01 随机森林的随机性指的是?
02 为什么要随机抽样?
03 为什么要有放回的抽样?
04 为什么不用全样本训练?
05 需要剪枝吗?
06 随机森林如何处理缺失值?
07 RF与决策树的区别
08 Bagging vs Boosting
09 随机森林 vs GBDT
10 XGBoost vs LightGBM
01 随机森林的随机性指的是?
随机森林(Random Forest)是一个集成学习模型,它由多个决策树组成,并通过投票机制(对于分类问题)或平均机制(对于回归问题)来进行预测。随机森林中的“随机性”主要体现在以下两个方面:
随机样本抽取(自助采样):对于每一个树的构建,随机森林使用自助采样法(bootstrap sampling)从原始训练数据集中抽取一个新的训练样本集。这意味着,每一次抽取,原始训练数据集中的某些样本可能会被重复选中,而某些样本可能不会被选中。这样每个决策树在训练时使用的数据集都是稍有不同的,增加了模型的多样性。
随机特征选择:当在每个节点处进行分裂决策时,随机森林不是考虑所有的特征,而是从所有的特征中随机选择一个子集,并只在这个子集上找最佳的分裂点。这样做的目的是避免所有的决策树都对某些强特征过度依赖,从而确保森林中的树是多样化的。
02 为什么要随机抽样?
增加模型的多样性:在随机森林中,每次随机抽样都可能生成不同的数据子集,这意味着用于训练的每棵决策树都基于略有不同的数据。这增加了模型的多样性,从而提高了整个集成模型的泛化能力。
降低过拟合风险:当每棵树使用不完全相同的数据进行训练时,单个树可能的过拟合会被整体模型的其他树所平衡,因此随机森林整体的过拟合风险降低。
提供OOB (Out-of-Bag) 估计:对于每一次的自助采样,大约有1/3的数据不会被选中。这些没有被选中的数据称为OOB数据。这些数据可以被用作验证集来评估模型的性能,而不需要单独划分一个验证集。这种评估方法被称为OOB估计。
......
03 为什么要有放回的抽样?
有放回的抽样意味着在每次抽取一个样本后,这个样本仍然会被放回到原始数据集中,因此在后续的抽样中它还有可能被再次选中。
原因:
生成多个不同的子集:有放回的抽样能够从一个固定大小的原始数据集中产生多个不同的数据子集。每个子集都有可能包含重复的样本和遗漏的样本。这种多样性是随机森林和其他集成方法中模型多样性的一个关键来源。
利用全部数据:不进行放回的抽样,特别是在小数据集的情况下,可能导致生成的子集覆盖范围不够全面。有放回的抽样可以确保每次抽样都是从整个数据集中进行的,使得每个数据点都有可能被选中,充分利用了所有的数据。
降低方差:有放回的抽样,尤其在集成方法中,可以降低模型的方差。通过多次抽样和训练,每次都可能得到稍有不同的模型,最终的集成模型能够平衡这些差异,从而降低总体的预测误差。
04 为什么不用全样本训练?
增加模型多样性:随机森林和其他集成方法的核心思想是通过结合多个模型的预测来提高整体的预测性能。如果每个模型都在完全相同的样本上进行训练,那么他们可能会产生非常相似的预测,这降低了集成的多样性和效益。通过从原始数据集中抽取不同的子集进行训练,每个模型都可能会关注数据的不同方面,从而提高整体模型的多样性。
减少过拟合风险:使用全样本进行训练可能增加过拟合的风险,尤其是当模型复杂度较高或数据量较小时。通过在不同的数据子集上进行训练,我们可以得到多个可能的过拟合模型,但当它们结合起来时,过拟合的风险会降低。
-----同02问题一样----
05 需要剪枝吗?
“剪枝”是决策树算法中用来避免过拟合的常见技术。剪枝通过删除树的某些部分来简化决策树。但是,是否需要剪枝取决于所使用的模型和情境。
随机森林:
随机森林中的决策树不进行剪枝。因为随机森林的工作原理是建立许多深度大、可能过拟合的树,然后通过整合它们的预测来平均掉各个树的过拟合效应。因此,即使单独的树可能过拟合,整体模型通常不会。
随机森林的其他随机性来源(例如特征的随机子集和bootstrap样本)进一步增加了模型的鲁棒性,这也减少了剪枝的必要性。
单个决策树:
对于单独的决策树,尤其是CART(分类与回归树)算法,剪枝是一个常用的策略,用于避免过拟合。树可以先“生长”到它的最大深度,然后再根据某种准则(如成本复杂度剪枝)进行剪枝。
除了后剪枝(即先完全生长再进行剪枝),还有预剪枝方法,例如设定最大深度、最小叶子节点样本数或某个分裂所需的最小样本数等。
06 随机森林如何处理缺失值?
数据预处理阶段:
均值/中位数/众数填充:对于数值型特征,可以使用均值或中位数来填充缺失值。对于分类特征,可以使用众数来填充。
使用其他特征进行预测:可以使用包含缺失值的数据集的其他特征来预测缺失的特征值。例如,可以使用随机森林自身来预测并填充缺失值。
添加一个"缺失"类别:对于分类特征,可以将缺失值作为一个新的类别。对于数值特征,可以添加一个指示变量来指示该特征是否缺失。
随机森林训练和预测阶段:
分裂时的考虑:当特征有缺失值时,训练决策树的过程中可以考虑这些缺失值。在寻找最佳分裂点时,算法可以将缺失值既不归为左子树也不归为右子树,而是作为第三种情况来处理。另一种方法是将缺失值归为在非缺失值中增益较高的那一侧。
预测时的处理:当使用训练好的决策树进行预测时,如果某个特征有缺失值,但该特征在树的决策过程中被用作了分裂特征,则可以考虑将该样本同时传递给左右子树,并基于子树的输出获得一个加权的结果。
07 RF与决策树的区别
基本构成:
决策树:它是一个单一的树结构,通过递归地分裂数据以建立一个预测模型。
随机森林:它是一个集成方法,由多个决策树组成。这些树的预测结果会被整合(通过投票或平均)来得到最终的预测。
训练过程中的随机性:
决策树:通常,决策树在每个节点使用所有的特征来寻找最佳的分裂点。
随机森林:它引入了两种随机性:
每棵树在训练时使用一个自助采样(bootstrap sample)的数据集。
在选择分裂特征时,随机选择特征的一个子集,而不是使用所有特征。
过拟合风险:
决策树:容易过拟合,尤其是当树深度较大时。
随机森林:由于其集成的性质和引入的随机性,它通常具有较低的过拟合风险。
08 Bagging vs Boosting
Bagging和Boosting都是集成学习的策略,旨在组合多个模型以提高单个模型的性能。
主要区别:
基本思想:
Bagging:Bagging(Bootstrap Aggregating)的主要目的是通过减少方差来提高模型的稳定性和准确性。它通常在原始数据上进行多次自助采样,为每个样本集训练一个基模型,然后组合这些模型的预测。
模型训练方式:
Bagging:模型是并行且独立地训练的。每个模型都基于从原始数据集中抽取的一个自助样本。
数据采样:
Bagging:进行有放回的自助采样。
Boosting:根据模型的错误调整样本的权重,使得之前错误预测的样本在下一个模型训练中更有可能被选中。
模型组合方式:
Bagging:模型通常是通过简单的平均(回归)或投票(分类)来组合的。
Boosting:模型的组合是基于权重的,其中权重取决于每个模型的性能。
过拟合风险:
Bagging:由于模型独立地训练,Bagging通常能有效地减少过拟合。
Boosting:由于模型试图纠正先前模型的错误,如果它太过于复杂或迭代次数太多,Boosting可能导致过拟合。
Boosting:Boosting的目标是减少偏差和方差。它是一个迭代的过程,其中每个新模型都试图纠正前一个模型的错误。
Boosting:模型是顺序训练的。每个新模型都根据先前模型的错误来调整样本的权重。
09 随机森林 vs GBDT
随机森林(Random Forest, RF)和梯度提升决策树(Gradient Boosted Decision Trees, GBDT)都是集成学习方法,并且都使用决策树作为基学习器。但是,这两种方法在集成策略、训练方式和优化目标上有所不同。
主要区别:
集成策略:
随机森林:基于Bagging的策略,它通过多次自助采样生成多个数据子集,并在每个子集上独立地训练决策树。
GBDT:基于Boosting的策略,它通过顺序地训练决策树来逐渐优化和改进预测性能。每一棵树都试图纠正前一棵树的错误。
模型训练:
随机森林:树模型是并行训练的。每棵树都在部分数据和特征子集上进行训练,这增加了模型的多样性。
GBDT:树模型是顺序训练的。每一棵新树的任务是预测之前所有树的残差或错误。
目标优化:
随机森林:每棵树独立地尝试最佳地拟合其所看到的子数据集。
GBDT:通过梯度提升策略,每一步都是在优化一个损失函数,新的树是为了减少损失函数的值而添加的。
10 XGBoost vs LightGBM
XGBoost(Extreme Gradient Boosting)和LightGBM(Light Gradient Boosting Machine)都是基于梯度提升(Gradient Boosting)的决策树算法,但它们有其独特的特性和优势。
主要区别:
树的生长策略:
XGBoost:采用的是深度优先搜索(DFS)策略,从上到下生长,直到达到指定的最大深度,然后再回溯剪枝。
LightGBM:使用的是叶子优先搜索(Leaf-wise)策略,每次选择当前最大增益的叶子进行分裂,直到达到指定的最大叶子数量。这可能导致比XGBoost更深的树,但能更好地减小训练损失。
处理大数据和大特征数:
XGBoost:虽然可以处理大型数据,但可能需要更多的时间和内存。
LightGBM:专为大型数据集设计,具有更高效的处理速度和较低的内存使用。LightGBM还支持类别特征,这意味着无需进行独热编码。
分裂点查找:
XGBoost:使用精确和近似的分裂查找方法。
LightGBM:使用分桶(binning)技术来进行分裂查找,这加速了训练过程。
继续坚持啦!