From e57c0fc5e7e49ff3eee000e59367ee1893aabfb2 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Wed, 1 Jan 2020 19:57:12 +0100 Subject: [PATCH] some update of pca --- doc/pub/DimRed/html/._DimRed-bs018.html | 8 ++++---- doc/pub/DimRed/html/DimRed-reveal.html | 8 ++++---- doc/pub/DimRed/html/DimRed-solarized.html | 8 ++++---- doc/pub/DimRed/html/DimRed.html | 8 ++++---- doc/pub/DimRed/ipynb/DimRed.ipynb | 8 ++++---- doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz | Bin 190 -> 191 bytes doc/pub/DimRed/pdf/DimRed-minted.pdf | Bin 262834 -> 263267 bytes doc/src/DimRed/DimRed.do.txt | 9 +++++---- 8 files changed, 25 insertions(+), 24 deletions(-) diff --git a/doc/pub/DimRed/html/._DimRed-bs018.html b/doc/pub/DimRed/html/._DimRed-bs018.html index 4686a77d7..1dc23b946 100644 --- a/doc/pub/DimRed/html/._DimRed-bs018.html +++ b/doc/pub/DimRed/html/._DimRed-bs018.html @@ -258,7 +258,7 @@ $$ When you are done with these steps, print out \( \mu_n \) to verify it is close to \( \mu \) and plot your mean centered data to verify it is centered at the origin! Compare your code with the functionality from Scikit-Learn discussed above. -The following code elements perform these operations using pandas or your own functionality for doing so. +The following code elements perform these operations using pandas or using our own functionality for doing so. The latter, using numpy is rather simply through the mean() function.

@@ -277,7 +277,7 @@ Alternatively, you could also have used the functions we discussed earlier for s That is, we could have used the StandardScaler function in Scikit-Learn, a function which ensures that for each feature/predictor we study the mean value is zero and the variance is one (every column in the design/feature -matrix). +matrix). You would then not get the same results, since we divide by the variance. For diagonal covariance matrix elements will then be one, while the non-diagonal ones will be divided by \( 2\sqrt{2} \) for our specific case.

Compute the sample covariance

@@ -319,11 +319,11 @@ following tasks: $$ \begin{equation*} -x_i \approx \tilde{x}_i := \mu_n + \langle x_i, v_0 \rangle v_0 +x_i \approx \tilde{x}_i = \mu_n + \langle x_i, v_0 \rangle v_0 \end{equation*} $$ -where \( v_0 \) is the first principal component. What do you observe? +where \( v_0 \) is the first principal component.

Collecting all these steps we can write our own PCA function and diff --git a/doc/pub/DimRed/html/DimRed-reveal.html b/doc/pub/DimRed/html/DimRed-reveal.html index dff77c4d9..d40e41dbd 100644 --- a/doc/pub/DimRed/html/DimRed-reveal.html +++ b/doc/pub/DimRed/html/DimRed-reveal.html @@ -1068,7 +1068,7 @@ $$ When you are done with these steps, print out \( \mu_n \) to verify it is close to \( \mu \) and plot your mean centered data to verify it is centered at the origin! Compare your code with the functionality from Scikit-Learn discussed above. -The following code elements perform these operations using pandas or your own functionality for doing so. +The following code elements perform these operations using pandas or using our own functionality for doing so. The latter, using numpy is rather simply through the mean() function.

@@ -1087,7 +1087,7 @@ Alternatively, you could also have used the functions we discussed earlier for s That is, we could have used the StandardScaler function in Scikit-Learn, a function which ensures that for each feature/predictor we study the mean value is zero and the variance is one (every column in the design/feature -matrix). +matrix). You would then not get the same results, since we divide by the variance. For diagonal covariance matrix elements will then be one, while the non-diagonal ones will be divided by \( 2\sqrt{2} \) for our specific case.

Compute the sample covariance

@@ -1131,12 +1131,12 @@ following tasks:

 
$$ \begin{equation*} -x_i \approx \tilde{x}_i := \mu_n + \langle x_i, v_0 \rangle v_0 +x_i \approx \tilde{x}_i = \mu_n + \langle x_i, v_0 \rangle v_0 \end{equation*} $$

 
-where \( v_0 \) is the first principal component. What do you observe? +where \( v_0 \) is the first principal component.

