/ / महालनोबिस दूरी की गणना करने के लिए किसी गैर वर्ग मैट्रिक्स के चोल्स्की अपघटन की गणना कैसे करें? - अजगर, सुन्न

महालनोबिस दूरी की गणना करने के लिए एक गैर-चौकोर मैट्रिक्स के चोल्स्की अपघटन की गणना कैसे करें? - अजगर, सुन्न

महालनोबिस दूरी की गणना करने के लिए एक गैर-वर्ग मैट्रिक्स के चोल्स्की अपघटन की गणना कैसे करें numpy?

def get_fitting_function(G):
print(G.shape) #(14L, 11L) --> 14 samples of dimension 11
g_mu = G.mean(axis=0)
#Cholesky decomposition uses half of the operations as LU
#and is numerically more stable.
L = np.linalg.cholesky(G)

def fitting_function(g):
x = g - g_mu
z = np.linalg.solve(L, x)
#Mahalanobis Distance
MD = z.T*z
return math.sqrt(MD)
return fitting_function


C:UsersMatthiasCVsrcfitting_function.py in get_fitting_function(G)
22     #Cholesky decomposition uses half of the operations as LU
23     #and is numerically more stable.
---> 24     L = np.linalg.cholesky(G)
25
26     def fitting_function(g):

C:UsersMatthiasAppDataLocalEnthoughtCanopyUserlibsite-packagesnumpylinalglinalg.pyc in cholesky(a)
598     a, wrap = _makearray(a)
599     _assertRankAtLeast2(a)
--> 600     _assertNdSquareness(a)
601     t, result_t = _commonType(a)
602     signature = "D->D" if isComplexType(t) else "d->d"

C:UsersMatthiasAppDataLocalEnthoughtCanopyUserlibsite-packagesnumpylinalglinalg.pyc in _assertNdSquareness(*arrays)
210     for a in arrays:
211         if max(a.shape[-2:]) != min(a.shape[-2:]):
--> 212             raise LinAlgError("Last 2 dimensions of the array must be square")
213
214 def _assertFinite(*arrays):

LinAlgError: Last 2 dimensions of the array must be square


LinAlgError: Last 2 dimensions of the array must be square

मतलाब के कार्यान्वयन के आधार पर: सहसंयोजक मैट्रिक्स में प्रवेश करते हुए महालनोबिस दूरी

संपादित करें: chol(a) = linalg.cholesky(a).T एक मैट्रिक्स का कोलेसी फैक्टराइजेशन (chol(a) matlab में एक ऊपरी त्रिकोणीय मैट्रिक्स देता है, लेकिन linalg.cholesky(a) कम त्रिकोणीय मैट्रिक्स देता है) (स्रोत: http://wiki.scipy.org/NumPy_for_Matlab_Users)

EDIT2:

G -= G.mean(axis=0)[None, :]
C = (np.dot(G, G.T) / float(G.shape[0]))
#Cholesky decomposition uses half of the operations as LU
#and is numerically more stable.
L = np.linalg.cholesky(C).T

इसलिए यदि D = x ^ t.S ^ -1.x = x ^ t। (L.L ^ t) ^ - 1.x = x ^ t.L.L ^ t.x = z ^ t.z

उत्तर:

उत्तर № 1 के लिए 1

मुझे विश्वास नहीं है कि आप कर सकते हैं। चोल्स्की अपघटन के लिए न केवल एक वर्ग मैट्रिक्स, बल्कि एक हर्मिटियन मैट्रिक्स एक, और विशिष्टता के लिए एक सकारात्मक निश्चित मैट्रिक्स की आवश्यकता होती है। यह मूल रूप से एक एलयू अपघटन है, प्रोविजो के साथ कि एल = यू "। वास्तव में, एल्गोरिथ्म को अक्सर संख्यात्मक रूप से जांचने के तरीके के रूप में उपयोग किया जाता है कि एक दिया गया मैट्रिक्स सकारात्मक निश्चित है। विकिपीडिया.

उस ने कहा, एक सहसंयोजक मैट्रिक्स परिभाषा के अनुसार सममित पोस्टिफ़ाइड है, इसलिए आपको इस पर चोल्स्की करने में सक्षम होना चाहिए।

संपादित करें: जैसे ही आप इसकी गणना करते हैं, आपका मैट्रिक्स C=np.dot(G, G.T) सममित होना चाहिए, लेकिन शायद कुछ गलत है। आप इसे जबरन सममित करने का प्रयास कर सकते हैं C = ( C + C.T) /2.0, और कोशिश chol(C) फिर।