机器学习算法与实践 课件 第七章 决策树与集成学习_第1页
机器学习算法与实践 课件 第七章 决策树与集成学习_第2页
机器学习算法与实践 课件 第七章 决策树与集成学习_第3页
机器学习算法与实践 课件 第七章 决策树与集成学习_第4页
机器学习算法与实践 课件 第七章 决策树与集成学习_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章决策树与集成学习信息增益、Gini系数与集成学习算法《机器学习算法与实践》章节概览7.1决策树主要内容决策树构建过程与优缺点信息增益与Gini系数度量剪枝策略与过拟合控制样本不平衡问题处理7.2集成学习Bagging与随机森林Bootstrap采样·特征随机选择·并行集成Boosting与AdaBoost权重调整·顺序训练·自适应提升梯度提升树(GBDT)负梯度拟合·迭代优化·损失函数最小化极限提升树(XGBoost)二阶泰勒展开·正则化·并行计算7.1决策树定义一种非参数监督学习方法基本思想通过一系列if-then-else决策规则,将输入数据逐步划分为更小的子集,构建树状结构树结构组成内部节点属性测试,对某个特征进行判断或比较分支测试的一个可能结果叶子节点最终的决策输出(类别标签或数值)应用场景分类任务预测类别标签回归任务预测连续数值决策树构建的基本过程01选择最优特征评估特征分裂效果信息增益或信息增益比Gini系数评估纯度提升02分裂数据集根据特征值划分分类:离散化分裂回归:阈值分裂03递归构建子树重复上述步骤对每个子集继续划分满足停止条件终止04生成叶子节点输出预测结果分类:多数类标签回归:均值/中位数停止条件样本数量阈值当前节点样本数<某阈值纯度阈值熵或Gini系数<某阈值深度限制树深度达到最大值决策树的优点可解释性强决策过程直观易懂通过简单的if-then规则表达决策路径帮助决策者理解模型推理过程提升对预测结果的信任度非参数化方法无须复杂预处理无需假设数据分布形式适用于各类数据(离散与连续特征)自动选择适当的分裂点进行处理处理缺失值能力自然处理数据中的缺失值特征值缺失时忽略该特征继续使用其他特征进行划分在不完整数据上表现良好决策树的缺点过拟合容易对训练数据过度拟合数据包含噪声或异常值时更严重生成过于复杂的树结构在测试集上表现不佳解决方法剪枝技术、集成学习(随机森林、GBDT)对数据变动敏感对数据中的微小变化非常敏感轻微变动可能导致树结构较大改变面对噪声较多的数据不稳定模型鲁棒性较差解决方法数据清洗、集成学习偏向多值属性倾向于选择取值较多的特征优先选择多值属性进行分裂可能导致不必要的分裂忽略更重要的少值特征解决方法信息增益比(GainRatio)应用场景金融领域信用评分与风险评估根据客户特征评估信用等级预测违约风险和损失概率医疗诊断疾病预测与辅助诊断根据症状和检查结果预测疾病类型为医生提供决策支持市场营销客户细分与行为分析根据客户特征进行分类实现个性化产品推荐可解释性强决策过程透明,便于理解和验证灵活性强适用于多种数据类型和任务场景7.1.2信息增益与Gini系数两种度量标准用于评估划分属性的优劣,量化数据的"纯度"信息增益基于信息论的概念通过熵量化数据的不确定性衡量划分后信息熵的降低程度适用于:ID3、C4.5算法Gini系数基于概率论的概念衡量数据集的不纯度反映样本被错误分类的概率适用于:CART算法信息增益-熵的定义

熵的公式1H(S)数据集S的熵2k类别的数量3pᵢ样本属于第i类的概率熵的含义衡量数据集的不确定性值越大→数据越混乱值为零→数据纯净(单一类别)取值范围0纯净(单一类别)→log₂k最大不确定性

信息增益-条件熵与信息增益条件熵Sⱼ:数据集S中属性A取值为j的子集|Sⱼ|:子集Sⱼ的样本数量条件熵=各子集熵的加权平均信息增益信息增益=划分前熵-划分后熵衡量不确定性降低的程度信息增益越大→划分效果越好核心思想选择使信息增益最大的特征进行划分应用场景ID3算法、C4.5算法的特征选择标准

信息增益的缺点偏向多值属性特征取值越多,信息增益可能越高即使与目标变量关系不大,仍可能被优先选择导致决策树过度依赖该特征解决方案使用信息增益比(GainRatio)进行归一化对取值数量不敏感只考虑特征不同取值的数量未考虑每个取值的重要性无法准确反映特征的真实贡献解决方案引入增益率(GainRatio)归一化处理示例说明颜色特征4种取值信息增益:较高但与目标变量关系弱对比尺寸特征2种取值信息增益:较低但与目标变量关系强信息增益计算实例应用背景决策树算法(ID3算法)选取信息增益最大的属性作为当前节点的划分标准示例数据集(表7.1)步骤1:计算初始熵数据集包含6个样本(购买:2个,不购买:4个)信息增益定义:衡量特征条件下数据集不确定性降低的程度步骤2:计算各特征的信息增益年龄特征•青年:H=1.0•中年:H=1.0•老年:H=0.0收入特征•高:H=0.918•中:H=0.0•低:H=0.0学生特征•是:H=0.918•否:H=0.0年龄收入学生购买青年高是1青年高否0中年高是1中年中否0老年中是0老年低否0

步骤3:选择最优特征分裂

