\documentclass[prb, notitlepage, aps, 11pt]{revtex4-2}% \usepackage[utf8]{inputenc} \usepackage[T2A]{fontenc} \usepackage[english, russian]{babel} \usepackage{listings} \usepackage{amssymb} \usepackage{graphicx,amsmath} \usepackage{enumitem} \usepackage{nicefrac} \usepackage{amsmath} \usepackage{graphicx} \usepackage{amsfonts} \usepackage{comment} \usepackage{bm} \usepackage{delimset} \usepackage[pdftitle = a]{hyperref} \usepackage{datetime} \hypersetup{ colorlinks=true, linkcolor=blue, filecolor=magenta, urlcolor=cyan, pdfpagemode=FullScreen, } \begin{document} % \begin{center} % версия от \today \quad \currenttime % \end{center} \title{\texorpdfstring{ Численные методы, осень 2022\\ Задание 2 [SVD-разложение и его применения] \\ Всего баллов: 40 \ Срок сдачи: 21 октября }{} } \maketitle \section*{Рекомендованная литература} \begin{itemize} \item Лекции 4-5 из \cite{trefethen1997numerical} \item Лекция 2 из \cite{tyrtyshnikov2012brief} \item \href{https://stats.stackexchange.com/questions/2691/making-sense-of-principal-component-analysis-eigenvectors-eigenvalues}{StackExchange: в чём смысл собственных векторов, собственных чисел и анализа главных компонент} \end{itemize} \section*{Упражнения} \begin{enumerate} \begin{comment} \item (5) Construct (manually) SVD decomposition of the following matrices: $$ (a)\quad\begin{bmatrix} 3 & 0\\ 0 & -2 \end{bmatrix},\quad (b)\quad\begin{bmatrix} 0 & 2\\ 0 & 0\\ 0 & 0 \end{bmatrix},\quad (c)\quad\begin{bmatrix} 1 & 1\\ 1 & 1 \end{bmatrix}. $$ For the case (b), construct both full and reduced SVD decomposition via \path{np.linalg.svd}. \end{comment} \item (10) В этом упражнении мы познакомимся с тремя основными алгоритмами вычисления сингулярного разложения, доступными в Python: \path{numpy.linalg.svd}, \path{scipy.sparse.linalg.svds} и \path{sklearn.utils.extmath.randomized_svd}. \begin{itemize} \item Создайте матрицу $A$ размера $n\times n \ (n=2000)$ со случайными элементами из стандартного нормального распределения. \item С помощью этих трёх алгоритмов (и теоремы Эккарта-Янга?) аппроксимируйте матрицу $A$ матрицами ранга 2. Вы получите матрицы $A_\text{svd}$, $A_\text{svds}$ и $A_\text{rsvd}$. Измерьте времена выполнения. \item Вычислите нормы отклонений: $\norm{A-A_\text{svd}}_F \quad \norm{A-A_\text{svds}}_F \quad \norm{ A - A_\textrm{rsvd}}_F$\\ Объясните результат. \end{itemize} \item (5) Пусть матрица $A$ размером $m\times n$ имеет сингулярное разложение $A = U\Sigma V^T$. Выразите через $U$, $\Sigma$ и $V$ сингулярные разложения следующих матриц: \begin{enumerate}[label=(\roman*)] \item $\left(A^T A\right)^{-1}$ \item $\left(A^T A\right)^{-1}A^T$ \item $A\left(A^T A\right)^{-1}$ \item $A\left(A^T A\right)^{-1}A^T$ \end{enumerate} \item (10) Рассмотрим матрицу: $$ \begin{bmatrix} -2 & 11\\ -10 & 5 \end{bmatrix} $$ \begin{itemize} \item Выпишите сингулярные числа, а также левые и правые сингулярные векторы матрицы $A$. Так как SVD-разложение не единственно, найдите то разложение, в котором матрицы $U$ и $V$ имеют наименьшее количество отрицательных элементов. \item Нарисуйте единичный круг и его образ под действием оператора $A$. Изобразите сингулярные векторы и отметьте их координаты. \item Чему равна спектральная норма и норма Фробениуса матрицы $A$? \item Найдите $A^{-1}$ с помощью SVD-разложения. \item Найдите собственные числа $\lambda_1$ и $ \lambda_2$ матрицы $A$. \end{itemize} \item (5) В файле \path{A.npy} находится матрица $A$ размера $n\times n$. Определите наилучшее приближение следующего вида, в котором переменные разделяются: $A_{ij} \approx h_i\eta_j$. Чему равна относительная ошибка такой аппроксимации? $$ \delta_{\textrm{err}}=\frac{\sqrt{\sum_{ij}\left(A_{ij}-h_i\eta_j\right)^2}}{\sqrt{\sum_{ij}A_{ij}^2}} $$ Сколько понадобится слагаемых, чтобы приближение стало точным? $$ A_{ij} = \sum_{\alpha=1}^K h_{\alpha i}\eta_{\alpha j} \qquad K = {} ? $$ \item (10) В этом упражнении мы применим SVD-разложение к задаче уменьшения размерности. Начнём с загрузки датасета: \lstset{language=Python} \lstset{frame=lines} \lstset{label={lst:code_direct}} \lstset{basicstyle=\ttfamily} \begin{lstlisting} from sklearn.datasets import load_digits digits = load_digits() A = digits.data y = digits.target \end{lstlisting} Каждая строка массива \path{A} состоит из 64 чисел с плавающей точкой, которые задают черно-белое изображение $8 \times 8$. Это изображение цифры. Сами цифры (метки данных) указаны в массиве \path{y}. \begin{itemize} \item Изучите датасет. Постройте изображения нескольких цифр, например, 0, 3, 7 \item Отнормируйте датасет \path{A}. \item С помощью SVD-разложения спроецируйте датасет, cделайте его из $N \!{\times} 64$--мерного $N \!{\times} 2$--мерным. Постройте двумерный \path{scatter_plot}, окрасьте точки, соответствующие разным цифрам, в разные цвета. \end{itemize} \end{enumerate} \bibliography{library.bib} \end{document}