XGBoost分类和功能选择简介

我最近在书中遇到了一种新的[对我而言]的方法,即梯度增强机(特别是XGBoost) 使用Python进行深度学习 by 弗朗索瓦·乔莱特。 Chollet提到XGBoost是当今成功的应用机器学习者应该熟悉的一项浅层学习技术,因此我信奉他的话,并努力学习更多的知识。

我主要是想写这篇文章,因为我认为其他一些具有机器学习知识的人也可能像我一样错过了这个话题。我绝不是该主题的专家,并且老实说,我对理解某些机制很困难,但是,我希望本文是您对该主题的探索的一个很好的入门(底部也列出了很多资源)!

合奏学习

那么XGBoost是什么,它在ML领域中适合什么地方?梯度提升机属于ML一类,称为Ensemble Learning,它是ML方法的一个分支,可以同时训练和预测多种模型以产生单个出色的输出。您可以将其视为规划从未到达过的单个位置的几条不同路线;当您使用所有路线时,您将开始了解哪些交通信号灯花费的时间长,以及一天中的时间如何影响一条路线对另一条路线的影响,从而使您能够设计出完美的路线。您尝试并组合了几种不同的模型以得出最佳结论。合奏学习是相似的!

集成学习分为三个主要子集:

    • 装袋:Bootstrap Aggregation或Bagging具有两个不同的特征,这些特征定义了其训练和预测。对于训练,它利用Bootstrap过程将训练数据分为不同的随机子样本,这些样本用于训练的模型的不同迭代。对于预测,装袋分类器将使用每个模型中票数最多的预测来产生其输出,而装袋回归将采用所有模型的平均值来产生输出。套袋通常应用于高方差模型,例如决策树,而随机森林算法是套袋上非常接近的变体。
    • 堆码:堆叠模型是一种“元模型”,它利用许多典型不同的模型的集合中的输出作为输入要素。例如,这允许您使用所有训练数据训练K-NN,线性回归和决策树,然后获取这些输出并将它们与Logistic回归合并。这个想法是,这可以减少过度拟合并提高准确性。
  • 提升:终于加油!提升的核心定义是一种将弱学习者转换为强学习者的方法,通常应用于树木。更明确地讲,增强算法按顺序添加模型的迭代,并在此过程中调整弱学习者的权重。这减少了模型的偏差,通常可以提高准确性。流行的增强算法是AdaBoost,Gradient Tree 提升和XGBoost,我们将在这里重点介绍。

XGBoost

极限梯度增强或 XGBoost 是一个针对现代数据科学问题和工具进行了优化的梯度提升算法库。它利用了boosting提到的技术,并包装在易于使用的库中。 XGBoost的一些主要优点是它的高度可伸缩性/可并行性,执行速度快并且通常胜过其他算法。

AI Time Journal资源
您正在学习数据科学吗?

Check out what 图书 帮助20多个成功的数据科学家成长。

在本节中,我们将通过预测旅客是否在泰坦尼克号上幸存下来来探索XGBoost。可以找到用于此分析的完整Jupyter笔记本 这里.

我首先将Titanic数据加载到Pandas数据框中,然后浏览可用字段。 注意:为简洁起见,在加载前,我手动更改了csv中的“嵌入”和“性别”功能

大多数元素似乎是连续的,而包含文本的元素似乎与预测幸存者无关,因此我创建了一个新的数据框('train_df'),仅包含我想训练的特征。另外,请注意,XGBoost将处理NaN,但(至少对我而言)不处理字符串。

 就像其他型号一样’s important to break the data up into training 和 test data, which I did with SKLearn’s train_test_split. Note that I decided to go with only 10% test data. I did this primarily because the titanic set is already small 和 my training data set is already a subset of the total data set available. This is probably leading to a bit of overfitting 和 is likely not best practice.

With my data ready 和 my goal focused on classifying passengers as survivors or not, I imported the XGBClassifier from XGBoost. We then create an object for XGBClassifier() and pass it some parameters (not necessary, but I ended up wanting to try tweaking the model a bit manually). Finally we fit() the model to our training features 和 labels, 和 we’re ready to make predictions! As you can see, using the XGBoost library is very similar to using SKLearn.

使用模型进行预测并使用准确性作为衡量标准,我可以看到我实现了81%以上的准确性。这是经过一些手动调整之后的结果,尽管我希望获得更好的结果,但它仍然比我过去对相同数据的决策树所取得的成就要好。

One super cool module of XGBoost is plot_importance which provides you the 分数 展示了该功能对模型的重要性。这不仅有助于选择功能,不仅适用于您的XGB,还适用于您可能在数据上运行的任何其他类似模型。

将其提升到一个新的水平,我发现了 很棒的代码示例和文章 关于评估要使用的功能数量的自动化方法,所以我不得不尝试一下。

Essentially this bit of code trains 和 tests the model 通过 iteratively removing features 通过 their importance, recording the model’s accuracy along the way. This allows you to easily remove features without simply using trial 和 error. Although not shown here, this approach can also be applied to other parameters (learning_ratemax_depth, etc) of the model to automatically try different tuning variables. I won’尽管没有详细介绍调整模型的细节,但是,大量的调整参数是XGBoost如此受欢迎的原因之一。

我希望这对XGBoost是什么以及如何使用它很有帮助。谢谢阅读。现在,开始构建!

有用的资源/参考

GXBoost概述 (必读!)

功能重要性和选择

调整XGBoost

合奏学习

贡献者

康奈尔技术学院MBA候选人|约翰逊管理学院

贡献者表达的观点是他们自己的观点。

关于乔纳森·赫科

康奈尔技术学院MBA候选人|约翰逊管理学院

查看乔纳森·希尔科的所有帖子→