From 7fbad909722060fe142a43563fc0c2fbc8a4600d Mon Sep 17 00:00:00 2001 From: mhjensen Date: Tue, 22 Oct 2019 14:47:55 +0200 Subject: [PATCH] further update, added also --- doc/pub/DimRed/html/._DimRed-bs000.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs001.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs002.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs003.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs004.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs005.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs006.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs007.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs008.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs009.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs010.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs011.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs012.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs013.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs014.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs015.html | 48 ++++---- doc/pub/DimRed/html/._DimRed-bs016.html | 61 ++++++---- doc/pub/DimRed/html/._DimRed-bs017.html | 79 ++++++++---- doc/pub/DimRed/html/._DimRed-bs018.html | 50 ++++---- doc/pub/DimRed/html/._DimRed-bs019.html | 59 ++++----- doc/pub/DimRed/html/._DimRed-bs020.html | 80 +++++------- doc/pub/DimRed/html/._DimRed-bs021.html | 88 ++++++++------ doc/pub/DimRed/html/._DimRed-bs022.html | 82 +++++++------ doc/pub/DimRed/html/._DimRed-bs023.html | 77 +++++++----- doc/pub/DimRed/html/._DimRed-bs024.html | 63 +++++----- doc/pub/DimRed/html/._DimRed-bs025.html | 71 +++++------ doc/pub/DimRed/html/._DimRed-bs026.html | 77 +++++++----- doc/pub/DimRed/html/._DimRed-bs027.html | 121 +++++-------------- doc/pub/DimRed/html/DimRed-bs.html | 48 ++++---- doc/pub/DimRed/html/DimRed-reveal.html | 71 +++++++++-- doc/pub/DimRed/html/DimRed-solarized.html | 96 +++++++++++---- doc/pub/DimRed/html/DimRed.html | 96 +++++++++++---- doc/pub/DimRed/ipynb/DimRed.ipynb | 51 ++++++++ doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz | Bin 191 -> 191 bytes doc/pub/DimRed/pdf/DimRed-minted.pdf | Bin 242104 -> 245191 bytes doc/src/DimRed/DimRed.do.txt | 38 ++++++ doc/src/DimRed/mlpfranke.py | 68 +++++++++++ 37 files changed, 1245 insertions(+), 899 deletions(-) create mode 100644 doc/src/DimRed/mlpfranke.py diff --git a/doc/pub/DimRed/html/._DimRed-bs000.html b/doc/pub/DimRed/html/._DimRed-bs000.html index 701588387..3df86eb8f 100644 --- a/doc/pub/DimRed/html/._DimRed-bs000.html +++ b/doc/pub/DimRed/html/._DimRed-bs000.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -221,7 +223,7 @@ MathJax.Hub.Config({
  • 9
  • 10
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs001.html b/doc/pub/DimRed/html/._DimRed-bs001.html index 646de037e..6839f50c7 100644 --- a/doc/pub/DimRed/html/._DimRed-bs001.html +++ b/doc/pub/DimRed/html/._DimRed-bs001.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -221,7 +223,7 @@ data.
  • 10
  • 11
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs002.html b/doc/pub/DimRed/html/._DimRed-bs002.html index 7c58ae0a5..782040d1f 100644 --- a/doc/pub/DimRed/html/._DimRed-bs002.html +++ b/doc/pub/DimRed/html/._DimRed-bs002.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -220,7 +222,7 @@ ensures that all features are exactly between \( 0 \) and \( 1 \). The
  • 11
  • 12
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs003.html b/doc/pub/DimRed/html/._DimRed-bs003.html index ecf0fec24..b8f2304bf 100644 --- a/doc/pub/DimRed/html/._DimRed-bs003.html +++ b/doc/pub/DimRed/html/._DimRed-bs003.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -223,7 +225,7 @@ techniques.
  • 12
  • 13
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs004.html b/doc/pub/DimRed/html/._DimRed-bs004.html index 2b3d89d72..254726105 100644 --- a/doc/pub/DimRed/html/._DimRed-bs004.html +++ b/doc/pub/DimRed/html/._DimRed-bs004.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -298,7 +300,7 @@ svm.fit(X_train_scaled, y_train)
  • 13
  • 14
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs005.html b/doc/pub/DimRed/html/._DimRed-bs005.html index a13ceb4de..80b6dd521 100644 --- a/doc/pub/DimRed/html/._DimRed-bs005.html +++ b/doc/pub/DimRed/html/._DimRed-bs005.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -248,7 +250,7 @@ svm.fit(X_train_scaled, y_train)
  • 14
  • 15
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs006.html b/doc/pub/DimRed/html/._DimRed-bs006.html index e396fae0d..4bde00dfe 100644 --- a/doc/pub/DimRed/html/._DimRed-bs006.html +++ b/doc/pub/DimRed/html/._DimRed-bs006.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -227,7 +229,7 @@ logreg.fit(X_train_scaled, y_train)
  • 15
  • 16
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs007.html b/doc/pub/DimRed/html/._DimRed-bs007.html index 7ca7af225..4c99798ec 100644 --- a/doc/pub/DimRed/html/._DimRed-bs007.html +++ b/doc/pub/DimRed/html/._DimRed-bs007.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -282,7 +284,7 @@ applications.
  • 16
  • 17
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs008.html b/doc/pub/DimRed/html/._DimRed-bs008.html index beaf953d2..29b273d42 100644 --- a/doc/pub/DimRed/html/._DimRed-bs008.html +++ b/doc/pub/DimRed/html/._DimRed-bs008.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -212,7 +214,7 @@ We have a data set defined by a design/feature matrix \( \boldsymbol{X} \) (see
  • 17
  • 18
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs009.html b/doc/pub/DimRed/html/._DimRed-bs009.html index 1c5a84437..0633ff21e 100644 --- a/doc/pub/DimRed/html/._DimRed-bs009.html +++ b/doc/pub/DimRed/html/._DimRed-bs009.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -261,7 +263,7 @@ In the above example this is the function we constructed using pandas.
  • 18
  • 19
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs010.html b/doc/pub/DimRed/html/._DimRed-bs010.html index e04ad4053..d35499f33 100644 --- a/doc/pub/DimRed/html/._DimRed-bs010.html +++ b/doc/pub/DimRed/html/._DimRed-bs010.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -256,7 +258,7 @@ $$
  • 19
  • 20
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs011.html b/doc/pub/DimRed/html/._DimRed-bs011.html index 726ca148a..651f77edc 100644 --- a/doc/pub/DimRed/html/._DimRed-bs011.html +++ b/doc/pub/DimRed/html/._DimRed-bs011.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -244,7 +246,7 @@ C = np.c
  • 20
  • 21
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs012.html b/doc/pub/DimRed/html/._DimRed-bs012.html index e500f7540..8a75b27c5 100644 --- a/doc/pub/DimRed/html/._DimRed-bs012.html +++ b/doc/pub/DimRed/html/._DimRed-bs012.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -246,7 +248,7 @@ The above procedure with numpy can be made more compact if we use pand
  • 21
  • 22
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs013.html b/doc/pub/DimRed/html/._DimRed-bs013.html index af63c221c..aadce9ddc 100644 --- a/doc/pub/DimRed/html/._DimRed-bs013.html +++ b/doc/pub/DimRed/html/._DimRed-bs013.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -228,7 +230,7 @@ We expand this model to the Franke function discussed above.
  • 22
  • 23
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs014.html b/doc/pub/DimRed/html/._DimRed-bs014.html index 14792183d..847ed1de2 100644 --- a/doc/pub/DimRed/html/._DimRed-bs014.html +++ b/doc/pub/DimRed/html/._DimRed-bs014.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -264,7 +266,7 @@ matrix.
  • 23
  • 24
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs015.html b/doc/pub/DimRed/html/._DimRed-bs015.html index 39697340b..5a51c64a1 100644 --- a/doc/pub/DimRed/html/._DimRed-bs015.html +++ b/doc/pub/DimRed/html/._DimRed-bs015.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -244,7 +246,7 @@ It is easy to generalize this to a matrix \( \boldsymbol{X}\in {\mathbb{R}}^{n\t
  • 24
  • 25
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs016.html b/doc/pub/DimRed/html/._DimRed-bs016.html index 35f34ef52..ba3075c88 100644 --- a/doc/pub/DimRed/html/._DimRed-bs016.html +++ b/doc/pub/DimRed/html/._DimRed-bs016.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -213,6 +215,19 @@ $$ In the derivation of the PCA theorem we will assume that the eigenvalues are ordered in descending order, that is \( \lambda_0 > \lambda_1 > \dots > \lambda_{p-1} \). +

    +The eigenvalues tell us then how much we need to stretch the +corresponding eigenvectors. Dimensions with large eigenvalues have +thus large variations (large variance) and define therefore useful +dimensions. The data points are more spread out in the direction of +these eigenvectors. Smaller eigenvalues mean on the other hand that +the corresponding eigenvectors are shrunk accordingly and the data +points are tightly bunched together and there is not much variation in +these specific directions. Hopefully then we could leave it out +dimensions where the eigenvalues are very small. If \( p \) is very large, +we could then aim at reducing \( p \) to \( l < < p \) and handle only \( l \) +features/predictors. +

    @@ -239,7 +254,7 @@ In the derivation of the PCA theorem we will assume that the eigenvalues are ord

  • 25
  • 26
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs017.html b/doc/pub/DimRed/html/._DimRed-bs017.html index 91740f7d8..91074e516 100644 --- a/doc/pub/DimRed/html/._DimRed-bs017.html +++ b/doc/pub/DimRed/html/._DimRed-bs017.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -178,7 +180,36 @@ MathJax.Hub.Config({ -

    Classical PCA Theorem

    +

    The Algorithm before theorem

    + +

    +Here's how we would proceed in setting up the algorithm for the PCA, see also discussion below here. + +

    + +$$ +\boldsymbol{X}=\begin{bmatrix} +x_{0,0} & x_{0,1} & x_{0,2}& \dots & \dots x_{0,p-1}\\ +x_{1,0} & x_{1,1} & x_{1,2}& \dots & \dots x_{1,p-1}\\ +x_{2,0} & x_{2,1} & x_{2,2}& \dots & \dots x_{2,p-1}\\ +\dots & \dots & \dots & \dots \dots & \dots \\ +x_{n-2,0} & x_{n-2,1} & x_{n-2,2}& \dots & \dots x_{n-2,p-1}\\ +x_{n-1,0} & x_{n-1,1} & x_{n-1,2}& \dots & \dots x_{n-1,p-1}\\ +\end{bmatrix}, +$$ + + + + +After this we ask ourselves how do we prove the link between the maximum variance and the feature reduction.

    @@ -206,7 +237,7 @@ MathJax.Hub.Config({

  • 26
  • 27
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs018.html b/doc/pub/DimRed/html/._DimRed-bs018.html index ee77ea4d8..0e27b1a8b 100644 --- a/doc/pub/DimRed/html/._DimRed-bs018.html +++ b/doc/pub/DimRed/html/._DimRed-bs018.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -178,7 +180,7 @@ MathJax.Hub.Config({ -

    Prof of the PCA Theorem

    +

    Classical PCA Theorem

    @@ -205,6 +207,8 @@ MathJax.Hub.Config({

  • 26
  • 27
  • 28
  • +
  • ...
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs019.html b/doc/pub/DimRed/html/._DimRed-bs019.html index 30d2d97ef..57a96ad5b 100644 --- a/doc/pub/DimRed/html/._DimRed-bs019.html +++ b/doc/pub/DimRed/html/._DimRed-bs019.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -178,18 +180,8 @@ MathJax.Hub.Config({ -

    Getting started with PCA

    +

    Prof of the PCA Theorem

    -

    - - -

    # Now add PCA
    -from sklearn.decomposition import PCA
    -pca = PCA(n_components = 2)
    -pca.fit(X_train_scaled)
    -
    -X_pca = pca.transform(X_train_scaled)
    -

    @@ -214,6 +206,7 @@ X_pca = pca.26

  • 27
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs020.html b/doc/pub/DimRed/html/._DimRed-bs020.html index e5413a86c..5c47f1973 100644 --- a/doc/pub/DimRed/html/._DimRed-bs020.html +++ b/doc/pub/DimRed/html/._DimRed-bs020.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -178,38 +180,17 @@ MathJax.Hub.Config({ -

    Principal Component Analysis

    -
    -
    -

    -Principal Component Analysis (PCA) is by far the most popular dimensionality reduction algorithm. -First it identifies the hyperplane that lies closest to the data, and then it projects the data onto it. +

    Getting started with PCA

    -

    -The following Python code uses NumPy’s svd() function to obtain all the principal components of the -training set, then extracts the first two principal components

    -

    X_centered = X - X.mean(axis=0)
    -U, s, V = np.linalg.svd(X_centered)
    -c1 = V.T[:, 0]
    -c2 = V.T[:, 1]
    -
    -

    -PCA assumes that the dataset is centered around the origin. Scikit-Learn’s PCA classes take care of centering -the data for you. However, if you implement PCA yourself (as in the preceding example), or if you use other libraries, don’t -forget to center the data first. +

    # Now add PCA
    +from sklearn.decomposition import PCA
    +pca = PCA(n_components = 2)
    +pca.fit(X_train_scaled)
     
    -

    -Once you have identified all the principal components, you can reduce the dimensionality of the dataset -down to \( d \) dimensions by projecting it onto the hyperplane defined by the first \( d \) principal components. -Selecting this hyperplane ensures that the projection will preserve as much variance as possible. -

    - - -

    W2 = V.T[:, :2]
    -X2D = X_centered.dot(W2)
    +X_pca = pca.transform(X_train_scaled)
     

    @@ -234,6 +215,7 @@ X2D = X_centered26

  • 27
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs021.html b/doc/pub/DimRed/html/._DimRed-bs021.html index 01c56dc53..ede6d1c65 100644 --- a/doc/pub/DimRed/html/._DimRed-bs021.html +++ b/doc/pub/DimRed/html/._DimRed-bs021.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -176,36 +178,41 @@ MathJax.Hub.Config({

     

     

     

    - + -

    PCA and scikit-learn

    +

    Principal Component Analysis

    +
    +
    +

    +Principal Component Analysis (PCA) is by far the most popular dimensionality reduction algorithm. +First it identifies the hyperplane that lies closest to the data, and then it projects the data onto it.

    -Scikit-Learn’s PCA class implements PCA using SVD decomposition just like we did before. The -following code applies PCA to reduce the dimensionality of the dataset down to two dimensions (note -that it automatically takes care of centering the data): +The following Python code uses NumPy’s svd() function to obtain all the principal components of the +training set, then extracts the first two principal components

    -

    from sklearn.decomposition import PCA
    -pca = PCA(n_components = 2)
    -X2D = pca.fit_transform(X)
    +
    X_centered = X - X.mean(axis=0)
    +U, s, V = np.linalg.svd(X_centered)
    +c1 = V.T[:, 0]
    +c2 = V.T[:, 1]
     

    -After fitting the PCA transformer to the dataset, you can access the principal components using the -components variable (note that it contains the PCs as horizontal vectors, so, for example, the first -principal component is equal to +PCA assumes that the dataset is centered around the origin. Scikit-Learn’s PCA classes take care of centering +the data for you. However, if you implement PCA yourself (as in the preceding example), or if you use other libraries, don’t +forget to center the data first. + +

    +Once you have identified all the principal components, you can reduce the dimensionality of the dataset +down to \( d \) dimensions by projecting it onto the hyperplane defined by the first \( d \) principal components. +Selecting this hyperplane ensures that the projection will preserve as much variance as possible.

    -

    pca.components_.T[:, 0]).
    +
    W2 = V.T[:, :2]
    +X2D = X_centered.dot(W2)
     
    -

    -Another very useful piece of information is the explained variance ratio of each principal component, -available via the \( explained\_variance\_ratio \) variable. It indicates the proportion of the dataset’s -variance that lies along the axis of each principal component. -More material to come here. -

    @@ -228,6 +235,7 @@ More material to come here.

  • 26
  • 27
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs022.html b/doc/pub/DimRed/html/._DimRed-bs022.html index afb778037..2b727e37e 100644 --- a/doc/pub/DimRed/html/._DimRed-bs022.html +++ b/doc/pub/DimRed/html/._DimRed-bs022.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -176,35 +178,36 @@ MathJax.Hub.Config({

     

     

     

    - + -

    More on the PCA

    +

    PCA and scikit-learn

    -Instead of arbitrarily choosing the number of dimensions to reduce down to, it is generally preferable to -choose the number of dimensions that add up to a sufficiently large portion of the variance (e.g., 95%). -Unless, of course, you are reducing dimensionality for data visualization — in that case you will -generally want to reduce the dimensionality down to 2 or 3. -The following code computes PCA without reducing dimensionality, then computes the minimum number -of dimensions required to preserve 95% of the training set’s variance: +Scikit-Learn’s PCA class implements PCA using SVD decomposition just like we did before. The +following code applies PCA to reduce the dimensionality of the dataset down to two dimensions (note +that it automatically takes care of centering the data):

    -

    pca = PCA()
    -pca.fit(X)
    -cumsum = np.cumsum(pca.explained_variance_ratio_)
    -d = np.argmax(cumsum >= 0.95) + 1
    +
    from sklearn.decomposition import PCA
    +pca = PCA(n_components = 2)
    +X2D = pca.fit_transform(X)
     

    -You could then set \( n\_components=d \) and run PCA again. However, there is a much better option: instead -of specifying the number of principal components you want to preserve, you can set \( n\_components \) to be -a float between 0.0 and 1.0, indicating the ratio of variance you wish to preserve: +After fitting the PCA transformer to the dataset, you can access the principal components using the +components variable (note that it contains the PCs as horizontal vectors, so, for example, the first +principal component is equal to

    -

    pca = PCA(n_components=0.95)
    -X_reduced = pca.fit_transform(X)
    +
    pca.components_.T[:, 0]).
     
    +

    +Another very useful piece of information is the explained variance ratio of each principal component, +available via the \( explained\_variance\_ratio \) variable. It indicates the proportion of the dataset’s +variance that lies along the axis of each principal component. +More material to come here. +

    @@ -226,6 +229,7 @@ X_reduced = pca

  • 26
  • 27
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs023.html b/doc/pub/DimRed/html/._DimRed-bs023.html index dbe918b73..72d6189cd 100644 --- a/doc/pub/DimRed/html/._DimRed-bs023.html +++ b/doc/pub/DimRed/html/._DimRed-bs023.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -178,15 +180,33 @@ MathJax.Hub.Config({ -

    Incremental PCA

    +

    More on the PCA

    -One problem with the preceding implementation of PCA is that it requires the whole training set to fit in -memory in order for the SVD algorithm to run. Fortunately, Incremental PCA (IPCA) algorithms have -been developed: you can split the training set into mini-batches and feed an IPCA algorithm one minibatch -at a time. This is useful for large training sets, and also to apply PCA online (i.e., on the fly, as new -instances arrive). +Instead of arbitrarily choosing the number of dimensions to reduce down to, it is generally preferable to +choose the number of dimensions that add up to a sufficiently large portion of the variance (e.g., 95%). +Unless, of course, you are reducing dimensionality for data visualization — in that case you will +generally want to reduce the dimensionality down to 2 or 3. +The following code computes PCA without reducing dimensionality, then computes the minimum number +of dimensions required to preserve 95% of the training set’s variance: +

    + +

    pca = PCA()
    +pca.fit(X)
    +cumsum = np.cumsum(pca.explained_variance_ratio_)
    +d = np.argmax(cumsum >= 0.95) + 1
    +
    +

    +You could then set \( n\_components=d \) and run PCA again. However, there is a much better option: instead +of specifying the number of principal components you want to preserve, you can set \( n\_components \) to be +a float between 0.0 and 1.0, indicating the ratio of variance you wish to preserve: +

    + + +

    pca = PCA(n_components=0.95)
    +X_reduced = pca.fit_transform(X)
    +

    @@ -207,6 +227,7 @@ instances arrive).

  • 26
  • 27
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs024.html b/doc/pub/DimRed/html/._DimRed-bs024.html index 471ff293c..9c87e99a1 100644 --- a/doc/pub/DimRed/html/._DimRed-bs024.html +++ b/doc/pub/DimRed/html/._DimRed-bs024.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -178,18 +180,14 @@ MathJax.Hub.Config({ -

    Randomized PCA

    +

    Incremental PCA

    -Scikit-Learn offers yet another option to perform PCA, called Randomized PCA. This is a stochastic -algorithm that quickly finds an approximation of the first d principal components. Its computational -complexity is \( O(m \times d^2)+O(d^3) \), instead of \( O(m \times n^2) + O(n^3) \), so it is dramatically faster than the -previous algorithms when \( d \) is much smaller than \( n \). - -

    -

    -
    - +One problem with the preceding implementation of PCA is that it requires the whole training set to fit in +memory in order for the SVD algorithm to run. Fortunately, Incremental PCA (IPCA) algorithms have +been developed: you can split the training set into mini-batches and feed an IPCA algorithm one minibatch +at a time. This is useful for large training sets, and also to apply PCA online (i.e., on the fly, as new +instances arrive).

    @@ -210,6 +208,7 @@ previous algorithms when \( d \) is much smaller than \( n \).

  • 26
  • 27
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs025.html b/doc/pub/DimRed/html/._DimRed-bs025.html index 1f84c5fec..8da2c7966 100644 --- a/doc/pub/DimRed/html/._DimRed-bs025.html +++ b/doc/pub/DimRed/html/._DimRed-bs025.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -178,28 +180,14 @@ MathJax.Hub.Config({ -

    Kernel PCA

    -
    -
    -

    +

    Randomized PCA

    -The kernel trick is a mathematical technique that implicitly maps instances into a -very high-dimensional space (called the feature space), enabling nonlinear classification and regression -with Support Vector Machines. Recall that a linear decision boundary in the high-dimensional feature -space corresponds to a complex nonlinear decision boundary in the original space. -It turns out that the same trick can be applied to PCA, making it possible to perform complex nonlinear -projections for dimensionality reduction. This is called Kernel PCA (kPCA). It is often good at -preserving clusters of instances after projection, or sometimes even unrolling datasets that lie close to a -twisted manifold. -For example, the following code uses Scikit-Learn’s KernelPCA class to perform kPCA with an -

    +Scikit-Learn offers yet another option to perform PCA, called Randomized PCA. This is a stochastic +algorithm that quickly finds an approximation of the first d principal components. Its computational +complexity is \( O(m \times d^2)+O(d^3) \), instead of \( O(m \times n^2) + O(n^3) \), so it is dramatically faster than the +previous algorithms when \( d \) is much smaller than \( n \). - -

    from sklearn.decomposition import KernelPCA
    -rbf_pca = KernelPCA(n_components = 2, kernel="rbf", gamma=0.04)
    -X_reduced = rbf_pca.fit_transform(X)
    -

    @@ -223,6 +211,7 @@ X_reduced = rbf_pca26
  • 27
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs026.html b/doc/pub/DimRed/html/._DimRed-bs026.html index c3bcffb10..52f5488e9 100644 --- a/doc/pub/DimRed/html/._DimRed-bs026.html +++ b/doc/pub/DimRed/html/._DimRed-bs026.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -178,14 +180,32 @@ MathJax.Hub.Config({ -

    LLE

    +

    Kernel PCA

    +
    +
    +

    -Locally Linear Embedding (LLE) is another very powerful nonlinear dimensionality reduction -(NLDR) technique. It is a Manifold Learning technique that does not rely on projections like the previous -algorithms. In a nutshell, LLE works by first measuring how each training instance linearly relates to its -closest neighbors (c.n.), and then looking for a low-dimensional representation of the training set where -these local relationships are best preserved (more details shortly). +The kernel trick is a mathematical technique that implicitly maps instances into a +very high-dimensional space (called the feature space), enabling nonlinear classification and regression +with Support Vector Machines. Recall that a linear decision boundary in the high-dimensional feature +space corresponds to a complex nonlinear decision boundary in the original space. +It turns out that the same trick can be applied to PCA, making it possible to perform complex nonlinear +projections for dimensionality reduction. This is called Kernel PCA (kPCA). It is often good at +preserving clusters of instances after projection, or sometimes even unrolling datasets that lie close to a +twisted manifold. +For example, the following code uses Scikit-Learn’s KernelPCA class to perform kPCA with an +

    + + +

    from sklearn.decomposition import KernelPCA
    +rbf_pca = KernelPCA(n_components = 2, kernel="rbf", gamma=0.04)
    +X_reduced = rbf_pca.fit_transform(X)
    +
    +

    +

    +
    +

    @@ -204,6 +224,7 @@ these local relationships are best preserved (more details shortly).

  • 26
  • 27
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/._DimRed-bs027.html b/doc/pub/DimRed/html/._DimRed-bs027.html index 6bb35afea..ca75ce89c 100644 --- a/doc/pub/DimRed/html/._DimRed-bs027.html +++ b/doc/pub/DimRed/html/._DimRed-bs027.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -178,77 +180,16 @@ MathJax.Hub.Config({ -

    Other techniques

    +

    LLE

    -There are many other dimensionality reduction techniques, several of which are available in Scikit-Learn. +Locally Linear Embedding (LLE) is another very powerful nonlinear dimensionality reduction +(NLDR) technique. It is a Manifold Learning technique that does not rely on projections like the previous +algorithms. In a nutshell, LLE works by first measuring how each training instance linearly relates to its +closest neighbors (c.n.), and then looking for a low-dimensional representation of the training set where +these local relationships are best preserved (more details shortly).

    -Here are some of the most popular: - -

      -
    • Multidimensional Scaling (MDS) reduces dimensionality while trying to preserve the distances between the instances.
    • -
    • Isomap creates a graph by connecting each instance to its nearest neighbors, then reduces dimensionality while trying to preserve the geodesic distances between the instances.
    • -
    • t-Distributed Stochastic Neighbor Embedding (t-SNE) reduces dimensionality while trying to keep similar instances close and dissimilar instances apart. It is mostly used for visualization, in particular to visualize clusters of instances in high-dimensional space (e.g., to visualize the MNIST images in 2D).
    • -
    • Linear Discriminant Analysis (LDA) is actually a classification algorithm, but during training it learns the most discriminative axes between the classes, and these axes can then be used to define a hyperplane onto which to project the data. The benefit is that the projection will keep classes as far apart as possible, so LDA is a good technique to reduce dimensionality before running another classification algorithm such as a Support Vector Machine (SVM) classifier discussed in the SVM lectures.
    • -
    - -Here are other examples where we use the DataFrame functionality to handle arrays, now with more interesting features for us, namely numbers. We set up a matrix -of dimensionality \( 10\times 5 \) and compute the mean value and standard deviation of each column. Similarly, we can perform mathematial operations like squaring the matrix elements and many other operations. -

    - - -

    import numpy as np
    -import pandas as pd
    -from IPython.display import display
    -np.random.seed(100)
    -# setting up a 10 x 5 matrix
    -rows = 10
    -cols = 5
    -a = np.random.randn(rows,cols)
    -df = pd.DataFrame(a)
    -display(df)
    -print(df.mean())
    -print(df.std())
    -display(df**2)
    -
    -

    -Thereafter we can select specific columns only and plot final results -

    - - -

    df.columns = ['First', 'Second', 'Third', 'Fourth', 'Fifth']
    -df.index = np.arange(10)
    -
    -display(df)
    -print(df['Second'].mean() )
    -print(df.info())
    -print(df.describe())
    -
    -from pylab import plt, mpl
    -plt.style.use('seaborn')
    -mpl.rcParams['font.family'] = 'serif'
    -
    -df.cumsum().plot(lw=2.0, figsize=(10,6))
    -plt.show()
    -
    -
    -df.plot.bar(figsize=(10,6), rot=15)
    -plt.show()
    -
    -

    -We can produce a \( 4\times 4 \) matrix -

    - - -

    b = np.arange(16).reshape((4,4))
    -print(b)
    -df1 = pd.DataFrame(b)
    -print(df1)
    -
    -

    -and many other operations. -

      @@ -264,6 +205,8 @@ and many other operations.
    • 26
    • 27
    • 28
    • +
    • 29
    • +
    • »
    diff --git a/doc/pub/DimRed/html/DimRed-bs.html b/doc/pub/DimRed/html/DimRed-bs.html index 701588387..3df86eb8f 100644 --- a/doc/pub/DimRed/html/DimRed-bs.html +++ b/doc/pub/DimRed/html/DimRed-bs.html @@ -88,17 +88,18 @@ Automatically generated HTML file from DocOnce source None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -152,17 +153,18 @@ MathJax.Hub.Config({
  • Correlation Matrix with Pandas and the Franke function
  • Rewriting the Covariance and/or Correlation Matrix
  • Towards the PCA theorem
  • -
  • Classical PCA Theorem
  • -
  • Prof of the PCA Theorem
  • -
  • Getting started with PCA
  • -
  • Principal Component Analysis
  • -
  • PCA and scikit-learn
  • -
  • More on the PCA
  • -
  • Incremental PCA
  • -
  • Randomized PCA
  • -
  • Kernel PCA
  • -
  • LLE
  • -
  • Other techniques
  • +
  • The Algorithm before the Theorem
  • +
  • Classical PCA Theorem
  • +
  • Prof of the PCA Theorem
  • +
  • Getting started with PCA
  • +
  • Principal Component Analysis
  • +
  • PCA and scikit-learn
  • +
  • More on the PCA
  • +
  • Incremental PCA
  • +
  • Randomized PCA
  • +
  • Kernel PCA
  • +
  • LLE
  • +
  • Other techniques
  • @@ -221,7 +223,7 @@ MathJax.Hub.Config({
  • 9
  • 10
  • ...
  • -
  • 28
  • +
  • 29
  • »
  • diff --git a/doc/pub/DimRed/html/DimRed-reveal.html b/doc/pub/DimRed/html/DimRed-reveal.html index d17f342fa..221d0834e 100644 --- a/doc/pub/DimRed/html/DimRed-reveal.html +++ b/doc/pub/DimRed/html/DimRed-reveal.html @@ -936,21 +936,70 @@ $$

    In the derivation of the PCA theorem we will assume that the eigenvalues are ordered in descending order, that is \( \lambda_0 > \lambda_1 > \dots > \lambda_{p-1} \). + +

    +The eigenvalues tell us then how much we need to stretch the +corresponding eigenvectors. Dimensions with large eigenvalues have +thus large variations (large variance) and define therefore useful +dimensions. The data points are more spread out in the direction of +these eigenvectors. Smaller eigenvalues mean on the other hand that +the corresponding eigenvectors are shrunk accordingly and the data +points are tightly bunched together and there is not much variation in +these specific directions. Hopefully then we could leave it out +dimensions where the eigenvalues are very small. If \( p \) is very large, +we could then aim at reducing \( p \) to \( l < < p \) and handle only \( l \) +features/predictors.

    -

    Classical PCA Theorem

    +

    The Algorithm before theorem

    + +

    +Here's how we would proceed in setting up the algorithm for the PCA, see also discussion below here. + +

      +

    • Set up the datapoints for the design/feature matrix \( \boldsymbol{X} \) with \( \boldsymbol{X}\in {\mathbb{R}}^{n\times p} \), with the predictors/features \( p \) referring to the column numbers and the entries \( n \) being the row elements.
    • +
    +

     
    +$$ +\boldsymbol{X}=\begin{bmatrix} +x_{0,0} & x_{0,1} & x_{0,2}& \dots & \dots x_{0,p-1}\\ +x_{1,0} & x_{1,1} & x_{1,2}& \dots & \dots x_{1,p-1}\\ +x_{2,0} & x_{2,1} & x_{2,2}& \dots & \dots x_{2,p-1}\\ +\dots & \dots & \dots & \dots \dots & \dots \\ +x_{n-2,0} & x_{n-2,1} & x_{n-2,2}& \dots & \dots x_{n-2,p-1}\\ +x_{n-1,0} & x_{n-1,1} & x_{n-1,2}& \dots & \dots x_{n-1,p-1}\\ +\end{bmatrix}, +$$ +

     
    + + +

      +

    • Center the data by subtracting the mean value for each column. This leads to a new matrix \( \boldsymbol{X}\rightarrow \overline{\boldsymbol{X}} \).
    • +

    • Compute then the covariance/correlation matrix $\mathbb{E}[\overline{\boldsymbol{X}}\overline{\boldsymbol{X}}^T].
    • +

    • Find the eigenpairs of \( \boldsymbol{C} \) with eigenvalues \( [\lambda_0,\lambda_1,\dots,\lambda_{p-1}] \) and eigenvectors \( [\boldsymbol{s}_0,\boldsymbol{s}_1,\dots,\boldsymbol{s}_{p-1}] \).
    • +

    • Order the eigenvalue (and the eigenvectors accordingly) in order of decreasing eigenvalues.
    • +

    • Keep only those \( l \) eigenvalues larger than a selected threshold value, discarding thus \( p-l \) features since we expect small variations in the data here.
    • +
    +

    + +After this we ask ourselves how do we prove the link between the maximum variance and the feature reduction.

    -

    Prof of the PCA Theorem

    +

    Classical PCA Theorem

    -

    Getting started with PCA

    +

    Prof of the PCA Theorem

    +
    + + +
    +

    Getting started with PCA

    @@ -966,7 +1015,7 @@ X_pca = pca.transform(X_train_scaled)

    -

    Principal Component Analysis

    +

    Principal Component Analysis

    @@ -1003,7 +1052,7 @@ X2D = X_centered.dot(W2)

    -

    PCA and scikit-learn

    +

    PCA and scikit-learn

    Scikit-Learn’s PCA class implements PCA using SVD decomposition just like we did before. The @@ -1034,7 +1083,7 @@ More material to come here.

    -

    More on the PCA

    +

    More on the PCA

    Instead of arbitrarily choosing the number of dimensions to reduce down to, it is generally preferable to @@ -1065,7 +1114,7 @@ X_reduced = pca.fit_transform(X)

    -

    Incremental PCA

    +

    Incremental PCA

    One problem with the preceding implementation of PCA is that it requires the whole training set to fit in @@ -1077,7 +1126,7 @@ instances arrive).

    -

    Randomized PCA

    +

    Randomized PCA

    Scikit-Learn offers yet another option to perform PCA, called Randomized PCA. This is a stochastic @@ -1091,7 +1140,7 @@ previous algorithms when \( d \) is much smaller than \( n \).

    -

    Kernel PCA

    +

    Kernel PCA

    @@ -1117,7 +1166,7 @@ X_reduced = rbf_pca.fit_transform(X)

    -

    LLE

    +

    LLE

    Locally Linear Embedding (LLE) is another very powerful nonlinear dimensionality reduction @@ -1129,7 +1178,7 @@ these local relationships are best preserved (more details shortly).

    -

    Other techniques

    +

    Other techniques

    There are many other dimensionality reduction techniques, several of which are available in Scikit-Learn. diff --git a/doc/pub/DimRed/html/DimRed-solarized.html b/doc/pub/DimRed/html/DimRed-solarized.html index 959e73c3b..006dc5c14 100644 --- a/doc/pub/DimRed/html/DimRed-solarized.html +++ b/doc/pub/DimRed/html/DimRed-solarized.html @@ -108,17 +108,18 @@ div { text-align: justify; text-justify: inter-word; } None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -903,19 +904,66 @@ In the derivation of the PCA theorem we will assume that the eigenvalues are ord \( \lambda_0 > \lambda_1 > \dots > \lambda_{p-1} \).

    -









    - -

    Classical PCA Theorem

    +The eigenvalues tell us then how much we need to stretch the +corresponding eigenvectors. Dimensions with large eigenvalues have +thus large variations (large variance) and define therefore useful +dimensions. The data points are more spread out in the direction of +these eigenvectors. Smaller eigenvalues mean on the other hand that +the corresponding eigenvectors are shrunk accordingly and the data +points are tightly bunched together and there is not much variation in +these specific directions. Hopefully then we could leave it out +dimensions where the eigenvalues are very small. If \( p \) is very large, +we could then aim at reducing \( p \) to \( l < < p \) and handle only \( l \) +features/predictors.











    -

    Prof of the PCA Theorem

    +

    The Algorithm before theorem

    + +

    +Here's how we would proceed in setting up the algorithm for the PCA, see also discussion below here. + +

      +
    • Set up the datapoints for the design/feature matrix \( \boldsymbol{X} \) with \( \boldsymbol{X}\in {\mathbb{R}}^{n\times p} \), with the predictors/features \( p \) referring to the column numbers and the entries \( n \) being the row elements.
    • +
    + +$$ +\boldsymbol{X}=\begin{bmatrix} +x_{0,0} & x_{0,1} & x_{0,2}& \dots & \dots x_{0,p-1}\\ +x_{1,0} & x_{1,1} & x_{1,2}& \dots & \dots x_{1,p-1}\\ +x_{2,0} & x_{2,1} & x_{2,2}& \dots & \dots x_{2,p-1}\\ +\dots & \dots & \dots & \dots \dots & \dots \\ +x_{n-2,0} & x_{n-2,1} & x_{n-2,2}& \dots & \dots x_{n-2,p-1}\\ +x_{n-1,0} & x_{n-1,1} & x_{n-1,2}& \dots & \dots x_{n-1,p-1}\\ +\end{bmatrix}, +$$ + + +
      +
    • Center the data by subtracting the mean value for each column. This leads to a new matrix \( \boldsymbol{X}\rightarrow \overline{\boldsymbol{X}} \).
    • +
    • Compute then the covariance/correlation matrix $\mathbb{E}[\overline{\boldsymbol{X}}\overline{\boldsymbol{X}}^T].
    • +
    • Find the eigenpairs of \( \boldsymbol{C} \) with eigenvalues \( [\lambda_0,\lambda_1,\dots,\lambda_{p-1}] \) and eigenvectors \( [\boldsymbol{s}_0,\boldsymbol{s}_1,\dots,\boldsymbol{s}_{p-1}] \).
    • +
    • Order the eigenvalue (and the eigenvectors accordingly) in order of decreasing eigenvalues.
    • +
    • Keep only those \( l \) eigenvalues larger than a selected threshold value, discarding thus \( p-l \) features since we expect small variations in the data here.
    • +
    + +After this we ask ourselves how do we prove the link between the maximum variance and the feature reduction.











    -

    Getting started with PCA

    +

    Classical PCA Theorem

    + +

    +









    + +

    Prof of the PCA Theorem

    + +

    +









    + +

    Getting started with PCA

    @@ -930,7 +978,7 @@ X_pca = pca.transform(X_train_scaled)











    -

    Principal Component Analysis

    +

    Principal Component Analysis

    @@ -966,7 +1014,7 @@ X2D = X_centered.dot(W2)

    -

    PCA and scikit-learn

    +

    PCA and scikit-learn

    Scikit-Learn’s PCA class implements PCA using SVD decomposition just like we did before. The @@ -997,7 +1045,7 @@ More material to come here.











    -

    More on the PCA

    +

    More on the PCA

    Instead of arbitrarily choosing the number of dimensions to reduce down to, it is generally preferable to @@ -1027,7 +1075,7 @@ X_reduced = pca.fit_transform(X)











    -

    Incremental PCA

    +

    Incremental PCA

    One problem with the preceding implementation of PCA is that it requires the whole training set to fit in @@ -1039,7 +1087,7 @@ instances arrive).











    -

    Randomized PCA

    +

    Randomized PCA

    Scikit-Learn offers yet another option to perform PCA, called Randomized PCA. This is a stochastic @@ -1054,7 +1102,7 @@ previous algorithms when \( d \) is much smaller than \( n \).











    -

    Kernel PCA

    +

    Kernel PCA

    @@ -1083,7 +1131,7 @@ X_reduced = rbf_pca.fit_transform(X)











    -

    LLE

    +

    LLE

    Locally Linear Embedding (LLE) is another very powerful nonlinear dimensionality reduction @@ -1095,7 +1143,7 @@ these local relationships are best preserved (more details shortly).











    -

    Other techniques

    +

    Other techniques

    There are many other dimensionality reduction techniques, several of which are available in Scikit-Learn. diff --git a/doc/pub/DimRed/html/DimRed.html b/doc/pub/DimRed/html/DimRed.html index f30d112ee..f6e2efdb3 100644 --- a/doc/pub/DimRed/html/DimRed.html +++ b/doc/pub/DimRed/html/DimRed.html @@ -113,17 +113,18 @@ div { text-align: justify; text-justify: inter-word; } None, '___sec14'), ('Towards the PCA theorem', 2, None, '___sec15'), - ('Classical PCA Theorem', 2, None, '___sec16'), - ('Prof of the PCA Theorem', 2, None, '___sec17'), - ('Getting started with PCA', 2, None, '___sec18'), - ('Principal Component Analysis', 2, None, '___sec19'), - ('PCA and scikit-learn', 2, None, '___sec20'), - ('More on the PCA', 2, None, '___sec21'), - ('Incremental PCA', 2, None, '___sec22'), - ('Randomized PCA', 2, None, '___sec23'), - ('Kernel PCA', 2, None, '___sec24'), - ('LLE', 2, None, '___sec25'), - ('Other techniques', 2, None, '___sec26')]} + ('The Algorithm before the Theorem', 2, None, '___sec16'), + ('Classical PCA Theorem', 2, None, '___sec17'), + ('Prof of the PCA Theorem', 2, None, '___sec18'), + ('Getting started with PCA', 2, None, '___sec19'), + ('Principal Component Analysis', 2, None, '___sec20'), + ('PCA and scikit-learn', 2, None, '___sec21'), + ('More on the PCA', 2, None, '___sec22'), + ('Incremental PCA', 2, None, '___sec23'), + ('Randomized PCA', 2, None, '___sec24'), + ('Kernel PCA', 2, None, '___sec25'), + ('LLE', 2, None, '___sec26'), + ('Other techniques', 2, None, '___sec27')]} end of tocinfo --> @@ -908,19 +909,66 @@ In the derivation of the PCA theorem we will assume that the eigenvalues are ord \( \lambda_0 > \lambda_1 > \dots > \lambda_{p-1} \).

    -









    - -

    Classical PCA Theorem

    +The eigenvalues tell us then how much we need to stretch the +corresponding eigenvectors. Dimensions with large eigenvalues have +thus large variations (large variance) and define therefore useful +dimensions. The data points are more spread out in the direction of +these eigenvectors. Smaller eigenvalues mean on the other hand that +the corresponding eigenvectors are shrunk accordingly and the data +points are tightly bunched together and there is not much variation in +these specific directions. Hopefully then we could leave it out +dimensions where the eigenvalues are very small. If \( p \) is very large, +we could then aim at reducing \( p \) to \( l < < p \) and handle only \( l \) +features/predictors.











    -

    Prof of the PCA Theorem

    +

    The Algorithm before theorem

    + +

    +Here's how we would proceed in setting up the algorithm for the PCA, see also discussion below here. + +

      +
    • Set up the datapoints for the design/feature matrix \( \boldsymbol{X} \) with \( \boldsymbol{X}\in {\mathbb{R}}^{n\times p} \), with the predictors/features \( p \) referring to the column numbers and the entries \( n \) being the row elements.
    • +
    + +$$ +\boldsymbol{X}=\begin{bmatrix} +x_{0,0} & x_{0,1} & x_{0,2}& \dots & \dots x_{0,p-1}\\ +x_{1,0} & x_{1,1} & x_{1,2}& \dots & \dots x_{1,p-1}\\ +x_{2,0} & x_{2,1} & x_{2,2}& \dots & \dots x_{2,p-1}\\ +\dots & \dots & \dots & \dots \dots & \dots \\ +x_{n-2,0} & x_{n-2,1} & x_{n-2,2}& \dots & \dots x_{n-2,p-1}\\ +x_{n-1,0} & x_{n-1,1} & x_{n-1,2}& \dots & \dots x_{n-1,p-1}\\ +\end{bmatrix}, +$$ + + +
      +
    • Center the data by subtracting the mean value for each column. This leads to a new matrix \( \boldsymbol{X}\rightarrow \overline{\boldsymbol{X}} \).
    • +
    • Compute then the covariance/correlation matrix $\mathbb{E}[\overline{\boldsymbol{X}}\overline{\boldsymbol{X}}^T].
    • +
    • Find the eigenpairs of \( \boldsymbol{C} \) with eigenvalues \( [\lambda_0,\lambda_1,\dots,\lambda_{p-1}] \) and eigenvectors \( [\boldsymbol{s}_0,\boldsymbol{s}_1,\dots,\boldsymbol{s}_{p-1}] \).
    • +
    • Order the eigenvalue (and the eigenvectors accordingly) in order of decreasing eigenvalues.
    • +
    • Keep only those \( l \) eigenvalues larger than a selected threshold value, discarding thus \( p-l \) features since we expect small variations in the data here.
    • +
    + +After this we ask ourselves how do we prove the link between the maximum variance and the feature reduction.











    -

    Getting started with PCA

    +

    Classical PCA Theorem

    + +

    +









    + +

    Prof of the PCA Theorem

    + +

    +









    + +

    Getting started with PCA

    @@ -935,7 +983,7 @@ X_pca = pca.









    -

    Principal Component Analysis

    +

    Principal Component Analysis

    @@ -971,7 +1019,7 @@ X2D = X_centered -

    PCA and scikit-learn

    +

    PCA and scikit-learn

    Scikit-Learn’s PCA class implements PCA using SVD decomposition just like we did before. The @@ -1002,7 +1050,7 @@ More material to come here.











    -

    More on the PCA

    +

    More on the PCA

    Instead of arbitrarily choosing the number of dimensions to reduce down to, it is generally preferable to @@ -1032,7 +1080,7 @@ X_reduced = pca











    -

    Incremental PCA

    +

    Incremental PCA

    One problem with the preceding implementation of PCA is that it requires the whole training set to fit in @@ -1044,7 +1092,7 @@ instances arrive).











    -

    Randomized PCA

    +

    Randomized PCA

    Scikit-Learn offers yet another option to perform PCA, called Randomized PCA. This is a stochastic @@ -1059,7 +1107,7 @@ previous algorithms when \( d \) is much smaller than \( n \).











    -

    Kernel PCA

    +

    Kernel PCA

    @@ -1088,7 +1136,7 @@ X_reduced = rbf_pcaLLE +

    LLE

    Locally Linear Embedding (LLE) is another very powerful nonlinear dimensionality reduction @@ -1100,7 +1148,7 @@ these local relationships are best preserved (more details shortly).











    -

    Other techniques

    +

    Other techniques

    There are many other dimensionality reduction techniques, several of which are available in Scikit-Learn. diff --git a/doc/pub/DimRed/ipynb/DimRed.ipynb b/doc/pub/DimRed/ipynb/DimRed.ipynb index f2c182c39..538fd7b6f 100644 --- a/doc/pub/DimRed/ipynb/DimRed.ipynb +++ b/doc/pub/DimRed/ipynb/DimRed.ipynb @@ -1000,6 +1000,57 @@ "In the derivation of the PCA theorem we will assume that the eigenvalues are ordered in descending order, that is\n", "$\\lambda_0 > \\lambda_1 > \\dots > \\lambda_{p-1}$. \n", "\n", + "\n", + "The eigenvalues tell us then how much we need to stretch the\n", + "corresponding eigenvectors. Dimensions with large eigenvalues have\n", + "thus large variations (large variance) and define therefore useful\n", + "dimensions. The data points are more spread out in the direction of\n", + "these eigenvectors. Smaller eigenvalues mean on the other hand that\n", + "the corresponding eigenvectors are shrunk accordingly and the data\n", + "points are tightly bunched together and there is not much variation in\n", + "these specific directions. Hopefully then we could leave it out\n", + "dimensions where the eigenvalues are very small. If $p$ is very large,\n", + "we could then aim at reducing $p$ to $l << p$ and handle only $l$\n", + "features/predictors.\n", + "\n", + "## The Algorithm before theorem\n", + "\n", + "Here's how we would proceed in setting up the algorithm for the PCA, see also discussion below here. \n", + "* Set up the datapoints for the design/feature matrix $\\boldsymbol{X}$ with $\\boldsymbol{X}\\in {\\mathbb{R}}^{n\\times p}$, with the predictors/features $p$ referring to the column numbers and the entries $n$ being the row elements." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{X}=\\begin{bmatrix}\n", + "x_{0,0} & x_{0,1} & x_{0,2}& \\dots & \\dots x_{0,p-1}\\\\\n", + "x_{1,0} & x_{1,1} & x_{1,2}& \\dots & \\dots x_{1,p-1}\\\\\n", + "x_{2,0} & x_{2,1} & x_{2,2}& \\dots & \\dots x_{2,p-1}\\\\\n", + "\\dots & \\dots & \\dots & \\dots \\dots & \\dots \\\\\n", + "x_{n-2,0} & x_{n-2,1} & x_{n-2,2}& \\dots & \\dots x_{n-2,p-1}\\\\\n", + "x_{n-1,0} & x_{n-1,1} & x_{n-1,2}& \\dots & \\dots x_{n-1,p-1}\\\\\n", + "\\end{bmatrix},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Center the data by subtracting the mean value for each column. This leads to a new matrix $\\boldsymbol{X}\\rightarrow \\overline{\\boldsymbol{X}}$.\n", + "\n", + "* Compute then the covariance/correlation matrix $\\mathbb{E}[\\overline{\\boldsymbol{X}}\\overline{\\boldsymbol{X}}^T].\n", + "\n", + "* Find the eigenpairs of $\\boldsymbol{C}$ with eigenvalues $[\\lambda_0,\\lambda_1,\\dots,\\lambda_{p-1}]$ and eigenvectors $[\\boldsymbol{s}_0,\\boldsymbol{s}_1,\\dots,\\boldsymbol{s}_{p-1}]$.\n", + "\n", + "* Order the eigenvalue (and the eigenvectors accordingly) in order of decreasing eigenvalues.\n", + "\n", + "* Keep only those $l$ eigenvalues larger than a selected threshold value, discarding thus $p-l$ features since we expect small variations in the data here.\n", + "\n", + "After this we ask ourselves how do we prove the link between the maximum variance and the feature reduction.\n", + "\n", "## Classical PCA Theorem\n", "\n", "\n", diff --git a/doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz b/doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz index 0eef6c592e0058d55b4e0290c7c149268b8dcbb8..554bc3ebafe1a24846ba846597badc8ddd0d4921 100644 GIT binary patch literal 191 zcmV;w06_mAiwFQ;`mS971MSaC3c@fD2H>uHia9|^Owz7}cHu&h;ssKY+Ne!xl7hXx zeSoeMH${Yeo1bBZVWup$`MyZ}-AAiI2&I(5lv&E=M4P3aVaxy%#t6$8CK(`1NJ=9> z>z(w{JJ0QSN^_RlN&R+i9INXOdzM$=nSbKgCuHia9}cWK}#S5e)wNabYBn5kW z`v6@jZi)!`82AYphM97^DfZjQ-CeL6M9k6@rpz-sC&tTrMhFFxP&!r~V+u%;gysR@ zdMmy3)-f}#(wv2|LcQ%9+v@tmoaGdF=ASq=(!%aAxJD~b+KEc*3ly>~1&?Gms0z3i tcKQM%ZoM=Dm>Pg_E}hhhUBk}klVPom!e1Zbd7kHe?E%&ViP!)L0076DSls{s diff --git a/doc/pub/DimRed/pdf/DimRed-minted.pdf b/doc/pub/DimRed/pdf/DimRed-minted.pdf index 035ad9731d0b2a9c28567943b90cd4203a3432e1..6ae259989e6f99b413305792a90cdfc78090cfd0 100644 GIT binary patch delta 20551 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%0ANucA&51kn5CxXbs&gS3d2`detAcQQ$P|*c1ig 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 delta 17436 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 diff --git a/doc/src/DimRed/DimRed.do.txt b/doc/src/DimRed/DimRed.do.txt index 3db103be5..a7124c982 100644 --- a/doc/src/DimRed/DimRed.do.txt +++ b/doc/src/DimRed/DimRed.do.txt @@ -703,6 +703,44 @@ and since $\bm{C}[\bm{y}]$ is diagonal we have for a given eigenvalue $i$ of the In the derivation of the PCA theorem we will assume that the eigenvalues are ordered in descending order, that is $\lambda_0 > \lambda_1 > \dots > \lambda_{p-1}$. + +The eigenvalues tell us then how much we need to stretch the +corresponding eigenvectors. Dimensions with large eigenvalues have +thus large variations (large variance) and define therefore useful +dimensions. The data points are more spread out in the direction of +these eigenvectors. Smaller eigenvalues mean on the other hand that +the corresponding eigenvectors are shrunk accordingly and the data +points are tightly bunched together and there is not much variation in +these specific directions. Hopefully then we could leave it out +dimensions where the eigenvalues are very small. If $p$ is very large, +we could then aim at reducing $p$ to $l << p$ and handle only $l$ +features/predictors. + +!split +===== The Algorithm before the Theorem ===== + +Here's how we would proceed in setting up the algorithm for the PCA, see also discussion below here. +* Set up the datapoints for the design/feature matrix $\bm{X}$ with $\bm{X}\in {\mathbb{R}}^{n\times p}$, with the predictors/features $p$ referring to the column numbers and the entries $n$ being the row elements. +!bt +\[ +\bm{X}=\begin{bmatrix} +x_{0,0} & x_{0,1} & x_{0,2}& \dots & \dots x_{0,p-1}\\ +x_{1,0} & x_{1,1} & x_{1,2}& \dots & \dots x_{1,p-1}\\ +x_{2,0} & x_{2,1} & x_{2,2}& \dots & \dots x_{2,p-1}\\ +\dots & \dots & \dots & \dots \dots & \dots \\ +x_{n-2,0} & x_{n-2,1} & x_{n-2,2}& \dots & \dots x_{n-2,p-1}\\ +x_{n-1,0} & x_{n-1,1} & x_{n-1,2}& \dots & \dots x_{n-1,p-1}\\ +\end{bmatrix}, +\] +!et +* Center the data by subtracting the mean value for each column. This leads to a new matrix $\bm{X}\rightarrow \overline{\bm{X}}$. +* Compute then the covariance/correlation matrix $\mathbb{E}[\overline{\bm{X}}\overline{\bm{X}}^T]. +* Find the eigenpairs of $\bm{C}$ with eigenvalues $[\lambda_0,\lambda_1,\dots,\lambda_{p-1}]$ and eigenvectors $[\bm{s}_0,\bm{s}_1,\dots,\bm{s}_{p-1}]$. +* Order the eigenvalue (and the eigenvectors accordingly) in order of decreasing eigenvalues. +* Keep only those $l$ eigenvalues larger than a selected threshold value, discarding thus $p-l$ features since we expect small variations in the data here. + +After this we ask ourselves how do we prove the link between the maximum variance and the feature reduction. + !split ===== Classical PCA Theorem ===== diff --git a/doc/src/DimRed/mlpfranke.py b/doc/src/DimRed/mlpfranke.py new file mode 100644 index 000000000..639e605ef --- /dev/null +++ b/doc/src/DimRed/mlpfranke.py @@ -0,0 +1,68 @@ +# Common imports +import numpy as np +from sklearn.neural_network import MLPRegressor +from sklearn.metrics import accuracy_score +import seaborn as sns +import matplotlib.pyplot as plt + +def FrankeFunction(x,y): + term1 = 0.75*np.exp(-(0.25*(9*x-2)**2) - 0.25*((9*y-2)**2)) + term2 = 0.75*np.exp(-((9*x+1)**2)/49.0 - 0.1*(9*y+1)) + term3 = 0.5*np.exp(-(9*x-7)**2/4.0 - 0.25*((9*y-3)**2)) + term4 = -0.2*np.exp(-(9*x-4)**2 - (9*y-7)**2) + return term1 + term2 + term3 + term4 + + +def create_X(x, y, n ): + if len(x.shape) > 1: + x = np.ravel(x) + y = np.ravel(y) + + N = len(x) + l = int((n+1)*(n+2)/2) # Number of elements in beta + X = np.ones((N,l)) + + for i in range(1,n+1): + q = int((i)*(i+1)/2) + for k in range(i+1): + X[:,q+k] = (x**(i-k))*(y**k) + + return X + + +# Making meshgrid of datapoints and compute Franke's function +n = 4 +N = 100 +x = np.sort(np.random.uniform(0, 1, N)) +y = np.sort(np.random.uniform(0, 1, N)) +z = FrankeFunction(x, y) +X = create_X(x, y, n=n) + +# only training data, no advanced splitting +X_train = X +Y_train = z +# only one simple layer with 100 neurons +n_hidden_neurons = 100 +epochs = 100 +# store models for later use +eta_vals = np.logspace(-5, 1, 7) +lmbd_vals = np.logspace(-5, 1, 7) +# store the models for later use +DNN_scikit = np.zeros((len(eta_vals), len(lmbd_vals)), dtype=object) +train_accuracy = np.zeros((len(eta_vals), len(lmbd_vals))) +sns.set() +for i, eta in enumerate(eta_vals): + for j, lmbd in enumerate(lmbd_vals): + dnn = MLPRegressor(hidden_layer_sizes=(n_hidden_neurons), activation='logistic', + alpha=lmbd, learning_rate_init=eta, max_iter=epochs) + dnn.fit(X_train, Y_train) + DNN_scikit[i][j] = dnn + train_accuracy[i][j] = dnn.score(X_train, Y_train) + +fig, ax = plt.subplots(figsize = (10, 10)) +sns.heatmap(train_accuracy, annot=True, ax=ax, cmap="viridis") +ax.set_title("Training Accuracy") +ax.set_ylabel("$\eta$") +ax.set_xlabel("$\lambda$") +plt.show() +