From 1b8bf9954f16a47ee85c0f95ddf2848a86ec049f Mon Sep 17 00:00:00 2001 From: mhjensen Date: Thu, 17 Oct 2019 14:51:33 +0200 Subject: [PATCH] added PCA warm up --- doc/pub/DimRed/html/._DimRed-bs007.html | 32 +++++++---- doc/pub/DimRed/html/DimRed-reveal.html | 32 +++++++---- doc/pub/DimRed/html/DimRed-solarized.html | 32 +++++++---- doc/pub/DimRed/html/DimRed.html | 32 +++++++---- doc/pub/DimRed/ipynb/DimRed.ipynb | 34 ++++++++---- doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz | Bin 191 -> 191 bytes doc/pub/DimRed/pdf/DimRed-minted.pdf | Bin 203332 -> 203641 bytes doc/src/DimRed/DimRed.do.txt | 35 ++++++++---- doc/src/DimRed/PCAcancer.py | 53 +++++++++++++++++++ 9 files changed, 195 insertions(+), 55 deletions(-) create mode 100644 doc/src/DimRed/PCAcancer.py diff --git a/doc/pub/DimRed/html/._DimRed-bs007.html b/doc/pub/DimRed/html/._DimRed-bs007.html index 77e815491..4005925d3 100644 --- a/doc/pub/DimRed/html/._DimRed-bs007.html +++ b/doc/pub/DimRed/html/._DimRed-bs007.html @@ -143,6 +143,9 @@ MathJax.Hub.Config({

Why should we think of reducing the dimensionality

+

+In addition to the plot of the features, we study now also the covariance (or rather the correlation matrix). +We use also Pandas to compute the correlation matrix.

@@ -152,16 +155,19 @@ MathJax.Hub.Config({ from sklearn.datasets import load_breast_cancer from sklearn.linear_model import LogisticRegression cancer = load_breast_cancer() +import pandas as pd +# Making a data frame +cancerpd = pd.DataFrame(cancer.data, columns=cancer.feature_names) fig, axes = plt.subplots(15,2,figsize=(10,20)) -male = cancer.data[cancer.target == 0] -bene = cancer.data[cancer.target == 1] +malignant = cancer.data[cancer.target == 0] +benign = cancer.data[cancer.target == 1] ax = axes.ravel() for i in range(30): _, bins = np.histogram(cancer.data[:,i], bins =50) - ax[i].hist(male[:,i], bins = bins, alpha = 0.5) - ax[i].hist(bene[:,i], bins = bins, alpha = 0.5) + ax[i].hist(malignant[:,i], bins = bins, alpha = 0.5) + ax[i].hist(benign[:,i], bins = bins, alpha = 0.5) ax[i].set_title(cancer.feature_names[i]) ax[i].set_yticks(()) ax[0].set_xlabel("Feature magnitude") @@ -170,19 +176,27 @@ ax[0].le fig.tight_layout() plt.show() -# Set up training data +import seaborn as sns +correlation_matrix = cancerpd.corr().round(1) +# use the heatmap function from seaborn to plot the correlation matrix +# annot = True to print the values inside the square +sns.heatmap(data=correlation_matrix, annot=True) +plt.show() +#split into train and test and then scale thereafter X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -# Perform Logistic Regression +print(X_train.shape) +print(X_test.shape) + logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy: {:.2f}".format(logreg.score(X_test,y_test))) +print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) -# Scale data -from sklearn.preprocessing import StandardScaler +from sklearn.preprocessing import MinMaxScaler, StandardScaler scaler = StandardScaler() scaler.fit(X_train) 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))) diff --git a/doc/pub/DimRed/html/DimRed-reveal.html b/doc/pub/DimRed/html/DimRed-reveal.html index b6b87f510..c8b2d434c 100644 --- a/doc/pub/DimRed/html/DimRed-reveal.html +++ b/doc/pub/DimRed/html/DimRed-reveal.html @@ -420,6 +420,9 @@ logreg.fit(X_train_scaled, y_train)

Why should we think of reducing the dimensionality

+

+In addition to the plot of the features, we study now also the covariance (or rather the correlation matrix). +We use also Pandas to compute the correlation matrix.

@@ -429,16 +432,19 @@ logreg.fit(X_train_scaled, y_train) from sklearn.datasets import load_breast_cancer from sklearn.linear_model import LogisticRegression cancer = load_breast_cancer() +import pandas as pd +# Making a data frame +cancerpd = pd.DataFrame(cancer.data, columns=cancer.feature_names) fig, axes = plt.subplots(15,2,figsize=(10,20)) -male = cancer.data[cancer.target == 0] -bene = cancer.data[cancer.target == 1] +malignant = cancer.data[cancer.target == 0] +benign = cancer.data[cancer.target == 1] ax = axes.ravel() for i in range(30): _, bins = np.histogram(cancer.data[:,i], bins =50) - ax[i].hist(male[:,i], bins = bins, alpha = 0.5) - ax[i].hist(bene[:,i], bins = bins, alpha = 0.5) + ax[i].hist(malignant[:,i], bins = bins, alpha = 0.5) + ax[i].hist(benign[:,i], bins = bins, alpha = 0.5) ax[i].set_title(cancer.feature_names[i]) ax[i].set_yticks(()) ax[0].set_xlabel("Feature magnitude") @@ -447,19 +453,27 @@ ax[0].legend([& fig.tight_layout() plt.show() -# Set up training data +import seaborn as sns +correlation_matrix = cancerpd.corr().round(1) +# use the heatmap function from seaborn to plot the correlation matrix +# annot = True to print the values inside the square +sns.heatmap(data=correlation_matrix, annot=True) +plt.show() +#split into train and test and then scale thereafter X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -# Perform Logistic Regression +print(X_train.shape) +print(X_test.shape) + logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy: {:.2f}".format(logreg.score(X_test,y_test))) +print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) -# Scale data -from sklearn.preprocessing import StandardScaler +from sklearn.preprocessing import MinMaxScaler, StandardScaler scaler = StandardScaler() scaler.fit(X_train) 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))) diff --git a/doc/pub/DimRed/html/DimRed-solarized.html b/doc/pub/DimRed/html/DimRed-solarized.html index d722569c4..bca2cf49d 100644 --- a/doc/pub/DimRed/html/DimRed-solarized.html +++ b/doc/pub/DimRed/html/DimRed-solarized.html @@ -403,6 +403,9 @@ logreg.fit(X_train_scaled, y_train)

Why should we think of reducing the dimensionality

+

+In addition to the plot of the features, we study now also the covariance (or rather the correlation matrix). +We use also Pandas to compute the correlation matrix.

@@ -412,16 +415,19 @@ logreg.fit(X_train_scaled, y_train) from sklearn.datasets import load_breast_cancer from sklearn.linear_model import LogisticRegression cancer = load_breast_cancer() +import pandas as pd +# Making a data frame +cancerpd = pd.DataFrame(cancer.data, columns=cancer.feature_names) fig, axes = plt.subplots(15,2,figsize=(10,20)) -male = cancer.data[cancer.target == 0] -bene = cancer.data[cancer.target == 1] +malignant = cancer.data[cancer.target == 0] +benign = cancer.data[cancer.target == 1] ax = axes.ravel() for i in range(30): _, bins = np.histogram(cancer.data[:,i], bins =50) - ax[i].hist(male[:,i], bins = bins, alpha = 0.5) - ax[i].hist(bene[:,i], bins = bins, alpha = 0.5) + ax[i].hist(malignant[:,i], bins = bins, alpha = 0.5) + ax[i].hist(benign[:,i], bins = bins, alpha = 0.5) ax[i].set_title(cancer.feature_names[i]) ax[i].set_yticks(()) ax[0].set_xlabel("Feature magnitude") @@ -430,19 +436,27 @@ ax[0].legend([& fig.tight_layout() plt.show() -# Set up training data +import seaborn as sns +correlation_matrix = cancerpd.corr().round(1) +# use the heatmap function from seaborn to plot the correlation matrix +# annot = True to print the values inside the square +sns.heatmap(data=correlation_matrix, annot=True) +plt.show() +#split into train and test and then scale thereafter X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -# Perform Logistic Regression +print(X_train.shape) +print(X_test.shape) + logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy: {:.2f}".format(logreg.score(X_test,y_test))) +print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) -# Scale data -from sklearn.preprocessing import StandardScaler +from sklearn.preprocessing import MinMaxScaler, StandardScaler scaler = StandardScaler() scaler.fit(X_train) 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))) diff --git a/doc/pub/DimRed/html/DimRed.html b/doc/pub/DimRed/html/DimRed.html index aa6733c50..53607192d 100644 --- a/doc/pub/DimRed/html/DimRed.html +++ b/doc/pub/DimRed/html/DimRed.html @@ -408,6 +408,9 @@ logreg.fit(X_train_scaled, y_train)

Why should we think of reducing the dimensionality

+

+In addition to the plot of the features, we study now also the covariance (or rather the correlation matrix). +We use also Pandas to compute the correlation matrix.

@@ -417,16 +420,19 @@ logreg.fit(X_train_scaled, y_train) from sklearn.datasets import load_breast_cancer from sklearn.linear_model import LogisticRegression cancer = load_breast_cancer() +import pandas as pd +# Making a data frame +cancerpd = pd.DataFrame(cancer.data, columns=cancer.feature_names) fig, axes = plt.subplots(15,2,figsize=(10,20)) -male = cancer.data[cancer.target == 0] -bene = cancer.data[cancer.target == 1] +malignant = cancer.data[cancer.target == 0] +benign = cancer.data[cancer.target == 1] ax = axes.ravel() for i in range(30): _, bins = np.histogram(cancer.data[:,i], bins =50) - ax[i].hist(male[:,i], bins = bins, alpha = 0.5) - ax[i].hist(bene[:,i], bins = bins, alpha = 0.5) + ax[i].hist(malignant[:,i], bins = bins, alpha = 0.5) + ax[i].hist(benign[:,i], bins = bins, alpha = 0.5) ax[i].set_title(cancer.feature_names[i]) ax[i].set_yticks(()) ax[0].set_xlabel("Feature magnitude") @@ -435,19 +441,27 @@ ax[0].le fig.tight_layout() plt.show() -# Set up training data +import seaborn as sns +correlation_matrix = cancerpd.corr().round(1) +# use the heatmap function from seaborn to plot the correlation matrix +# annot = True to print the values inside the square +sns.heatmap(data=correlation_matrix, annot=True) +plt.show() +#split into train and test and then scale thereafter X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -# Perform Logistic Regression +print(X_train.shape) +print(X_test.shape) + logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy: {:.2f}".format(logreg.score(X_test,y_test))) +print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) -# Scale data -from sklearn.preprocessing import StandardScaler +from sklearn.preprocessing import MinMaxScaler, StandardScaler scaler = StandardScaler() scaler.fit(X_train) 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))) diff --git a/doc/pub/DimRed/ipynb/DimRed.ipynb b/doc/pub/DimRed/ipynb/DimRed.ipynb index c77b0241e..8bf7e3023 100644 --- a/doc/pub/DimRed/ipynb/DimRed.ipynb +++ b/doc/pub/DimRed/ipynb/DimRed.ipynb @@ -283,7 +283,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Why should we think of reducing the dimensionality" + "## Why should we think of reducing the dimensionality\n", + "\n", + "In addition to the plot of the features, we study now also the covariance (or rather the correlation matrix).\n", + "We use also **Pandas** to compute the correlation matrix." ] }, { @@ -300,16 +303,19 @@ "from sklearn.datasets import load_breast_cancer\n", "from sklearn.linear_model import LogisticRegression\n", "cancer = load_breast_cancer()\n", + "import pandas as pd\n", + "# Making a data frame\n", + "cancerpd = pd.DataFrame(cancer.data, columns=cancer.feature_names)\n", "\n", "fig, axes = plt.subplots(15,2,figsize=(10,20))\n", - "male = cancer.data[cancer.target == 0]\n", - "bene = cancer.data[cancer.target == 1]\n", + "malignant = cancer.data[cancer.target == 0]\n", + "benign = cancer.data[cancer.target == 1]\n", "ax = axes.ravel()\n", "\n", "for i in range(30):\n", " _, bins = np.histogram(cancer.data[:,i], bins =50)\n", - " ax[i].hist(male[:,i], bins = bins, alpha = 0.5)\n", - " ax[i].hist(bene[:,i], bins = bins, alpha = 0.5)\n", + " ax[i].hist(malignant[:,i], bins = bins, alpha = 0.5)\n", + " ax[i].hist(benign[:,i], bins = bins, alpha = 0.5)\n", " ax[i].set_title(cancer.feature_names[i])\n", " ax[i].set_yticks(())\n", "ax[0].set_xlabel(\"Feature magnitude\")\n", @@ -318,19 +324,27 @@ "fig.tight_layout()\n", "plt.show()\n", "\n", - "# Set up training data\n", + "import seaborn as sns\n", + "correlation_matrix = cancerpd.corr().round(1)\n", + "# use the heatmap function from seaborn to plot the correlation matrix\n", + "# annot = True to print the values inside the square\n", + "sns.heatmap(data=correlation_matrix, annot=True)\n", + "plt.show()\n", + "#split into train and test and then scale thereafter\n", "X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0)\n", - "# Perform Logistic Regression \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: {:.2f}\".format(logreg.score(X_test,y_test)))\n", + "print(\"Test set accuracy from Logistic Regression: {:.2f}\".format(logreg.score(X_test,y_test)))\n", "\n", - "# Scale data\n", - "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.preprocessing import MinMaxScaler, 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", "logreg.fit(X_train_scaled, y_train)\n", "print(\"Test set accuracy scaled data: {:.2f}\".format(logreg.score(X_test_scaled,y_test)))" ] diff --git a/doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz b/doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz index 1c12d631af37a73cc22d29072878ada09806858b..927742fa6b9f1a5d8eee5fac2400195dc970494e 100644 GIT binary patch delta 119 zcmV--0Eqv;0lxtTABzY8#AA^LQE1Fajwv8X5=sKV^-g-}tz%|9r8x^_g?c+Tj@9*t zJ7yZoM=Dm>Pg_E}hhhUBk}k ZlVPom!e2k*d7kHe?ExihtZM)W006AqGhhG! delta 119 zcmV--0Eqv;0lxtTABzY8N?wr$QD~$&Au%9Hk~9wh*E{K@w~m?dl;$jy73%HWI9Asm z_AIZ!GylY~krsA`!8KZe(oR%bU!ag}DR?BiK~=!Duu}_+xb@NqU}^xyxpY!1b`3kD ZPlmNN3V;2K=Xsv@wFlR=-K+oz001RmHSqud diff --git a/doc/pub/DimRed/pdf/DimRed-minted.pdf b/doc/pub/DimRed/pdf/DimRed-minted.pdf index 35d6907b07794fdf283d761aee40732ba9469c74..906b00f9f6cf87c0868b2a448b07c53c4317d0ce 100644 GIT binary patch delta 39223 zcmV)4K+3Rs z<1$m(=5e=4<3zzyvPn0o)^VN{o6P31(suKB-26AH`|X{|qh{RRX>FsfpO|R6aetde z^U&~cIyhN)*&;jACOSAA{JzZC$nnC-4U@0t)(t#;bf5hZ+2$iN^kKnw>jfKmklHcX z&%#u@$!&jq{0}OVl-JrA8>@nq8Jj8I-WiibA3%{qL;KTcH+K~rJNdrj3Ex%iTsJk2 z5*Xp(Uwu?+Z8s643LTfFx)AeF`G03W-F@GOe46%{cmQf7>DJ+%xIM7I~bQoQ?eW#Q;dHjWw`dZ26%dj;{58yygEOPNg=^ zujP#xIN&d%v#4JV49+67#f~sG^i%b za9lh%5xJ!BH6B?A^#oFkBX6!+UpJ02wT#-P+fN6k`<;Bd2A!Ad=sV$Ba=qj*>xX)L z4`ZVukD&{IK;D9z{SU4-GOObcE05H*@+^$Mq%0DZAF8(bvo0#m5`Vq1nT}H}2LC0o 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 delta 38953 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 Z1H8l`B$rSd10D-9I59E`B_%~qMhd)gd*c8A diff --git a/doc/src/DimRed/DimRed.do.txt b/doc/src/DimRed/DimRed.do.txt index 4fa0e2360..26cdddd72 100644 --- a/doc/src/DimRed/DimRed.do.txt +++ b/doc/src/DimRed/DimRed.do.txt @@ -251,6 +251,8 @@ print("Test set accuracy scaled data: {:.2f}".format(logreg.score(X_test_scaled, !split ===== Why should we think of reducing the dimensionality ===== +In addition to the plot of the features, we study now also the covariance (or rather the correlation matrix). +We use also _Pandas_ to compute the correlation matrix. !bc pycod import matplotlib.pyplot as plt import numpy as np @@ -258,16 +260,19 @@ from sklearn.model_selection import train_test_split from sklearn.datasets import load_breast_cancer from sklearn.linear_model import LogisticRegression cancer = load_breast_cancer() +import pandas as pd +# Making a data frame +cancerpd = pd.DataFrame(cancer.data, columns=cancer.feature_names) fig, axes = plt.subplots(15,2,figsize=(10,20)) -male = cancer.data[cancer.target == 0] -bene = cancer.data[cancer.target == 1] +malignant = cancer.data[cancer.target == 0] +benign = cancer.data[cancer.target == 1] ax = axes.ravel() for i in range(30): _, bins = np.histogram(cancer.data[:,i], bins =50) - ax[i].hist(male[:,i], bins = bins, alpha = 0.5) - ax[i].hist(bene[:,i], bins = bins, alpha = 0.5) + ax[i].hist(malignant[:,i], bins = bins, alpha = 0.5) + ax[i].hist(benign[:,i], bins = bins, alpha = 0.5) ax[i].set_title(cancer.feature_names[i]) ax[i].set_yticks(()) ax[0].set_xlabel("Feature magnitude") @@ -276,22 +281,34 @@ ax[0].legend(["Malignant", "Benign"], loc ="best") fig.tight_layout() plt.show() -# Set up training data +import seaborn as sns +correlation_matrix = cancerpd.corr().round(1) +# use the heatmap function from seaborn to plot the correlation matrix +# annot = True to print the values inside the square +sns.heatmap(data=correlation_matrix, annot=True) +plt.show() +#split into train and test and then scale thereafter X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0) -# Perform Logistic Regression +print(X_train.shape) +print(X_test.shape) + logreg = LogisticRegression() logreg.fit(X_train, y_train) -print("Test set accuracy: {:.2f}".format(logreg.score(X_test,y_test))) +print("Test set accuracy from Logistic Regression: {:.2f}".format(logreg.score(X_test,y_test))) -# Scale data -from sklearn.preprocessing import StandardScaler +from sklearn.preprocessing import MinMaxScaler, StandardScaler scaler = StandardScaler() scaler.fit(X_train) 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))) + + + + !ec diff --git a/doc/src/DimRed/PCAcancer.py b/doc/src/DimRed/PCAcancer.py new file mode 100644 index 000000000..b4983907e --- /dev/null +++ b/doc/src/DimRed/PCAcancer.py @@ -0,0 +1,53 @@ +import matplotlib.pyplot as plt +import numpy as np +from sklearn.model_selection import train_test_split +from sklearn.datasets import load_breast_cancer +from sklearn.linear_model import LogisticRegression +cancer = load_breast_cancer() +import pandas as pd + +cancerpd = pd.DataFrame(cancer.data, columns=cancer.feature_names) + +fig, axes = plt.subplots(15,2,figsize=(10,20)) +malignant = cancer.data[cancer.target == 0] +benign = cancer.data[cancer.target == 1] +ax = axes.ravel() + +for i in range(30): + _, bins = np.histogram(cancer.data[:,i], bins =50) + ax[i].hist(malignant[:,i], bins = bins, alpha = 0.5) + ax[i].hist(benign[:,i], bins = bins, alpha = 0.5) + ax[i].set_title(cancer.feature_names[i]) + ax[i].set_yticks(()) +ax[0].set_xlabel("Feature magnitude") +ax[0].set_ylabel("Frequency") +ax[0].legend(["Malignant", "Benign"], loc ="best") +fig.tight_layout() +plt.show() + +import seaborn as sns +correlation_matrix = cancerpd.corr().round(1) +# use the heatmap function from seaborn to plot the correlation matrix +# annot = True to print the values inside the square +sns.heatmap(data=correlation_matrix, annot=True) +plt.show() +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 +scaler = StandardScaler() +scaler.fit(X_train) +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))) + + + +