结果对比:"学生"和"收入"信息增益最高0.459学生特征0.459收入特征决策树结构示意图信息增益的局限性偏向类别多的特征即使关系不明显,类别多的特征信息增益可能更高对可取值数量不敏感只考虑特征取值数量,忽略每个取值的重要性改进方法:增益率(GainRatio)归一化度量,解决信息增益缺点信息增益计算实例

图7.1预测某人是否购买一款产品的决策树结构增益率增益率公式IG(S,A):特征A条件下的信息增益H(A):特征A的固有熵固有熵定义Sⱼ:数据集S中特征A取值为j的子集归一化信息增益,消除多值属性偏向增益率的优点对取值数量不敏感归一化处理,特征选择更公平结果更稳定不受特征取值数量的影响反映特征重要性准确衡量特征对分类的贡献

Gini系数Gini系数公式pᵢ属于第i类的样本比例k类别总数取值范围与含义0最小值所有样本属于同一类别—0.5最大值各类别样本数量相等核心含义Gini系数越小,数据集越纯净,度量了样本被正确分类的可能性

Gini系数-推导与计算整体Gini系数公式Sⱼ:第j个子集|Sⱼ|:子集的样本数|S|:整个数据集的样本数优化目标选择属性A使Gini(S,A)最小,使子集最纯净示例数据集样本编号特征A类别说明1-4红色1,1,2,2类别1:2个,类别2:2个5-8蓝色1,2,2,2类别1:1个,类别2:3个9-10绿色1,1类别1:2个,类别2:0个数据集规模10个样本类别分布类别1:5个|类别2:5个

Gini系数计算示例1计算划分前Gini系数类别1:5个样本|类别2:5个样本2按特征A划分数据集S₁(红色)4个样本(类别1:2,类别2:2)S₂(蓝色)4个样本(类别1:1,类别2:3)S₃(绿色)2个样本(类别1:2,类别2:0)3计算各子集Gini系数4计算整体Gini系数=0.35

信息增益与Gini系数对比信息增益计算复杂度涉及对数运算,复杂度稍高偏好特性倾向于具有较多类别的属性分裂效果关注整体不确定性的减少适用算法ID3和C4.5Gini系数计算复杂度仅涉及平方运算,相对简单偏好特性倾向于生成较为纯净的子集分裂效果关注当前层面上子集的纯净度适用算法CART(分类与回归树)实际应用差异分裂效果相差不大,主要体现在计算开销和算法实现细节选择建议信息增益适合多类别复杂数据集,Gini系数适合简单二分类问题7.1.3决策树剪枝与过拟合控制过拟合问题决策树结构过于复杂时,容易对训练数据中的噪声或异常值进行过度拟合训练集表现好对训练数据拟合完美,准确率很高测试集表现差对新数据泛化能力不足,错误率高剪枝技术通过减少决策树的复杂度来控制过拟合,提高模型泛化能力预剪枝在构建过程中提前终止树的生长后剪枝在树构建完成后,自底向上合并节点预剪枝(Pre-pruning)停止条件1样本数量阈值当前节点数据集样本数量小于某个阈值2纯度阈值当前节点的熵或Gini系数低于某个阈值3深度限制树的深度达到最大允许深度核心思想在构建决策树的过程中,提前终止树的生长来防止过拟合优点计算开销较小缺点可能提前终止有用的划分后剪枝(Post-pruning)剪枝过程1计算不剪枝误差计算当前子树在验证集上的预测误差2合并子树并计算误差将当前节点改为叶子节点,计算剪枝后的误差3比较并决定剪枝如果剪枝后误差未增加,则执行剪枝操作核心思想

在整棵决策树构建完毕后,自底向上对叶子节点进行合并来减少树的复杂度优点灵活处理复杂度问题缺点计算开销较大剪枝示例误差率公式节点t的错误率剪枝后总误差率合并后的错误率+决策树的复杂度惩罚项具体示例剪枝前节点样本数100错误分类数10误差率10%剪枝后误差率12%执行剪枝

7.1.4样本不平衡问题概述问题定义分类任务中不同类别的训练样本数目差别很大的情况不平衡数据标准4:1或3:1当类别比例超过以上标准时,即为不平衡数据主要影响倾向多数类算法更关注样本较多的类别忽视少数类对样本较少的类别视而不见样本不平衡的影响分类器偏向多数类为了最大化整体准确率,分类器可能倾向于将大部分预测结果分为多数类不均衡的损失函数模型在训练时无法正确评估不同类别的预测误差,损失函数更关注多数类决策边界失衡决策边界往往偏向于多数类,以减少整体错误分类率评估指标失衡简单的准确率无法真实反映模型的表现,需要使用精确度、召回率、F1分数和AUC等指标过拟合多数类模型可能过度拟合多数类的数据,而忽略了少数类的特征关键问题少数类的预测效果差,导致整体性能下降解决方案采用过采样、欠采样或调整类别权重等方法决策树在样本不平衡中的表现优势分裂准则敏感决策树基于分裂准则选择最优分裂点,会综合考虑类别分布的不纯度适应性强决策树不需要特定的平衡策略,可在一定程度上适应样本不平衡问题可解释性强决策树结构易于解释,能清晰显示特定类别的特征分布局限性偏向多数类分裂准则主要依据样本数量分布来衡量纯度提升程度易过拟合少数类在极端不平衡数据集中,少数类样本数量小且分布稀疏深度不均衡多数类样本分裂多、分支深,少数类分裂少、分支浅图7.2决策树在二分类中的应用解决样本不平衡问题的方法过采样(Oversampling)随机过采样简单快速可能过拟合SMOTE合成少数类过采样技术,基于最近邻插值生成新样本增强多样性边界偏差ADASYN自适应合成采样,更倾向于生成边界样本针对性强参数敏感欠采样(Undersampling)随机欠采样计算高效信息丢失聚类欠采样通过聚类算法分组多数类样本后选择代表性样本保留代表性计算复杂近似边界欠采样识别并移除构成"TomekLinks"的多数类样本改善边界仅二分类实践建议根据数据特点选择合适方法,可结合多种技术组合策略过采样+欠采样,配合类别权重调整效果更佳7.2集成学习概述集成学习定义EnsembleLearning是一种通过结合多个模型来提高整体预测性能的机器学习技术核心优势更强的泛化能力更高的鲁棒性适应复杂数据分布应用领域分类任务回归任务特征选择工作原理将多个简单模型的预测结果进行适当组合

