Сярэднеквадратовае памылка ў Numpy?

Ці ёсць спосаб у NumPy для вылічэнні памылкі Mean Squared паміж двума матрыцамі?

Я спрабаваў шукаць, але не знайшоў. Ці з'яўляецца гэта з іншай назвай?

Калі няма, то як вы гэта пераадолець? Вы пішаце самі або выкарыстаць іншы LIB?

36
Калі сфармуляваць, што ў якасці адказу я прымаю яго.
дададзена аўтар TheMeaningfulEngineer, крыніца
Калі сфармуляваць, што ў якасці адказу я прымаю яго.
дададзена аўтар TheMeaningfulEngineer, крыніца
Адказ на гэтае пытанне не з'яўляецца правільным, таму што, калі вы квадрат матрыцы Numpy, ён будзе выконваць множанне матрыц rathar квадрат кожны элемент individualy. Праверце мой каментар у адказ Saullo Кастра. (PS: Я праверыў яго з дапамогай Python 2.7.5 і 1.7.1 Numpy)
дададзена аўтар renatov, крыніца
Адказ на гэтае пытанне не з'яўляецца правільным, таму што, калі вы квадрат матрыцы Numpy, ён будзе выконваць множанне матрыц rathar квадрат кожны элемент individualy. Праверце мой каментар у адказ Saullo Кастра. (PS: Я праверыў яго з дапамогай Python 2.7.5 і 1.7.1 Numpy)
дададзена аўтар renatov, крыніца
<�Код> ((A - B) ** 2) .mean (вось = ах) , дзе ах = 0 складае за слупком, ах = 1 </код > складае за радком і Ax = None дае агульны вынік.
дададзена аўтар Fred Foo, крыніца

7 адказы

Па прапанове @larsmans вы можаце выкарыстаць:

mse = ((A - B) ** 2).mean(axis=ax)
    <�Літый> з ах = 0 сярэдняе выконваецца уздоўж шэрагу, для кожнага слупка, вяртаючы масіў <�Літый> з ах = 1 сярэдняе выконваецца ўздоўж калонкі, для кожнага радка, вяртаючы масіў </літый> <�Літый> з ах = None сярэдняе выконваецца поэлементно ўздоўж масіва, вяртаючы адно значэнне
47
дададзена
@Saulo Кастра, я проста правяраў, і я павінен настойваць на тым, што вынік не будзе поэлементно. Я выкарыстоўваю Python 2.7.5 і 1.7.1 Numpy. Я стварыў матрыцу "а" і квадрат яго usign наступныя каманды: а = numpy.matrix ([[5, 5], [5, 5]]) , а затым а ** 2 . Вынікам з'яўляецца NumPy матрыца матрыца ([[50, 50], [50, 50]]) , які паказвае, што NumPy множанне матрыц будзе <�Ь> не быць поэлементно.
дададзена аўтар renatov, крыніца
На жаль, я не зразумеў вас. Я думаў, што вы выкарыстоўвалі numpy.matrix.
дададзена аўтар renatov, крыніца
Папраўце, калі я памыляюся, але я думаю, што калі вы робіце (матрыца А - MatrixB) ** 2 ён будзе спрабаваць выканаць множанне матрыц, якая адрозніваецца ад квадрата кожнага элемента паасобку. Калі вы паспрабуеце выкарыстоўваць наступную формулу з не квадратнай матрыцай, яна падыме ValueError.
дададзена аўтар renatov, крыніца
@renatov ў масіве Numpy гэтая формула будзе ўжывацца поэлементно, так што не множанне матрыц не выконваецца
дададзена аўтар Saullo Castro, крыніца
@renatov можа быць, вы мяне не зразумелі, выкарыстоўваючы np.ndarray будзе рабіць паэлементна множанне для а ** 2 , але выкарыстоўваючы np.matrixlib.defmatrix .matrix будзе рабіць множанне матрыц для а ** 2 ...
дададзена аўтар Saullo Castro, крыніца
<�Код> np.nanmean (((A - B) ** 2)) калі прапушчаныя значэння
дададзена аўтар user2357111317, крыніца
Майце на ўвазе, што калі вы параўноўваеце 2 UINT матрыц, гэта не будзе працаваць, таму што розніца будзе мець адмоўныя лікі. Вам трэба зрабіць ИНТ копіі перад рукой ( ACMP = np.array (A, DTYPE = цэлае) )
дададзена аўтар Charles L., крыніца

