如何使用sklearn xgboost运行网格搜索并获取各种指标,最好是F1阈值?
请参阅下面的代码...无法找到我做错的事情/不了解错误..
######################### just making up a dataset here##############
from sklearn import datasets
from sklearn.metrics import precision_score, recall_score, accuracy_score, roc_auc_score, make_scorer
from sklearn.calibration import CalibratedClassifierCV, calibration_curve
from sklearn.model_selection import train_test_split
from sklearn.grid_search import RandomizedSearchCV
import xgboost as xgb
X, y = datasets.make_classification(n_samples=100000, n_features=20,
n_informative=2, n_redundant=10,
random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.99,
random_state=42)
其余的是一堆参数然后随机网格搜索.... 如果我改变' SCORING_EVALS'到了#roc_auc'然后它的工作原理......如果我尝试做一些似乎是有记录的方法,我会得到一个错误?我哪里错了?
此外,我如何确保在F1门槛上报告这些指标??
params = {
'min_child_weight': [0.5, 1.0, 3.0, 5.0, 7.0, 10.0],
'gamma': [0, 0.25, 0.5, 1.0],
'reg_lambda': [0.1, 1.0, 5.0, 10.0, 50.0, 100.0],
"max_depth": [2,4,6,10],
"learning_rate": [0.05,0.1, 0.2, 0.3,0.4],
"colsample_bytree":[1, .8, .5],
"subsample": [0.8],
'reg_lambda': [0.1, 1.0, 5.0, 10.0, 50.0, 100.0],
'n_estimators': [50]
}
folds = 5
max_models = 5
scoring_evals = {'AUC': 'roc_auc', 'Accuracy': make_scorer(accuracy_score), 'Precision': make_scorer(precision_score),'Recall': make_scorer(recall_score)}
xgb_algo = xgb.XGBClassifier()
random_search = RandomizedSearchCV(xgb_algo,
param_distributions=params, n_iter=max_models,
scoring= scoring_evals, n_jobs=4, cv=5, verbose=False, random_state=2018 )
random_search.fit(X_train, y_train)
我的错误是:
ValueError:评分值应该是可调用的,字符串或无。 {' AUC':' roc_auc','准确度':make_scorer(accuracy_score), '精确':make_scorer(precision_score),'召回': make_scorer(recall_score)}已通过
答案 0 :(得分:2)
首先检查您正在使用的scikit-learn的版本。如果是v0.19
,那么您正在使用已弃用的模块。
你这样做:
from sklearn.grid_search import RandomizedSearchCV
你必须得到一个警告:
DeprecationWarning:此版本在0.18版本中已弃用 赞成所有重构的model_selection模块 类和函数被移动。 ... ... ...
grid_search
模块中的类是旧的并且已弃用,并且不包含您正在使用的多指标功能。
注意该警告并执行此操作:
from sklearn.model_selection import RandomizedSearchCV
...
...
...
random_search = RandomizedSearchCV(xgb_algo,
param_distributions=params,
n_iter=max_models,
scoring= scoring_evals, n_jobs=4, cv=5,
verbose=False, random_state=2018, refit=False )
现在仔细看看refit
param。在多度量设置中,您需要对其进行设置,以便最终模型可以适应该模型,因为模型的最佳超参数将仅基于单个度量来决定。
如果您不想要最终模型并且只希望模型在数据和不同参数上的表现,或者将其设置为您拥有的False
中的任何一个,则可以将其设置为key
你的得分词。
答案 1 :(得分:-1)
正如错误所示,并且正如v0.18.2的文档所述:
评分:字符串,可调用或无,默认=无
无法在scoring
参数中提供多个指标(在此scikit-learn版本中)。
P.S。您尝试包装到make_scorer
的所有功能都已预先定义为标准记分员,因此您可以使用其字符串名称:see docs
已编辑:在批评Vivek之后删除了对多个指标使用情况的评论