捕捉数据中的复杂模式提供更稳健的预测结果减少模型偏差和方差处理未知数据分布波动集成学习三个主要研究方向01模型融合别称:分类器结合ClassificationCombination核心特点关注强评估器融合多个强分类器主要方法投票法Voting堆叠法Stacking混合法Blending机器学习竞赛常用02弱分类器集成传统机器学习算法TraditionalMLIntegration核心方法Bagging装袋法Boosting提升法性能提升机制减少模型偏差减少模型方差代表算法随机森林AdaBoost03混合专家模型深度学习领域应用MixtureofExperts核心机制将任务拆解为子任务独立专家模型处理组合输出得到预测应用场景多任务学习注意力机制处理复杂任务与多模态数据集成学习的应用价值理论突破推动新算法发展深度学习创新启示多领域技术突破集成学习的不断发展推动了多个领域的技术突破

实际应用价值学术界算法研究创新竞赛领先表现论文发表支撑工业界实际项目应用性能显著提升业务价值创造重要地位成为现代机器学习和深度学习的重要工具之一7.2.1Bagging与随机森林BaggingBootstrapAggregating装袋法核心思想通过随机抽样和模型集成来降低预测方差主要目标提高模型的稳定性和泛化能力随机性有放回的随机抽样方法生成多个不同的训练子集模型独立性为每个子集训练独立的基学习模型结果融合将多个基学习模型的预测结果组合,生成更加稳定和准确的最终预测效果减小单一模型因数据噪声或过拟合带来的误差Bagging的核心思想与机制核心思想随机抽样通过有放回的随机抽样生成多个不同的训练子集模型集成结合多个模型的预测结果提高整体性能降低预测方差提高模型的稳定性和泛化能力三大主要机制1随机性有放回的随机抽样生成多个不同的训练子集,每个子集都有一定的重复样本2基学习模型独立性为每个子集训练一个独立的基学习模型,这些模型之间具有一定的独立性3结果融合将多个基学习模型的预测结果组合,生成更加稳定和准确的最终预测结果通过上述机制,Bagging减小了单一模型可能因数据噪声或过拟合而带来的误差Bagging核心步骤1-数据采样Bootstrap采样原始数据集D={(x₁,y₁),(x₂,y₂),...,(xₙ,yₙ)}样本数量:N生成子数据集D₁,D₂,...,Dᵦ子数据集数量:B有放回抽样样本可能重复出现或未被抽中核心机制样本重复同一样本可在同一子数据集中出现多次样本遗漏某些样本可能未被抽中(Out-of-Bag)关键特性子数据集大小N约63.2%被采样约36.8%OOB效果子数据集间具有差异性为模型带来多样性OOB数据可评估性能类似交叉验证效果Bagging核心步骤2-训练基学习模型独立训练训练目标针对每个子数据集,训练一个独立的基学习模型训练公式hi(x)=train(Di)i=1,2,...,B关键特点每个基学习模型只在对应的子数据集上训练,模型之间具有一定的独立性基学习模型选择决策树高方差模型,Bagging的经典选择线性回归简单模型,适用于线性关系数据支持向量机适用于复杂分类问题神经网络深度学习模型,处理复杂模式同构模型所有基学习模型选择相同类型的模型异构模型不同类型的模型组合,增加多样性Bagging核心步骤3-集成预测(分类问题)多数投票法集成公式

核心思想将所有基学习模型的预测结果进行投票,选择票数最多的类别作为最终预测简单、高效、易实现投票示例场景:10个基学习模型的预测结果类别A预测数量7类别B预测数量3最终预测结果类别A

7票vs3票,多数投票选择类别A作为最终预测集成效果纠正错误分类降低预测方差提高模型稳定性增强泛化能力Bagging核心步骤3-集成预测(回归问题)平均法集成公式

核心思想将所有基学习模型的预测值求平均,作为最终的预测结果平滑误差,降低方差回归预测示例场景:5个基学习模型的预测值模型13.2模型23.8模型33.5模型43.7模型53.3平均预测值3.5效果分析平滑预测误差降低预测方差提高模型稳定性与分类对比分类:多数投票回归:求平均值都能降低方差Bagging核心步骤4-评估与优化(OOB数据)OOB评估什么是OOB数据?Out-of-Bag数据,即未被采样的样本,可用于评估模型性能63.2%被采样样本36.8%OOB样本类似交叉验证效果,无需额外验证集OOB评估方法1识别OOB数据对于每个基学习模型hᵢ,找出其训练时未被采样的样本2OOB预测使用基学习模型hᵢ对对应的OOB样本进行预测3计算性能指标汇总所有OOB样本的预测结果,计算准确率、误差等指标核心优势避免过拟合无需额外数据评估客观准确计算成本低复现Bagging过程-数据生成与超参数设置实现步骤1数据生成创建二分类数据集,划分训练集与测试集2超参数设置配置基学习模型数量、子数据集大小等参数3Bagging主循环执行随机抽样、模型训练与集成预测4模型评估计算OOB误差与测试集准确率数据生成代码PythonCode超参数设置代码PythonCodefromsklearn.datasetsimportmake_classificationfromsklearn.model_selectionimporttrain_test_split#1.数据生成

