Средняя квадратичная ошибка в Numpy?

Есть ли в numpy метод для вычисления среднеквадратичной ошибки между двумя матрицами?

Я пытался искать, но не нашел ни одного. Это под другим именем?

Если нет, как вы преодолеете это? Вы пишете это сами или используете другую библиотеку?

7 ответов

Решение

Ты можешь использовать:

mse = ((A - B)**2).mean(axis=ax)

Или же

mse = (np.square(A - B)).mean(axis=ax)
  • с ax=0 среднее значение выполняется по строке, для каждого столбца, возвращая массив
  • с ax=1 среднее значение выполняется вдоль столбца, для каждой строки, возвращая массив
  • с ax=None среднее выполняется поэлементно по массиву, возвращая скалярное значение

Это не часть numpy, но это будет работать с numpy.ndarray объекты. numpy.matrix может быть преобразован в numpy.ndarray и numpy.ndarray может быть преобразован в numpy.matrix,

from sklearn.metrics import mean_squared_error
mse = mean_squared_error(A, B)

См. Scikit Learn mean_squared_error для документации о том, как управлять осью.

Еще более тупой

np.square(np.subtract(A, B)).mean()

Просто ради удовольствия

mse = (np.linalg.norm(AB)**2)/len(A)

Еще одна альтернатива принятому ответу, позволяющая избежать проблем с умножением матриц:

 def MSE(Y, YH):
     return np.square(Y - YH).mean()

Из документов для np.square: "Вернуть поэлементный квадрат ввода".

Стандартные методы numpy для вычисления среднеквадратичной ошибки (дисперсии) и ее квадратного корня (стандартное отклонение): numpy.var() и numpy.std()см. здесь и здесь. Они применяются к матрицам и имеют тот же синтаксис, что и numpy.mean().

Я полагаю, что вопрос и предыдущие ответы могли быть опубликованы до того, как эти функции стали доступны.

Как насчет этого, чтобы держать сnp.operationстиль?

      mse = np.mean(np.square(A - B))

Просто имейте в виду, чтоnp.mean()безaxisуказанный аргумент ключевого слова выведет скаляр, какnp.sum().

Другие вопросы по тегам