Collecting all these steps we can write our own PCA function and diff --git a/doc/pub/DimRed/html/DimRed-solarized.html b/doc/pub/DimRed/html/DimRed-solarized.html index ee3a4cc6f..a15038ff7 100644 --- a/doc/pub/DimRed/html/DimRed-solarized.html +++ b/doc/pub/DimRed/html/DimRed-solarized.html @@ -1044,7 +1044,7 @@ $$ When you are done with these steps, print out \( \mu_n \) to verify it is close to \( \mu \) and plot your mean centered data to verify it is centered at the origin! Compare your code with the functionality from Scikit-Learn discussed above. -The following code elements perform these operations using pandas or your own functionality for doing so. +The following code elements perform these operations using pandas or using our own functionality for doing so. The latter, using numpy is rather simply through the mean() function.

@@ -1063,7 +1063,7 @@ Alternatively, you could also have used the functions we discussed earlier for s That is, we could have used the StandardScaler function in Scikit-Learn, a function which ensures that for each feature/predictor we study the mean value is zero and the variance is one (every column in the design/feature -matrix). +matrix). You would then not get the same results, since we divide by the variance. For diagonal covariance matrix elements will then be one, while the non-diagonal ones will be divided by \( 2\sqrt{2} \) for our specific case.

Compute the sample covariance

@@ -1105,11 +1105,11 @@ following tasks: $$ \begin{equation*} -x_i \approx \tilde{x}_i := \mu_n + \langle x_i, v_0 \rangle v_0 +x_i \approx \tilde{x}_i = \mu_n + \langle x_i, v_0 \rangle v_0 \end{equation*} $$ -where \( v_0 \) is the first principal component. What do you observe? +where \( v_0 \) is the first principal component.

Collecting all these steps we can write our own PCA function and diff --git a/doc/pub/DimRed/html/DimRed.html b/doc/pub/DimRed/html/DimRed.html index 2e10a51a3..424c95f51 100644 --- a/doc/pub/DimRed/html/DimRed.html +++ b/doc/pub/DimRed/html/DimRed.html @@ -1049,7 +1049,7 @@ $$ When you are done with these steps, print out \( \mu_n \) to verify it is close to \( \mu \) and plot your mean centered data to verify it is centered at the origin! Compare your code with the functionality from Scikit-Learn discussed above. -The following code elements perform these operations using pandas or your own functionality for doing so. +The following code elements perform these operations using pandas or using our own functionality for doing so. The latter, using numpy is rather simply through the mean() function.

@@ -1068,7 +1068,7 @@ Alternatively, you could also have used the functions we discussed earlier for s That is, we could have used the StandardScaler function in Scikit-Learn, a function which ensures that for each feature/predictor we study the mean value is zero and the variance is one (every column in the design/feature -matrix). +matrix). You would then not get the same results, since we divide by the variance. For diagonal covariance matrix elements will then be one, while the non-diagonal ones will be divided by \( 2\sqrt{2} \) for our specific case.

Compute the sample covariance

@@ -1110,11 +1110,11 @@ following tasks: $$ \begin{equation*} -x_i \approx \tilde{x}_i := \mu_n + \langle x_i, v_0 \rangle v_0 +x_i \approx \tilde{x}_i = \mu_n + \langle x_i, v_0 \rangle v_0 \end{equation*} $$ -where \( v_0 \) is the first principal component. What do you observe? +where \( v_0 \) is the first principal component.

Collecting all these steps we can write our own PCA function and diff --git a/doc/pub/DimRed/ipynb/DimRed.ipynb b/doc/pub/DimRed/ipynb/DimRed.ipynb index c6bca2820..42b7a9f71 100644 --- a/doc/pub/DimRed/ipynb/DimRed.ipynb +++ b/doc/pub/DimRed/ipynb/DimRed.ipynb @@ -1161,7 +1161,7 @@ "When you are done with these steps, print out $\\mu_n$ to verify it is\n", "close to $\\mu$ and plot your mean centered data to verify it is\n", "centered at the origin! Compare your code with the functionality from **Scikit-Learn** discussed above.\n", - "The following code elements perform these operations using **pandas** or your own functionality for doing so." + "The following code elements perform these operations using **pandas** or using our own functionality for doing so. The latter, using **numpy** is rather simply through the **mean()** function." ] }, { @@ -1191,7 +1191,7 @@ "That is, we could have used the **StandardScaler** function in **Scikit-Learn**, a function which \n", "ensures that for each feature/predictor we study the mean value is\n", "zero and the variance is one (every column in the design/feature\n", - "matrix).\n", + "matrix). You would then not get the same results, since we divide by the variance. For diagonal covariance matrix elements will then be one, while the non-diagonal ones will be divided by $2\\sqrt{2}$ for our specific case.\n", "\n", "### Compute the sample covariance\n", "\n", @@ -1257,7 +1257,7 @@ "metadata": {}, "source": [ "$$\n", - "x_i \\approx \\tilde{x}_i := \\mu_n + \\langle x_i, v_0 \\rangle v_0\n", + "x_i \\approx \\tilde{x}_i = \\mu_n + \\langle x_i, v_0 \\rangle v_0\n", "$$" ] }, @@ -1265,7 +1265,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "where $v_0$ is the first principal component. What do you observe?\n", + "where $v_0$ is the first principal component. \n", "\n", "Collecting all these steps we can write our own PCA function and\n", "compare this with the functionality included in **Scikit-Learn**. \n", diff --git a/doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz b/doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz index 352fb2e04ed0179591134ed0fb84beb4760aaf00..3dcbbe279d3f4a50048718bdc8bc698ae30ff2c9 100644 GIT binary patch literal 191 zcmV;w06_mAiwFRG>kM811MSaC3c@fD2H>uHia9|^Op~sKcHu&h;ssKY+Ne!xl7hXx zeSoeMH${Yeo1bBZVWup$`MyZ}-AAiI2(dJUDKkdrM4P3aVN3xNh6rYqW+@;{#wr4| z-bpXL^W2W7G-s)u)Nkj;vAX`SXL$vl`6rHzaC|Ln6 zx6(`JJh#It^;v2s_1nIot*SoEnNNXd{)uC)9PAFguZ;$6yey5mK&F~PideP1EmIle$}6M!HEOLnS>Cuf`t>nE5Cp;39tihJzW@jT0OsLUQ~&?~ diff --git a/doc/pub/DimRed/pdf/DimRed-minted.pdf b/doc/pub/DimRed/pdf/DimRed-minted.pdf index 02e5a8671063f41105247ff963853d53de7521b0..d9bb19dfde48ca8dfa2072d8a7f8a51fa795e228 100644 GIT binary patch delta 30997 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 VO3MKShlOQhW`-pv7gG?2{Xc+Tphf@y delta 30474 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 diff --git a/doc/src/DimRed/DimRed.do.txt b/doc/src/DimRed/DimRed.do.txt index c4536868a..17ddc720e 100644 --- a/doc/src/DimRed/DimRed.do.txt +++ b/doc/src/DimRed/DimRed.do.txt @@ -812,7 +812,7 @@ and the mean-centered data $\bar{X} = \{ \bar{x}_1, \ldots, \bar{x}_n \}$ takes When you are done with these steps, print out $\mu_n$ to verify it is close to $\mu$ and plot your mean centered data to verify it is centered at the origin! Compare your code with the functionality from _Scikit-Learn_ discussed above. -The following code elements perform these operations using _pandas_ or your own functionality for doing so. +The following code elements perform these operations using _pandas_ or using our own functionality for doing so. The latter, using _numpy_ is rather simply through the _mean()_ function. !bc pycod df = pd.DataFrame(X) # Pandas does the centering for us @@ -828,7 +828,7 @@ Alternatively, you could also have used the functions we discussed earlier for s That is, we could have used the _StandardScaler_ function in _Scikit-Learn_, a function which ensures that for each feature/predictor we study the mean value is zero and the variance is one (every column in the design/feature -matrix). +matrix). You would then not get the same results, since we divide by the variance. For diagonal covariance matrix elements will then be one, while the non-diagonal ones will be divided by $2\sqrt{2}$ for our specific case. === Compute the sample covariance === @@ -860,12 +860,13 @@ following tasks: * We plot the mean centered data and lines along the first and second principal components * Then we project the mean centered data onto the first and second principal components, and plot the projected data. * Finally, we approximate the data as + !bt \begin{equation*} -x_i \approx \tilde{x}_i := \mu_n + \langle x_i, v_0 \rangle v_0 +x_i \approx \tilde{x}_i = \mu_n + \langle x_i, v_0 \rangle v_0 \end{equation*} !et -where $v_0$ is the first principal component. What do you observe? +where $v_0$ is the first principal component. Collecting all these steps we can write our own PCA function and compare this with the functionality included in _Scikit-Learn_.