Python XGBOOST:样本重量与刻度位置重量
我有一个高度不平衡的数据集,我想知道在哪里计算权重,因此我试图理解Python XGBOOST:样本重量与刻度位置重量,python,scikit-learn,xgboost,Python,Scikit Learn,Xgboost,我有一个高度不平衡的数据集,我想知道在哪里计算权重,因此我试图理解XGBClassifier中的scale\u pos\u weight参数和fit方法的sample\u weight参数之间的差异。如果可以同时使用或选择哪种方法,请直观解释两者之间的差异 文件表明,秤位重量: 控制正负权重的平衡。&典型值 考虑:和(负案例)/和(正案例) 例如: from xgboost import XGBClassifier import xgboost as xgb LR=0.1 NumTrees=10
XGBClassifier
中的scale\u pos\u weight
参数和fit
方法的sample\u 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)
或
sample\u weight
参数允许您为每个训练示例指定不同的权重。scale\u pos\u weight
参数用于为整个示例类(“正”类)提供权重
这些对应于成本敏感学习的两种不同方法。如果您认为所有阳性样本的错误分类(遗漏癌症患者)成本相同(但比错误分类负面样本的成本要高,例如,告诉某人他们患有癌症,而他们实际上没有),那么您可以通过scale\u pos\u weight
为所有阳性样本指定一个权重
XGBoost将labels=1视为“肯定”类。从以下代码中可以明显看出这一点:
if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight
看
另一种情况是,您有依赖于示例的成本。一个例子是检测欺诈交易。不仅假阴性(错过欺诈性交易)比假阳性(阻止合法交易)的成本更高,而且错过假阴性的成本与被盗金额成正比。因此,您希望对金额较高的正面(欺诈)示例给予更大的权重。在这种情况下,您可以使用
sample\u weight
参数指定示例特定的权重。Hi,您能告诉我如何计算这两个实例的值吗?另外,在scale\u pos\u weight
thank中的正实例和负实例是什么?没有“计算”这些权重值的标准方法。在衡量整个正类时,XGBoost文档建议将sum(负实例)/sum(正实例)作为“需要考虑的典型值”。原则上,这是一个需要调整的超参数。对于衡量单个实例,完全由您决定这些实例的错误分类成本。例如,在检测信用卡交易中的欺诈行为时,你可以说,错过欺诈交易的成本与所花的钱成正比。另外,你能告诉我它是什么意思吗?正实例,在这里,类值=到1,负实例,在这里,类值=0?。但是将0和1分配给类可能是任意的,对吗?谢谢你说得对。在XGBoost的情况下,y=1被视为正类。我更新了答案并包含了这个。
if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight