XGBoost是梯度提升集成算法的强大且流行的实现。

配置 XGBoost 模型的一个重要方面是选择在模型训练期间最小化的损失函数。

损失函数必须匹配预测建模问题类型,以同样的方式,我们必须选择根据问题类型与深学习神经网络的适当的损耗的功能。

今天,您将了解如何为 XGBoost 集成模型配置损失函数。

本文重点:

  • 指定训练 XGBoost 集成时使用的损失函数是一个关键步骤,就像神经网络一样。

  • 如何为二分类和多分类任务配置 XGBoost 损失函数。

  • 如何为回归预测建模任务配置 XGBoost 损失函数。

让我们开始吧。

教程概述

本教程分为三个部分;他们是:

  1. XGBoost 和损失函数

  2. 用于分类的 XGBoost 损失

  3. 回归的 XGBoost 损失

XGBoost 和损失函数

Extreme Gradient Boosting,简称 XGBoost,是梯度提升算法的高效开源实现。因此,XGBoost 是一个算法、一个开源项目和一个 Python 库。

它最初由 Tianqi Chen 开发,并由 Chen 和 Carlos Guestrin 在 2016 年题为“ XGBoost:A Scalable Tree Boosting System ”的论文中进行了描述。

它被设计为计算效率高(例如执行速度快)和高效,可能比其他开源实现更有效。

XGBoost 支持一系列不同的预测建模问题,最显着的是分类和回归。

XGBoost 通过最小化目标函数对数据集的损失进行训练。因此,损失函数的选择是一个关键的超参数,直接与要解决的问题类型相关,就像深度学习神经网络一样。

该实现允许通过“ objective ”超参数指定目标函数,并使用适用于大多数情况的合理默认值。

然而,对于在训练 XGBoost 模型时使用什么损失函数,初学者仍然存在一些困惑。

我们将在本教程中仔细研究如何为 XGBoost 配置损失函数。

在开始之前,让我们进行设置。

XGBoost 可以作为独立库安装,并且可以使用 scikit-learn API 开发 XGBoost 模型。

第一步是安装 XGBoost 库(如果尚未安装)。这可以在大多数平台上使用 pip python 包管理器来实现;例如:

然后,您可以确认 XGBoost 库已正确安装并且可以通过运行以下脚本来使用。

# check xgboost versionimport xgboostprint(xgboost.__version__)

运行该脚本将输出您已安装的 XGBoost 库的版本。

您的版本应该相同或更高。如果没有,您必须升级您的 XGBoost 库版本。

您可能在使用最新版本的库时遇到问题。不是你的错。

有时,库的最新版本会提出额外的要求,或者可能不太稳定。

如果您在尝试运行上述脚本时确实遇到错误,我建议您降级到 1.0.1(或更低版本)。这可以通过指定要安装到 pip 命令的版本来实现,如下所示:

sudo pip install xgboost==1.0.1

如果您看到警告消息,现在可以放心地忽略它。例如,以下是您可能会看到并可以忽略的警告消息示例:

FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.

XGBoost 库有自己的自定义 API,尽管我们将通过 scikit-learn 包装类使用该方法:XGBRegressor和XGBClassifier。这将使我们能够使用 scikit-learn 机器学习库中的全套工具来准备数据和评估模型。

两个模型以相同的方式运行,并采用相同的参数来影响决策树的创建和添加到集成的方式。

接下来,让我们仔细看看如何为 XGBoost 在分类问题上配置损失函数。

用于分类的 XGBoost 损失

分类任务涉及在给定输入样本的情况下预测每个可能类别的标签或概率。

具有互斥标签的分类任务有两种主要类型:具有两个类标签的二元分类和具有两个以上类标签的多类分类。

  • 二元分类:具有两个类标签的分类任务。

  • 多类分类:具有两个以上类标签的分类任务。

XGBoost 为这些问题类型中的每一种都提供了损失函数。

在机器学习中,典型的做法是训练模型来预测概率任务的类成员概率,以及任务是否需要清晰的类标签来对预测的概率进行后处理(例如使用argmax)。

这种方法在训练深度学习神经网络进行分类时使用,在使用 XGBoost 进行分类时也推荐使用。

用于预测二元分类问题概率的损失函数是“ binary:logistic ”,用于预测多类问题类别概率的损失函数是“ multi:softprob ”。

  • binary:logistic ”:用于二进制分类的 XGBoost 损失函数。

  • multi:softprob “:用于多类分类的 XGBoost 损失函数。

在配置 XGBClassifier 模型时,可以通过“ objective ”超参数指定这些字符串值。

例如,对于二元分类:

...# define the model for binary classificationmodel = XGBClassifier(objective='binary:logistic')

并且,对于多类分类:

...# define the model for multi-class classificationmodel = XGBClassifier(objective='multi:softprob')

重要的是,如果您不指定“ objective ”超参数,_XGBClassifier_将根据训练期间提供的数据自动选择这些损失函数之一。

