RandomizedSearchCV配置多评分器场景下的优化目标确认问题
RandomizedSearchCV多评分器的优化目标说明
嘿,这个问题问得特别到位——很多人第一次在RandomizedSearchCV里用多评分器的时候,都会搞不清默认的优化逻辑。直接给你答案:默认情况下,你的代码并不会以neg_log_loss作为优化目标,甚至根本没有优化目标。
下面给你拆解清楚这里的规则:
默认行为:当你传入字典形式的
scoring参数但不设置refit时,RandomizedSearchCV只会为每一组参数计算你指定的所有评分(Log loss、AUC、F1这些),但不会基于任何一个评分去选择“最佳模型”。这时候如果你尝试访问search_RF.best_estimator_或者search_RF.best_params_这类属性,会直接报错,因为程序不知道该以哪个指标来评判“最佳”。如何指定优化目标:如果你想让程序以
neg_log_loss(也就是你字典里的'Log loss'对应的评分器)作为优化目标,必须显式设置refit参数。你可以用字典的键或者评分器的字符串值,两种写法都可以:# 写法1:用字典的键 search_RF = RandomizedSearchCV(RF_model, parameters_RF, scoring=scoring, n_jobs=-1, cv=cv_RSKFCV, n_iter=200, random_state=2504, refit='Log loss').fit(X_train, y_train) # 写法2:用评分器的字符串值 search_RF = RandomizedSearchCV(RF_model, parameters_RF, scoring=scoring, n_jobs=-1, cv=cv_RSKFCV, n_iter=200, random_state=2504, refit='neg_log_loss').fit(X_train, y_train)设置后,程序就会在所有参数组合中,选择使
neg_log_loss(注意这是负对数损失,所以是最大化这个值,对应最小化原始对数损失)最优的那一组参数作为最佳模型。额外提示:
refit还支持自定义函数,如果你需要更复杂的优化逻辑(比如结合多个指标),可以写一个函数返回你想要优化的分数,但绝大多数场景下,直接指定某个评分器的键或值就足够了。
内容的提问来源于stack exchange,提问作者JonnDough
相关产品推荐
相关产品推荐

