scikit-learn报”ValueError: multioutput should be either ‘raw_values’, ‘uniform_average’ or ‘variance_weighted’ “的原因以及解决办法

  • Post category:Python

这个错误一般是在使用scikit-learn库中的评估指标(如mean_squared_error、roc_auc_score等)时出现的,具体原因是在多输出(multioutput)任务中没有正确地指定评估指标的multioutput参数。

在scikit-learn中,通常有两种类型的任务:单输出(single output)任务和多输出(multi-output)任务。单输出任务只需指定y_true和y_pred两个参数即可进行评估,而多输出任务则需要指定multioutput参数。

multioutput是一个字符串参数,可以设置为以下三种值之一:

  1. ‘raw_values’,返回每个输出的评估指标值的数组;

  2. ‘uniform_average’,对所有输出求平均,得到一个评估指标值;

  3. ‘variance_weighted’,对所有输出加权求平均,得到一个评估指标值,其中输出的权重由每个输出的方差决定。

因此,解决这个错误的方法是在指定评估指标时需要添加一个multioutput参数,并将其设置为’raw_values’、’uniform_average’或’variance_weighted’中的一个。

例如,在使用mean_squared_error函数时,可以这样指定multioutput参数:

from sklearn.metrics import mean_squared_error

mse = mean_squared_error(y_true, y_pred, multioutput='raw_values')

或者:

mse = mean_squared_error(y_true, y_pred, multioutput='uniform_average')

或者:

mse = mean_squared_error(y_true, y_pred, multioutput='variance_weighted')

需要注意的是,需要根据数据集的实际情况选择合适的multioutput参数,以获得正确的评估结果。