Рубрики
Без рубрики

Особое значение разложения (SVD) в Python

Особого разложения ценностей (SVD) является одним из широко используемых методов снижения размеров. SVD разлагает матрицу на три других матрица.

Автор оригинала: Pankaj Kumar.

Особое значение разложения (SVD) в Python

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

Если мы увидим матрицы как то, что вызывает линейное преобразование в пространстве, то с разложением сингулярного значения, мы разлагаемся на одном преобразовании в трех движениях.

В этой статье мы увидим разные методы для реализации SVD.

Особенности декомпозиции сингулярного значения

SVD факторы одной матрицы в матрицу U, D и V * соответственно.

SVD

где,

  • U и V * являются ортогональными матрицами.
  • D – диагональная матрица сингулярных значений.

SVD также можно рассматривать как разложение одного комплексного преобразования в 3 более простых преобразованиях (вращение, масштабирование и вращение).

С точки зрения преобразований

  • Матрицы U и V * вызывает вращение
  • Диагональная матрица D вызывает масштабирование.

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

Условия, кроме первых немногих, могут быть проигнорированы, не теряя много информации, и поэтому SVD называется техникой снижения размерности.

Реализация SVD в Python

Начнем с реализации SVD в Python. Мы будем работать с несколькими библиотеками, чтобы продемонстрировать, как будет продолжаться реализация.

1. Использование Numpy

Python Numpy иметь возможности для реализации большинства Линейная алгебра Методы предлагают легкую реализацию SVD.

Мы будем использовать numpy.linalg Модуль, который имеет SVD класс для выполнения SVD на матрице.

import numpy as np

#Creating a matrix A
A = np.array([[3,4,3],[1,2,3],[4,2,1]])

#Performing SVD
U, D, VT = np.linalg.svd(A)

#Checking if we can remake the original matrix using U,D,VT
A_remake = (U @ np.diag(D) @ VT)
print(A_remake)
Восстановленная матрица

D представляет собой 1D массив вместо 2D массива. D – это диагональная матрица с большинством значений заканчивается нулю, такая матрица называется редкая матрица Отказ Чтобы сохранить место, он возвращается как 1D массив.

2. Использование Scikit-Learn

Мы будем использовать Trunchedsvd класс от Sklearn.DeComposition модуль.

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

#Importing required modules
import numpy as np
from sklearn.decomposition import TruncatedSVD

#Creating array 
A = np.array([[3,4,3],[1,2,3],[4,2,1]])

#Fitting the SVD class
trun_svd =  TruncatedSVD(n_components = 2)
A_transformed = svd.fit_transform(A)

#Printing the transformed matrix
print("Transformed Matrix:")
print(A_transf)
Трансформированная матрица

Заключение

В этой статье мы увидели, как мы можем реализовать сингулярное разложение ценностей (SVD) с использованием библиотек, таких как Numpy и Scikit – учиться.

Счастливое обучение!