From 05c0090fd82e71fd1cf10951afe0eede6fd33196 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Thu, 5 Sep 2019 13:42:18 +0200 Subject: [PATCH] Added material to slides --- .../Regression/html/._Regression-bs042.html | 5 +++++ .../Regression/html/._Regression-bs044.html | 2 +- .../Regression/html/Regression-reveal.html | 7 ++++++- .../Regression/html/Regression-solarized.html | 7 ++++++- doc/pub/Regression/html/Regression.html | 7 ++++++- doc/pub/Regression/ipynb/Regression.ipynb | 7 ++++++- .../ipynb/ipynb-Regression-src.tar.gz | Bin 211 -> 212 bytes doc/pub/Regression/pdf/Regression-minted.pdf | Bin 453646 -> 453864 bytes doc/src/Regression/Regression.do.txt | 7 ++++++- 9 files changed, 36 insertions(+), 6 deletions(-) diff --git a/doc/pub/Regression/html/._Regression-bs042.html b/doc/pub/Regression/html/._Regression-bs042.html index 5aed6efbe..525941a4c 100644 --- a/doc/pub/Regression/html/._Regression-bs042.html +++ b/doc/pub/Regression/html/._Regression-bs042.html @@ -407,9 +407,14 @@ MathJax.Hub.Config({ numpy and scipy.linalg at the cost of being slower. ''' U, s, VT = np.linalg.svd(A) +# print('test U') +# print( (np.transpose(U) @ U - U @np.transpose(U))) +# print('test VT') +# print( (np.transpose(VT) @ VT - VT @np.transpose(VT))) print(U) print(s) print(VT) + D = np.zeros((len(U),len(VT))) for i in range(0,len(VT)): D[i,i]=s[i] diff --git a/doc/pub/Regression/html/._Regression-bs044.html b/doc/pub/Regression/html/._Regression-bs044.html index 932067660..3f96d2e2e 100644 --- a/doc/pub/Regression/html/._Regression-bs044.html +++ b/doc/pub/Regression/html/._Regression-bs044.html @@ -409,7 +409,7 @@ with \( \boldsymbol{U}\in {\mathbb{R}}^{n\times n} \), \( \boldsymbol{\Sigma}\in and \( \boldsymbol{V}\in {\mathbb{R}}^{p\times p} \).

-We have \( \boldsymbol{U}^T\boldsymbol{U}=\boldsymbol{I} \) and \( \boldsymbol{V}^T\boldsymbol{V}=\boldsymbol{V}\boldsymbol{V}^T=\boldsymbol{I} \). +The matrices \( \boldsymbol{U} \) and \( \boldsymbol{V} \) are unitary/orthonormal matrices, that is in case the matrices are real we have \( \boldsymbol{U}^T\boldsymbol{U}=\boldsymbol{U}\boldsymbol{U}^T=\boldsymbol{I} \) and \( \boldsymbol{V}^T\boldsymbol{V}=\boldsymbol{V}\boldsymbol{V}^T=\boldsymbol{I} \).

diff --git a/doc/pub/Regression/html/Regression-reveal.html b/doc/pub/Regression/html/Regression-reveal.html index fb956bca5..8d6fb0c6d 100644 --- a/doc/pub/Regression/html/Regression-reveal.html +++ b/doc/pub/Regression/html/Regression-reveal.html @@ -2035,9 +2035,14 @@ Similarly, Mehta et a numpy and scipy.linalg at the cost of being slower. ''' U, s, VT = np.linalg.svd(A) +# print('test U') +# print( (np.transpose(U) @ U - U @np.transpose(U))) +# print('test VT') +# print( (np.transpose(VT) @ VT - VT @np.transpose(VT))) print(U) print(s) print(VT) + D = np.zeros((len(U),len(VT))) for i in range(0,len(VT)): D[i,i]=s[i] @@ -2104,7 +2109,7 @@ with \( \boldsymbol{U}\in {\mathbb{R}}^{n\times n} \), \( \boldsymbol{\Sigma}\in and \( \boldsymbol{V}\in {\mathbb{R}}^{p\times p} \).

-We have \( \boldsymbol{U}^T\boldsymbol{U}=\boldsymbol{I} \) and \( \boldsymbol{V}^T\boldsymbol{V}=\boldsymbol{V}\boldsymbol{V}^T=\boldsymbol{I} \). +The matrices \( \boldsymbol{U} \) and \( \boldsymbol{V} \) are unitary/orthonormal matrices, that is in case the matrices are real we have \( \boldsymbol{U}^T\boldsymbol{U}=\boldsymbol{U}\boldsymbol{U}^T=\boldsymbol{I} \) and \( \boldsymbol{V}^T\boldsymbol{V}=\boldsymbol{V}\boldsymbol{V}^T=\boldsymbol{I} \). diff --git a/doc/pub/Regression/html/Regression-solarized.html b/doc/pub/Regression/html/Regression-solarized.html index 5f4d11cdd..76339995a 100644 --- a/doc/pub/Regression/html/Regression-solarized.html +++ b/doc/pub/Regression/html/Regression-solarized.html @@ -2039,9 +2039,14 @@ Similarly, Mehta et a numpy and scipy.linalg at the cost of being slower. ''' U, s, VT = np.linalg.svd(A) +# print('test U') +# print( (np.transpose(U) @ U - U @np.transpose(U))) +# print('test VT') +# print( (np.transpose(VT) @ VT - VT @np.transpose(VT))) print(U) print(s) print(VT) + D = np.zeros((len(U),len(VT))) for i in range(0,len(VT)): D[i,i]=s[i] @@ -2106,7 +2111,7 @@ with \( \boldsymbol{U}\in {\mathbb{R}}^{n\times n} \), \( \boldsymbol{\Sigma}\in and \( \boldsymbol{V}\in {\mathbb{R}}^{p\times p} \).

-We have \( \boldsymbol{U}^T\boldsymbol{U}=\boldsymbol{I} \) and \( \boldsymbol{V}^T\boldsymbol{V}=\boldsymbol{V}\boldsymbol{V}^T=\boldsymbol{I} \). +The matrices \( \boldsymbol{U} \) and \( \boldsymbol{V} \) are unitary/orthonormal matrices, that is in case the matrices are real we have \( \boldsymbol{U}^T\boldsymbol{U}=\boldsymbol{U}\boldsymbol{U}^T=\boldsymbol{I} \) and \( \boldsymbol{V}^T\boldsymbol{V}=\boldsymbol{V}\boldsymbol{V}^T=\boldsymbol{I} \).











diff --git a/doc/pub/Regression/html/Regression.html b/doc/pub/Regression/html/Regression.html index d34f9242f..636ef6656 100644 --- a/doc/pub/Regression/html/Regression.html +++ b/doc/pub/Regression/html/Regression.html @@ -2044,9 +2044,14 @@ Similarly,
Mehta et a numpy and scipy.linalg at the cost of being slower. ''' U, s, VT = np.linalg.svd(A) +# print('test U') +# print( (np.transpose(U) @ U - U @np.transpose(U))) +# print('test VT') +# print( (np.transpose(VT) @ VT - VT @np.transpose(VT))) print(U) print(s) print(VT) + D = np.zeros((len(U),len(VT))) for i in range(0,len(VT)): D[i,i]=s[i] @@ -2111,7 +2116,7 @@ with \( \boldsymbol{U}\in {\mathbb{R}}^{n\times n} \), \( \boldsymbol{\Sigma}\in and \( \boldsymbol{V}\in {\mathbb{R}}^{p\times p} \).

-We have \( \boldsymbol{U}^T\boldsymbol{U}=\boldsymbol{I} \) and \( \boldsymbol{V}^T\boldsymbol{V}=\boldsymbol{V}\boldsymbol{V}^T=\boldsymbol{I} \). +The matrices \( \boldsymbol{U} \) and \( \boldsymbol{V} \) are unitary/orthonormal matrices, that is in case the matrices are real we have \( \boldsymbol{U}^T\boldsymbol{U}=\boldsymbol{U}\boldsymbol{U}^T=\boldsymbol{I} \) and \( \boldsymbol{V}^T\boldsymbol{V}=\boldsymbol{V}\boldsymbol{V}^T=\boldsymbol{I} \).











diff --git a/doc/pub/Regression/ipynb/Regression.ipynb b/doc/pub/Regression/ipynb/Regression.ipynb index 248e57928..ca9ad0e44 100644 --- a/doc/pub/Regression/ipynb/Regression.ipynb +++ b/doc/pub/Regression/ipynb/Regression.ipynb @@ -2676,9 +2676,14 @@ " numpy and scipy.linalg at the cost of being slower.\n", " '''\n", " U, s, VT = np.linalg.svd(A)\n", + "# print('test U')\n", + "# print( (np.transpose(U) @ U - U @np.transpose(U)))\n", + "# print('test VT')\n", + "# print( (np.transpose(VT) @ VT - VT @np.transpose(VT)))\n", " print(U)\n", " print(s)\n", " print(VT)\n", + "\n", " D = np.zeros((len(U),len(VT)))\n", " for i in range(0,len(VT)):\n", " D[i,i]=s[i]\n", @@ -2748,7 +2753,7 @@ "with $\\boldsymbol{U}\\in {\\mathbb{R}}^{n\\times n}$, $\\boldsymbol{\\Sigma}\\in {\\mathbb{R}}^{n\\times p}$\n", "and $\\boldsymbol{V}\\in {\\mathbb{R}}^{p\\times p}$.\n", "\n", - "We have $\\boldsymbol{U}^T\\boldsymbol{U}=\\boldsymbol{I}$ and $\\boldsymbol{V}^T\\boldsymbol{V}=\\boldsymbol{V}\\boldsymbol{V}^T=\\boldsymbol{I}$.\n", + "The matrices $\\boldsymbol{U}$ and $\\boldsymbol{V}$ are unitary/orthonormal matrices, that is in case the matrices are real we have $\\boldsymbol{U}^T\\boldsymbol{U}=\\boldsymbol{U}\\boldsymbol{U}^T=\\boldsymbol{I}$ and $\\boldsymbol{V}^T\\boldsymbol{V}=\\boldsymbol{V}\\boldsymbol{V}^T=\\boldsymbol{I}$.\n", "\n", "## Spectral Decomposition of the OLS\n", "\n", diff --git a/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz b/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz index 46c73b7265f167e8f0154b5d2eed00429fa83a2a..0f0f4be9e7e25f588a3a6057ac6aa8cd8ab71ace 100644 GIT binary patch literal 212 zcmV;_04x6=iwFRK^l)7O1MSbvY63A7hGExU#kqpvWMjVw~p~$R&JYI z&OV09?}o6JF1maeOLAX(pPbk*i0wLG#*Y1%?o!+)`BC;$Mt$7E#y literal 211 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 delta 8448 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 gLDSam(J#mdKs