X,y=make_classification(n_samples=500,n_features=10,n_informative=5,n_classes=2,random_state=42

)#划分训练集和测试集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42

)

#2.Bagging超参数

n_estimators=10

#基学习模型的数量

sample_size=len(X_train)#每个子数据集的大小

base_models=[]#保存基学习模型

#Out-of-Bag预测相关

oob_predictions=np.zeros(len(X_train))oob_counts=np.zeros(len(X_train))

复现Bagging过程-主循环与评估Bagging主循环评估与预测随机抽样独立训练投票集成for_inrange(n_estimators):#3.1有放回的抽样生成子数据集

indices=np.random.choice(range(len(X_train)),size=sample_size,replace=True)oob_indices=[iforiinrange(len(X_train))ifinotinindices]X_subset=X_train[indices]y_subset=y_train[indices]#3.2训练基学习模型

model=DecisionTreeClassifier(max_depth=5,random_state=42

)model.fit(X_subset,y_subset)base_models.append(model)#3.3OOB样本预测(评估)

ifoob_indices:oob_preds=model.predict(X_train[oob_indices])oob_predictions[oob_indices]+=oob_predsoob_counts[oob_indices]+=1

#4.OOB误差计算

oob_avg_predictions=(oob_predictions/oob_counts).round()oob_error=np.mean(oob_avg_predictions!=y_train)print(f"OOBError:{oob_error:.4f}")#5.测试集预测

test_preds=np.zeros(len(X_test))formodelinbase_models:test_preds+=model.predict(X_test)#投票法(多数表决)

final_predictions=(test_preds/n_estimators).round()#6.评估模型

accuracy=accuracy_score(y_test,final_predictions)print(f"TestAccuracy:{accuracy:.4f}")

Bagging过程复现关键要点总结1数据生成二分类数据集•样本数:500•特征数:10•有信息特征:5•类别数:2数据划分•训练集:70%•测试集:30%2超参数设置基学习模型数量n_estimators=10子数据集大小sample_size=len(X_train)OOB预测存储oob_predictions&oob_counts3主循环核心有放回抽样np.random.choice()训练基学习模型DecisionTreeClassifier(max_depth=5)OOB数据预测记录未被抽中样本的预测结果4OOB误差计算平均预测结果四舍五入处理误差计算与真实标签比对5测试集预测投票法多数表决确定最终预测集成预测所有基学习模型预测结果综合6模型评估准确率计算accuracy_score()输出结果TestAccuracy:X.XXXX随机森林(RandomForest)核心思想双重随机性通过引入两种随机性来生成具有多样性的决策树集成模型随机样本Bagging有放回抽样生成多个随机子数据集随机特征每次分裂时随机选择特征子集显著降低模型方差·提升泛化能力定义与应用随机森林是一种基于Bagging思想的集成学习方法,主要用于分类和回归任务。通过构建多个决策树(通常是深度较大的树)并将其预测结果进行集成,提高模型的准确性和稳定性,同时有效减少过拟合。核心优势鲁棒性强不易发生过拟合处理高维特征数量大时依然高效多任务适用分类与回归表现良好特征重要性内置特征选择机制,可评估特征重要性,有助于降维或理解模型随机森林详细步骤1-随机样本选择Bagging抽样原始数据集D={(x₁,y₁),(x₂,y₂),...,(xₙ,yₙ)}生成子数据集•有放回的抽样•生成B个子数据集•每个子数据集大小为N被采样样本63.2%约36.8%为Out-of-Bag数据训练过程独立训练每棵树在自己的子数据集上独立训练样本多样性不同子数据集包含不同的样本组合,增加模型多样性OOB验证未被采样的样本可用于评估模型性能,类似交叉验证关键特性每个子数据集大小=N随机森林详细步骤2-随机特征选择特征随机性核心机制每次节点分裂时,随机选择特征子集进行最佳分裂分类任务

回归任务特征子集大小m=M/3分裂指标熵基尼指数分裂过程示意节点分裂流程全部特征M个特征随机选择m个特征最佳分裂1个特征树结构差异每棵树使用不同的特征子集,树结构多样化计算效率减少特征搜索空间,加速训练过程关键优势降低特征间相关性,减少过拟合风险,提升模型泛化能力随机森林详细步骤3-决策树构建完全生长训练策略使用随机样本训练每棵决策树不进行剪枝决策树完全生长至最大深度高个性化每棵树具有独特的结构和差异多样性来源随机样本+随机特征=差异性树构建过程随机样本每棵树使用Bagging生成的独立样本集随机特征每次分裂选择随机特征子集完全生长特性不限制树深度不设置叶子节点最小样本数树生长至最大可能深度充分学习样本特征高差异树结构差异显著强学习捕捉复杂模式低过拟合集成降低方差随机森林详细步骤4-集成预测分类问题投票法多数投票确定最终类别预测公式简单直观易于理解高效集成快速决策回归问题平均法求平均得到最终预测值预测公式降低方差平滑误差稳定预测泛化能力强

