如何在 RandomizedSearchCV 中输入自定义指标?

Posted

技术标签:

【中文标题】如何在 RandomizedSearchCV 中输入自定义指标?【英文标题】:How to input custom metric in RandomizedSearchCV? 【发布时间】:2021-11-23 07:37:11 【问题描述】:

我需要通过metice smape_final 选择最佳模型。为此,我写了一个函数:

def smape(A, F):
    return 100/len(A) * np.sum(2 * np.abs(F - A) / (np.abs(A) + np.abs(F)))

我稍后会用到:

parameters = 'max_depth':range(1,30,1), 'n_estimators':range(10,51,10)
rgr_rand_frst = RandomizedSearchCV(RandomForestRegressor(random_state = 12345), parameters, cv=5, random_state=12345)
rgr_rand_frst.fit(features_train, target_train)
predicted_valid = rgr_rand_frst.predict(features_valid)
smape_final=round(smape(predicted_valid,target_valid)[0]*0.25+smape(predicted_valid,target_valid)[1]*0.75,4)

print('Final-smape: ',smape_final)
print('Best params: ',rgr_rand_frst.best_params_)

但是 RandomizedSearchCV 使用一些预先安装的指标来选择最佳参数。我知道我可以使用预先安装在 skear 中的一些(r2、auc_score 等),但目标是使用自定义指标 smape_final。怎么做?

注意:target_train 由 2 列组成

【问题讨论】:

您的smape 定义需要axis=0 in np.sum 返回与目标变量列一样多的分数(即此处为2)。然后让你的smape_final 成为一个有两个参数的函数。其余部分与this Q&A 重复。 【参考方案1】:

您应该可以使用make_scorer 来包装自定义损失函数

【讨论】:

谢谢,但是你能举一些具体的例子吗?大概如何?

以上是关于如何在 RandomizedSearchCV 中输入自定义指标?的主要内容,如果未能解决你的问题,请参考以下文章

我如何知道 RandomizedSearchCV 测试了哪些参数?

您将如何使用 Sklearn 的 VotingClassifier 进行 RandomizedSearchCV?

Scikit:如何检查对象是 RandomizedSearchCV 还是 RandomForestClassifier?

RandomizedSearchCV 溢出错误:无法将“int”放入索引大小的整数中

如何获取主键,它是刚刚在 PHP 中输​​入的行的自动增量?

如何在 PHP 中输​​出 Excel 可以正确读取的 UTF-8 CSV?