【发布时间】: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=0innp.sum返回与目标变量列一样多的分数(即此处为2)。然后让你的smape_final成为一个有两个参数的函数。其余部分与this Q&A 重复。
标签: python pandas decision-tree sklearn-pandas