随机森林的优点与缺点优点鲁棒性强不易发生过拟合,能有效减少高方差模型的过拟合问题处理高维数据随机特征选择使得在特征数量大时依然高效多任务适用适用于分类和回归任务,对多种任务表现良好特征重要性评估内置特征选择机制,可评估特征重要性,有助于降维或理解模型提高稳定性多个决策树的集成可以提高模型的稳定性和泛化能力缺点计算资源消耗较大随机森林包含大量决策树,尤其在数据量大时训练较慢内存占用高训练时间长模型复杂度高随机森林难以解释单个预测结果(相比简单的线性模型或单棵决策树)黑盒模型可解释性差随机森林回归代码导入库1.生成回归数据集2.构建随机森林回归器3.模型训练4.模型评估决策树数量n_estimators=100特征选择max_features='sqrt'fromsklearn.datasetsimportmake_regressionfromsklearn.ensembleimportRandomForestRegressorfromsklearn.metricsimportmean_squared_error,r2_scorefromsklearn.model_selectionimporttrain_test_split

X,y=make_regression(n_samples=1000,n_features=15,noise=0.1,random_state=42

)X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42

)

rf_reg=RandomForestRegressor(n_estimators=100,max_depth=None,min_samples_split=2,min_samples_leaf=1,max_features='sqrt’,random_state=42

)

rf_reg.fit(X_train,y_train)

#预测

y_pred=rf_reg.predict(X_test)#计算均方误差

mse=mean_squared_error(y_test,y_pred)print(f"MeanSquaredError:{mse:.4f}")#计算R²分数

r2=r2_score(y_test,y_pred)print(f"R^2Score:{r2:.4f}")

随机森林分类代码导入库1.生成分类数据集2.构建随机森林分类器3.模型训练4.模型评估决策树数量n_estimators=100OOB评估oob_score=Truefromsklearn.datasetsimportmake_classificationfromsklearn.ensembleimportRandomForestClassifierfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score,classification_report

X,y=make_classification(n_samples=1000,n_features=20,n_informative=10,n_redundant=5,random_state=42

)X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42

)

