您的浏览器版本过低,为保证更佳的浏览体验,请点击更新高版本浏览器

以后再说X

欢迎访问kaiyun体育登录网页入口

图片名

全国订购热线:
020-16217446981

主页 > 资讯公告 > 活动公告

活动公告
活动公告 公司新闻 健身指南 器材保养 常见问题

云开·全站appkaiyun官网 Python XGBoost算法代码实现和筛选特征应用

作者:佚名 发布时间:2024-05-03 00:11:59 次浏览

云开·全站appkaiyun官网 Python XGBoost算法代码实现和筛选特征应用文章浏览阅读1.3k次。原文链接:https://zhuanlan.zhihu.com/p/33931960?

原文链接:

XGBoost算法是机器学习中重要的算法模块。 以前我们经常使用GBDT来处理连续特征,但现在越来越多地使用XGBoost。 尤其是在数据预处理和特征工程方面云开·全站apply体育官方平台,XGBoost具有许多明显的优势。

1. 算法原理

一直听说GBM、GBDT(Gradient Boost Decision Tree)、渐进梯度决策树、GBRT(Gradient Boost RegressionTree)、渐进梯度回归树,这是GBDT的一种,因为GBDT的核心是将所有树作为最终结果kaiyun欧洲杯app,而分类树的结果无法累加kaiyun体育登录网页入口,因此GBDT中的树是回归树,而不是分类树。

XGBoost(eXtreme Gradient Boosting)是业界逐渐流行的GradientBoosting算法的优化版本,可以提高预测模型的能力。

对于平方损失函数,将回归树的分裂节点拟合到残差; 对于一般损失函数(梯度下降),拟合的是残差的近似值。 划分分裂节点时,会枚举所有特征的值并选择划分。 观点。 最终的预测结果是每棵树的预测结果之和。

XGBoost算法的步骤与GB基本相同。 它们首先被初始化为一个常量。 gb 基于一阶导数 ri。

2、GBDT的优点对比

1.传统GBDT使用CART作为基分类器。 xgboost 还支持线性分类器。 此时,xgboost相当于带有L1和L2正则化项的逻辑回归(分类问题)或线性回归(回归问题)。 —可以通过booster设置参数[default=gbtree]:gbtree:基于树的模型/gblinear:线性模型

2.传统GBDT在优化时仅使用一阶导数信息,而xgboost对成本函数进行二阶泰勒展开,同时使用一阶和二阶导数。 顺便说一句,xgboost工具支持自定义成本函数,只要该函数可以进行一阶和二阶微分即可。 —损失函数得到了改进(泰勒展开,一阶信息g和二阶信息h,上一章介绍过)

3.xgboost在成本函数中添加正则项,以控制模型的复杂度。 正则项包括树的叶子节点数量以及每个叶子节点上输出的分数的L2模块的平方和。从Bias-variance tradeoff的角度来看,正则项降低了模型方差,使得​​学习到的模型更简单并防止过度拟合。 这也是xgboost优于传统GBDT的一个特点。

——正则化包括两部分,都是为了防止过拟合。 可进行剪枝,并新增叶子节点输出L2平滑。

4.shrinkage和column subsampling——为了防止过拟合,在论文2.3节中介绍。 这位答主已经总结得很好了。

(1) 收缩率降低与学习率类似。 在树提升的每一步之后添加参数 n(权重)。 这样就减少了每棵树的影响,为后续树优化模型提供了空间。

(2)列子采样列(特征)采样据说是从随机森林中学习的。 防止过拟合的效果比传统的行采样(也有行采样功能)要好,而且有利于后面提到的并行性。 处理算法。

5.split查找算法: - 理解不够透彻,需要进一步研究。

(1)精确贪心算法——贪心算法获得最优分割

(2)近似算法——近似算法,提出了候选分割点的概念。 首先通过直方图算法得到候选分割点的分布,然后根据候选分割点将连续特征信息映射到不同的桶中,并对信息进行统计汇总。 详细信息请参见论文第3.3节。

(3)Weighted Quantile Sketch——分布式加权直方图算法。 论文3.4节这里的算法(2)和(3)是为了解决数据无法一次性加载到内存中或者算法(1)在分布式情况下效率低下的问题。 ,以下引用依然是Wepon大师的总结:

