当前位置:   article > 正文

XGBoost 损失函数Loss Functions_xgboost loss function

xgboost loss function

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 version

import xgboost

print(xgboost.__version__)
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

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

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

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

sudo pip install xgboost==1.0.1
  • 1

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

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

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 classification

model = XGBClassifier(objective='binary:logistic')
  • 1
  • 2
  • 3
  • 4
  • 5

并且,对于多类分类:

...

# define the model for multi-class classification

model = XGBClassifier(objective='multi:softprob')
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

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

# example of automatically choosing the loss function for binary classification

from sklearn.datasets import make_classification

from xgboost import XGBClassifier

# define dataset

X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1)

# define the model

model = XGBClassifier()

# fit the model

model.fit(X, y)

# summarize the model loss function

print(model.objective)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

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

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

# example of manually specifying the loss function for binary classification

from sklearn.datasets import make_classification

from xgboost import XGBClassifier

# define dataset

X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1)

# define the model

model = XGBClassifier(objective='binary:logistic')

# fit the model

model.fit(X, y)

# summarize the model loss function

print(model.objective)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

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

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

下面列出了完整的示例。

# example of automatically choosing the loss function for multi-class classification

from sklearn.datasets import make_classification

from xgboost import XGBClassifier

# define dataset

X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1, n_classes=3)

# define the model

model = XGBClassifier()

# fit the model

model.fit(X, y)

# summarize the model loss function

print(model.objective)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

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

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

# example of manually specifying the loss function for multi-class classification

from sklearn.datasets import make_classification

from xgboost import XGBClassifier

# define dataset

X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1, n_classes=3)

# define the model

model = XGBClassifier(objective="multi:softprob")

# fit the model

model.fit(X, y)

# summarize the model loss function

print(model.objective)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

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

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

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

  • 学习任务参数:目标。

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

回归的 XGBoost 损失

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

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

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

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

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

例如:

...

# define the model for regression

model = XGBRegressor(objective='reg:squarederror')
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

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

# example of automatically choosing the loss function for regression

from sklearn.datasets import make_regression

from xgboost import XGBRegressor

# define dataset

X, y = make_regression(n_samples=1000, n_features=20, n_informative=15, noise=0.1, random_state=7)

# define the model

model = XGBRegressor()

# fit the model

model.fit(X, y)

# summarize the model loss function

print(model.objective)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

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

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

# example of manually specifying the loss function for regression

from sklearn.datasets import make_regression

from xgboost import XGBRegressor

# define dataset

X, y = make_regression(n_samples=1000, n_features=20, n_informative=15, noise=0.1, random_state=7)

# define the model

model = XGBRegressor(objective='reg:squarederror')

# fit the model

model.fit(X, y)

# summarize the model loss function

print(model.objective)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

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

最后,还有其他损失函数可以用于回归,包括:“ 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版权协议,转载请附上原文出处链接及本声明。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/912100
推荐阅读
相关标签
  

闽ICP备14008679号