python - 如果一个指标需要参数规范,如何为多个机器学习指标编写一个 for 循环?
问题描述
我创建了一个for loop
用于在我的训练集和测试集上生成指标的工具。但是,为了计算Root Mean Square Error
(RMSE),我需要 1) 取sqrt
ofMean 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}')
解决方案
它在 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)
您可以尝试使用这些版本,我不明白为什么您的代码不应该工作。
推荐阅读
- reactjs - React DnD 在状态更改后触发鼠标事件处理程序
- angular - ngFor 中动态元素的 angular viewChild
- sql - 存储过程计数然后划分一列
- gis - 在netlogo中调用google map api并在logo中集成google map
- java - Spring 5 不断失去与数据库的连接
- c# - GetKeyNameText 以大写形式返回名称
- powershell - 将 Powershell 函数转换为并行进程
- javascript - 是否可以关注作为“v-if”呈现的元素的子元素的“输入”标签?
- java - Java 链接错误
- sql - 子查询返回多个值,但我使用“IN”作为我的运算符