(Оценка псевдообратной неквадратной матрицы (Ax=b))

Предисловие

В линейной алгебре обратная Мура-Пенроуза является наиболее широко известным обобщением обратной матрицы. Инверсия Мура-Пенроуза иногда также известна под названием псевдоинверсия или обобщенная инверсия. Е. Х. Мур в 1920, Арне Бьерхаммар в 1951 и Роджер Пенроуз в 1955 описали его независимо друг от друга в своих исследованиях, а исследователи и разработчики широко используют его для решения реальных задач.

Он помогает оценитьнаилучшее решение (метод наименьших квадратов) для системы линейных уравнений (Ax=b). .

В этой статье я проведу вас через работу с псевдоинверсией вручную вместе с ее реализацией на Python. Итак, углубляемся…

Вывод псевдообратного

Примечание. Пропустите вывод и используйте окончательный результат только в том случае, если у вас слишком много математических вычислений.

Чтобы оценить решение псевдообратной задачи, в игру вступает разложение по сингулярным значениям (экономный вариант). Мы знаем, что Эконом СВД это

Мы знаем, что система уравнений

Заменить А на эконом вариант СВД

Умножьте обе части на следующее уравнение

Наше уравнение примет вид:

Мы можем переписать приведенное выше уравнение как

который называется обратным Муром-Пенроузом или псевдообратным.

Ручной пример оценки псевдоинверсии

Допустим, у нас есть следующая матрица размером 4 X 2, и мы хотим вычислить ее псевдообратную.

Если вас интересует, как вычислить SVD любой матрицы, не волнуйтесь. А пока попробуйте использовать онлайн-калькулятор, чтобы разложить матрицу. В будущем я также объясню его разложение. Наша текущая цель — найти псевдоинверсию, потому что это то, что мы хотим. Наши матрицы разложения:

То, что осталось? просто используя полученную формулу и получая псевдообратную матрицу A. Теперь транспонировать матрицу просто, а взять обратную - нет. Так что, если вы не знаете, как взять обратную матрицу, не проблема. Используйте онлайн-калькулятор, чтобы найти обратную матрицу. Как только мы найдем обратную матрицу и переставим матрицы U и V, мы можем приступить к оценке псевдообратной.

Используя обратное уравнение Мура-Пенроуза:

Мы получаем псевдоинверсию, что нам и нужно. Легко, верно?

Python-реализация псевдоинверсии

Далее мы увидим, как реализовать псевдоинверсию в python.

Input:
# Import Numpy library
import numpy as np

Мы создадим массив NumPy (2d), который будет содержать некоторые значения.

Input:
arr = np.array([[2, 4], [1, 3], [0, 0], [0, 0]])
arr
Output:
array([[2, 4],        
       [1, 3],        
       [0, 0],        
       [0, 0]])

Мы разложим нашу входную матрицу на U, Sigma и V, транспонированные следующим образом:

Input:
U, S, VT = np.linalg.svd(a=arr)
print(U)
print(S)
print(VT)
Output:
[[-0.81741556 -0.57604844  0.          0.        ]  
 [-0.57604844  0.81741556  0.          0.        ]  
 [ 0.          0.          1.          0.        ]  
 [ 0.          0.          0.          1.        ]] 
[5.4649857  0.36596619] 
[[-0.40455358 -0.9145143 ]  
 [-0.9145143   0.40455358]]

Теперь, в соответствии с нашим требованием, нам нужно транспонировать U, V и обратную сигму, которые мы можем вычислить из существующих матриц. Нам нужно только вычислить обратную сигму, потому что U и V могут быть напрямую преобразованы с использованием атрибута .T. Во-первых, давайте преобразуем вектор сигмы в двумерную матрицу.

Input:
# Transforming vector to 2d matrix
Sigma = np.diag(S)
Sigma
Output:
array([[5.4649857 , 0.        ],        
       [0.        , 0.36596619]])

Далее мы оценим обратную сигма-матрицу.

Input:
# Estimate sigma inverse from Sigma matrix 
Sigma_inverse = np.linalg.inv(Sigma)
Sigma_inverse
Output:
array([[0.1829831 , 0.        ],        
       [0.        , 2.73249285]])

Мы добавим два нулевых столбца, чтобы они соответствовали размерности строки входной матрицы A.

Input:
# Adding zeros to match the row dimension of U hat transpose
# in the moore-penrose equation to get the pseudo-inverse
Sigma_plus = np.concatenate((Sigma_inverse, np.array([[0, 0], [0, 0]]).T), axis=1)
Sigma_plus
Output:
array([[0.1829831 , 0.        , 0.        , 0.        ],        
       [0.        , 2.73249285, 0.        , 0.        ]])

Наконец, мы сложим все части вместе, чтобы получить нашу псевдоинверсию, как показано ниже:

Input:
# Estimating pseudo-inverse using all the pieces
A_plus = np.dot(a=np.dot(a=VT.T, b=Sigma_plus), b=U.T)
A_plus

Output:
array([[ 1.5, -2. ,  0. ,  0. ],        
       [-0.5,  1. ,  0. ,  0. ]])

Легко, верно? Но как мы можем использовать псевдоинверсию для оценкинаименьших квадратов? Интересно, правда?

В следующем рассказе я расскажу вам о разгадке линейной регрессии (она же метод наименьших квадратов), реализованной в библиотеке Sklearn.

Заключительные мысли и заключительные комментарии

Есть некоторые жизненно важные моменты, которые многие люди не понимают, занимаясь наукой о данныхили искусственным интеллектом. Если вы один из них и ищете способ уравновесить эти минусы, ознакомьтесь с программами сертификации, предоставляемыми INSAID на их веб-сайте. Если вам понравилась эта статья, я бы порекомендовал пройти Глобальный сертификат в области науки о данных, потому что он охватывает ваши основы, а также алгоритмы машинного обучения(базовые для продвижения).

& Вот и все. Надеюсь, вам понравилось объяснение оценки обратного уравнения Мура-Пенроуза, и вы узнали что-то ценное.

Подпишитесь на меня, чтобы не пропустить новые статьи, посвященные Python, R, науке о данных, машинному обучению и искусственному интеллекту.

Если вы найдете это чтение полезным, нажмите Аплодисменты👏. Ваша поддержка послужит катализатором вдохновения, чтобы поддерживать меня и разрабатывать более ценный контент.