numerics-2022/Task 2/tex/Assignment_2_ru.tex
2022-09-26 15:56:57 +03:00

151 lines
6.7 KiB
TeX
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\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}