集成学习的核心思想在于,组合多个弱学习器从而得到一个表现良好的学习器。
下图左黄线为过拟合的决策边界,白线是恰到好处的决策边界。下图右第一张图和第二张图为欠拟合的结果,第三张图为恰到好处的决策边界,第四张图为过拟合的结果。
通常,简单的模型偏差高、方差低;复杂的模型偏差低、方差高。
如何判断模型是欠拟合还是过拟合呢?
欠拟合(Underfitting)和过拟合(Overfitting)是指机器学习模型在训练过程中对数据的拟合程度问题。判断模型是欠拟合还是过拟合,可以通过观察模型在训练集和验证集上的表现来进行评估。
训练集表现:
验证集表现:
常用的判断欠拟合和过拟合的方法包括:
学习曲线:绘制模型在训练集和验证集上的表现随着训练样本数量变化的曲线。如果两者收敛且表现均不佳,则可能是欠拟合;如果训练集表现良好而验证集表现差,可能是过拟合。
验证集误差和训练集误差比较:观察模型在验证集和训练集上的误差。如果模型在训练集上的误差远远小于验证集上的误差,可能是过拟合问题。
模型复杂度:过度复杂的模型更容易过拟合,而过于简单的模型则更容易出现欠拟合。可以通过增加或减少模型的复杂度来解决这些问题,比如增加正则化、减少特征数量、使用更简单的模型结构等。
K折交叉验证(K-fold cross-validation)是一种常用的模型评估方法,用于评估模型的性能和泛化能力,尤其适用于数据集较小的情况。该方法将数据集分成K个子集(通常是相等大小),然后执行K次模型训练和验证,每次使用其中一个子集作为验证集,其余K-1个子集作为训练集。
K折交叉验证的步骤如下:
数据集分割:将数据集随机分成K个子集(通常是相等大小),每个子集称为一个fold。
模型训练和验证:进行K次循环,每次选择一个fold作为验证集,其余K-1个fold作为训练集。在每个循环中,使用训练集对模型进行训练,然后使用验证集评估模型性能。
性能评估:在每次验证过程中,记录模型的性能指标(比如准确率、精确度、召回率、F1分数等)。
性能指标的平均值:K次验证完成后,对每次验证得到的性能指标取平均值,作为模型最终的性能评估指标。
Bootstrap方法通过对原始数据进行重采样来评估统计量的稳定性和不确定性,它能够基于有限的数据集生成估计量的抽样分布。
Bootstrap的基本步骤如下:
Bootstrap方法的优势在于它不需要对数据假设特定的分布情况,而是利用已有的数据进行模拟重采样,从而更好地评估统计量的性质。它在样本量较小、无法进行正态分布假设或者对于复杂模型的参数估计中特别有用。
Bagging的一个很著名的算法就是随机森林。
随机森林(Random Forest)是一种基于集成学习思想的机器学习算法,它通过构建多个决策树并集成它们的预测结果来进行分类或回归任务。随机森林的特点在于它同时运用了Bagging(自助采样)和随机特征选择的方法。
Bagging:随机森林使用Bootstrap的方法,从原始数据集中有放回地随机抽样生成多个不同的子数据集,然后针对每个子数据集构建一个决策树模型。
随机特征选择:在构建每个决策树的过程中,随机森林会在节点分裂时随机选择一部分特征进行评估,而非使用全部特征。这样做有助于使得每个决策树之间更具差异性,增加了整体模型的多样性和鲁棒性。
合并预测:对于分类问题,随机森林会采用投票方式;对于回归问题,采用平均方式,汇总多个决策树的预测结果以得出最终结果。
随机森林的优点:
Out-of-Bag Error(OOB误差) 是在随机森林训练过程中一个重要的评估指标。由于Bagging采用自助采样,每个决策树的训练数据并不是全部样本,因此每个子模型(决策树)都会有一部分样本未被采样到,这些未被采样到的样本就构成了该子模型的Out-of-Bag数据集。
Out-of-Bag Error是使用未被采样到的数据进行模型评估的误差。对于每个子模型,可以利用其对应的Out-of-Bag数据集进行验证或评估模型的性能,然后将所有子模型的Out-of-Bag误差进行平均,得到随机森林的最终评估指标。
通过利用Out-of-Bag误差,随机森林能够在训练过程中对模型的泛化能力进行评估,无需额外的验证集,节省了数据并能及时发现模型的过拟合情况。
AdaBoost(Adaptive Boosting)是一种Boosting集成学习方法,用于提高分类器的性能。它通过训练一系列弱分类器(例如决策树或者其他基本模型),每个分类器都针对前一个分类器分类错误的样本进行加权,从而逐步提升整体模型的准确性。
初始化样本权重:开始时,所有样本的权重都相等。
训练弱分类器:首先使用一个基本分类器(弱分类器)对数据进行训练,分类错误的样本会在下一轮中获得更高的权重。
调整样本权重:根据前一轮分类器的准确性,调整样本的权重,将分类错误的样本的权重增加,使得在下一轮训练中这些错误分类的样本更有可能被选中。
迭代训练:重复这个过程,训练出一系列弱分类器,每个分类器的权重取决于其在训练中的准确性。
组合弱分类器:最后将这些弱分类器组合起来,根据每个分类器的权重加权求和或投票方式得到最终的集成分类器。
适应性(Adaptive):通过调整样本权重,AdaBoost能够专注于那些难以分类的样本,逐步提高整体模型的性能。
高准确性:相对于单个基础分类器,AdaBoost能够提高模型的准确性,尤其在处理复杂数据集和高度非线性问题时表现优异。
对噪声和异常值敏感:在存在噪声和异常值的情况下,AdaBoost可能会导致过拟合,降低模型的性能。
需要调节参数:AdaBoost中的弱分类器的选择和迭代次数都需要调节,对于大规模数据和复杂问题需要花费较多时间来调整参数。
初始化预测器:使用一个简单的模型(比如平均值)作为初始预测器,对数据做出初始预测。
计算残差:计算初始预测模型对目标的预测残差。
训练弱模型:构建一个新的模型来预测残差,即使得残差最小化的模型。通常使用决策树作为弱模型。
更新预测结果:将新模型的预测结果与前一模型的预测结果进行加权结合,更新整体模型的预测结果。
迭代训练:重复上述过程,每次训练的模型都在尝试纠正前一模型的残差,逐步提升整体模型的性能。
终止条件:可以设置迭代次数或者达到某种误差阈值时停止迭代。
高准确性:Gradient Boosting能够获得较高的预测性能,在许多问题中表现优异。
对异常值的鲁棒性:通过连续迭代调整预测模型,Gradient Boosting具有一定程度上的对异常值和噪声的鲁棒性。
灵活性:可以使用不同的损失函数来适应不同类型的问题(如回归、分类等)。
Gradient Tree Boosting:也称为Gradient Boosted Regression Trees(GBRT)或者Gradient Boosted Machines(GBM),使用决策树作为基础模型。
XGBoost:一种高效的Gradient Boosting库,通过优化算法、并行计算等技术提高了性能和速度。
LightGBM:另一种基于梯度提升的框架,通过基于直方图的决策树算法来加速训练和提高效率。
Bagging和Boosting都是集成学习(Ensemble Learning)中常用的技术,它们旨在提高机器学习模型的性能。尽管它们都属于集成学习范畴,但在实现方式、优点和适用场景上有明显的差异。
原理:Bagging是一种并行的集成学习方法,通过对原始数据集进行有放回的随机抽样,构建多个子模型,然后将这些子模型的预测结果进行平均或投票来得出最终预测结果。
算法:典型的Bagging算法包括随机森林(Random Forest),它是基于决策树的一种Bagging方法。
优点:
缺点:
适用场景:Bagging适用于各种类型的问题,尤其是对于高方差、低偏差的模型(如决策树),它能够有效地提高模型的稳定性和准确性。
原理:Boosting是一种串行的集成学习方法,它通过训练一系列弱分类器(例如决策树或者其他基本模型),每次根据前一轮的结果调整数据分布,使得在前一轮分类错误的样本在下一轮获得更多的关注,最终组合这些弱分类器形成强分类器。
算法:常见的Boosting算法包括Adaboost、Gradient Boosting Machine(GBM)、XGBoost和LightGBM等。
优点:
缺点:
适用场景:Boosting适用于需要较高精度的问题,尤其在处理分类和回归问题时表现优异。它在数据集相对较小、特征维度不是很高、并且对准确性要求较高的情况下效果显著。
选择Bagging还是Boosting取决于具体问题和数据集的性质。通常,对于复杂数据和模型,Boosting更有优势;对于简单模型和需要减少方差的情况,Bagging可能更合适。