(Оценка псевдообратной неквадратной матрицы (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, науке о данных, машинному обучению и искусственному интеллекту.
Если вы найдете это чтение полезным, нажмите Аплодисменты👏. Ваша поддержка послужит катализатором вдохновения, чтобы поддерживать меня и разрабатывать более ценный контент.