2016-07-29 6 views
8

मैं दिए गए डेटा के लिए कम से कम वर्ग अनुमान की गणना करना चाहता हूं।संख्यात्मक कम से कम वर्ग परिणाम सीधे सूत्र का उपयोग करने से अलग क्यों होते हैं?

ऐसा करने के कई तरीके हैं, एक numpy के कम से कम वर्गों का उपयोग करने के लिए है:

import numpy 
np.linalg.lstsq(X,y)[0] 

कहाँ एक्स एक मैट्रिक्स और y है संगत आयाम (प्रकार float64) का एक वेक्टर।

import numpy 
numpy.linalg.inv(X.T.dot(X)).dot(X.T).dot(y) 

मेरे समस्या:: दूसरा रास्ता सीधे सूत्र का उपयोग कर परिणाम की गणना करने के लिए है कि ऐसी स्थितियां अलग फार्मूले बिल्कुल भिन्न परिणाम दे (हालांकि वहाँ कोई अंतर हो सकता है) कर रहे हैं। कभी-कभी गुणक एक सूत्र का उपयोग करते हुए बहुत बड़े होते हैं, जबकि दूसरा बहुत अधिक व्यवहार किया जाता है। सूत्र समान हैं तो परिणाम इतने अलग क्यों हो सकते हैं? क्या यह कुछ प्रकार की गोल करने वाली त्रुटि है और मैं इसे कैसे कम कर सकता हूं?

+0

क्या आपके पास अपने एक्स में एक अवरोध जोड़ा गया है? – gobrewers14

उत्तर

5

जबकि वे दो सूत्र गणितीय समकक्ष हैं, वे संख्यात्मक रूप से समकक्ष नहीं हैं! ए^(- 1), दोनों Gaussian Elimination जैसे दोनों पक्षों को गुणा करके रैखिक समीकरणों एएक्स = बी की प्रणाली को हल करने के बेहतर तरीके हैं। numpy.linalg.lstsq अंतर्निहित रैखिक प्रणाली को हल करने के लिए इस (और अधिक परिष्कृत) विधियों का उपयोग करता है, साथ ही यह कई कोने के मामलों को संभाल सकता है। तो जब आप कर सकते हैं तो इसका इस्तेमाल करें।

मैट्रिक्स उलटा बहुत संख्यात्मक रूप से अस्थिर है। इसे तब तक न करें जब तक आपको करना न पड़े।

संबंधित मुद्दे