我们可以通过一个有效的例子来具体说明这一点。

下面的示例创建一个合成二元分类数据集,使用默认超参数在数据集上拟合_XGBClassifier_,然后输出模型目标配置。

# example of automatically choosing the loss function for binary classificationfrom sklearn.datasets import make_classificationfrom xgboost import XGBClassifier# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1)# define the modelmodel = XGBClassifier()# fit the modelmodel.fit(X, y)# summarize the model loss functionprint(model.objective)

运行示例在数据集上拟合模型并输出损失函数配置。

我们可以看到模型自动选择一个损失函数进行二元分类。

或者,我们可以指定目标并拟合模型,确认使用了损失函数。

# example of manually specifying the loss function for binary classificationfrom sklearn.datasets import make_classificationfrom xgboost import XGBClassifier# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1)# define the modelmodel = XGBClassifier(objective='binary:logistic')# fit the modelmodel.fit(X, y)# summarize the model loss functionprint(model.objective)

运行示例在数据集上拟合模型并输出损失函数配置。

我们可以看到用于指定二元分类损失函数的模型。

让我们在具有两个以上类的数据集上重复此示例。在这种情况下,三个类。

下面列出了完整的示例。

# example of automatically choosing the loss function for multi-class classificationfrom sklearn.datasets import make_classificationfrom xgboost import XGBClassifier# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1, n_classes=3)# define the modelmodel = XGBClassifier()# fit the modelmodel.fit(X, y)# summarize the model loss functionprint(model.objective)

运行示例在数据集上拟合模型并输出损失函数配置。

我们可以看到模型自动为多类分类选择了一个损失函数。

或者,我们可以手动指定损失函数并确认它用于训练模型。

# example of manually specifying the loss function for multi-class classificationfrom sklearn.datasets import make_classificationfrom xgboost import XGBClassifier# define datasetX, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1, n_classes=3)# define the modelmodel = XGBClassifier(objective="multi:softprob")# fit the modelmodel.fit(X, y)# summarize the model loss functionprint(model.objective)

运行示例在数据集上拟合模型并打印损失函数配置。

我们可以看到用于为多类分类指定损失函数的模型。

最后,还有其他损失函数可用于分类,包括:用于二元分类的“ binary:logitraw ”和“ binary:hinge ”以及用于多类分类的“ multi:softmax ”。

您可以在此处查看完整列表:

  • 学习任务参数:目标。

接下来,我们来看看回归的 XGBoost 损失函数。

回归的 XGBoost 损失

回归是指在给定输入样本的情况下预测数值的预测建模问题。

虽然预测概率听起来像一个回归问题(即概率是一个数值),但它通常不被视为回归类型的预测建模问题。

预测数值时使用的 XGBoost 目标函数是“ reg:squarederror ”损失函数。

  • “reg:squarederror”:回归预测建模问题的损失函数。

在配置_XGBRegressor_模型时,可以通过“ objective ”超参数指定此字符串值。

例如:

...# define the model for regressionmodel = XGBRegressor(objective='reg:squarederror')

重要的是,如果你没有指定“ objective ”超参数,_XGBRegressor_会自动为你选择这个目标函数。

我们可以通过一个有效的例子来具体说明这一点。

下面的示例创建一个合成回归数据集,在数据集上拟合_XGBRegressor_,然后输出模型目标配置。

# example of automatically choosing the loss function for regressionfrom sklearn.datasets import make_regressionfrom xgboost import XGBRegressor# define datasetX, y = make_regression(n_samples=1000, n_features=20, n_informative=15, noise=0.1, random_state=7)# define the modelmodel = XGBRegressor()# fit the modelmodel.fit(X, y)# summarize the model loss functionprint(model.objective)

运行示例在数据集上拟合模型并输出损失函数配置。

我们可以看到模型自动选择一个损失函数进行回归。

或者,我们可以指定目标并拟合模型,确认使用了损失函数。

# example of manually specifying the loss function for regressionfrom sklearn.datasets import make_regressionfrom xgboost import XGBRegressor# define datasetX, y = make_regression(n_samples=1000, n_features=20, n_informative=15, noise=0.1, random_state=7)# define the modelmodel = XGBRegressor(objective='reg:squarederror')# fit the modelmodel.fit(X, y)# summarize the model loss functionprint(model.objective)

运行示例在数据集上拟合模型并输出损失函数配置。

我们可以看到模型使用指定的损失函数进行回归。

最后,还有其他损失函数可以用于回归,包括:“ reg:squaredlogerror ”、“ reg:logistic ”、“ reg:pseudohubererror ”、“ reg:gamma ”和“ reg:tweedie ”。

XGBoost 损失函数Loss Functions就为大家介绍到这里了,欢迎各位同学了解<Python数据分析与机器学习项目实战>课程,学习更多相关知识:https://edu.csdn.net/combo/detail/1928

