XGBOOST:sample_Weights与scale_pos_weight

问题描述 投票:1回答:1

我有一个高度不平衡的数据集,我想知道在哪里考虑权重,因此我试图理解scale_pos_weight中的XGBClassifier参数和sample_weight方法的fit参数之间的差异。如果它们可以同时使用或者如何选择任何一种方法,将会欣赏两者之间差异的直观解释。

文档表明scale_pos_weight

控制正负权重的平衡..和要考虑的典型值:总和(负面情况)/总和(正面情况)

例:

from xgboost import XGBClassifier
import xgboost as xgb
LR=0.1
NumTrees=1000
xgbmodel=XGBClassifier(booster='gbtree',seed=0,nthread=-1,
                       gamma=0,scale_pos_weight=14,learning_rate=LR,n_estimators=NumTrees,
                      max_depth=5,objective='binary:logistic',subsample=1)
xgbmodel.fit(X_train, y_train)

OR

from xgboost import XGBClassifier
import xgboost as xgb
LR=0.1
NumTrees=1000
xgbmodel=XGBClassifier(booster='gbtree',seed=0,nthread=-1,
                       gamma=0,learning_rate=LR,n_estimators=NumTrees,
                      max_depth=5,objective='binary:logistic',subsample=1)
xgbmodel.fit(X_train, y_train,sample_weight=weights_train)
python scikit-learn xgboost
1个回答
3
投票

sample_weight参数允许您为每个训练示例指定不同的权重。 scale_pos_weight参数允许您为整个示例类(“正”类)提供权重。

这些对应于成本敏感学习的两种不同方法。如果您认为错误分类正面例子(缺少癌症患者)的成本对于所有正面例子都是相同的(但不仅仅是对负面例子进行错误分类,例如告诉某人他们实际上没有患癌症)那么您可以指定一个通过scale_pos_weight所有正面例子的重量。

XGBoost将labels = 1视为“正”类。从以下代码中可以看出这一点:

if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight

this question

另一种情况是您具有依赖于示例的成本。一个例子是检测欺诈性交易。不仅假阴性(错过欺诈性交易)比假阳性(阻止合法交易)更昂贵,但错失假阴性的成本与被盗金额成正比。因此,您希望对具有较高金额的正(欺诈)示例给予较大权重。在这种情况下,您可以使用sample_weight参数指定特定于示例的权重。

© www.soinside.com 2019 - 2024. All rights reserved.