Numpy में मीन चुकता त्रुटि?


81

वहाँ दो matrices के बीच मीन चुकता त्रुटि की गणना के लिए numpy में एक विधि है?

मैं खोज की कोशिश की है, लेकिन कोई नहीं मिला। क्या यह एक अलग नाम के तहत है?

अगर वहाँ नहीं है, तो आप इसे कैसे दूर करेंगे? क्या आप इसे स्वयं लिखते हैं या एक अलग परिवाद का उपयोग करते हैं?


13
((A - B) ** 2).mean(axis=ax), जहां ax=0प्रति-स्तंभ है, ax=1प्रति पंक्ति है और ax=Noneएक भव्य कुल देता है।
फ्रेड फू

2
यदि आप इसे एक उत्तर के रूप में तैयार करते हैं तो मैं इसे स्वीकार करूंगा।
TheMeaningfulEngineer

यह उत्तर सही नहीं है क्योंकि जब आप एक सुपीरियर मैट्रिक्स को वर्ग करते हैं, तो यह एक मैट्रिक्स गुणन रोथर वर्ग को प्रत्येक तत्व को अलग-अलग करेगा। Saullo Castro के जवाब में मेरी टिप्पणी की जाँच करें। (पुनश्च: मैंने इसे पायथन 2.7.5 और
नेम्पी

इसके अलावा तंत्रिका नेटवर्क के संदर्भ में इसे देखने वाले किसी भी व्यक्ति के लिए एक नोट के रूप में, आपको औसत नहीं बल्कि त्रुटि का योग करना चाहिए। यदि आप ग्रेडिंग चेक करने की कोशिश करते हैं, तो त्रुटि में सुधार करने से आपको गलत ग्रेडिएंट मान मिलेंगे (जब तक कि आप औसत के लिए बैकप्रॉप में खाते नहीं हैं, जो कि इसके लायक होने से अधिक काम है)
Recessive

जवाबों:


100

आप उपयोग कर सकते हैं:

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

या

mse = (np.square(A - B)).mean(axis=ax)
  • साथ ax=0औसत, प्रत्येक स्तंभ के लिए, एक सरणी लौटने पंक्ति के साथ किया जाता है
  • साथ ax=1औसत, प्रत्येक पंक्ति के लिए, एक सरणी लौटने स्तंभ के साथ किया जाता है
  • साथ ax=Noneऔसत एक अदिश मूल्य लौटने सरणी के साथ तत्व के लिहाज से किया जाता है,

2
सही है अगर मैं गलत हूं, लेकिन मुझे लगता है कि अगर आप करते हैं (मैट्रिक्स - मैट्रिक्सबी) ** 2 यह मैट्रिक्स गुणा करने की कोशिश करेगा, जो व्यक्तिगत रूप से प्रत्येक तत्व को वर्ग से अलग है। यदि आप गैर-वर्ग मैट्रिक्स के साथ निम्न सूत्र का उपयोग करने का प्रयास करते हैं, तो यह एक ValueError बढ़ाएगा।
रीनतोव

7
@renatov शायद आप मुझे गलत समझ रहे हैं, का उपयोग np.ndarrayकरने के लिए एक तत्व-वार गुणन करेंगे a**2, लेकिन np.matrixlib.defmatrix.matrixइच्छाशक्ति के लिए एक मैट्रिक्स गुणा का उपयोग करेंगे a**2...
Saullo GP Castro

2
क्षमा करें, मैंने आपको गलत समझा। मुझे लगा कि तुम numpy.matrix का उपयोग कर रहे थे।
रेनतोव

1
इस बात को ध्यान में रखें कि यदि आप 2 uint मैट्रिक की तुलना कर रहे हैं, तो यह काम नहीं करेगा क्योंकि अंतर में ऋणात्मक संख्याएँ होंगी। आपको हाथ से पहले इंटों की प्रतिलिपि बनाने की आवश्यकता होगी ( Acmp = np.array(A, dtype=int))
चार्ल्स एल।

3
np.nanmean(((A - B) ** 2))यदि लापता मान
user0

38

यह हिस्सा नहीं है numpy, लेकिन यह numpy.ndarrayवस्तुओं के साथ काम करेगा । A numpy.matrixको a में बदला जा सकता है numpy.ndarrayऔर a में numpy.ndarrayपरिवर्तित किया जा सकता है numpy.matrix

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

अक्ष को नियंत्रित करने के तरीके के बारे में जानने के लिए Scikit mean_squared_error देखें ।



5

मैट्रिक्स गुणा के साथ किसी भी मुद्दे से बचने वाले स्वीकृत उत्तर का दूसरा विकल्प:

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

Np.square के लिए दस्तावेजों से : "इनपुट के तत्व-वार वर्ग को लौटाएं।"



0

गणना के लिए मानक सुन्न तरीके माध्य चुकता त्रुटि (विचरण) और इसके वर्गमूल (मानक विचलन) हैं numpy.var()और numpy.std(), यहाँ और यहाँ देखें । वे मेट्रिसेस पर लागू होते हैं और उनके समान सिंटैक्स होते हैं numpy.mean()

मुझे लगता है कि इन कार्यों के उपलब्ध होने से पहले प्रश्न और पूर्ववर्ती उत्तर पोस्ट किए गए हो सकते हैं।


MSE और भिन्नता समान नहीं है जब तक कि माध्य शून्य नहीं है (यानी, जब तक A और B का एक ही मतलब नहीं है, ताकि AB का मतलब ऊपर की गणना में शून्य हो)।
ड्रू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.