我想对一个误报成本高于误报成本的二进制变量进行分类。
在rpart
包中,我们使用损失矩阵,将parms = list(loss=matrix(c(0,1,5,0),nrow=2))
负例错误分类为正例的成本比将正例误分类为负例的成本高 5 倍。
我该怎么做XGboost
?
我想对一个误报成本高于误报成本的二进制变量进行分类。
在rpart
包中,我们使用损失矩阵,将parms = list(loss=matrix(c(0,1,5,0),nrow=2))
负例错误分类为正例的成本比将正例误分类为负例的成本高 5 倍。
我该怎么做XGboost
?
你在找scale_pos_weight
参数吗?
https://github.com/dmlc/xgboost/blob/master/doc/parameter.md
scale_pos_weight, [default=1] 控制正负权重的平衡,对不平衡的类很有用。需要考虑的典型值:sum(negative cases) / sum(positive cases) 有关更多讨论,请参阅参数调整。另请参阅 Higgs Kaggle 竞赛演示示例:R、py1、py2、py3
你可以像这样使用它:
clf = xgb.XGBRegressor(objective='binary:logistic',
scale_pos_weight= 5,
max_depth=3,
n_estimators=100)
在 python 中,sklearn api。
假设您使用的是xgboost包,您可以使用watchlist
参数。它是一个列表xgb.DMatrix
,每个都标有一个名称。您可以使用 eval.metric 参数,也允许使用多个评估指标。
watchlist <- list(train=dtrain, test=dtest)
bst <- xgb.train(data=dtrain, max.depth=2, eta=1, nthread = 2,
eval.metric = "error", eval.metric = "logloss", nround=2,
watchlist=watchlist, objective = "binary:logistic")
如果xgboost github 页面中大量的指标列表不能满足您的需要,那么正如他们所说,您可以生成自己的指标,例如误报和误报的加权总和,其中误报的权重是误报的五倍。