Па прапанове @larsmans вы можаце выкарыстаць:

mse = ((A - B) ** 2).mean(axis=ax)
    <�Літый> з ах = 0 сярэдняе выконваецца уздоўж шэрагу, для кожнага слупка, вяртаючы масіў <�Літый> з ах = 1 сярэдняе выконваецца ўздоўж калонкі, для кожнага радка, вяртаючы масіў </літый> <�Літый> з ах = None сярэдняе выконваецца поэлементно ўздоўж масіва, вяртаючы адно значэнне
47
дададзена
На жаль, я не зразумеў вас. Я думаў, што вы выкарыстоўвалі numpy.matrix.
дададзена аўтар renatov, крыніца
@Saulo Кастра, я проста правяраў, і я павінен настойваць на тым, што вынік не будзе поэлементно. Я выкарыстоўваю Python 2.7.5 і 1.7.1 Numpy. Я стварыў матрыцу "а" і квадрат яго usign наступныя каманды: а = numpy.matrix ([[5, 5], [5, 5]]) , а затым а ** 2 . Вынікам з'яўляецца NumPy матрыца матрыца ([[50, 50], [50, 50]]) , які паказвае, што NumPy множанне матрыц будзе <�Ь> не быць поэлементно.
дададзена аўтар renatov, крыніца
Папраўце, калі я памыляюся, але я думаю, што калі вы робіце (матрыца А - MatrixB) ** 2 ён будзе спрабаваць выканаць множанне матрыц, якая адрозніваецца ад квадрата кожнага элемента паасобку. Калі вы паспрабуеце выкарыстоўваць наступную формулу з не квадратнай матрыцай, яна падыме ValueError.
дададзена аўтар renatov, крыніца
@renatov ў масіве Numpy гэтая формула будзе ўжывацца поэлементно, так што не множанне матрыц не выконваецца
дададзена аўтар Saullo Castro, крыніца
@renatov можа быць, вы мяне не зразумелі, выкарыстоўваючы np.ndarray будзе рабіць паэлементна множанне для а ** 2 , але выкарыстоўваючы np.matrixlib.defmatrix .matrix будзе рабіць множанне матрыц для а ** 2 ...
дададзена аўтар Saullo Castro, крыніца
<�Код> np.nanmean (((A - B) ** 2)) калі прапушчаныя значэння
дададзена аўтар user2357111317, крыніца
Майце на ўвазе, што калі вы параўноўваеце 2 UINT матрыц, гэта не будзе працаваць, таму што розніца будзе мець адмоўныя лікі. Вам трэба зрабіць ИНТ копіі перад рукой ( ACMP = np.array (A, DTYPE = цэлае) )
дададзена аўтар Charles L., крыніца

Гэта не з'яўляецца часткай 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 для дакументацыі аб тым, як кантраляваць вось ,

13
дададзена

Яшчэ больш NumPy

np.square(np.subtract(A, B)).mean()
5
дададзена

Яшчэ больш NumPy

np.square(np.subtract(A, B)).mean()
5
дададзена

Іншы альтэрнатыва прынятага адказу, што дазваляе пазбегнуць якіх-небудзь праблем з матрычным памнажэннем:

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

З дакументаў np.square : «Вярніце Паэлементны квадрат уваходнага сігналу.»

2
дададзена

Іншы альтэрнатыва прынятага адказу, што дазваляе пазбегнуць якіх-небудзь праблем з матрычным памнажэннем:

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

З дакументаў np.square : «Вярніце Паэлементны квадрат уваходнага сігналу.»

2
дададзена