Python 执行randomizedSearchCV时传递了多个评估指标

Python 执行randomizedSearchCV时传递了多个评估指标,python,xgboost,Python,Xgboost,我目前正在玩一个关于xgboost中超参数优化的玩具示例。在以下示例中,我将执行以下步骤: 从sklearn加载iris数据集,并将其拆分为训练集和测试集 声明我要探索的参数网格 鉴于问题的多标签分类性质,我想根据f1分数评估我的模型。现在,为了做到这一点,我声明了一个xgb\u f1方法(给定的f1分数不在xgboost中的默认评估度量中),以将算法目标度量与交叉验证之一对齐 使用f1\u宏作为我的评分函数(与分类器相同),实例化并拟合随机搜索CV 现在,在进行搜索时,在培训实例中会弹出以下消

我目前正在玩一个关于
xgboost
中超参数优化的玩具示例。在以下示例中,我将执行以下步骤:

  • 从sklearn加载iris数据集,并将其拆分为训练集和测试集
  • 声明我要探索的参数网格
  • 鉴于问题的多标签分类性质,我想根据f1分数评估我的模型。现在,为了做到这一点,我声明了一个
    xgb\u f1
    方法(给定的f1分数不在xgboost中的默认评估度量中),以将算法目标度量与交叉验证之一对齐
  • 使用
    f1\u宏
    作为我的评分函数(与分类器相同),实例化并拟合随机搜索CV
  • 现在,在进行搜索时,在培训实例中会弹出以下消息:

    Multiple eval metrics have been passed: 'validation_0-f1' will be used for early stopping.
    
    一切似乎都训练得很顺利,但为什么
    merror
    不会被
    eval\u metric
    覆盖,并在我的评估集上进行计算

    此外,从xgboost文档中可以看出,默认情况下,算法通过最小化给定的目标度量来工作,如果使用f1分数,我是否应该更改此行为

    完整的工作示例
    将xgboost导入为xgb
    从sklearn.model_selection导入训练测试_split,随机化搜索CV
    从sklearn.metrics导入f1\U分数
    从sklearn.dataset导入加载
    将numpy作为np导入
    数据=加载
    x=data.data
    y=data.target
    x_系列,x_测试,y_系列,y_测试=系列测试分割(x,y,测试尺寸=0.33)
    参数网格={
    “n_估计量”:[100200300500600800],
    “最大深度”:[2,4,8,16,32,70,100,150],
    “最小儿童体重”:[1],
    “子样本”:[1]
    }
    def xgb_f1(y,t,阈值=0.5):
    t=t.获取标签()
    y_bin=(y>阈值).astype(int)
    y_-bin=np.argmax(y_-bin,轴=1)
    返回“f1”,f1分数(t,y_bin,average=“宏”)
    拟合参数={
    “早停轮”:42,
    “评估集”:[[x_测试,y_测试]],
    “评估指标”:xgb\u f1
    }
    clf=xgb.xgb分类器(objective=“multi:softmax”)
    grid=RandomizedSearchCV(clf,param_grid,n_jobs=-1,cv=2,verbose=1,scoring=“f1_宏”)
    grid.fit(x_列,y_列,**fit_参数,verbose=True)
    打印(f“最佳f1分数:{grid.Best_分数}”)
    打印(f“最佳参数:{grid.best_params}”)
    
    尝试在参数中使用
    “禁用默认评估指标”:1

    这样做了,我尝试将该参数传递给
    参数网格
    拟合参数
    ,并将其直接传递给估计器。谢谢