rf_clf=RandomForestClassifier(n_estimators=100,max_depth=None,min_samples_split=2,min_samples_leaf=1,max_features='sqrt’,random_state=42,oob_score=True)

rf_clf.fit(X_train,y_train)

#OOB得分

print(f"OOBScore:{rf_clf.oob_score_:.4f}")#测试集预测

y_pred=rf_clf.predict(X_test)#准确率

accuracy=accuracy_score(y_test,y_pred)print(f"TestAccuracy:{accuracy:.4f}")#分类报告

print(f"\nClassificationReport:")print(classification_report(y_test,y_pred))

随机森林在Sklearn中的参数详解-基础参数n_estimators描述:决策树的数量默认值:100作用:更多的决策树通常可以提高模型的稳定性和准确性,但会增加计算成本criterion描述:分裂节点时的度量方法分类:'gini'(默认)或'entropy'回归:'squared_error'(默认)及'absolute_error'等max_depth描述:树的最大深度默认值:None(树会扩展到所有叶子纯度高或样本数小于min_samples_split)作用:限制树深度可以防止发生过拟合min_samples_split描述:节点分裂所需的最小样本数默认值:2作用:增大此值有助于正则化,防止发生过拟合min_samples_leaf描述:叶子节点的最小样本数默认值:1作用:可以减少过拟合,尤其是在样本数很小时max_features描述:每次分裂时随机选择的特征数默认值:'sqrt'(分类)或'auto'(回归)作用:限制特征数可以减少模型复杂度、提高泛化能力bootstrap描述:是否在构建树时使用自助采样(样本放回)默认值:True作用:取值为True时使用有放回的抽样;取值为False时使用整个数据集随机森林参数详解-优化和随机性参数oob_score描述:是否使用袋外样本来估算模型的泛化精度默认值:False作用:开启后可评估模型性能ccp_alpha描述:用于控制最小成本复杂度剪枝(Cost-ComplexityPruning)的复杂度参数默认值:0作用:正则化树结构random_state描述:随机种子,确保结果可重复默认值:None作用:设置相同的随机种子可以使每次运行都获得相同的训练结果n_jobs描述:并行运行时的线程数默认值:None(单线程)作用:-1时使用所有CPUverbose描述:控制模型训练过程的日志信息输出量默认值:0作用:值越大,输出信息越详细warm_start描述:是否使用之前的训练结果继续训练默认值:False作用:对于需要多次调用fit()的场景,可以缩短计算时间随机森林参数详解-特定功能参数与输出参数class_weight(仅分类)

描述:类别权重,用于处理类别不平衡默认值:None作用:可以为不同类别设置不同权重,平衡类别不平衡问题max_samples描述:训练每棵树时采样的最大样本数(当bootstrap=True时)默认值:None作用:设置为一个小于1的浮点数(比例)或整数(样本数量)输出相关参数feature_importances_描述:训练完成后,返回每个特征的重要性得分作用:可用于特征选择、降维和模型解释,识别对预测最有影响的特征estimators_描述:包含随机森林中每棵决策树的列表,以便于深入分析作用:可用于访问单个决策树、可视化树结构或进行更详细的模型分析参数调优建议•对于类别不平衡问题,建议设置class_weight='balanced'•max_samples可以控制模型复杂度和训练时间•通过feature_importances_进行特征选择常见用法示例•feature_importances_可用于特征重要性排序和可视化•estimators_[0]可访问第一棵决策树•可通过estimators_进行集成模型分析随机森林与集成学习的关系集成学习核心思想将多个基学习模型的结果结合起来,提高模型的准确性、稳定性和鲁棒性

随机森林定位集成学习中基学习模型集成技术的典型应用基于Bagging思想,以决策树作为基学习模型通过独特机制进一步增强模型性能Bagging机制Bootstrap抽样有放回重采样生成多个训练子集集成预测投票(分类)或平均(回归)

效果:减小方差和过拟合风险随机森林的创新扩展随机特征选择每棵树分裂时,从所有特征中随机选取一个子集进行决策,增加模型多样性,进一步降低过拟合风险7.2.2Boosting与AdaBoost-Boosting核心思想核心思想将多个基学习模型组合成一个强分类器,每个基学习模型依次接受训练,并试图纠正前一轮的误差与Bagging对比Bagging降低方差,提高稳定性Boosting降低偏差,提高泛化性能核心特点顺序训练每个模型基于前一轮结果训练纠正误差重点关注错误分类的样本逐步提升模型性能逐步提高复杂度更高操作和原理相对复杂主导地位由于Boosting在弱分类器集成领域具有显著优势,专注于偏差降低,在模型效果上表现突出,成为机器学习领域的主导算法

应用场景适用于各种分类和回归任务,尤其在需要高精度的场景中表现优异,如竞赛、工业应用等Boosting的基本元素1.弱分类器定义简单的模型,如决策树的单层(DecisionStump)误差要求误差率<50%准确率不需要非常高2.权重机制样本权重为每个训练样本分配权重,重点关注错误分类的样本分类器权重为每个弱分类器分配权重,衡量其在整体模型中的重要性3.迭代更新每一轮迭代根据当前模型表现调整样本权重参数调整调整弱分类器的参数以提高预测能力性能提升逐步提高整体模型的预测性能4.集成策略组合规则加权投票或加权求和最终输出生成最终的强分类器Boosting的典型流程1初始化样本权重目标为训练集中所有的样本分配初始权重公式

其中n是样本总数2训练弱分类器训练过程基于当前的样本权重,训练一个弱分类器ht(x)(第t轮的弱分类器)计算误差率θtII是指示函数,若预测错误,其值为1

Boosting的典型流程3计算分类器权重根据误差率计算权重误差率θt→分类器权重αt公式

权重值越大,分类器性能越好4更新样本权重调整样本权重根据弱分类器预测结果调整样本权重公式

Boosting的典型流程5组合弱分类器最终强分类器多个弱分类器的加权和公式•H(x):最终的强分类器•sign(·):决定总模型最终输出结果的函数6重复迭代迭代过程重复步骤2-5,逐步构建强分类器停止条件达到预定的弱分类器数量T满足其他停止条件(如验证集性能)每轮迭代都会提升模型性能

Boosting与Bagging的特性比较特性BoostingBagging主要目标减小偏差,通过逐步调整关注错误样本的权重来提升整体性能减小方差,通过构建多个独立模型并计算它们输出的均值来提高稳定性基学习模型关系按顺序训练,当前模型依赖于前一轮模型的输出并行训练,所有模型相互独立样本权重处理动态调整样本权重,对错误分类的样本赋予更高权重各样本权重相等,通过随机采样生成不同的数据子集集成方式加权结合,权重依据每个模型的性能确定简单投票(分类问题)或平均(回归问题)对噪声的鲁棒性对噪声较敏感,容易放大错误样本的影响对噪声的鲁棒性更好,训练过程中的随机性减少了单个噪声样本的影响复杂度较高:需要多轮迭代,每一轮模型依赖于之前的结果较低:每个模型可以并行训练典型方法AdaBoost、GradientBoosting、XGBoost、LightGBM、CatBoost随机森林、Bagging决策树表7.3Boosting与Bagging的特性比较Boosting的优缺点优点强大的预测能力通过集成多个弱分类器,Boosting通常能获得较高的预测性能灵活性Boosting适用于各种类型的模型和数据集自适应性通过对难以分类的样本分配更高的权重,Boosting帮助改进模型的表现缺点计算开销较大Boosting的训练过程通常较慢,尤其是弱分类器数量较大时对噪声敏感Boosting会对噪声数据分配较高权重,可能导致过拟合复杂度高Boosting需要精心调参,尤其是GradientBoosting类型的实现Sklearn中的Boosting算法Sklearn中的Boosting算法包含多个集成学习法,如基础的AdaBoost、性能稳定且奠定Boosting效果基础的梯度提升树(GBDT),以及近年来逐渐得到验证的直方提升树。除了Sklearn,研究者还提出了大量基于GBDT的改进算法,它们大都来自第三方库。Sklearn内置算法AdaBoost•AdaBoostClassifier•AdaBoostRegressor梯度提升树•GradientBoostingClassifier•GradientBoostingRegressor直方提升树•HistGradientBoostingClassifier•HistGradientBoostingRegressor第三方库算法XGBoost极限提升树xgboost.XGBClassifier/xgboost.XGBRegressorLightGBM轻量梯度提升树lightgbm.LGBMClassifier/lightgbm.LGBMRegressorCatBoost离散提升树catboost.CatBoostClassifier/catboost.CatBoostRegressorAdaBoost-自适应增强算法AdaBoostAdaptiveBoosting自适应增强算法提出者YoavFreund&RobertSchapire1995年提出算法类型自适应的加权集成方法核心目标结合多个弱分类器,提升分类性能主要贡献1自适应影响后续训练根据之前弱分类器的结果自适应地影响后续模型的训练,重点关注被之前分类器错误分类的样本,逐步改进模型表现。2真正实现集成思想突破传统Boosting仅依赖最新树的思路,考虑所有弱分类器的加权输出,每个弱分类器根据其性能贡献不同权重。最终预测=所有弱分类器加权和的符号函数AdaBoost的核心思想核心机制自适应权重调整调整分类器权重后续分类器更加关注错误分类样本逐步改善性能逐步改善分类性能弱分类器集成多个弱分类器转化为强分类器开创性算法AdaBoost是Boosting中的开创性算法,也是集成学习领域的经典代表。自适应调整通过自适应调整样本权重,以及综合所有弱分类器的结果,成功地将多个弱分类器转化为一个强分类器。缺点对噪声敏感启示为XGBoost、LightGBM等提供基础AdaBoost权重调整原理-初始阶段与错误分类样本增加权重核心机制改变样本权重是AdaBoost的核心机制之一,直接影响模型在每一轮迭代中的学习过程。关注重点让模型更加关注难以分类的样本减少干扰减少容易分类的样本的影响1初始阶段(第一轮迭代)样本权重相等开始时,所有训练样本的权重是相等的

其中n是样本总数2错误分类样本增加权重错误分类的样本(预测结果与真实标签不一致)被赋予更大的权重

下一轮迭代中,该样本的权重会增加

后续弱分类器会更加关注这些难以分类的样本

AdaBoost权重调整原理-正确分类样本降低权重与权重更新公式3正确分类样本降低权重当前分类器分类正确的样本会减小权重后续分类器会对这些样本给予较小的关注

不会浪费过多的计算资源来分类这些"容易分类"的样本

重点:关注难以分类的样本4权重更新公式

错误分类样本

正确分类样本

5归一化权重每一轮更新后,所有样本的权重都会经过归一化处理,确保样本的权重和为1,权重分布在0~1之间,避免某些样本权重过大导致训练过程不稳定。

权重调整的意义与作用1重点关注难分类的样本通过加大错误分类样本的权重,AdaBoost能够让后续的弱分类器更加关注这些"难点"样本

模型逐渐聚焦于数据中的复杂部分,提高整体分类准确性2减少易分类样本的干扰通过减小正确分类样本的权重,AdaBoost避免了过多关注那些本身很容易被分类的样本训练过程更加高效,减少对简单样本的过拟合3自适应性权重的自适应调整使得AdaBoost能够根据每轮分类器的表现自动调整学习的重点"自适应"的含义:每一轮训练都更有针对性4增强弱分类器的能力通过多次迭代和调整样本权重,AdaBoost能够将多个弱分类器的优点进行组合,最终得到一个强分类器每个弱分类器专注于解决不同的分类问题最终模型具有很强的泛化能力AdaBoost的基本参数n_estimators描述:迭代次数,构建多少轮弱分类器默认值:50影响:多→提升性能但可能过拟合;少→可能欠拟合learning_rate描述:弱分类器权重的缩放因子默认值:1影响:小→稳定但需更多分类器;大→收敛快但易过拟合algorithm描述:SAMME或SAMME.RSAMME:根据错误率计算权重SAMME.R:使用概率输出,通常性能更好base_estimator描述:弱分类器(如决策树桩)影响:性能直接影响最终效果random_state描述:控制随机数生成,保证可重复性影响:相同种子→相同训练结果warm_start描述:是否使用之前的计算结果继续训练影响:True→基于上一次结果,缩短计算时间max_samples描述:每轮训练时最大样本的比例默认值:1(使用所有训练样本)影响:调整可减少训练时间,但过小可能欠拟合AdaBoost的损失函数1加权分类误差

2分类器的权重

误差越小→权重越大→贡献越大3总损失函数

H(x):最终预测函数

4指数损失函数L(y,ŷ)=exp(-y·ŷ)y:真实标签(±1)ŷ:预测输出

AdaBoost代码示例-Sklearn中的AdaBoostClassifier导入库生成数据集定义基础分类器创建AdaBoost分类器训练与预测评估模型查看弱分类器权重adaboost=AdaBoostClassifier(base_estimator=base_estimator,n_estimators=50,learning_rate=0.2,random_state=42)

accuracy=accuracy_score(y_test,y_pred)print(f'Accuracy:{accuracy*100:.2f}%')print(f"Weakclassifierweights:")print(adaboost.estimator_weights_)

importnumpyasnpfromsklearn.model_selectionimporttrain_test_splitfromsklearn.datasetsimportmake_classificationfromsklearn.ensembleimportAdaBoostClassifierfromsklearn.treeimportDecisionTreeClassifierfromsklearn.metricsimportaccuracy_score

X,y=make_classification(n_samples=1000,n_features=20,n_informative=15,n_classes=2,random_state=42

)X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)

