Python sklearn中以度量作为参数的回归分数

Python sklearn中以度量作为参数的回归分数,python,scikit-learn,Python,Scikit Learn,我正在寻找sklearn解决方案,以便在事先不知道度量的情况下获得回归分数,这样我就可以做类似的事情 score = regression_score(y_true, y_pred, metric="mean_squared_error") 现在我正在使用多个if语句和对不同函数的调用,这些函数看起来很难看,例如 if metric == "mean_squared_error": score = sklearn.metrics.mean_squared_error(y_true, y_

我正在寻找sklearn解决方案,以便在事先不知道度量的情况下获得回归分数,这样我就可以做类似的事情

score = regression_score(y_true, y_pred, metric="mean_squared_error")
现在我正在使用多个if语句和对不同函数的调用,这些函数看起来很难看,例如

if metric == "mean_squared_error":
   score = sklearn.metrics.mean_squared_error(y_true, y_pred)
if metric == "neg_mean_squared_error:
   ...

您可以使用
getattr
加载所需的函数。请使用下面修改过的功能:

import sklearn.metrics

def regression_score(y_true, y_pred, metric):
    function = getattr(sklearn.metrics, metric)
    return function(y_true, y_pred)
样本输出

因此,基本上,您只有一个函数,没有执行工作的
if
条件


希望这有帮助

我不确定我是否理解,你的意思是能够根据iterable性能标准保存变量?@CeliusStingher不,这意味着我不想为不同的指标调用不同的函数,而是调用一个带有变量参数的函数。我认为这看起来不一定难看。。。如果它已经包装在一个回归分数中,然后整齐地调用您的实际代码,那么如何使它变得更优雅呢?嗨,@YohanRoth,如果您认为下面的答案是合适的,我恳请您接受它作为一个验证的答案,因为它有助于其他用户将来可能会研究这个问题。
import numpy as np
y_true = np.array([2,3,4,1])
y_pred = np.array([1,3,1,2])

regression_score(y_true,y_pred,"mean_absolute_error")
1.25

regression_score(y_true,y_pred,"mean_squared_error")
2.75