【问题标题】:How to input custom metric in RandomizedSearchCV?如何在 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 重复。

标签: python pandas decision-tree sklearn-pandas


【解决方案1】:

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

【讨论】:

  • 谢谢,但是你能举一些具体的例子吗?大概如何?
猜你喜欢
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多