base_estimator=DecisionTreeClassifier(max_depth=1

)

adaboost.fit(X_train,y_train)y_pred=adaboost.predict(X_test)

7.2.3梯度提升树与极限提升树-GBDT概述梯度提升树GBDTGradientBoostingDecisionTree算法类型集成学习框架基学习模型CART决策树迭代方式逐步迭代优化目标函数适用任务回归与分类任务核心思想加法模型逐步叠加多个简单的基学习模型构建强学习器梯度提升每步迭代生成新树拟合负梯度方向优化目标通过逐步减小损失函数的值,使模型预测结果更加准确回归任务均方误差(MSE)分类任务对数损失(LogLoss)高精度预测能力·强泛化性能GBDT原理-问题定义与目标函数问题定义数据集

优化目标构建预测模型F(x),使其逼近目标变量y损失函数

L[y,F(x)]衡量预测模型与实际值的差距优化目标

最小化总损失损失函数类型均方误差(MSE)

适用于回归任务对数损失(LogLoss)适用于分类任务F(x)是累积的预测模型,通过逐步迭代优化

GBDT原理-加法模型加法模型逐步改进预测结果

初始模型F₀(x)-通常为常数基学习模型hₘ(x)-第m轮回归树学习率ν∈(0,1)-控制更新幅度迭代次数M-树的总数量核心思想通过逐步叠加多个简单的基学习模型(CART决策树)来构建一个强学习器

