महालनोबिस दूरी की गणना करने के लिए एक गैर-वर्ग मैट्रिक्स के चोल्स्की अपघटन की गणना कैसे करें 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)
फिर।