Нахождение обратной матрицы с высоким числом обусловленности

Я пытаюсь найти обратную эту ковариационную матрицу 9x9, чтобы использовать ее с расстояние Махаланобиса. Однако результат, который я получаю от обратная матрица — это матрица, полная 1.02939420e+16. Я пытался выяснить, почему, учитывая, что Вольфрам даст мне правильный ответ, и, похоже, это как-то связано с номером условия матрицы, который в данном случае равен 3.98290435292e+16.

Хотя я хотел бы понять математику, стоящую за этим, в данный момент мне действительно нужно просто решение этой проблемы, чтобы я мог продолжить реализацию. Есть ли способ найти обратную такую ​​матрицу? Или как-то можно найти обратную ковариационную матрицу непосредственно из данных?

Изменить: данные матрицы (аналогично ссылке pastebin)

[[ 0.46811097  0.15024959  0.01806486 -0.03029948 -0.12472314 -0.11952018 -0.14738093 -0.14655549 -0.06794621]
 [ 0.15024959  0.19338707  0.09046136  0.01293189 -0.05290348 -0.07200769 -0.09317139 -0.10125269 -0.12769464]
 [ 0.01806486  0.09046136  0.12575072  0.06507481 -0.00951239 -0.02944675 -0.05349869 -0.07496244 -0.13193147]
 [-0.03029948  0.01293189  0.06507481  0.12214787  0.04527352 -0.01478612 -0.02879678 -0.06006481 -0.1114809 ]
 [-0.12472314 -0.05290348 -0.00951239  0.04527352  0.164018    0.05474073 -0.01028871 -0.02695087 -0.03965366]
 [-0.11952018 -0.07200769 -0.02944675 -0.01478612  0.05474073  0.13397166  0.06839442  0.00403321 -0.02537928]
 [-0.14738093 -0.09317139 -0.05349869 -0.02879678 -0.01028871  0.06839442  0.14424203  0.0906558   0.02984426]
 [-0.14655549 -0.10125269 -0.07496244 -0.06006481 -0.02695087  0.00403321  0.0906558   0.17054466  0.14455264]
 [-0.06794621 -0.12769464 -0.13193147 -0.1114809  -0.03965366 -0.02537928  0.02984426  0.14455264  0.32968928]]

person Raven    schedule 22.04.2016    source источник
comment
Ссылка, которую вы предоставляете, не обязательно работает для всех из-за брандмауэра. Можешь разместить свою матрицу В ТЕМЕ?   -  person Colonel Beauvel    schedule 22.04.2016
comment
@ColonelBeauvel отредактировал вопрос, включив в него данные.   -  person Raven    schedule 22.04.2016
comment
Таким образом, я привожу свой ответ ниже, который объясняет большие значения, но, идя дальше, было бы интересно посмотреть, чего вы хотите достичь, пытаясь инвертировать необратимую матрицу...   -  person Colonel Beauvel    schedule 22.04.2016
comment
Я получаю матрицу с разумными значениями, когда запускаю linalg.inv: pastebin.com/CHqxJqPV   -  person Eric    schedule 22.04.2016


Ответы (3)


Матрица m, которую вы предоставляете, имеет определитель 0 и, следовательно, необратима с числовой точки зрения (и это объясняет большие значения, которые у вас есть, которые имеют тенденцию увеличиваться до Inf):

In [218]: np.linalg.det(m)
Out[218]: 2.8479946613617788e-16

Если вы начинаете выполнять операции линейной алгебры/решать задачи, я настоятельно рекомендую проверить некоторые основные понятия, которые позволят избежать числовых ошибок/ошибок: https://en.wikipedia.org/wiki/Invertible_matrix

person Colonel Beauvel    schedule 22.04.2016
comment
Я на самом деле знаю об этих основах, проблема в том, что я следую алгоритму Active Shape Model, который предполагает, что эта матрица будет обратимой. Поэтому я не ожидал, что он не будет соответствовать этому основному условию. Данные в основном представляют собой выборку градиента из нескольких изображений вокруг одной ориентира, и я пытаюсь построить статистическую модель для этой точки. Затем модель — средний вектор и ковариационная матрица используются для поиска наилучшего соответствия с другим выбранным вектором с использованием расстояния Махаланобиса. Однако найти обратное не удается. - person Raven; 22.04.2016
comment
гул да это используемая модель выходит из строя из-за матрицы. В этом случае следует использовать другой подход. Но, тем не менее, хорошо автоматически включать проверку определителя с порогом, когда вам нужно инвертировать матрицу. Так что, если произойдет ошибка, вам будет легче ее исследовать! - person Colonel Beauvel; 22.04.2016

Вы столкнулись с очень важной и фундаментальной математической проблемой. Если ваш метод дает необратимую матрицу, у метода есть проблема. Метод пытается решить некорректно поставленную проблему. Вероятно, все правильно поставленные задачи были решены в XIX веке. Наиболее распространенный способ решения некорректно поставленных задач – регуляризация. Иногда может быть удобна псевдоинверсия Мура-Пенроуза. Scipy.linalg имеет псевдоинверсию. Но псевдоинверсия — это не кратчайший путь. Используя псевдоинверсию, вы заменяете неразрешимую задачу A разрешимой задачей B. Иногда решение задачи B может успешно работать вместо несуществующего решения задачи A, но это вопрос математического исследования.

person alpo    schedule 22.04.2016

Нулевой определитель означает, что ваша матрица имеет линейно зависимые строки (или столбцы). Другими словами, некоторая информация в вашей модели является избыточной (она содержит избыточную или дублирующую информацию). Разработайте свою модель заново, чтобы исключить избыточность.

person Community    schedule 23.04.2016