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