NumericalMethods/HW2.ipynb

998 lines
388 KiB
Plaintext
Raw Permalink Normal View History

2022-11-11 04:29:03 +03:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 72,
"id": "ddfbd19c",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.manifold import TSNE\n",
"from sklearn.datasets import load_digits\n",
"from sklearn.preprocessing import StandardScaler\n",
"import time\n",
"\n",
"from scipy.sparse.linalg import svds as scipy_svd\n",
"from numpy.linalg import svd as numpy_svd\n",
"from sklearn.utils.extmath import randomized_svd as sklearn_svd"
]
},
{
"cell_type": "code",
"execution_count": 73,
"id": "28566ca9",
"metadata": {},
"outputs": [],
"source": [
"plt.rcParams.update({\"font.size\" : 15, \"font.family\" : \"serif\"})"
]
},
{
"cell_type": "markdown",
"id": "ac58d544",
"metadata": {},
"source": [
" ### Задача 1"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "fe997d27",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-0.28824414, -0.72344481, -0.31466461, ..., 0.48469425,\n",
" -0.48534312, -1.75019397],\n",
" [ 0.97365819, -0.3006159 , 0.23759037, ..., 1.7838543 ,\n",
" 0.98583849, 0.47303252],\n",
" [ 0.97682293, 0.66719562, 0.34751901, ..., 1.08327426,\n",
" 1.34790485, 0.82349545],\n",
" ...,\n",
" [ 0.45672919, -0.83670329, 0.28055832, ..., -1.27079724,\n",
" 0.82394745, 0.08654333],\n",
" [-0.87594766, 0.32259166, -1.46007173, ..., 0.58111975,\n",
" 0.75498419, -0.69455994],\n",
" [-2.75542392, -0.99751411, -1.08212821, ..., 1.93992511,\n",
" -0.38518655, 0.20831918]])"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n = 2000\n",
"A = np.random.normal(loc=0.0, scale=1.0, size=(n, n))\n",
"A"
]
},
{
"cell_type": "code",
"execution_count": 64,
"id": "0c04f8c3",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/goloshch/.conda/envs/NPM/lib/python3.10/site-packages/sklearn/utils/extmath.py:368: FutureWarning: If 'random_state' is not supplied, the current default is to use 0 as a fixed seed. This will change to None in version 1.2 leading to non-deterministic results that better reflect nature of the randomized_svd solver. If you want to silence this warning, set 'random_state' to an integer seed or to None explicitly depending if you want your code to be deterministic or not.\n",
" warnings.warn(\n"
]
}
],
"source": [
"#np.linalg.svd\n",
"t_numpy = %timeit -o -q -n 2 -r 2 numpy_svd(A)\n",
"u, s, vh = numpy_svd(A)\n",
"u, s, vh = u[:,:2], s[:2], vh[:2,:]\n",
"A_svd = u @ np.diag(s) @ vh\n",
"\n",
"\n",
"#scipy.sparse.linalg.svds\n",
"t_scipy = %timeit -o -q -n 2 -r 2 scipy_svd(A)\n",
"u, s, vh = scipy_svd(A, k=2)\n",
"A_svds = u@np.diag(s)@vh\n",
"\n",
"#sklearn.utils.extmath.randomized_svd\n",
"t_sklearn = %timeit -o -q -n 2 -r 2 sklearn_svd(A, n_components=2)\n",
"u, s, vh = sklearn_svd(A, n_components=2)\n",
"A_rsvd = u@np.diag(s)@vh"
]
},
{
"cell_type": "code",
"execution_count": 66,
"id": "c7e12c91",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Error\n",
"_____________________________________\n",
"A_svd : 1995.4380988107664\n",
"A_svds : 1995.4380988107664\n",
"A_rsvd : 1995.6080648210457\n",
"\n",
"Time\n",
"_____________________________________\n",
"Time_svd : 2.94 s ± 46.8 ms per loop (mean ± std. dev. of 2 runs, 2 loops each)\n",
"Time_svds : 563 ms ± 9.18 ms per loop (mean ± std. dev. of 2 runs, 2 loops each)\n",
"Time_rsvd : 121 ms ± 6.46 ms per loop (mean ± std. dev. of 2 runs, 2 loops each)\n"
]
}
],
"source": [
"print(\"Error\")\n",
"print(\"_____________________________________\")\n",
"print(\"A_svd : \", np.linalg.norm(A_svd-A, ord=\"fro\"))\n",
"print(\"A_svds : \", np.linalg.norm(A_svds-A, ord=\"fro\"))\n",
"print(\"A_rsvd : \", np.linalg.norm(A_rsvd-A, ord=\"fro\"))\n",
"print()\n",
"print(\"Time\")\n",
"print(\"_____________________________________\")\n",
"print(\"Time_svd : \", t_numpy)\n",
"print(\"Time_svds : \", t_scipy)\n",
"print(\"Time_rsvd : \", t_sklearn)"
]
},
{
"cell_type": "markdown",
"id": "a37e1433",
"metadata": {},
"source": [
"__ВыводЫ:__\n",
"\n",
"- рандомизированный svd работает быстрее всего, он экономит вычисления за счет приближенного ответа\n",
"\n",
"\n",
"- нормы фробениуса для всех вариантов получились очень большие; думаю, что это связано с тем, что матрицы случайные, в них нет каких-то закономерностей, которые часто встречаются в матрицах из реальных задач(для реальных матриц убывание обычно экспоненциальное)\n",
"\n",
"\n",
"- как видно из графика ниже, сингулярные значения убывают медленно, это не позволяет делать хорошие малоранговые приближения"
]
},
{
"cell_type": "code",
"execution_count": 76,
"id": "14d641f9",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 864x432 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"u, s, vh = numpy_svd(A)\n",
"plt.figure(figsize=(12, 6))\n",
"\n",
"plt.subplot(121)\n",
"plt.semilogy(s)\n",
"plt.xlabel(\"n_component\")\n",
"plt.ylabel(\"nth singular value\")\n",
"\n",
"plt.subplot(122)\n",
"plt.plot(s)\n",
"plt.xlabel(\"n_component\")\n",
"plt.ylabel(\"nth singular value\")\n",
"\n",
"plt.tight_layout()"
]
},
{
"cell_type": "markdown",
"id": "b7868f15",
"metadata": {},
"source": [
"### Задача 2"
]
},
{
"cell_type": "markdown",
"id": "4369bc2a",
"metadata": {},
"source": [
"- $(A^TA)^{-1}=(V\\Sigma^TU^T U \\Sigma V^T)^{-1}=(V\\Sigma^T \\Sigma V^T)^{-1}=(\\Sigma^T \\Sigma V V^T)^{-1} = (\\Sigma^T \\Sigma )^{-1}=\\Sigma^{-2}$\n",
"\n",
"\n",
"- $(A^TA)^{-1}A^T = \\Sigma^{-2}V\\Sigma U^T$\n",
"\n",
"\n",
"- $A(A^TA)^{-1} = U\\Sigma V^T\\Sigma^{-2}$\n",
"\n",
"\n",
"- $A(A^TA)^{-1}A^T = U\\Sigma V^T\\Sigma^{-2}V\\Sigma U^T = \\Sigma^{-2}U\\Sigma V^TV\\Sigma U^T = \\Sigma^{-2}\\Sigma^2=I$"
]
},
{
"cell_type": "markdown",
"id": "4116a2c8",
"metadata": {},
"source": [
"### Задача 3"
]
},
{
"cell_type": "code",
"execution_count": 349,
"id": "127916f3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.6 -0.8] [-0.8 -0.6] 14.142135623730951 7.0710678118654755\n",
"[-0.70710678 -0.70710678] [-0.70710678 0.70710678]\n"
]
}
],
"source": [
"#Считаю, что собственные значения и векторы разрешается искать не ручками, а в питончике\n",
"A = np.array([[-2, 11], [-10, 5]])\n",
"\n",
"#1) Считаем правые сингулярные векторы V\n",
"res = np.linalg.eig(A.T@A)\n",
"v2, v1 = res[1].T\n",
"s2, s1 = res[0]**0.5\n",
"v = np.array([v1, v2]).T\n",
"\n",
"#2) Считаем левые сингулярные векторы U\n",
"u1, u2 = v1@A.T/s1, v2@A.T/s2\n",
"u = np.array([u1, u2]).T\n",
"\n",
"print(v1, v2, s1, s2)\n",
"print(u1, u2)"
]
},
{
"cell_type": "code",
"execution_count": 362,
"id": "6c037a22",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Right singular vedctors : [ 0.6 -0.8] [-0.8 -0.6]\n",
"\n",
"Left singular vectors : [-0.70710678 -0.70710678] [-0.70710678 0.70710678]\n",
"\n",
"Singular values : 14.142135623730951 7.0710678118654755\n"
]
}
],
"source": [
"# Меньше минусов\n",
"v1, v2 = v1, -v2\n",
"u1, u2 = u1, -u2\n",
"\n",
"print(\"Right singular vedctors : \", v1, v2)\n",
"print()\n",
"print(\"Left singular vectors : \", u1, u2)\n",
"print()\n",
"print(\"Singular values : \", s1, s2)"
]
},
{
"cell_type": "code",
"execution_count": 361,
"id": "38da9e8a",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 864x432 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Рисовашки\n",
"t = np.arange(0, 2.01*np.pi, 2*np.pi/100)\n",
"n = len(t)\n",
"x = np.cos(t)\n",
"y = np.sin(t)\n",
"\n",
"x_new = np.zeros(n)\n",
"y_new = np.zeros(n)\n",
"\n",
"for i in range(n):\n",
" x_new[i] = A[0,0]*x[i]+A[0,1]*y[i]\n",
" y_new[i] = A[1,0]*x[i]+A[1,1]*y[i]\n",
"\n",
"plt.figure(figsize=(12, 6))\n",
"plt.subplot(121)\n",
"plt.plot(x, y, color=\"black\")\n",
"plt.plot([0,v1[0]] ,[0,v1[1]], color=\"blue\")\n",
"plt.plot([0, v2[0]], [0, v2[1]], color=\"red\")\n",
"plt.xlim(-1.5, 1.5)\n",
"plt.ylim(-1.5, 1.5)\n",
"plt.xlabel(\"x\")\n",
"plt.ylabel(\"y\")\n",
"plt.title(\"Unit circle\")\n",
"plt.grid()\n",
"\n",
"\n",
"plt.subplot(122)\n",
"plt.plot(x_new, y_new, color=\"black\")\n",
"plt.plot([0,s1*u1[0]] ,[0,s1*u1[1]], color=\"blue\")\n",
"plt.plot([0, s2 *u2[0]], [0, s2*u2[1]], color=\"red\")\n",
"plt.xlim(-15, 15)\n",
"plt.ylim(-15, 15)\n",
"plt.xlabel(\"x\")\n",
"plt.ylabel(\"y\")\n",
"plt.title(\"Unit circle after transform A\")\n",
"plt.grid()\n",
"\n",
"plt.tight_layout()"
]
},
{
"cell_type": "markdown",
"id": "76355bef",
"metadata": {},
"source": [
"$||A||_2 = \\sigma_1, \\; ||A||_F = \\sqrt{\\sigma_1^2 + \\sigma_2 ^2}$"
]
},
{
"cell_type": "code",
"execution_count": 360,
"id": "2957d83e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A2 = 14.142135623730951\n",
"AF = 15.811388300841898\n"
]
}
],
"source": [
"# Нормы\n",
"print(\"A2 = \", s1)\n",
"print(\"AF = \", (s1**2+s2**2)**0.5)"
]
},
{
"cell_type": "markdown",
"id": "839a440f",
"metadata": {},
"source": [
"$A^{-1} = V\\Sigma^{-1}U^T$, $\\Sigma^{-1} = \\begin{pmatrix}\n",
"\\frac{1}{\\sigma_1} & 0\\\\\n",
"0 & \\frac{1}{\\sigma_2}\\\\\n",
"\\end{pmatrix}$"
]
},
{
"cell_type": "code",
"execution_count": 359,
"id": "f97fba41",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1.00000000e+00 3.74700271e-16]\n",
" [7.63278329e-17 1.00000000e+00]]\n",
"[[ 1.00000000e+00 -1.56125113e-16]\n",
" [-1.66533454e-16 1.00000000e+00]]\n"
]
}
],
"source": [
"# Обратная матрица через SVD\n",
"v = np.array([v1, v2]).T\n",
"u = np.array([u1, u2]).T\n",
"s = np.array([[s1, 0], [0, s2]])\n",
"sinv = np.array([[1/s1, 0], [0, 1/s2]])\n",
"Ainv = v@sinv@u.T\n",
"\n",
"print(Ainv@A)\n",
"print(A@Ainv)"
]
},
{
"cell_type": "code",
"execution_count": 358,
"id": "0e1b0097",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([1.5+9.88685997j, 1.5-9.88685997j]),\n",
" array([[0.72374686+0.j , 0.72374686-0.j ],\n",
" [0.23028309+0.65050763j, 0.23028309-0.65050763j]]))"
]
},
"execution_count": 358,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Собственные значения\n",
"np.linalg.eig(A)"
]
},
{
"cell_type": "markdown",
"id": "331d2bf0",
"metadata": {},
"source": [
"### Задача 4"
]
},
{
"cell_type": "markdown",
"id": "5a9196fc",
"metadata": {},
"source": [
"1) $A_{ij} \\simeq h_i \\eta_j \\Leftrightarrow A=h \\eta^T$, по теореме о ранге произведения \n",
"$rang(h\\eta^T) \\leq rang(h) + rang(\\eta^T) - 1 = 1$, т.е. аппроксимация имеет ранг 1\n",
"\n",
"2) По теореме Эккарта-Янга-Мирского лучшим приближением матрицы A ранга r является её обрезанное сингулярное разложение по первым r сингулярным числам, причем $||A-A_r||_F=\\sqrt{\\sum_{i=r+1}^n\\sigma_i^2}$\n",
"\n",
"3) SVD-разложение даёт $A = U\\Sigma V^T$, где $U=(u_1 \\;u_2\\;...), \\Sigma = Diag(\\sigma_1, \\sigma_2,...), V=(v_1 \\;v_2\\;...)$, $u_i, v_j$ - векторы-столбцы, причем $\\sigma_i\\geq 0$\n",
"\n",
"$A_1 = \\begin{pmatrix}\n",
"u_1 \\\\\n",
"\\end{pmatrix}\n",
"\\begin{pmatrix}\n",
"\\sigma_1\\\\\n",
"\\end{pmatrix}\n",
"\\begin{pmatrix}\n",
"v_1^T\\\\\n",
"\\end{pmatrix} = \\sigma_1 u_1 v_1^T$\n",
"\n",
"Тогда $h=\\sqrt{\\sigma_1}u_1, \\; \\eta = \\sqrt{\\sigma_1}v_1$(коэффициенты можно и по-другому выбрать, но мне нравится так)\n",
"\n",
"4) $\\delta_{err} = \\frac{\\sqrt{\\sum(A_{ij}-h_i \\eta_j)^2}}{\\sqrt{\\sum A_{ij}^2}} = \\frac{||A-h\\eta^T||_F}{||A||_F} = \\frac{\\sqrt{\\sum_{i=2}^n \\sigma_i^2}}{\\sqrt{\\sum_{i=1}^n \\sigma_i^2}} = \\sqrt{1-\\frac{\\sigma_1^2}{\\sum_{i=1}^n \\sigma_i^2}}$(доля необъясненной дисперсии фактически)\n",
"\n",
"5) $A_{ij} = \\sum_{\\alpha=1}^K h_{\\alpha i} \\eta_{j \\alpha} \\Leftrightarrow A = \\sum_{i=1}^{rang(A)}\\sigma_i u_i v_i^T$, т.е. $K=rang(A)$"
]
},
{
"cell_type": "code",
"execution_count": 327,
"id": "435bc6dc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"delta_err : 0.7742251888975445\n",
"delta_err_formula : 0.7742251888975445\n"
]
}
],
"source": [
"A = np.load(\"A.npy\")\n",
"\n",
"u, s, vh = np.linalg.svd(A)\n",
"A_svd = u[:,:1] @ np.diag(s[:1]) @ vh[:1,:]\n",
"\n",
"print(\"delta_err : \", np.linalg.norm(A-A_svd, ord=\"fro\")/np.linalg.norm(A, ord=\"fro\"))\n",
"print(\"delta_err_formula : \", (1- s[0]**2/np.sum(s**2))**0.5)"
]
},
{
"cell_type": "code",
"execution_count": 328,
"id": "55837ecb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[5.00299422e+01 4.99770106e+01 2.54470684e+01 2.45000000e+01\n",
" 1.11272856e-14 9.55930610e-15 8.62751654e-15 4.99613766e-15\n",
" 4.99613766e-15 4.99613766e-15 4.99613766e-15 4.99613766e-15\n",
" 4.99613766e-15 4.99613766e-15 4.99613766e-15 4.99613766e-15\n",
" 4.99613766e-15 4.99613766e-15 4.99613766e-15 4.99613766e-15\n",
" 4.99613766e-15 4.99613766e-15 4.99613766e-15 4.99613766e-15\n",
" 4.99613766e-15 4.99613766e-15 4.99613766e-15 4.99613766e-15\n",
" 4.99613766e-15 4.99613766e-15 4.99613766e-15 4.99613766e-15\n",
" 4.99613766e-15 4.99613766e-15 4.99613766e-15 4.99613766e-15\n",
" 4.99613766e-15 4.99613766e-15 4.99613766e-15 4.99613766e-15\n",
" 4.99613766e-15 4.99613766e-15 4.99613766e-15 4.99613766e-15\n",
" 4.99613766e-15 4.99613766e-15 4.99613766e-15 3.65548473e-15\n",
" 3.20651151e-15 1.21059206e-15]\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.semilogy(s)\n",
"print(s)"
]
},
{
"cell_type": "code",
"execution_count": 117,
"id": "480b8e58",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"delta_err : 3.2502455784278293e-15\n"
]
}
],
"source": [
"u, s, vh = np.linalg.svd(A)\n",
"A_svd = u[:,:4] @ np.diag(s[:4]) @ vh[:4,:]\n",
"\n",
"print(\"delta_err : \", np.linalg.norm(A-A_svd, ord=\"fro\")/np.linalg.norm(A, ord=\"fro\"))"
]
},
{
"cell_type": "markdown",
"id": "0f89340f",
"metadata": {},
"source": [
"__Вывод:__\n",
"\n",
"- По сингулярным числам видно, что ранг матрицы равен 4, ошибка такой аппроксимации это по сути ошибка вычислений\n",
"\n",
"\n",
"- Задачка забавная, я бы за неё больше баллов ставил"
]
},
{
"cell_type": "markdown",
"id": "a8688c28",
"metadata": {},
"source": [
"### Задача 5"
]
},
{
"cell_type": "code",
"execution_count": 91,
"id": "4a205d41",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0\n",
"16.0\n",
"[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.]\n"
]
}
],
"source": [
"digits = load_digits()\n",
"A = digits.data\n",
"y = digits.target\n",
"\n",
"print(A.min())\n",
"print(A.max())\n",
"print(np.unique(A))"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "98116264",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x432 with 9 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(6, 6))\n",
"for i in range(1, 10):\n",
" plt.subplot(3,3,i)\n",
" plt.imshow(A[i].reshape(8, 8))\n",
"plt.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "fefcb6e8",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x432 with 9 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#Такой вариант нормализации работает так себе\n",
"#(вычет среднего+деление на стандартное отклонение)\n",
"ss=StandardScaler()\n",
"ss.fit(A)\n",
"A_transform = ss.transform(A)\n",
"\n",
"plt.figure(figsize=(6, 6))\n",
"for i in range(1, 10):\n",
" plt.subplot(3,3,i)\n",
" plt.imshow(A_transform[i].reshape(8, 8))\n",
"plt.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": 143,
"id": "31c0c6c0",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x432 with 9 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#min-max нормализация\n",
"#То что надо\n",
"A_transform = 2*(A/A.max()-0.5)\n",
"\n",
"plt.figure(figsize=(6, 6))\n",
"for i in range(1, 10):\n",
" plt.subplot(3,3,i)\n",
" plt.imshow(A_transform[i].reshape(8, 8))\n",
"plt.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": 159,
"id": "0cbf466b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"((1797, 64), (64,), (64, 64))\n"
]
}
],
"source": [
"u, s, vh = svd(A, full_matrices=False)\n",
"v = vh.T\n",
"print((u.shape, s.shape, v.shape))\n",
"\n",
"n = 2\n",
"u, s, v = u[:,:n], s[:n], v[:,:n]"
]
},
{
"cell_type": "code",
"execution_count": 145,
"id": "71184634",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1797, 64)\n"
]
},
{
"data": {
"text/plain": [
"1332.574288788176"
]
},
"execution_count": 145,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A_new = u @ np.diag(s) @ v.T\n",
"print(A_new.shape)\n",
"np.linalg.norm(A_new-A)"
]
},
{
"cell_type": "code",
"execution_count": 199,
"id": "11ed6e84",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaQAAAGoCAYAAAAJjpFOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAizUlEQVR4nO3de5CddZ3n8c+3T1/TuTQhFyAJkIGAgzMq2AYYQF1QBoERtxZH2MUpdXfi/BEF1yoLq6Z2ardqp+aPXSdOrcOaRazZNZpRhBEplosiUKyKdEK8JCEQQi4dCElMINfu05fv/pHurpPkdPd5vvRz+vcc3q8qivTlk+eXpz/d335OP+fX5u4CAGC6NU33AgAAkBhIAIBEMJAAAElgIAEAksBAAgAkoTmPv7TV2rxdndmDFjvecFfgWJLOOOetUK7dBkI5SerdNy+Uaz0YO6aXy5kzfTqqsvcHPxrZ1bsvQ2fE+jLv7DdDuba30Zdd++eHcq0HGrkv7d7RNDN7sFQKHa98bix3cef+UO7gUFsoJ0l7DneFcu37hmIHLGfv2fHhwyoP91XtSy4DqV2dutyuy5yz5thyDl/fHcp98m8eDeWWte0J5STpq/d8LpRb8sDuUG5wR2/mzHNDj4eOFVXvvrx5Y6wvn/vrh0K5C1rfCOUk6a5vfj6UO/cHjduXjqaZumLmxzPnmubMDh1v19diucfff28o98CRZaGcJP3dk38Wyl38zdg357bz9cyZXxz60bhv4yE7AEASGEgAgCTUNJDM7AYz22JmW83s7rwXhWKjL8iCvmDUpAPJzEqSviHpY5IukXS7mV2S98JQTPQFWdAXVKrlCmm5pK3uvs3dy5LWSrol32WhwOgLsqAvGFPLQFokaVfFy70jrzuJma0wsx4z6xlQ/1StD8VDX5BF5r6Uva9ui0N9TdlNDe6+2t273b27RfH76PHOQF+QRWVfWq19upeDnNQykHZLWlLx8uKR1wHV0BdkQV8wppaB9LykZWa21MxaJd0mKfYMQbwT0BdkQV8wZtKnurv7oJmtlPSYpJKk+9x9Y+4rQyHRF2RBX1Cppr1X3P0RSY/kvBY0CPqCLOgLRrFTAwAgCblsrhpVOvusUK78FwdCubvO2B7Kfb73ylBOko4uGQ7lhjs7wsdsVKUlp90dXJPWv4htdrpizmuh3Bdf+0AoJ0lHz4vtwtzQfTHJLPvm4vuuOzd0uN8svyeUe++v/kMod8U520M5SVr5oSdCuUfXXBPKNQ97IDV+hiskAEASGEgAgCQwkAAASWAgAQCSwEACACSBgQQASAIDCQCQBAYSACAJDCQAQBIYSACAJDCQAABJYCABAJLAQAIAJCGp3b6HFnaFcjcvWR/KLX/hk6HcW+vnhXKS5LMju+NK3lYKHjC2u3gRDM6fHcpdf/bzodxlPZ8K5Y5smhvKSZJmxT5+3tLAfXHJPfvnkQX/aRc8+dlQbtEPWkK5XXedEcpJ0uGB9lCu+eCxUC7ycZhgs2+ukAAAaWAgAQCSwEACACRh0oFkZkvM7GdmtsnMNprZnfVYGIqJviAL+oJKtdzUMCjpy+6+3sxmSVpnZk+4+6ac14Zioi/Igr5gzKRXSO7+uruvH/nzYUmbJS3Ke2EoJvqCLOgLKmX6GZKZnS/pUknP5bIaNBT6gizoC2p+HpKZzZT0Q0l3ufuhKm9fIWmFJLVrxpQtEMVEX5BFpr5YZ51Xh3qp6QrJzFp0oixr3P2Bau/j7qvdvdvdu1vUNpVrRMHQF2SRtS+tFnvyJ9JXy112Julbkja7+9fyXxKKjL4gC/qCSrVcIV0l6dOSrjWzDSP/3ZjzulBc9AVZ0BeMmfRnSO7+rCSrw1rQAOgLsqAvqMRODQCAJCS123ff/I5Qbl7L4SleycRmvOdgOPvmG7NCuYE5wV18I7vxFkR5buyczGgqh3JtLYOx3Hv3hnKStOe12M7Pg12xG0VKDdyXM9f9PpQbaj8zlDv+l7HjfXPp/aGcJN309MpQ7l12JHzMqcQVEgAgCQwkAEASGEgAgCQwkAAASWAgAQCSwEACACSBgQQASAIDCQCQBAYSACAJDCQAQBIYSACAJDCQAABJYCABAJKQ1G7fg52x+bizP7Yb77865+VQ7ty22C6+kvSDjveHckMd80O5pD7AU2xwRqwv2/tifbl64bZQ7oL2+G7f/9zcHcoNzlgQypVCqWIY2vRSKLegvDSUe3XR2aHcJ47+VSgnST4Q+5woL5wZyrXsCsXGxRUSACAJDCQAQBIYSACAJDCQAABJqHkgmVnJzF4ws4fzXBAaA31BFvQFUrYrpDslbc5rIWg49AVZ0BfUNpDMbLGkmyTdm+9y0AjoC7KgLxhV6xXSKklfkTQ83juY2Qoz6zGzngH1T8XaUFyrRF9Qu1XK0Jey99VtYaivSQeSmd0saa+7r5vo/dx9tbt3u3t3i9qmbIEoFvqCLCJ9abX2Oq0O9VbLFdJVkj5uZtslrZV0rZl9J9dVocjoC7KgLxgz6UBy96+6+2J3P1/SbZKedPc7cl8ZCom+IAv6gko8DwkAkIRMe2+6+1OSnsplJWg49AVZ0BdwhQQASEJSv51gxuux2383HFgcyg16bB7/umlRKCdJB451hHJnNFn4mI2qY0/s9t/fHIh9/IY99jHY0BzrpyS9GezLrBb6ciprjn258xmxu0DP+uVAKHf85RmhnCS9ce1gKHd4SezfOLcnFBsXV0gAgCQwkAAASWAgAQCSwEACACSBgQQASAIDCQCQBAYSACAJDCQAQBIYSACAJDCQAABJYCABAJLAQAIAJIGBBABIQlK7fTdv2hHKbX7lwlDu1u7YVrXRXZ8l6ZU980O5rlLseNbSmj00UIydops37wzlXt55QSh362XrQrm348e//6NQbmZwd/hG7ktpSWyX9y13t4dyQ0dDMWlgOBiUbnrPb0O5/7f+/aFcaAd1G78vXCEBAJLAQAIAJIGBBABIQk0Dycy6zOx+M3vRzDab2ZV5LwzFRV+QBX3BqFp/IvV1SY+6+61m1iop/jt28U5AX5AFfYGkGgaSmc2R9EFJn5Ekdy9LKue7LBQVfUEW9AWVannIbqmkfZK+bWYvmNm9ZtZ56juZ2Qoz6zGzngH1T/lCURj0BVlk7kvZ++q/StRFLQOpWdJlku5x90slHZV096nv5O6r3b3b3btb1DbFy0SB0BdkkbkvrRZ7XhDSV8tA6pXU6+7Pjbx8v04UCKiGviAL+oIxkw4kd98jaZeZXTzyquskbcp1VSgs+oIs6Asq1XqX3RckrRm5A2abpM/mtyQ0APqCLOgLJNU4kNx9g6TufJeCRkFfkAV9wSh2agAAJCGp3b6HDx8O5RY+HdsKe9k1b4RyF7TGcpL04x2Xh3Kd2w6Gch7c9bkIon2Z/2xLKPf+a7aHcktafh/KSdK/vHpFKDfzlTdDuUbui/piTy9YOPdQKPfkh/45lPvvwR3eJeneDVeFcue/HHvql83oyB46PP51EFdIAIAkMJAAAElgIAEAksBAAgAkgYEEAEgCAwkAkAQGEgAgCQwkAEASGEgAgCQwkAAASWAgAQCSwEACACSBgQQASIK5+9T/pWb7JO0Y583zJO2f8oMWX0rn5Tx3n1+vg9GXkJTOC31JX0rnZdy+5DKQJmJmPe7OL+M6BeelOs5LdZyX6jgv1RXlvPCQHQAgCQwkAEASpmMgrZ6GYxYB56U6zkt1nJfqOC/VFeK81P1nSAAAVMNDdgCAJDCQAABJqNtAMrMbzGyLmW01s7vrddwiMLPtZvZbM9tgZj3TvZ4U0Jfx0ZfT0ZfxFakvdfkZkpmVJL0k6aOSeiU9L+l2d9+U+8ELwMy2S+p291SeuDat6MvE6MvJ6MvEitSXel0hLZe01d23uXtZ0lpJt9Tp2Cge+oIs6EuDqNdAWiRpV8XLvSOvwwku6XEzW2dmK6Z7MQmgLxOjLyejLxMrTF+ap3sBkCRd7e67zWyBpCfM7EV3f2a6F4Vk0RdkUZi+1OsKabekJRUvLx55HSS5++6R/++V9KBOPATxTkZfJkBfTkNfJlCkvtRrID0
"text/plain": [
"<Figure size 432x432 with 9 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(6, 6))\n",
"for i in range(1, 10):\n",
" plt.subplot(3,3,i)\n",
" plt.imshow(A_new[i].reshape(8, 8))\n",
"plt.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": 200,
"id": "a5282d4e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7fa5e040db10>"
]
},
"execution_count": 200,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"X = u@np.diag(s)\n",
"\n",
"plt.figure(figsize=(6, 6))\n",
"\n",
"plt.scatter(X[:,0], X[:,1], c=y, cmap=\"tab10\")"
]
},
{
"cell_type": "code",
"execution_count": 201,
"id": "dd4293dd",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/goloshch/.conda/envs/NPM/lib/python3.10/site-packages/sklearn/manifold/_t_sne.py:780: FutureWarning: The default initialization in TSNE will change from 'random' to 'pca' in 1.2.\n",
" warnings.warn(\n",
"/Users/goloshch/.conda/envs/NPM/lib/python3.10/site-packages/sklearn/manifold/_t_sne.py:790: FutureWarning: The default learning rate in TSNE will change from 200.0 to 'auto' in 1.2.\n",
" warnings.warn(\n"
]
}
],
"source": [
"u, s, vh = svd(A, full_matrices=False)\n",
"v = vh.T\n",
"\n",
"n = 64\n",
"u, s, v = u[:,:n], s[:n], v[:,:n]\n",
"X = u@np.diag(s)\n",
"\n",
"X_embedded = TSNE(n_components=2).fit_transform(X)"
]
},
{
"cell_type": "code",
"execution_count": 202,
"id": "2d10f578",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, '64 признака - максимум')"
]
},
"execution_count": 202,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(6, 6))\n",
"\n",
"plt.scatter(X_embedded[:,0], X_embedded[:,1], c=y, cmap=\"tab10\")\n",
"plt.title(\"64 признака - максимум\")"
]
},
{
"cell_type": "code",
"execution_count": 203,
"id": "e69350cc",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/goloshch/.conda/envs/NPM/lib/python3.10/site-packages/sklearn/manifold/_t_sne.py:780: FutureWarning: The default initialization in TSNE will change from 'random' to 'pca' in 1.2.\n",
" warnings.warn(\n",
"/Users/goloshch/.conda/envs/NPM/lib/python3.10/site-packages/sklearn/manifold/_t_sne.py:790: FutureWarning: The default learning rate in TSNE will change from 200.0 to 'auto' in 1.2.\n",
" warnings.warn(\n"
]
}
],
"source": [
"u, s, vh = svd(A, full_matrices=False)\n",
"v = vh.T\n",
"\n",
"n = 8\n",
"u, s, v = u[:,:n], s[:n], v[:,:n]\n",
"X = u@np.diag(s)\n",
"\n",
"X_embedded = TSNE(n_components=2).fit_transform(X)"
]
},
{
"cell_type": "code",
"execution_count": 204,
"id": "27756893",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, '8 признаков')"
]
},
"execution_count": 204,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(6, 6))\n",
"\n",
"plt.scatter(X_embedded[:,0], X_embedded[:,1], c=y, cmap=\"tab10\", s=20)\n",
"plt.title(\"8 признаков\")"
]
},
{
"cell_type": "markdown",
"id": "97f13c17",
"metadata": {},
"source": [
"__Вывод:__\n",
"\n",
"- Разложение по 2 компонентам грубовато. Видно, что есть какие-то зачатки кластеризации, но компонент явно недостаточно\n",
"\n",
"\n",
"- Разложение по 8 компонентам даёт хороший результат. С помощью t-SNE можно \"спроектировать\" признаки в двумерное (латентное)пространство, построить кластеры\n",
"\n",
"\n",
"- SVD/PCA помогают снизить размерность задачи "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
}