如何更改XGboost中的损耗矩阵(在R中)?

时间:2016-01-25 11:33:21

标签: r machine-learning xgboost

我想将假阳性成本高于假阴性的二元变量分类。

rpart包中,我们使用损失矩阵,将parms = list(loss=matrix(c(0,1,5,0),nrow=2))添加为错误分类反面示例的成本,因为正数比将正面示例错误分类为负数的成本高5倍。

如何使用XGboost执行此操作?

2 个答案:

答案 0 :(得分:1)

您在寻找scale_pos_weight参数吗?

https://github.com/dmlc/xgboost/blob/master/doc/parameter.md

  

scale_pos_weight,[default = 1]控制正和平衡   负权重,对非平衡类有用。一个典型的价值   考虑:sum(负数情况)/ sum(正数情况)参见参数   调整更多讨论。另见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。

答案 1 :(得分:-1)

假设您使用的是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 pages中的大量列表不足以满足您的需要,那么就像他们所说的那样,您可以生成自己的矩阵,例如假阳性和假阴性的加权和,其中假阳性加权五倍以上假阴性。