首页 > 解决方案 > 如果一个指标需要参数规范,如何为多个机器学习指标编写一个 for 循环?

问题描述

我创建了一个for loop用于在我的训练集和测试集上生成指标的工具。但是,为了计算Root Mean Square Error(RMSE),我需要 1) 取sqrtofMean Square Error或 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}')

标签: pythonfor-loopmachine-learningparametersmetrics

解决方案


它在 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)

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


推荐阅读