版权声明:文章来自公众号(python风控模型),未经许可,不得抄袭。遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

XGBoost 损失函数Loss Functions相关推荐

  1. Saturating VS Non-Saturating Loss functions in GANs

    最近再看The relativistic discriminator: a key element missing from standard GAN这篇文章,里面提到了Saturating和Non- ...

  2. 损失函数(Loss function) 和 代价函数(Cost function)

    1损失函数和代价函数的区别: 损失函数(Loss function):指单个训练样本进行预测的结果与实际结果的误差. 代价函数(Cost function):整个训练集,所有样本误差总和(所有损失函数 ...

  3. 《深度学习笔记》——“损失函数loss乘以正数因子a是否等价于学习率lr乘以a呢?”

    致谢 感谢知乎回答"loss的尺度的影响的本质上取决于优化器"给予我的启发! 1 问题描述 最近我在调参时,想到一个问题:"损失函数loss乘以正数因子a是否等价于学习率 ...

  4. smoothl1函数_Faster RCNN的损失函数(Loss Function)

    Faster RCNN的损失函数(Loss Function)的形式如下: : Anchor[i]的预测分类概率: Anchor[i]是正样本时, :Anchor[i]是负样本时, ; 什么是正样本与 ...

  5. CS231n 02 Loss Functions and Optimization

    Loss Functions and Optimization Preview the Goal in this lecture Define a loss function Come up with ...

  6. python如何画损失函数图_Pytorch 的损失函数Loss function使用详解

    1.损失函数 损失函数,又叫目标函数,是编译一个神经网络模型必须的两个要素之一.另一个必不可少的要素是优化器. 损失函数是指用于计算标签值和预测值之间差异的函数,在机器学习过程中,有多种损失函数可供选 ...

  7. 损失函数Loss相关总结(精细版)

    目录 Loss损失函数的作用 损失函数loss和准确率accuracy的比较 回归任务中的loss主要包括 Loss损失函数的作用 损失函数用来评价模型的预测值和真实值不一样的程度,深度学习训练模型的 ...

  8. 损失函数(Loss function)、代价函数(成本函数)(Cost function)、目标函数(objective function)的区别与联系

    基本概念: 损失函数(Loss function):计算的是一个样本的误差. 损失函数是定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的 ...

  9. 神经网络常用损失函数Loss Function

    深度学习神经网络常用损失函数 损失函数--Loss Function 1. MSE--均方误差损失函数 2. CEE--交叉熵误差损失函数 3. mini-batch版交叉熵误差损失函数 损失函数–L ...

  10. 损失函数(Loss Function) -1

    http://www.ics.uci.edu/~dramanan/teaching/ics273a_winter08/lectures/lecture14.pdf Loss Function 损失函数 ...

最新文章

  1. 深度学习表数据的工具
  2. 科大星云诗社动态20210824
  3. ida 反编译 linux bin,使用IDA pro逆向ARM M系核心的Bin固件
  4. Jquery- 错误消息Date未定义,String未定义
  5. Filter(过滤器) 和 interceptor(拦截器)的区别
  6. 浮点数转换为整数四舍五入_定义宏以将浮点值四舍五入为C中最接近的整数
  7. ug10许可证错误一8_面对排污许可证后监督检查,企业应做好哪些准备?
  8. 近40万辆奥迪车被召回,有你的吗?
  9. warning: implicit declaration of function ‘typeof’
  10. 软件开发模式之敏捷开发模型,应用之DevOps
  11. 1991-2019年中国科技统计年鉴(EXCEL版)
  12. java打印某年日历_java打印指定年月份的日历
  13. Python+Webdriver实现淘宝、京东等抢单操作
  14. 运营小技能:自定义公众号菜单模版(带有文章分类栏目、内容列表)、获取历史页面
  15. html手机陀螺儀页面,详解html5如何获取手机陀螺仪角度信息的示例代码
  16. JavaMail实现发送邮件程序
  17. Docker容器离线安装字体(宋体)
  18. 哪有什么高效安全运行,只不过是磁盘之间在负重前行 Linux RAID磁盘阵列
  19. Latex编写数学公式的常用语法
  20. 工作的态度和做事还是需要端正啊和注意啊

热门文章

  1. 投影查询(2020-3-13)
  2. ubuntu php加载不了gd,ubuntu 中php不支持gd库的freetype,导致页面验证码无法加载
  3. 【已解决】FAILURE: Build failed with an exception......
  4. 学习Java,真的可以月薪过万嘛?真实个人经历告诉你,记录了平时学习的内容以及学习过程中最真实的感受(四)
  5. python导入datetime模块_Python时间模块datetime用法
  6. python线程监控_Python 使用摄像头监测心率!这么强吗?
  7. java 基本语法与流程控制_java基础语法2-运算符与流程控制
  8. DOM之操作元素(附实例)
  9. 处理非window设置为window的Owner
  10. 简单易用的android 热修复