XGB算法梳理

XGBoost算法详解:从原理到参数调优
XGBoost是一种优化的梯度增强算法,通过不断添加树来提高预测模型性能。其损失函数包括MSE或对数损失,目标函数含有正则化项以防止过拟合。XGBoost支持对缺失值处理,并有多种策略选择分裂点。它还具有正则化参数γ和λ,以及sklearn参数如objective和eval_metric,常用于分类和回归问题。

算法原理

XGBoost(eXtreme Gradient Boosting)是工业界逐渐风靡的基于GradientBoosting算法的一个优化的版本,可以给预测模型带来能力的提升。其算法思想就是不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值。
在这里插入图片描述
注:w_q(x)为叶子节点q的分数,f(x)为其中一棵回归树

损失函数

对于回归问题,我们常用的损失函数是MSE,即:
在这里插入图片描述
对于分类问题,我们常用的损失函数是对数损失函数:
在这里插入图片描述
XGBoost目标函数定义为:
在这里插入图片描述
目标函数由两部分构成,第一部分用来衡量预测分数和真实分数的差距,另一部分则是正则化项。正则化项同样包含两部分,T表示叶子结点的个数,w表示叶子节点的分数。γ可以控制叶子结点的个数,λ可以控制叶子节点的分数不会过大,防止过拟合。
正如上文所说,新生成的树是要拟合上次预测的残差的,即当生成t棵树后,预测分数可以写成:
在这里插入图片描述
同时,可以将目标函数改写成:
在这里插入图片描述
很明显,我们接下来就是要去找到一个f_t能够最小化目标函数。XGBoost的想法是利用其在f_t=0处的泰勒二阶展开近似它。所以,目标函数近似为:

### XGBoost分类算法介绍 XGBoost(Extreme Gradient Boosting)是一种可扩展的、分布式的梯度提升库,由陈天奇等人开发。它在传统梯度提升算法的基础上进行了一系列优化,具有高效、灵活且可扩展的特点,在各类机器学习竞赛和实际应用中都取得了很好的效果。XGBoost不仅可以用于分类问题,还能处理回归和排序等任务。在分类问题中,它能够处理二分类和多分类问题,输出样本属于各个类别的概率。 ### 原理 XGBoost基于梯度提升框架,其核心思想是通过迭代训练一系列的弱分类器(通常是决策树),并将它们组合成一个强分类器。具体步骤如下: - **初始化**:首先初始化一个常量作为初始预测值,通常是所有样本标签的均值。 - **迭代训练**:在每一轮迭代中,XGBoost会训练一个新的决策树,该决策树的目标是拟合前一轮迭代模型的残差。残差是指样本的真实标签与前一轮模型预测值之间的差值。为了找到最优的决策树结构,XGBoost使用了一种贪心算法,通过枚举所有可能的分割点,选择能够最大程度降低目标函数的分割点。 - **目标函数**:XGBoost的目标函数由两部分组成,即损失函数和正则化项。损失函数用于衡量模型的预测值与真实标签之间的差异,常见的损失函数有对数损失函数(用于分类问题)和平方损失函数(用于回归问题)。正则化项用于控制模型的复杂度,防止过拟合,它包括树的叶子节点数量和叶子节点的权重的平方和。 - **模型融合**:每一轮训练得到的决策树会乘以一个学习率(也称为步长),然后累加到前一轮的模型中,得到当前轮的模型。学习率的作用是控制每一轮迭代的步长,避免模型过拟合。 ### 应用 - **金融领域**:用于信用风险评估,根据客户的个人信息、信用历史等特征,预测客户是否会违约;也可用于欺诈检测,识别异常的交易行为。 - **医疗领域**:疾病诊断,根据患者的症状、检查结果等数据,判断患者是否患有某种疾病;还可用于疾病预后预测,预测患者的治疗效果和生存情况。 - **电商领域**:商品推荐,根据用户的浏览历史、购买记录等信息,向用户推荐可能感兴趣的商品;用户流失预测,预测用户是否会流失,以便采取相应的营销策略。 ### 使用方法 以下是使用Python和Scikit - learn接口的XGBoost库进行分类任务的示例代码: ```python import xgboost as xgb from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建XGBoost分类器 model = xgb.XGBClassifier(objective='multi:softmax', num_class=3, learning_rate=0.1, n_estimators=100, max_depth=3) # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy}") ``` 在上述代码中,首先加载了鸢尾花数据集,并将其划分为训练集和测试集。然后创建了一个XGBoost分类器,设置了目标函数为`multi:softmax`用于多分类问题,指定类别数量为3。接着使用训练集对模型进行训练,最后使用测试集进行预测,并计算预测的准确率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值