From 20d45a614229fdc805479f6ba4ca6dc1016f7956 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Fri, 25 Oct 2019 05:09:28 +0200 Subject: [PATCH] typos in dim red --- .../DecisionTrees/ipynb/DecisionTrees.ipynb | 137 +++++++++--------- doc/pub/DimRed/html/._DimRed-bs000.html | 2 +- doc/pub/DimRed/html/._DimRed-bs010.html | 2 +- doc/pub/DimRed/html/._DimRed-bs015.html | 2 +- doc/pub/DimRed/html/._DimRed-bs018.html | 4 +- doc/pub/DimRed/html/._DimRed-bs024.html | 24 +-- doc/pub/DimRed/html/DimRed-bs.html | 2 +- doc/pub/DimRed/html/DimRed-reveal.html | 33 ++--- doc/pub/DimRed/html/DimRed-solarized.html | 34 ++--- doc/pub/DimRed/html/DimRed.html | 34 ++--- doc/pub/DimRed/ipynb/DimRed.ipynb | 33 ++--- doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz | Bin 191 -> 190 bytes doc/pub/DimRed/pdf/DimRed-minted.pdf | Bin 253275 -> 253434 bytes doc/src/DimRed/DimRed.do.txt | 31 ++-- doc/src/DimRed/PCAcancer.py | 7 +- 15 files changed, 174 insertions(+), 171 deletions(-) diff --git a/doc/pub/DecisionTrees/ipynb/DecisionTrees.ipynb b/doc/pub/DecisionTrees/ipynb/DecisionTrees.ipynb index 43e094f05..fcf32553c 100644 --- a/doc/pub/DecisionTrees/ipynb/DecisionTrees.ipynb +++ b/doc/pub/DecisionTrees/ipynb/DecisionTrees.ipynb @@ -73,10 +73,39 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2nd degree coefficients:\n", + "zero power: 0.13863194714341454\n", + "first power: 0.12283305178044136\n", + "second power: -0.00026977980034777324\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "%matplotlib inline\n", "\n", @@ -484,9 +513,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def entropy(target_col):\n", @@ -584,9 +611,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from __future__ import division, print_function, unicode_literals\n", @@ -665,9 +690,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "np.random.seed(6)\n", @@ -702,9 +725,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Quadratic training set + noise\n", @@ -718,9 +739,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.tree import DecisionTreeRegressor\n", @@ -739,9 +758,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.tree import DecisionTreeRegressor\n", @@ -787,9 +804,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "tree_reg1 = DecisionTreeRegressor(random_state=42)\n", @@ -832,9 +847,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", @@ -940,9 +953,7 @@ { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "heads_proba = 0.51\n", @@ -1015,9 +1026,7 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.ensemble import RandomForestClassifier\n", @@ -1042,9 +1051,7 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", @@ -1070,9 +1077,7 @@ { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import accuracy_score\n", @@ -1086,9 +1091,7 @@ { "cell_type": "code", "execution_count": 14, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "log_clf = LogisticRegression(random_state=42)\n", @@ -1104,9 +1107,7 @@ { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import accuracy_score\n", @@ -1127,9 +1128,7 @@ { "cell_type": "code", "execution_count": 16, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.ensemble import BaggingClassifier\n", @@ -1145,9 +1144,7 @@ { "cell_type": "code", "execution_count": 17, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import accuracy_score\n", @@ -1157,9 +1154,7 @@ { "cell_type": "code", "execution_count": 18, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "tree_clf = DecisionTreeClassifier(random_state=42)\n", @@ -1171,9 +1166,7 @@ { "cell_type": "code", "execution_count": 19, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from matplotlib.colors import ListedColormap\n", @@ -1214,9 +1207,7 @@ { "cell_type": "code", "execution_count": 20, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "bag_clf = BaggingClassifier(\n", @@ -1227,9 +1218,7 @@ { "cell_type": "code", "execution_count": 21, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "bag_clf.fit(X_train, y_train)\n", @@ -1251,7 +1240,25 @@ ] } ], - "metadata": {}, + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.4" + } + }, "nbformat": 4, "nbformat_minor": 2 } diff --git a/doc/pub/DimRed/html/._DimRed-bs000.html b/doc/pub/DimRed/html/._DimRed-bs000.html index bc9ba42c9..57753922e 100644 --- a/doc/pub/DimRed/html/._DimRed-bs000.html +++ b/doc/pub/DimRed/html/._DimRed-bs000.html @@ -203,7 +203,7 @@ MathJax.Hub.Config({
[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Oct 24, 2019

+

Oct 25, 2019


diff --git a/doc/pub/DimRed/html/._DimRed-bs010.html b/doc/pub/DimRed/html/._DimRed-bs010.html index 126d5627c..be8c93dfd 100644 --- a/doc/pub/DimRed/html/._DimRed-bs010.html +++ b/doc/pub/DimRed/html/._DimRed-bs010.html @@ -203,7 +203,7 @@ with \( \boldsymbol{X}\in {\mathbb{R}}^{n\times p} \), with the predictors/featu entries \( n \) being the row elements. We can rewrite the design/feature matrix in terms of its column vectors as $$ -\boldsymbol{X}=\begin{bmatrix} \boldsymbol{x}_0 & \boldsymbol{x}_0 & \boldsymbol{x}_0 & \dots & \dots & \boldsymbol{x}_{p-1}\end{bmatrix}, +\boldsymbol{X}=\begin{bmatrix} \boldsymbol{x}_0 & \boldsymbol{x}_1 & \boldsymbol{x}_2 & \dots & \dots & \boldsymbol{x}_{p-1}\end{bmatrix}, $$ with a given vector diff --git a/doc/pub/DimRed/html/._DimRed-bs015.html b/doc/pub/DimRed/html/._DimRed-bs015.html index 2339a6d61..865870b95 100644 --- a/doc/pub/DimRed/html/._DimRed-bs015.html +++ b/doc/pub/DimRed/html/._DimRed-bs015.html @@ -208,7 +208,7 @@ If we then compute the expectation value $$ \mathbb{E}[\boldsymbol{X}\boldsymbol{X}^T] = \frac{1}{n}\boldsymbol{X}\boldsymbol{X}^T=\begin{bmatrix} x_{00}^2+x_{01}^2 & x_{00}x_{10}+x_{01}x_{11}\\ -x_{10}x_{00}+x_{01}x_{11} & x_{10}^2+x_{11}^2\\ +x_{10}x_{00}+x_{11}x_{01} & x_{10}^2+x_{11}^2\\ \end{bmatrix}, $$ diff --git a/doc/pub/DimRed/html/._DimRed-bs018.html b/doc/pub/DimRed/html/._DimRed-bs018.html index 95d449567..e0bd197b8 100644 --- a/doc/pub/DimRed/html/._DimRed-bs018.html +++ b/doc/pub/DimRed/html/._DimRed-bs018.html @@ -193,10 +193,10 @@ each with dimension \( \boldsymbol{x}\in {\mathbb{R}}^{n} \).

We assume also that we have an orthogonal transformation \( \boldsymbol{W}\in {\mathbb{R}}^{p\times p} \). We define the reconstruction error (which is similar to the mean squared error we have seen before) as $$ -J(\boldsymbol{W},\boldsymbol{Z}) = \frac{1}{n}\sum_i (\boldsymbol{x}_i - \overline{\boldsymbol{x}_i})^2, +J(\boldsymbol{W},\boldsymbol{Z}) = \frac{1}{n}\sum_i (\boldsymbol{x}_i - \overline{\boldsymbol{x}}_i)^2, $$ -with \( \overline{\boldsymbol{x}_i} = \boldsymbol{W}\boldsymbol{z}_i \), where \( \boldsymbol{z}_i \) is a row vector with dimension \( {\mathbb{R}}^{n} \) of the matrix +with \( \overline{\boldsymbol{x}}_i = \boldsymbol{W}\boldsymbol{z}_i \), where \( \boldsymbol{z}_i \) is a row vector with dimension \( {\mathbb{R}}^{n} \) of the matrix \( \boldsymbol{Z}\in{\mathbb{R}}^{p\times n} \). When doing PCA we want to reduce this dimensionality.

diff --git a/doc/pub/DimRed/html/._DimRed-bs024.html b/doc/pub/DimRed/html/._DimRed-bs024.html index 7d840e6fb..534db1781 100644 --- a/doc/pub/DimRed/html/._DimRed-bs024.html +++ b/doc/pub/DimRed/html/._DimRed-bs024.html @@ -185,7 +185,8 @@ MathJax.Hub.Config({

Back to the Cancer Data

-We can now repeat the above but applied to real data, in this case our breat cancer data. +We can now repeat the above but applied to real data, in this case our breast cancer data. +Here we compute performance scores on the training data using logistic regression.

@@ -197,31 +198,30 @@ We can now repeat the above but applied to real data, in this case our breat can cancer = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -print(X_train.shape) -print(X_test.shape) logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) - -from sklearn.preprocessing import MinMaxScaler, StandardScaler +print("Train set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_train,y_train))) +# We scale the data +from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) - +# Then perform again a log reg fit logreg.fit(X_train_scaled, y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X_test_scaled,y_test))) - +print("Train set accuracy scaled data: {:.2f}".format(logreg.score(X_train_scaled,y_train))) #thereafter we do a PCA with Scikit-learn from sklearn.decomposition import PCA pca = PCA(n_components = 2) X2D_train = pca.fit_transform(X_train_scaled) -X2D_test = pca.fit_transform(X_test_scaled) - +# and finally compute the log reg fit and the score on the training data logreg.fit(X2D_train,y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X2D_test,y_test))) +print("Train set accuracy scaled and PCA data: {:.2f}".format(logreg.score(X2D_train,y_train))) +

+We see that our training data after the PCA decomposition has a performance similar to the non-scaled data. +

diff --git a/doc/pub/DimRed/html/DimRed-bs.html b/doc/pub/DimRed/html/DimRed-bs.html index bc9ba42c9..57753922e 100644 --- a/doc/pub/DimRed/html/DimRed-bs.html +++ b/doc/pub/DimRed/html/DimRed-bs.html @@ -203,7 +203,7 @@ MathJax.Hub.Config({

[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Oct 24, 2019

+

Oct 25, 2019


diff --git a/doc/pub/DimRed/html/DimRed-reveal.html b/doc/pub/DimRed/html/DimRed-reveal.html index b92b94473..291a8c15e 100644 --- a/doc/pub/DimRed/html/DimRed-reveal.html +++ b/doc/pub/DimRed/html/DimRed-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({

[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

 
-

Oct 24, 2019

+

Oct 25, 2019


@@ -617,7 +617,7 @@ entries \( n \) being the row elements. We can rewrite the design/feature matrix in terms of its column vectors as

 
$$ -\boldsymbol{X}=\begin{bmatrix} \boldsymbol{x}_0 & \boldsymbol{x}_0 & \boldsymbol{x}_0 & \dots & \dots & \boldsymbol{x}_{p-1}\end{bmatrix}, +\boldsymbol{X}=\begin{bmatrix} \boldsymbol{x}_0 & \boldsymbol{x}_1 & \boldsymbol{x}_2 & \dots & \dots & \boldsymbol{x}_{p-1}\end{bmatrix}, $$

 
@@ -870,7 +870,7 @@ If we then compute the expectation value $$ \mathbb{E}[\boldsymbol{X}\boldsymbol{X}^T] = \frac{1}{n}\boldsymbol{X}\boldsymbol{X}^T=\begin{bmatrix} x_{00}^2+x_{01}^2 & x_{00}x_{10}+x_{01}x_{11}\\ -x_{10}x_{00}+x_{01}x_{11} & x_{10}^2+x_{11}^2\\ +x_{10}x_{00}+x_{11}x_{01} & x_{10}^2+x_{11}^2\\ \end{bmatrix}, $$

 
@@ -999,11 +999,11 @@ each with dimension \( \boldsymbol{x}\in {\mathbb{R}}^{n} \). We assume also that we have an orthogonal transformation \( \boldsymbol{W}\in {\mathbb{R}}^{p\times p} \). We define the reconstruction error (which is similar to the mean squared error we have seen before) as

 
$$ -J(\boldsymbol{W},\boldsymbol{Z}) = \frac{1}{n}\sum_i (\boldsymbol{x}_i - \overline{\boldsymbol{x}_i})^2, +J(\boldsymbol{W},\boldsymbol{Z}) = \frac{1}{n}\sum_i (\boldsymbol{x}_i - \overline{\boldsymbol{x}}_i)^2, $$

 
-with \( \overline{\boldsymbol{x}_i} = \boldsymbol{W}\boldsymbol{z}_i \), where \( \boldsymbol{z}_i \) is a row vector with dimension \( {\mathbb{R}}^{n} \) of the matrix +with \( \overline{\boldsymbol{x}}_i = \boldsymbol{W}\boldsymbol{z}_i \), where \( \boldsymbol{z}_i \) is a row vector with dimension \( {\mathbb{R}}^{n} \) of the matrix \( \boldsymbol{Z}\in{\mathbb{R}}^{p\times n} \). When doing PCA we want to reduce this dimensionality.

@@ -1238,7 +1238,8 @@ variance that lies along the axis of each principal component.

Back to the Cancer Data

-We can now repeat the above but applied to real data, in this case our breat cancer data. +We can now repeat the above but applied to real data, in this case our breast cancer data. +Here we compute performance scores on the training data using logistic regression.

@@ -1250,31 +1251,29 @@ We can now repeat the above but applied to real data, in this case our breat can cancer = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -print(X_train.shape) -print(X_test.shape) logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) - -from sklearn.preprocessing import MinMaxScaler, StandardScaler +print("Train set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_train,y_train))) +# We scale the data +from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) - +# Then perform again a log reg fit logreg.fit(X_train_scaled, y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X_test_scaled,y_test))) - +print("Train set accuracy scaled data: {:.2f}".format(logreg.score(X_train_scaled,y_train))) #thereafter we do a PCA with Scikit-learn from sklearn.decomposition import PCA pca = PCA(n_components = 2) X2D_train = pca.fit_transform(X_train_scaled) -X2D_test = pca.fit_transform(X_test_scaled) - +# and finally compute the log reg fit and the score on the training data logreg.fit(X2D_train,y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X2D_test,y_test))) +print("Train set accuracy scaled and PCA data: {:.2f}".format(logreg.score(X2D_train,y_train))) +

+We see that our training data after the PCA decomposition has a performance similar to the non-scaled data.

diff --git a/doc/pub/DimRed/html/DimRed-solarized.html b/doc/pub/DimRed/html/DimRed-solarized.html index 2933d3b74..1708ad00f 100644 --- a/doc/pub/DimRed/html/DimRed-solarized.html +++ b/doc/pub/DimRed/html/DimRed-solarized.html @@ -163,7 +163,7 @@ MathJax.Hub.Config({
[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Oct 24, 2019

+

Oct 25, 2019












@@ -613,7 +613,7 @@ with \( \boldsymbol{X}\in {\mathbb{R}}^{n\times p} \), with the predictors/featu entries \( n \) being the row elements. We can rewrite the design/feature matrix in terms of its column vectors as $$ -\boldsymbol{X}=\begin{bmatrix} \boldsymbol{x}_0 & \boldsymbol{x}_0 & \boldsymbol{x}_0 & \dots & \dots & \boldsymbol{x}_{p-1}\end{bmatrix}, +\boldsymbol{X}=\begin{bmatrix} \boldsymbol{x}_0 & \boldsymbol{x}_1 & \boldsymbol{x}_2 & \dots & \dots & \boldsymbol{x}_{p-1}\end{bmatrix}, $$ with a given vector @@ -851,7 +851,7 @@ If we then compute the expectation value $$ \mathbb{E}[\boldsymbol{X}\boldsymbol{X}^T] = \frac{1}{n}\boldsymbol{X}\boldsymbol{X}^T=\begin{bmatrix} x_{00}^2+x_{01}^2 & x_{00}x_{10}+x_{01}x_{11}\\ -x_{10}x_{00}+x_{01}x_{11} & x_{10}^2+x_{11}^2\\ +x_{10}x_{00}+x_{11}x_{01} & x_{10}^2+x_{11}^2\\ \end{bmatrix}, $$ @@ -964,10 +964,10 @@ each with dimension \( \boldsymbol{x}\in {\mathbb{R}}^{n} \).

We assume also that we have an orthogonal transformation \( \boldsymbol{W}\in {\mathbb{R}}^{p\times p} \). We define the reconstruction error (which is similar to the mean squared error we have seen before) as $$ -J(\boldsymbol{W},\boldsymbol{Z}) = \frac{1}{n}\sum_i (\boldsymbol{x}_i - \overline{\boldsymbol{x}_i})^2, +J(\boldsymbol{W},\boldsymbol{Z}) = \frac{1}{n}\sum_i (\boldsymbol{x}_i - \overline{\boldsymbol{x}}_i)^2, $$ -with \( \overline{\boldsymbol{x}_i} = \boldsymbol{W}\boldsymbol{z}_i \), where \( \boldsymbol{z}_i \) is a row vector with dimension \( {\mathbb{R}}^{n} \) of the matrix +with \( \overline{\boldsymbol{x}}_i = \boldsymbol{W}\boldsymbol{z}_i \), where \( \boldsymbol{z}_i \) is a row vector with dimension \( {\mathbb{R}}^{n} \) of the matrix \( \boldsymbol{Z}\in{\mathbb{R}}^{p\times n} \). When doing PCA we want to reduce this dimensionality.

@@ -1177,7 +1177,8 @@ variance that lies along the axis of each principal component.









Back to the Cancer Data

-We can now repeat the above but applied to real data, in this case our breat cancer data. +We can now repeat the above but applied to real data, in this case our breast cancer data. +Here we compute performance scores on the training data using logistic regression.

@@ -1189,31 +1190,30 @@ We can now repeat the above but applied to real data, in this case our breat can cancer = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -print(X_train.shape) -print(X_test.shape) logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) - -from sklearn.preprocessing import MinMaxScaler, StandardScaler +print("Train set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_train,y_train))) +# We scale the data +from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) - +# Then perform again a log reg fit logreg.fit(X_train_scaled, y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X_test_scaled,y_test))) - +print("Train set accuracy scaled data: {:.2f}".format(logreg.score(X_train_scaled,y_train))) #thereafter we do a PCA with Scikit-learn from sklearn.decomposition import PCA pca = PCA(n_components = 2) X2D_train = pca.fit_transform(X_train_scaled) -X2D_test = pca.fit_transform(X_test_scaled) - +# and finally compute the log reg fit and the score on the training data logreg.fit(X2D_train,y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X2D_test,y_test))) +print("Train set accuracy scaled and PCA data: {:.2f}".format(logreg.score(X2D_train,y_train))) +

+We see that our training data after the PCA decomposition has a performance similar to the non-scaled data. +











diff --git a/doc/pub/DimRed/html/DimRed.html b/doc/pub/DimRed/html/DimRed.html index d6f859567..08bc92a30 100644 --- a/doc/pub/DimRed/html/DimRed.html +++ b/doc/pub/DimRed/html/DimRed.html @@ -168,7 +168,7 @@ MathJax.Hub.Config({

[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Oct 24, 2019

+

Oct 25, 2019












@@ -618,7 +618,7 @@ with \( \boldsymbol{X}\in {\mathbb{R}}^{n\times p} \), with the predictors/featu entries \( n \) being the row elements. We can rewrite the design/feature matrix in terms of its column vectors as $$ -\boldsymbol{X}=\begin{bmatrix} \boldsymbol{x}_0 & \boldsymbol{x}_0 & \boldsymbol{x}_0 & \dots & \dots & \boldsymbol{x}_{p-1}\end{bmatrix}, +\boldsymbol{X}=\begin{bmatrix} \boldsymbol{x}_0 & \boldsymbol{x}_1 & \boldsymbol{x}_2 & \dots & \dots & \boldsymbol{x}_{p-1}\end{bmatrix}, $$ with a given vector @@ -856,7 +856,7 @@ If we then compute the expectation value $$ \mathbb{E}[\boldsymbol{X}\boldsymbol{X}^T] = \frac{1}{n}\boldsymbol{X}\boldsymbol{X}^T=\begin{bmatrix} x_{00}^2+x_{01}^2 & x_{00}x_{10}+x_{01}x_{11}\\ -x_{10}x_{00}+x_{01}x_{11} & x_{10}^2+x_{11}^2\\ +x_{10}x_{00}+x_{11}x_{01} & x_{10}^2+x_{11}^2\\ \end{bmatrix}, $$ @@ -969,10 +969,10 @@ each with dimension \( \boldsymbol{x}\in {\mathbb{R}}^{n} \).

We assume also that we have an orthogonal transformation \( \boldsymbol{W}\in {\mathbb{R}}^{p\times p} \). We define the reconstruction error (which is similar to the mean squared error we have seen before) as $$ -J(\boldsymbol{W},\boldsymbol{Z}) = \frac{1}{n}\sum_i (\boldsymbol{x}_i - \overline{\boldsymbol{x}_i})^2, +J(\boldsymbol{W},\boldsymbol{Z}) = \frac{1}{n}\sum_i (\boldsymbol{x}_i - \overline{\boldsymbol{x}}_i)^2, $$ -with \( \overline{\boldsymbol{x}_i} = \boldsymbol{W}\boldsymbol{z}_i \), where \( \boldsymbol{z}_i \) is a row vector with dimension \( {\mathbb{R}}^{n} \) of the matrix +with \( \overline{\boldsymbol{x}}_i = \boldsymbol{W}\boldsymbol{z}_i \), where \( \boldsymbol{z}_i \) is a row vector with dimension \( {\mathbb{R}}^{n} \) of the matrix \( \boldsymbol{Z}\in{\mathbb{R}}^{p\times n} \). When doing PCA we want to reduce this dimensionality.

@@ -1182,7 +1182,8 @@ variance that lies along the axis of each principal component.









Back to the Cancer Data

-We can now repeat the above but applied to real data, in this case our breat cancer data. +We can now repeat the above but applied to real data, in this case our breast cancer data. +Here we compute performance scores on the training data using logistic regression.

@@ -1194,31 +1195,30 @@ We can now repeat the above but applied to real data, in this case our breat can cancer = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -print(X_train.shape) -print(X_test.shape) logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) - -from sklearn.preprocessing import MinMaxScaler, StandardScaler +print("Train set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_train,y_train))) +# We scale the data +from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) - +# Then perform again a log reg fit logreg.fit(X_train_scaled, y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X_test_scaled,y_test))) - +print("Train set accuracy scaled data: {:.2f}".format(logreg.score(X_train_scaled,y_train))) #thereafter we do a PCA with Scikit-learn from sklearn.decomposition import PCA pca = PCA(n_components = 2) X2D_train = pca.fit_transform(X_train_scaled) -X2D_test = pca.fit_transform(X_test_scaled) - +# and finally compute the log reg fit and the score on the training data logreg.fit(X2D_train,y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X2D_test,y_test))) +print("Train set accuracy scaled and PCA data: {:.2f}".format(logreg.score(X2D_train,y_train))) +

+We see that our training data after the PCA decomposition has a performance similar to the non-scaled data. +











diff --git a/doc/pub/DimRed/ipynb/DimRed.ipynb b/doc/pub/DimRed/ipynb/DimRed.ipynb index d42b6364e..700af1f72 100644 --- a/doc/pub/DimRed/ipynb/DimRed.ipynb +++ b/doc/pub/DimRed/ipynb/DimRed.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **Oct 24, 2019**\n", + "Date: **Oct 25, 2019**\n", "\n", "Copyright 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -561,7 +561,7 @@ "metadata": {}, "source": [ "$$\n", - "\\boldsymbol{X}=\\begin{bmatrix} \\boldsymbol{x}_0 & \\boldsymbol{x}_0 & \\boldsymbol{x}_0 & \\dots & \\dots & \\boldsymbol{x}_{p-1}\\end{bmatrix},\n", + "\\boldsymbol{X}=\\begin{bmatrix} \\boldsymbol{x}_0 & \\boldsymbol{x}_1 & \\boldsymbol{x}_2 & \\dots & \\dots & \\boldsymbol{x}_{p-1}\\end{bmatrix},\n", "$$" ] }, @@ -894,7 +894,7 @@ "$$\n", "\\mathbb{E}[\\boldsymbol{X}\\boldsymbol{X}^T] = \\frac{1}{n}\\boldsymbol{X}\\boldsymbol{X}^T=\\begin{bmatrix}\n", "x_{00}^2+x_{01}^2 & x_{00}x_{10}+x_{01}x_{11}\\\\\n", - "x_{10}x_{00}+x_{01}x_{11} & x_{10}^2+x_{11}^2\\\\\n", + "x_{10}x_{00}+x_{11}x_{01} & x_{10}^2+x_{11}^2\\\\\n", "\\end{bmatrix},\n", "$$" ] @@ -1064,7 +1064,7 @@ "metadata": {}, "source": [ "$$\n", - "J(\\boldsymbol{W},\\boldsymbol{Z}) = \\frac{1}{n}\\sum_i (\\boldsymbol{x}_i - \\overline{\\boldsymbol{x}_i})^2,\n", + "J(\\boldsymbol{W},\\boldsymbol{Z}) = \\frac{1}{n}\\sum_i (\\boldsymbol{x}_i - \\overline{\\boldsymbol{x}}_i)^2,\n", "$$" ] }, @@ -1072,7 +1072,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "with $\\overline{\\boldsymbol{x}_i} = \\boldsymbol{W}\\boldsymbol{z}_i$, where $\\boldsymbol{z}_i$ is a row vector with dimension ${\\mathbb{R}}^{n}$ of the matrix\n", + "with $\\overline{\\boldsymbol{x}}_i = \\boldsymbol{W}\\boldsymbol{z}_i$, where $\\boldsymbol{z}_i$ is a row vector with dimension ${\\mathbb{R}}^{n}$ of the matrix\n", "$\\boldsymbol{Z}\\in{\\mathbb{R}}^{p\\times n}$. When doing PCA we want to reduce this dimensionality. \n", "\n", "The PCA theorem states that minimizing the above reconstruction error corresponds to setting $\\boldsymbol{W}=\\boldsymbol{S}$, the orthogonal matrix which diagonalizes the empirical covariance(correlation) matrix. The optimal low-dimensional encoding of the data is then given by a set of vectors $\\boldsymbol{z}_i$ with at most $l$ vectors, with $l << p$, defined by the orthogonal projection of the data onto the columns spanned by the eigenvectors of the covariance(correlations matrix).\n", @@ -1433,7 +1433,8 @@ "variance that lies along the axis of each principal component. \n", "\n", "## Back to the Cancer Data\n", - "We can now repeat the above but applied to real data, in this case our breat cancer data." + "We can now repeat the above but applied to real data, in this case our breast cancer data.\n", + "Here we compute performance scores on the training data using logistic regression." ] }, { @@ -1452,36 +1453,34 @@ "cancer = load_breast_cancer()\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0)\n", - "print(X_train.shape)\n", - "print(X_test.shape)\n", "\n", "logreg = LogisticRegression()\n", "logreg.fit(X_train, y_train)\n", - "print(\"Test set accuracy from Logistic Regression: {:.2f}\".format(logreg.score(X_test,y_test)))\n", - "\n", - "from sklearn.preprocessing import MinMaxScaler, StandardScaler\n", + "print(\"Train set accuracy from Logistic Regression: {:.2f}\".format(logreg.score(X_train,y_train)))\n", + "# We scale the data\n", + "from sklearn.preprocessing import StandardScaler\n", "scaler = StandardScaler()\n", "scaler.fit(X_train)\n", "X_train_scaled = scaler.transform(X_train)\n", "X_test_scaled = scaler.transform(X_test)\n", - "\n", + "# Then perform again a log reg fit\n", "logreg.fit(X_train_scaled, y_train)\n", - "print(\"Test set accuracy scaled data: {:.2f}\".format(logreg.score(X_test_scaled,y_test)))\n", - "\n", + "print(\"Train set accuracy scaled data: {:.2f}\".format(logreg.score(X_train_scaled,y_train)))\n", "#thereafter we do a PCA with Scikit-learn\n", "from sklearn.decomposition import PCA\n", "pca = PCA(n_components = 2)\n", "X2D_train = pca.fit_transform(X_train_scaled)\n", - "X2D_test = pca.fit_transform(X_test_scaled)\n", - "\n", + "# and finally compute the log reg fit and the score on the training data\t\n", "logreg.fit(X2D_train,y_train)\n", - "print(\"Test set accuracy scaled data: {:.2f}\".format(logreg.score(X2D_test,y_test)))" + "print(\"Train set accuracy scaled and PCA data: {:.2f}\".format(logreg.score(X2D_train,y_train)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "We see that our training data after the PCA decomposition has a performance similar to the non-scaled data. \n", + "\n", "## More on the PCA\n", "\n", "Instead of arbitrarily choosing the number of dimensions to reduce down to, it is generally preferable to\n", diff --git a/doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz b/doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz index 2b7fcb7fc2372bf54a61b9182d6690c94f3cec9c..cb7d0f3ef45648511fd83d24751f006e56622ffb 100644 GIT binary patch literal 190 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

Oc19>`}0?|Fx| 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 diff --git a/doc/src/DimRed/DimRed.do.txt b/doc/src/DimRed/DimRed.do.txt index d8ad23a89..a8de47b75 100644 --- a/doc/src/DimRed/DimRed.do.txt +++ b/doc/src/DimRed/DimRed.do.txt @@ -421,7 +421,7 @@ entries $n$ being the row elements. We can rewrite the design/feature matrix in terms of its column vectors as !bt \[ -\bm{X}=\begin{bmatrix} \bm{x}_0 & \bm{x}_0 & \bm{x}_0 & \dots & \dots & \bm{x}_{p-1}\end{bmatrix}, +\bm{X}=\begin{bmatrix} \bm{x}_0 & \bm{x}_1 & \bm{x}_2 & \dots & \dots & \bm{x}_{p-1}\end{bmatrix}, \] !et with a given vector @@ -649,7 +649,7 @@ If we then compute the expectation value \[ \mathbb{E}[\bm{X}\bm{X}^T] = \frac{1}{n}\bm{X}\bm{X}^T=\begin{bmatrix} x_{00}^2+x_{01}^2 & x_{00}x_{10}+x_{01}x_{11}\\ -x_{10}x_{00}+x_{01}x_{11} & x_{10}^2+x_{11}^2\\ +x_{10}x_{00}+x_{11}x_{01} & x_{10}^2+x_{11}^2\\ \end{bmatrix}, \] !et @@ -750,10 +750,10 @@ each with dimension $\bm{x}\in {\mathbb{R}}^{n}$. We assume also that we have an orthogonal transformation $\bm{W}\in {\mathbb{R}}^{p\times p}$. We define the reconstruction error (which is similar to the mean squared error we have seen before) as !bt \[ -J(\bm{W},\bm{Z}) = \frac{1}{n}\sum_i (\bm{x}_i - \overline{\bm{x}_i})^2, +J(\bm{W},\bm{Z}) = \frac{1}{n}\sum_i (\bm{x}_i - \overline{\bm{x}}_i)^2, \] !et -with $\overline{\bm{x}_i} = \bm{W}\bm{z}_i$, where $\bm{z}_i$ is a row vector with dimension ${\mathbb{R}}^{n}$ of the matrix +with $\overline{\bm{x}}_i = \bm{W}\bm{z}_i$, where $\bm{z}_i$ is a row vector with dimension ${\mathbb{R}}^{n}$ of the matrix $\bm{Z}\in{\mathbb{R}}^{p\times n}$. When doing PCA we want to reduce this dimensionality. The PCA theorem states that minimizing the above reconstruction error corresponds to setting $\bm{W}=\bm{S}$, the orthogonal matrix which diagonalizes the empirical covariance(correlation) matrix. The optimal low-dimensional encoding of the data is then given by a set of vectors $\bm{z}_i$ with at most $l$ vectors, with $l << p$, defined by the orthogonal projection of the data onto the columns spanned by the eigenvectors of the covariance(correlations matrix). @@ -951,7 +951,8 @@ variance that lies along the axis of each principal component. !split ===== Back to the Cancer Data ===== -We can now repeat the above but applied to real data, in this case our breat cancer data. +We can now repeat the above but applied to real data, in this case our breast cancer data. +Here we compute performance scores on the training data using logistic regression. !bc pycod import matplotlib.pyplot as plt import numpy as np @@ -961,32 +962,30 @@ from sklearn.linear_model import LogisticRegression cancer = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -print(X_train.shape) -print(X_test.shape) logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) - -from sklearn.preprocessing import MinMaxScaler, StandardScaler +print("Train set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_train,y_train))) +# We scale the data +from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) - +# Then perform again a log reg fit logreg.fit(X_train_scaled, y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X_test_scaled,y_test))) - +print("Train set accuracy scaled data: {:.2f}".format(logreg.score(X_train_scaled,y_train))) #thereafter we do a PCA with Scikit-learn from sklearn.decomposition import PCA pca = PCA(n_components = 2) X2D_train = pca.fit_transform(X_train_scaled) -X2D_test = pca.fit_transform(X_test_scaled) - +# and finally compute the log reg fit and the score on the training data logreg.fit(X2D_train,y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X2D_test,y_test))) +print("Train set accuracy scaled and PCA data: {:.2f}".format(logreg.score(X2D_train,y_train))) + !ec +We see that our training data after the PCA decomposition has a performance similar to the non-scaled data. !split ===== More on the PCA ===== diff --git a/doc/src/DimRed/PCAcancer.py b/doc/src/DimRed/PCAcancer.py index b2e267cf4..10aa6023e 100644 --- a/doc/src/DimRed/PCAcancer.py +++ b/doc/src/DimRed/PCAcancer.py @@ -23,7 +23,7 @@ print(X_test.shape) logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) +print("Train set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_train,y_train))) from sklearn.preprocessing import MinMaxScaler, StandardScaler scaler = StandardScaler() @@ -32,13 +32,12 @@ X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) logreg.fit(X_train_scaled, y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X_test_scaled,y_test))) +print("Train set accuracy scaled data: {:.2f}".format(logreg.score(X_train_scaled,y_train))) #thereafter we do a PCA with Scikit-learn from sklearn.decomposition import PCA pca = PCA(n_components = 2) X2D_train = pca.fit_transform(X_train_scaled) -X2D_test = pca.fit_transform(X_test_scaled) logreg.fit(X2D_train,y_train) -print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X2D_test,y_test))) +print("Train set accuracy scaled and PCA data: {:.2f}".format(logreg.score(X2D_train,y_train)))