Scikit learn 多类目标变量XGBoost的超参数调整

Scikit learn 多类目标变量XGBoost的超参数调整,scikit-learn,precision,xgboost,grid-search,Scikit Learn,Precision,Xgboost,Grid Search,我有一个多重分类问题,我要预测1,2或3,我正试图解决使用XG Boost。我正在尝试使用随机搜索微调参数。这是我的密码: 我曾尝试将“param_distributions”中的“scoring”参数从“auc_roc”更改为“precision”,“f1_samples”,“jaccard”,这引发了另一个与“average”参数相关的错误,因为我有多类问题 损耗=[‘铰链’、‘对数’、‘修饰符’、‘平方铰链’、‘感知器’] 罚金=['li','l2','elasticnet'] α=[0.

我有一个多重分类问题,我要预测1,2或3,我正试图解决使用XG Boost。我正在尝试使用随机搜索微调参数。这是我的密码:

我曾尝试将“param_distributions”中的“scoring”参数从“auc_roc”更改为“precision”,“f1_samples”,“jaccard”,这引发了另一个与“average”参数相关的错误,因为我有多类问题

损耗=[‘铰链’、‘对数’、‘修饰符’、‘平方铰链’、‘感知器’] 罚金=['li','l2','elasticnet'] α=[0.0001,0.001,0.01,0.1,1,101001000] learnin_比率=[“常量”、“最佳”、“invscaling”、“自适应”] 类_权重=[{0.3,0.5,0.2},{0.3,0.4,0.3}] eta0=[1,10100] xg_class=xgb.XGBClassifierobjective=multi:softmax,colsample_bytree=1, 伽马=1,子样本=0.8,学习率=0.01,最大深度=3, alpha=10,n_估计量=1000,多标签=True,num_类=3 从sklearn.metrics导入jaccard_分数 参数分布=损失=损失,惩罚=惩罚,α=α,学习率=学习率,等级权重=等级权重,eta0=eta0 random=RandomizedSearchCVestimator=xg_类,param_分布=param_分布, 得分=jaccard\u scorey\u true=Y\u miss\u xgb\u test,Y\u pred=preds\u miss\u xgb,平均值='micro', verbose=1,n_作业=-1,n_iter=1000 random\u result=random.fitX\u miss\u xgb\u train,Y\u miss\u xgb\u train 我得到的错误是

ValueError:评分应为单个字符串或可调用 单指标求值或字符串列表/元组或 映射到可调用的用于多指标评估的记分器名称。得到 0.3996569468267582型

对于单指标评估,需要单个字符串或可调用的字符串,或者映射到可调用的多指标评估的字符串列表/元组或计分器名称的dict作为评分参数,但传递了浮点值。jaccard_scorey_true=Y_miss_xgb_test,Y_pred=preds_miss_xgb,average='micro'返回的浮动分数实际为0.3996569468267582

您可以将jaccard_得分指定为字符串,如下所示:

random = RandomizedSearchCV(estimator = xg_class, 
                            param_distributions=param_distributions, 
                            scoring = "jaccard_score",
                            verbose = 1, 
                            n_jobs =-1, 
                            n_iter = 1000)