Объясните основную обработку `multioutput = [0.3, 0.7]` в sklearn.metrics.mean_absolute_error - PullRequest
1 голос
/ 09 октября 2019

на основе doc

Функция mean_absolute_error вычисляет среднюю абсолютную ошибку, метрику риска, соответствующую ожидаемому значению абсолютной потери ошибки или потери L1-нормы.

Я понимаю процесс для 2 «векторов»

>>> from sklearn.metrics import mean_absolute_error
>>> y_true = [3, -0.5, 2, 7]
>>> y_pred = [2.5, 0.0, 2, 8]
>>> mean_absolute_error(y_true, y_pred)

, который заключается в суммировании абсолютной разницы между равноправными элементами в каждом векторе, а затем делении на длину вектора.

этот код как раз лежит в основе обработки sklearn.mean_absolute_error для 2 "векторов"

res = 0
for t,p in zip(y_true, y_pred):
    res = res + np.abs(t-p)
res/4

, что я не могу понять, это обработка

>>> mean_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7])
0.85

Может кто-нибудь пожалуйстапроиллюстрировать базовую обработку multioutput=[0.3, 0.7] part?

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Как я понимаю, multioutput=[0.3, 0.7] - это weights для выходного массива.

Сначала поговорим о raw_values

>>> mean_absolute_error(y_true, y_pred, multioutput='raw_values')
array([0.5, 1. ])

array([0.5, 1. ]) - это исходное значениеmean_absolute_error(). Поэтому, если вы введете еще один weight, он будет вычислять среднее значение на основе того, что вы ввели multioutput.

Если вы не дадите никакого значения, по умолчанию будет [1,1].

>>> mean_absolute_error(y_true, y_pred)   # (0.5*1 + 1*1)/(1+1) = 0.75
0.75

ОК, теперь, если вы дадите ему другие значения, например [0.3, 0.7].

>>> # (0.5*0.3+1*0.7)/(0.3+0.7) = 0.85
>>>mean_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7])
0.85

Примечание: В зависимости от количества измеренийy_true, y_pred, вы должны ввести длину совпадения с multioutput. Пример y_pred = [[0, 2], [-1, 2], [8, -5]] - это матрица 2-D, она выдаст вам 2 значения, например [0.5, 1.]. Таким образом, вы должны указать 2 значения в качестве весов для этого вывода, например [0.3, 0.7]

0 голосов
/ 09 октября 2019

Это объяснено чуть выше на той же самой странице документов .

Если вы хотите явно увидеть, что он делает, вы можете увидеть это в источнике :mean_absolute_error() заканчивается вызовом функции numpy's average() с весами, равными multioutput.

Таким образом, multioutput - это просто способ сказать mean_absolute_error(), что при расчете средней ошибки ошибки в некоторых количествах должны иметь большее значение для этого среднего, чем другие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...