如何在 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”放入索引大小的整数中