如果一个度量需要参数规范,如何为多个机器学习度量编写for循环



我创建了一个for loop,用于在我的训练和测试集上生成度量。然而,为了计算Root Mean Square Error(RMSE(,我需要1(取Mean Square Errorsqrt或2(设置参数mean_squared_error(squared = False)。但是,我只想要RMSE的参数,而不是MAE或R2的参数。

如果我尝试以下操作,可以理解,我会得到一个错误TypeError: mean_squared_error() missing 2 required positional arguments: 'y_true' and 'y_pred',因为括号应该只出现在for loop中。

from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
#Metrics on train and test
metrics = {
'RMSE' : mean_squared_error,
'MAE' : mean_absolute_error,
'R2' : r2_score
}
#Train and Test
for key in metrics:
i = metrics[key]
train_score = i(y_train, train_predictions)
test_score = i(y_test, y_pred)
print(f'Train set {key}: {train_score:.4f}')
print(f'Test set {key}: {test_score:.4f}')

它在Python 2.7.16、Python 3.7.4和sklearn 0.20.3版本中对我来说都很好(没有"平方"参数,但对于这个问题,它可以在for循环中以多种方式解决,最直接的是密钥上的一个条件:

for key in metrics:
i = metrics[key]
if key == "RMSE":
train_score = i(y_train, train_predictions, squared=False)
test_score = i(y_test, y_pred, squared=False)
else:
train_score = i(y_train, train_predictions)
test_score = i(y_test, y_pred)

你可以尝试使用那些版本,我不明白为什么你的代码不应该工作。

最新更新