减小误差每步迭代生成新树拟合负梯度方向精细控制学习率ν控制每次更新的步长关键优势逐步优化灵活性强防止过拟合高精度预测GBDT算法推导-初始化模型步骤1初始化模型选择一个常数模型F₀(x),使它能够最小化初始总损失优化目标

均方误差(MSE)

最优的F₀(x)是目标变量的均值对数损失(LogLoss)最优的F₀(x)是目标变量的正类比例

GBDT算法推导-迭代更新在每一轮迭代m中,基于当前模型Fm-1(x)构建改进的新模型Fm(x),进一步减少总体损失1计算负梯度负梯度公式:MSE特例

负梯度=残差2拟合基学习模型训练回归树优化目标:

拟合负梯度逼近误差方向和幅度3更新模型模型更新公式:

学习率ν∈(0,1)控制步长,防止过快逼近局部最优

GBDT算法推导-终止条件与推导总结终止条件1最大树数量达到预定的最大树数量M2验证集损失验证集上的损失不再下降(早停机制)3损失减小阈值损失函数的减小幅度小于设定的阈值最终模型形式

优化方向每棵回归树拟合前一轮模型的负梯度方向函数空间优化在函数空间中进行梯度下降核心特点负梯度优化逐步叠加支持多种损失函数适用于多种任务Sklearn中的GBDT代码示例分类任务回归任务参数说明n_estimators集成中树的数量,即基学习模型的数量learning_rate学习率,控制每棵树的贡献程度。较小的学习率通常需要更多的树max_depth决策树的最大深度,用于控制树的复杂度subsample用于每棵树训练的数据子集比例,通常设置为0.8~1min_samples_split每个内部节点拆分所需的最小样本数fromsklearn.ensembleimportGradientBoostingClassifierfromsklearn.metricsimportaccuracy_score#创建并训练模型gbdt=GradientBoostingClassifier(n_estimators=100,learning_rate=0.1,max_depth=3

)gbdt.fit(X_train,y_train)#预测与评估y_pred=gbdt.predict(X_test)accuracy=accuracy_score(y_test,y_pred)print(f"Accuracy:{accuracy:.4f}")

fromsklearn.ensembleimportGradientBoostingRegressorfromsklearn.metricsimportmean_squared_error#创建并训练模型

gbdt=GradientBoostingRegressor(n_estimators=100,learning_rate=0.1,max_depth=3

)gbdt.fit(X_train,y_train)#预测与评估

y_pred=gbdt.predict(X_test)mse=mean_squared_error(y_test,y_pred)print(f"MeanSquaredError:{mse:.4f}")

极限提升树(XGBoost)原理XGBoostExtremeGradientBoosting高效性比传统GBDT训练更快性能优化多项创新技术提升准确性可扩展性支持大规模数据处理基于梯度提升的扩展XGBoost是对传统梯度提升(GBDT)的扩展和优化,通过多项创新技术在效率和准确性上表现更优1初始化模型使用常数作为初步预测2迭代训练训练新树预测残差3加权累加逐步提高预测能力4梯度下降最小化损失函数核心原理目标函数与损失函数二阶泰勒展开树的结构与分裂并行化与缺失值处理XGBoost核心原理-目标函数与损失函数目标函数二阶泰勒展开近似优化目标函数,更精确地更新模型参数组成训练损失正则化项目标函数公式

•负对数似然•平方误差•自定义损失函数正则化项Ω(fₖ)•叶子节点数量•节点权重L1/L2范数•控制模型复杂度fₖ是第k棵树的结构,正则化项包含树的复杂度XGBoost核心原理-二阶泰勒展开二阶泰勒展开核心优势利用一阶和二阶导数,使模型更新更精确关键组件梯度gₜ(一阶导数)Hessianhₜ(二阶导数)泰勒展开公式

梯度gₜ损失函数的一阶导数∂L/∂f指示最速下降方向Hessianhₜ损失函数的二阶导数∂²L/∂f²提供曲率信息通过二阶导数,提高训练收敛速度和准确性XGBoost核心原理-树的结构与分裂、并行化及缺失值处理树的结构与分裂CART决策树基于分类与回归树的决策树结构贪心算法策略不断选择最优切分点最小化损失分裂增益利用梯度和Hessian评估分裂质量前剪枝后剪枝并行化关键创新高效的并行化机制,极大提高训练速度对比传统GBDT传统GBDT按顺序构建树,XGBoost并行处理特征列并行化对所有特征的分裂点并行计算缺失值处理内建处理能力XGBoost自动检测并处理缺失值分裂策略每个节点的分裂考虑缺失值处理方式避免负面影响避免数据缺失对模型性能的负面影响XGBoost的优势高效性通过引入并行化计算、树的剪枝、正则化和精确的二阶泰勒展开,在许多数据集上更加高效地训练模型过拟合控制引入了正则化项(L1和L2),有效控制模型复杂度,防止过拟合处理大数据在内存和计算上做了很多优化,特别是分布式训练框架,能够处理大规模数据集灵活性支持回归、分类和排序等任务,适应性强,广泛应用于Kaggle等机器学习竞赛中Sklearn中的XGBoost算法-分类任务代码示例导入库加载数据集初始化XGBoost分类器训练与评估xgb_clf=xgboost.XGBClassifier(learning_rate=0.01,n_estimators=10,max_depth=8,subsample=0.8,colsample_bytree=0.8,use_label_encoder=False

)

importxgboostasxgbfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score

iris=load_iris()X=iris.datay=iris.targetX_train,X_test,y_train,y_test=train_test_split(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论