可并行的近似直方图算法。 当树节点分裂时,我们需要计算每个特征的每个分裂点对应的增益,即使用贪心法枚举所有可能的分裂点。 当数据无法一次性加载到内存或者分布时,贪心算法的效率会变得很低,因此xgboost还提出了并行化的近似直方图算法来高效生成候选分割点。

6. 缺失值的处理。 对于缺失特征值的样本,xgboost可以自动学习其分割方向。 —稀疏感知分割查找算法,论文第 3.4 节,算法 3:稀疏感知分割查找

7.Built-in Cross-Validation(内置交叉验证)

XGBoost 允许用户在 boosting 过程的每次迭代中运行交叉验证,因此很容易在单次运行中获得准确的最佳 boosting 迭代次数。

这与 GBM 不同,我们必须运行网格搜索并且只能测试有限的值。

8.继续Existing Model(然后学习现有模型)

用户可以从上次运行的最后一次迭代开始训练 XGBoost 模型。 这在某些特定应用中具有显着的优势。

sklearn 的 GBM 实现也有这个功能,所以他们在这一点上是平的。

9、灵活性高

**XGBoost 允许用户定义自定义优化目标和评估标准。

这为模型增加了一个全新的维度,我们可以做的没有限制。**

10.并行处理——系统设计模块、块结构设计等。

xgboost 工具支持并行性。 boost不是串行结构吗? 怎样才能并行化呢? 请注意,xgboost 的并行性不是树粒度并行性。 xgboost 也无法进行下一次迭代,直到一次迭代完成(第 t 次迭代的成本函数包含前 t-1 次迭代的预测值)。 xgboost的并行性是在特征粒度上。 我们知道,决策树学习中最耗时的步骤是对特征值进行排序(因为需要确定最佳分割点)。 在训练之前,xgboost对数据进行预排序,然后将其保存为块结构。 这种结构在迭代过程中反复使用,大大减少了计算量。 这种块结构也使得并行化成为可能。 在分裂节点时,需要计算每个特征的增益,最终选择增益最大的特征进行分裂。 然后每个特征的增益计算可以在多个线程中进行。

另外,xgboost还设计了缓存压缩感知算法,这是系统设计模块的效率提升。

当梯度统计数据不适合处理器缓存时,缓存未命中会显着减慢分割点查找算法的速度。

(1) 使用缓存感知预取算法进行精确贪心算法

(2)为合适的算法选择合适的块大小

3.Python代码(参数说明)

from sklearn.model_selection import train_test_split
from sklearn import metrics
from  sklearn.datasets  import  make_hastie_10_2
from xgboost.sklearn import XGBClassifier
X, y = make_hastie_10_2(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)##test_size测试集合所占比例
 clf = XGBClassifier(
silent=0 ,#设置成1则没有运行信息输出,最好是设置为0.是否在运行升级时打印消息。
#nthread=4,# cpu 线程数 默认最大
learning_rate= 0.3, # 如同学习率
min_child_weight=1, 
# 这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言
#,假设 h 在 0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。
#这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。
max_depth=6, # 构建树的深度,越大越容易过拟合
gamma=0,  # 树的叶子节点上作进一步分区所需的最小损失减少,越大越保守,一般0.1、0.2这样子。
subsample=1, # 随机采样训练样本 训练实例的子采样比
max_delta_step=0,#最大增量步长,我们允许每个树的权重估计。
colsample_bytree=1, # 生成树时进行的列采样 
reg_lambda=1,  # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
#reg_alpha=0, # L1 正则项参数
#scale_pos_weight=1, #如果取值大于0的话,在类别样本不平衡的情况下有助于快速收敛。平衡正负权重
#objective= 'multi:softmax', #多分类的问题 指定学习任务和相应的学习目标
#num_class=10, # 类别数,多分类与 multisoftmax 并用
n_estimators=100, #树的个数
seed=1000 #随机种子
#eval_metric= 'auc'
 )
clf.fit(X_train,y_train,eval_metric='auc')
y_true, y_pred = y_test, clf.predict(X_test)
print"Accuracy : %.4g" % metrics.accuracy_score(y_true, y_pred)

4. 特征筛选

XGBoost的过滤功能其实很简单。 主要涉及通过zip合并模型的重要性和特征。

图片名 客服