2013-05-27 19 views
29

Czy istnieje metoda w numpy do obliczania błędu średniej kwadratowej między dwiema matrycami?Mean Squared Error in Numpy?

Próbowałem wyszukiwać, ale nie znalazłem. Czy jest pod inną nazwą?

Jeśli tak nie jest, jak można temu zaradzić? Czy piszesz sam lub używasz innej biblioteki?

+11

'((a - b) ** 2) .mean (oś = ax)', gdzie 'ax = 0' jest na kolumnę,' ax = 1 'jest na wiersz i 'ax = Brak' daje sumę całkowitą. –

+2

Jeśli sformułujesz to jako odpowiedź, zaakceptuję to. – TheMeaningfulEngineer

+0

Ta odpowiedź nie jest poprawna, ponieważ po wyszczerbianiu macierzowej macierzowej wykona ona kwadratowy kwadrat każdego elementu osobno. Sprawdź mój komentarz w odpowiedzi Saullo Castro. (PS: testowałem to za pomocą Pythona 2.7.5 i Numpy 1.7.1) – renatov

Odpowiedz

39

Jak sugeruje @larsmans można użyć:

mse = ((A - B) ** 2).mean(axis=ax) 
  • z ax=0 średnią wykonuje się wzdłuż rzędu w każdej kolumnie, powracając tablicę
  • z ax=1 średnią wykonuje się wzdłuż kolumna dla każdego wiersza, zwracająca tablicę, która zwraca elementarnie wzdłuż macierzy, zwracając pojedynczą wartość:
+2

Popraw, jeśli się mylę, ale myślę, że jeśli to zrobisz (MatrixA - MatrixB) ** 2 to spróbujesz wykonać mnożenie macierzy, który jest inny niż kwadrat każdego elementu osobno. Jeśli spróbujesz użyć następującej formuły z macierzą inną niż kwadratowa, spowoduje to wywołanie ValueError. – renatov

+0

@renatov w tablicy Numpy ta formuła zostanie zastosowana elementycznie, tak że nie zostanie wykonane mnożenie macierzy –

+0

@Saulo Castro, właśnie testowałem i muszę nalegać, aby wynik nie był elementarny. Używam Pythona 2.7.5 i Numpy 1.7.1. Stworzyłem macierz "a" i do kwadratu używam następujących poleceń: 'a = numpy.matrix ([[5, 5], [5, 5]])', a następnie 'a ** 2'. Wynikiem jest macierz '' 'numpy matrix '([[50, 50], [50, 50]])', która pokazuje, że mnożenie macierzy numpy ** nie ** jest elementarne. – renatov

7

Nie jest to część numpy, ale będzie działać z obiektami numpy.ndarray. Można przekształcić numpy.matrix na numpy.ndarray, a numpy.ndarray można przekonwertować na numpy.matrix.

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

Aby uzyskać dokumentację dotyczącą sterowania osią, patrz Scikit Learn mean_squared_error.

1

Inną alternatywą dla przyjętego odpowiedź, która pozwala uniknąć jakichkolwiek problemów z mnożenia macierzy:

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

z dokumentów dla np.square „Powrót na plac element mądry na wejściu”

1

Jeszcze numpy

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