mam*_*oku 2 python scikit-learn xgboost
我有一个非常不平衡的数据集,我想知道在哪里可以占的权重,因此,我试图理解之间的差别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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
该sample_weight参数允许您为每个训练示例指定不同的权重。该scale_pos_weight参数使您可以为整个示例类别(“正”类别)提供权重。
这些对应于两种对成本敏感的学习方法。如果您认为对所有阳性样本进行错误分类(错过癌症患者)的费用相同(但不如对阴性样本进行错误分类,例如告诉某人他们实际上没有患癌症),那么您可以指定一个权衡所有正面例子的权重scale_pos_weight。
XGBoost将标签= 1视为“正”类。从以下代码中可以明显看出这一点:
if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight
Run Code Online (Sandbox Code Playgroud)
看到这个问题。
另一种情况是您有与示例相关的成本。一个示例是检测欺诈性交易。不仅是假阴性(缺少欺诈性交易)比假阳性(阻止合法交易)的成本更高,而且漏掉假阴性的成本也与被盗金额成正比。因此,您想对具有较高数量的正(欺诈)示例赋予更大的权重。在这种情况下,可以使用sample_weight参数指定特定于示例的权重。
| 归档时间: |
|
| 查看次数: |
3862 次 |
| 最近记录: |