From ac26951bd10cb433420c57f98f06a3cdd3228d07 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Thu, 5 Dec 2019 22:01:09 +0100 Subject: [PATCH] typos in decision trees --- .../html/._DecisionTrees-bs000.html | 2 +- .../html/._DecisionTrees-bs046.html | 6 ++--- .../html/._DecisionTrees-bs048.html | 4 +-- .../html/._DecisionTrees-bs049.html | 4 +-- .../html/._DecisionTrees-bs053.html | 6 ++--- .../html/._DecisionTrees-bs054.html | 2 +- .../DecisionTrees/html/DecisionTrees-bs.html | 2 +- .../html/DecisionTrees-reveal.html | 24 +++++++++--------- .../html/DecisionTrees-solarized.html | 24 +++++++++--------- doc/pub/DecisionTrees/html/DecisionTrees.html | 24 +++++++++--------- .../DecisionTrees/ipynb/DecisionTrees.ipynb | 24 +++++++++--------- .../ipynb/ipynb-DecisionTrees-src.tar.gz | Bin 294061 -> 294061 bytes .../pdf/DecisionTrees-minted.pdf | Bin 563536 -> 563497 bytes doc/src/DecisionTrees/DecisionTrees.do.txt | 22 ++++++++-------- 14 files changed, 72 insertions(+), 72 deletions(-) diff --git a/doc/pub/DecisionTrees/html/._DecisionTrees-bs000.html b/doc/pub/DecisionTrees/html/._DecisionTrees-bs000.html index 589bdef71..270401bc0 100644 --- a/doc/pub/DecisionTrees/html/._DecisionTrees-bs000.html +++ b/doc/pub/DecisionTrees/html/._DecisionTrees-bs000.html @@ -297,7 +297,7 @@ MathJax.Hub.Config({
[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Nov 24, 2019

+

Dec 5, 2019


diff --git a/doc/pub/DecisionTrees/html/._DecisionTrees-bs046.html b/doc/pub/DecisionTrees/html/._DecisionTrees-bs046.html index 7155b82a4..385a0138a 100644 --- a/doc/pub/DecisionTrees/html/._DecisionTrees-bs046.html +++ b/doc/pub/DecisionTrees/html/._DecisionTrees-bs046.html @@ -305,7 +305,7 @@ $$

where \( t=\gamma_0+\gamma_1 x \) and the parameters \( \gamma_0 \) and -\( \gamma_1 \) where determined by the Logistic Regression fitting +\( \gamma_1 \) were determined by the Logistic Regression fitting algorithm.

@@ -317,8 +317,8 @@ $$

In this case the function \( f(x) \) was replaced by the design matrix \( \boldsymbol{X} \) and the unknown linear regression parameters \( \boldsymbol{\beta} \), -that is \( \boldsymbol{f}=\boldsymbol{X}\boldsymbol{\beta} \). In linear regression we could -simply invert a matrix and obtained the parameters \( \beta \) by +that is \( \boldsymbol{f}=\boldsymbol{X}\boldsymbol{\beta} \). In linear regression we can +simply invert a matrix and obtain the parameters \( \beta \) by $$ \boldsymbol{\beta}=\left(\boldsymbol{X}^T\boldsymbol{X}\right)^{-1}\boldsymbol{X}^T\boldsymbol{y}. diff --git a/doc/pub/DecisionTrees/html/._DecisionTrees-bs048.html b/doc/pub/DecisionTrees/html/._DecisionTrees-bs048.html index c2a0e92e0..f8977779c 100644 --- a/doc/pub/DecisionTrees/html/._DecisionTrees-bs048.html +++ b/doc/pub/DecisionTrees/html/._DecisionTrees-bs048.html @@ -287,10 +287,10 @@ To better understand what happens, let us develop the steps for the iterative fi For simplicity we assume also that our functions \( b(x;\gamma)=1+\gamma x \).

-This means that for every iteration, we need to optimize +This means that for every iteration \( m \), we need to optimize $$ -(\beta_m,\gamma_m) \mathrm{argmin}_{\beta,\lambda}\hspace{0.1cm} \sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta b(x;\gamma))^2=\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta(1+\gamma x_i))^2. +(\beta_m,\gamma_m) = \mathrm{argmin}_{\beta,\lambda}\hspace{0.1cm} \sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta b(x;\gamma))^2=\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta(1+\gamma x_i))^2. $$

diff --git a/doc/pub/DecisionTrees/html/._DecisionTrees-bs049.html b/doc/pub/DecisionTrees/html/._DecisionTrees-bs049.html index 19614cf2b..f231d953e 100644 --- a/doc/pub/DecisionTrees/html/._DecisionTrees-bs049.html +++ b/doc/pub/DecisionTrees/html/._DecisionTrees-bs049.html @@ -282,7 +282,7 @@ MathJax.Hub.Config({

Let us consider a binary classification problem with two outcomes \( y_i \in \{-1,1\} \) and \( i=0,1,2,\dots,n-1 \) as our set of -observations. We define a classification function \( G(x) \) which produces a prediction taking any of the two values +observations. We define a classification function \( G(x) \) which produces a prediction taking one or the other of the two values \( \{-1,1\} \).

@@ -295,7 +295,7 @@ $$

The iterative procedure starts with defining a weak classifier whose error rate is barely better than random guessing. The iterative -procedure in boosting is to sequentially apply a the weak +procedure in boosting is to sequentially apply a weak classification algorithm to repeatedly modified versions of the data producing a sequence of weak classifiers \( G_m(x) \). diff --git a/doc/pub/DecisionTrees/html/._DecisionTrees-bs053.html b/doc/pub/DecisionTrees/html/._DecisionTrees-bs053.html index b2a8f0543..c8fb5fedc 100644 --- a/doc/pub/DecisionTrees/html/._DecisionTrees-bs053.html +++ b/doc/pub/DecisionTrees/html/._DecisionTrees-bs053.html @@ -285,7 +285,7 @@ With the above definitions we are now ready to set up the algorithm for AdaBoost The basic idea is to set up weights which will be used to scale the correctly classified and the misclassified cases.

    -
  1. We start by initializing all weights to \( w_i = 1/n \), with \( i=0,1,2,\dots n-1 \). It is to see then that \( \sum_{i=0}^{n-1}w_i = 1 \).
  2. +
  3. We start by initializing all weights to \( w_i = 1/n \), with \( i=0,1,2,\dots n-1 \). It is easy to see that we must have \( \sum_{i=0}^{n-1}w_i = 1 \).
  4. We rewrite the misclassification error as
@@ -298,7 +298,7 @@ $$
  • Then we start looping over all attempts at classifying, namely we start an iterative process for \( m=1:M \), where \( M \) is the final number of classifications. Our given classifier could for example be a plain decision tree.
      -
    1. Fit then a given classifier to the training using the weights \( w_i \).
    2. +
    3. Fit then a given classifier to the training set using the weights \( w_i \).
    4. Compute then \( \mathrm{err} \) and figure out which events are classified properly and which are classified wrongly.
    5. Define a quantity \( \alpha_{m} = \log{(1-\mathrm{\overline{err}}_m)/\mathrm{\overline{err}}_m} \)
    6. Set the new weights to \( w_i = w_i\times \exp{(\alpha_m I(y_i\ne G(x_i)} \).
    7. @@ -308,7 +308,7 @@ $$
    For the iterations with \( m \le 2 \) the weights are modified -individually at each steps. The obersvations which were misclassified +individually at each steps. The observations which were misclassified at iteration \( m-1 \) have a weight which is larger than those which were classified properly. As this proceeds, the observations which were difficult to classifiy correctly are given a larger influence. Each diff --git a/doc/pub/DecisionTrees/html/._DecisionTrees-bs054.html b/doc/pub/DecisionTrees/html/._DecisionTrees-bs054.html index 330c8d69d..7f77d57c1 100644 --- a/doc/pub/DecisionTrees/html/._DecisionTrees-bs054.html +++ b/doc/pub/DecisionTrees/html/._DecisionTrees-bs054.html @@ -281,7 +281,7 @@ MathJax.Hub.Config({

    AdaBoost Examples

    -Using Scikit-Learn it is easy to appply the adaptive boosting algorithm, as done here. +Using Scikit-Learn it is easy to apply the adaptive boosting algorithm, as done here.

    diff --git a/doc/pub/DecisionTrees/html/DecisionTrees-bs.html b/doc/pub/DecisionTrees/html/DecisionTrees-bs.html index 589bdef71..270401bc0 100644 --- a/doc/pub/DecisionTrees/html/DecisionTrees-bs.html +++ b/doc/pub/DecisionTrees/html/DecisionTrees-bs.html @@ -297,7 +297,7 @@ MathJax.Hub.Config({

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

    -

    Nov 24, 2019

    +

    Dec 5, 2019


    diff --git a/doc/pub/DecisionTrees/html/DecisionTrees-reveal.html b/doc/pub/DecisionTrees/html/DecisionTrees-reveal.html index d7a0c606c..1169dea27 100644 --- a/doc/pub/DecisionTrees/html/DecisionTrees-reveal.html +++ b/doc/pub/DecisionTrees/html/DecisionTrees-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({

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

     
    -

    Nov 24, 2019

    +

    Dec 5, 2019


    @@ -2072,7 +2072,7 @@ $$

    where \( t=\gamma_0+\gamma_1 x \) and the parameters \( \gamma_0 \) and -\( \gamma_1 \) where determined by the Logistic Regression fitting +\( \gamma_1 \) were determined by the Logistic Regression fitting algorithm.

    @@ -2086,8 +2086,8 @@ $$

    In this case the function \( f(x) \) was replaced by the design matrix \( \boldsymbol{X} \) and the unknown linear regression parameters \( \boldsymbol{\beta} \), -that is \( \boldsymbol{f}=\boldsymbol{X}\boldsymbol{\beta} \). In linear regression we could -simply invert a matrix and obtained the parameters \( \beta \) by +that is \( \boldsymbol{f}=\boldsymbol{X}\boldsymbol{\beta} \). In linear regression we can +simply invert a matrix and obtain the parameters \( \beta \) by

     
    $$ @@ -2136,11 +2136,11 @@ To better understand what happens, let us develop the steps for the iterative fi For simplicity we assume also that our functions \( b(x;\gamma)=1+\gamma x \).

    -This means that for every iteration, we need to optimize +This means that for every iteration \( m \), we need to optimize

     
    $$ -(\beta_m,\gamma_m) \mathrm{argmin}_{\beta,\lambda}\hspace{0.1cm} \sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta b(x;\gamma))^2=\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta(1+\gamma x_i))^2. +(\beta_m,\gamma_m) = \mathrm{argmin}_{\beta,\lambda}\hspace{0.1cm} \sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta b(x;\gamma))^2=\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta(1+\gamma x_i))^2. $$

     
    @@ -2189,7 +2189,7 @@ The solution to these two equations gives us in turn \( \beta_1 \) and \( \gamma

    Let us consider a binary classification problem with two outcomes \( y_i \in \{-1,1\} \) and \( i=0,1,2,\dots,n-1 \) as our set of -observations. We define a classification function \( G(x) \) which produces a prediction taking any of the two values +observations. We define a classification function \( G(x) \) which produces a prediction taking one or the other of the two values \( \{-1,1\} \).

    @@ -2204,7 +2204,7 @@ $$

    The iterative procedure starts with defining a weak classifier whose error rate is barely better than random guessing. The iterative -procedure in boosting is to sequentially apply a the weak +procedure in boosting is to sequentially apply a weak classification algorithm to repeatedly modified versions of the data producing a sequence of weak classifiers \( G_m(x) \). @@ -2349,7 +2349,7 @@ With the above definitions we are now ready to set up the algorithm for AdaBoost The basic idea is to set up weights which will be used to scale the correctly classified and the misclassified cases.

      -

    1. We start by initializing all weights to \( w_i = 1/n \), with \( i=0,1,2,\dots n-1 \). It is to see then that \( \sum_{i=0}^{n-1}w_i = 1 \).
    2. +

    3. We start by initializing all weights to \( w_i = 1/n \), with \( i=0,1,2,\dots n-1 \). It is easy to see that we must have \( \sum_{i=0}^{n-1}w_i = 1 \).
    4. We rewrite the misclassification error as

     
    @@ -2363,7 +2363,7 @@ $$

  • Then we start looping over all attempts at classifying, namely we start an iterative process for \( m=1:M \), where \( M \) is the final number of classifications. Our given classifier could for example be a plain decision tree.
      -

    1. Fit then a given classifier to the training using the weights \( w_i \).
    2. +

    3. Fit then a given classifier to the training set using the weights \( w_i \).
    4. Compute then \( \mathrm{err} \) and figure out which events are classified properly and which are classified wrongly.
    5. Define a quantity \( \alpha_{m} = \log{(1-\mathrm{\overline{err}}_m)/\mathrm{\overline{err}}_m} \)
    6. Set the new weights to \( w_i = w_i\times \exp{(\alpha_m I(y_i\ne G(x_i)} \).
    7. @@ -2373,7 +2373,7 @@ $$

      For the iterations with \( m \le 2 \) the weights are modified -individually at each steps. The obersvations which were misclassified +individually at each steps. The observations which were misclassified at iteration \( m-1 \) have a weight which is larger than those which were classified properly. As this proceeds, the observations which were difficult to classifiy correctly are given a larger influence. Each @@ -2386,7 +2386,7 @@ observations that are missed in the previous iterations.

      AdaBoost Examples

      -Using Scikit-Learn it is easy to appply the adaptive boosting algorithm, as done here. +Using Scikit-Learn it is easy to apply the adaptive boosting algorithm, as done here.

      diff --git a/doc/pub/DecisionTrees/html/DecisionTrees-solarized.html b/doc/pub/DecisionTrees/html/DecisionTrees-solarized.html index de6f5d392..627c7f756 100644 --- a/doc/pub/DecisionTrees/html/DecisionTrees-solarized.html +++ b/doc/pub/DecisionTrees/html/DecisionTrees-solarized.html @@ -223,7 +223,7 @@ MathJax.Hub.Config({

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

      -

      Nov 24, 2019

      +

      Dec 5, 2019












      @@ -2080,7 +2080,7 @@ $$

      where \( t=\gamma_0+\gamma_1 x \) and the parameters \( \gamma_0 \) and -\( \gamma_1 \) where determined by the Logistic Regression fitting +\( \gamma_1 \) were determined by the Logistic Regression fitting algorithm.

      @@ -2092,8 +2092,8 @@ $$

      In this case the function \( f(x) \) was replaced by the design matrix \( \boldsymbol{X} \) and the unknown linear regression parameters \( \boldsymbol{\beta} \), -that is \( \boldsymbol{f}=\boldsymbol{X}\boldsymbol{\beta} \). In linear regression we could -simply invert a matrix and obtained the parameters \( \beta \) by +that is \( \boldsymbol{f}=\boldsymbol{X}\boldsymbol{\beta} \). In linear regression we can +simply invert a matrix and obtain the parameters \( \beta \) by $$ \boldsymbol{\beta}=\left(\boldsymbol{X}^T\boldsymbol{X}\right)^{-1}\boldsymbol{X}^T\boldsymbol{y}. @@ -2139,10 +2139,10 @@ To better understand what happens, let us develop the steps for the iterative fi For simplicity we assume also that our functions \( b(x;\gamma)=1+\gamma x \).

      -This means that for every iteration, we need to optimize +This means that for every iteration \( m \), we need to optimize $$ -(\beta_m,\gamma_m) \mathrm{argmin}_{\beta,\lambda}\hspace{0.1cm} \sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta b(x;\gamma))^2=\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta(1+\gamma x_i))^2. +(\beta_m,\gamma_m) = \mathrm{argmin}_{\beta,\lambda}\hspace{0.1cm} \sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta b(x;\gamma))^2=\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta(1+\gamma x_i))^2. $$

      @@ -2182,7 +2182,7 @@ The solution to these two equations gives us in turn \( \beta_1 \) and \( \gamma

      Let us consider a binary classification problem with two outcomes \( y_i \in \{-1,1\} \) and \( i=0,1,2,\dots,n-1 \) as our set of -observations. We define a classification function \( G(x) \) which produces a prediction taking any of the two values +observations. We define a classification function \( G(x) \) which produces a prediction taking one or the other of the two values \( \{-1,1\} \).

      @@ -2195,7 +2195,7 @@ $$

      The iterative procedure starts with defining a weak classifier whose error rate is barely better than random guessing. The iterative -procedure in boosting is to sequentially apply a the weak +procedure in boosting is to sequentially apply a weak classification algorithm to repeatedly modified versions of the data producing a sequence of weak classifiers \( G_m(x) \). @@ -2313,7 +2313,7 @@ With the above definitions we are now ready to set up the algorithm for AdaBoost The basic idea is to set up weights which will be used to scale the correctly classified and the misclassified cases.

        -
      1. We start by initializing all weights to \( w_i = 1/n \), with \( i=0,1,2,\dots n-1 \). It is to see then that \( \sum_{i=0}^{n-1}w_i = 1 \).
      2. +
      3. We start by initializing all weights to \( w_i = 1/n \), with \( i=0,1,2,\dots n-1 \). It is easy to see that we must have \( \sum_{i=0}^{n-1}w_i = 1 \).
      4. We rewrite the misclassification error as
      @@ -2326,7 +2326,7 @@ $$
    8. Then we start looping over all attempts at classifying, namely we start an iterative process for \( m=1:M \), where \( M \) is the final number of classifications. Our given classifier could for example be a plain decision tree.
        -
      1. Fit then a given classifier to the training using the weights \( w_i \).
      2. +
      3. Fit then a given classifier to the training set using the weights \( w_i \).
      4. Compute then \( \mathrm{err} \) and figure out which events are classified properly and which are classified wrongly.
      5. Define a quantity \( \alpha_{m} = \log{(1-\mathrm{\overline{err}}_m)/\mathrm{\overline{err}}_m} \)
      6. Set the new weights to \( w_i = w_i\times \exp{(\alpha_m I(y_i\ne G(x_i)} \).
      7. @@ -2336,7 +2336,7 @@ $$
      For the iterations with \( m \le 2 \) the weights are modified -individually at each steps. The obersvations which were misclassified +individually at each steps. The observations which were misclassified at iteration \( m-1 \) have a weight which is larger than those which were classified properly. As this proceeds, the observations which were difficult to classifiy correctly are given a larger influence. Each @@ -2349,7 +2349,7 @@ observations that are missed in the previous iterations.

      AdaBoost Examples

      -Using Scikit-Learn it is easy to appply the adaptive boosting algorithm, as done here. +Using Scikit-Learn it is easy to apply the adaptive boosting algorithm, as done here.

      diff --git a/doc/pub/DecisionTrees/html/DecisionTrees.html b/doc/pub/DecisionTrees/html/DecisionTrees.html index 6327e297c..339c930bf 100644 --- a/doc/pub/DecisionTrees/html/DecisionTrees.html +++ b/doc/pub/DecisionTrees/html/DecisionTrees.html @@ -228,7 +228,7 @@ MathJax.Hub.Config({

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

      -

      Nov 24, 2019

      +

      Dec 5, 2019












      @@ -2085,7 +2085,7 @@ $$

      where \( t=\gamma_0+\gamma_1 x \) and the parameters \( \gamma_0 \) and -\( \gamma_1 \) where determined by the Logistic Regression fitting +\( \gamma_1 \) were determined by the Logistic Regression fitting algorithm.

      @@ -2097,8 +2097,8 @@ $$

      In this case the function \( f(x) \) was replaced by the design matrix \( \boldsymbol{X} \) and the unknown linear regression parameters \( \boldsymbol{\beta} \), -that is \( \boldsymbol{f}=\boldsymbol{X}\boldsymbol{\beta} \). In linear regression we could -simply invert a matrix and obtained the parameters \( \beta \) by +that is \( \boldsymbol{f}=\boldsymbol{X}\boldsymbol{\beta} \). In linear regression we can +simply invert a matrix and obtain the parameters \( \beta \) by $$ \boldsymbol{\beta}=\left(\boldsymbol{X}^T\boldsymbol{X}\right)^{-1}\boldsymbol{X}^T\boldsymbol{y}. @@ -2144,10 +2144,10 @@ To better understand what happens, let us develop the steps for the iterative fi For simplicity we assume also that our functions \( b(x;\gamma)=1+\gamma x \).

      -This means that for every iteration, we need to optimize +This means that for every iteration \( m \), we need to optimize $$ -(\beta_m,\gamma_m) \mathrm{argmin}_{\beta,\lambda}\hspace{0.1cm} \sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta b(x;\gamma))^2=\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta(1+\gamma x_i))^2. +(\beta_m,\gamma_m) = \mathrm{argmin}_{\beta,\lambda}\hspace{0.1cm} \sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta b(x;\gamma))^2=\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta(1+\gamma x_i))^2. $$

      @@ -2187,7 +2187,7 @@ The solution to these two equations gives us in turn \( \beta_1 \) and \( \gamma

      Let us consider a binary classification problem with two outcomes \( y_i \in \{-1,1\} \) and \( i=0,1,2,\dots,n-1 \) as our set of -observations. We define a classification function \( G(x) \) which produces a prediction taking any of the two values +observations. We define a classification function \( G(x) \) which produces a prediction taking one or the other of the two values \( \{-1,1\} \).

      @@ -2200,7 +2200,7 @@ $$

      The iterative procedure starts with defining a weak classifier whose error rate is barely better than random guessing. The iterative -procedure in boosting is to sequentially apply a the weak +procedure in boosting is to sequentially apply a weak classification algorithm to repeatedly modified versions of the data producing a sequence of weak classifiers \( G_m(x) \). @@ -2318,7 +2318,7 @@ With the above definitions we are now ready to set up the algorithm for AdaBoost The basic idea is to set up weights which will be used to scale the correctly classified and the misclassified cases.

        -
      1. We start by initializing all weights to \( w_i = 1/n \), with \( i=0,1,2,\dots n-1 \). It is to see then that \( \sum_{i=0}^{n-1}w_i = 1 \).
      2. +
      3. We start by initializing all weights to \( w_i = 1/n \), with \( i=0,1,2,\dots n-1 \). It is easy to see that we must have \( \sum_{i=0}^{n-1}w_i = 1 \).
      4. We rewrite the misclassification error as
      @@ -2331,7 +2331,7 @@ $$
    9. Then we start looping over all attempts at classifying, namely we start an iterative process for \( m=1:M \), where \( M \) is the final number of classifications. Our given classifier could for example be a plain decision tree.
        -
      1. Fit then a given classifier to the training using the weights \( w_i \).
      2. +
      3. Fit then a given classifier to the training set using the weights \( w_i \).
      4. Compute then \( \mathrm{err} \) and figure out which events are classified properly and which are classified wrongly.
      5. Define a quantity \( \alpha_{m} = \log{(1-\mathrm{\overline{err}}_m)/\mathrm{\overline{err}}_m} \)
      6. Set the new weights to \( w_i = w_i\times \exp{(\alpha_m I(y_i\ne G(x_i)} \).
      7. @@ -2341,7 +2341,7 @@ $$
      For the iterations with \( m \le 2 \) the weights are modified -individually at each steps. The obersvations which were misclassified +individually at each steps. The observations which were misclassified at iteration \( m-1 \) have a weight which is larger than those which were classified properly. As this proceeds, the observations which were difficult to classifiy correctly are given a larger influence. Each @@ -2354,7 +2354,7 @@ observations that are missed in the previous iterations.

      AdaBoost Examples

      -Using Scikit-Learn it is easy to appply the adaptive boosting algorithm, as done here. +Using Scikit-Learn it is easy to apply the adaptive boosting algorithm, as done here.

      diff --git a/doc/pub/DecisionTrees/ipynb/DecisionTrees.ipynb b/doc/pub/DecisionTrees/ipynb/DecisionTrees.ipynb index 2015dd806..1885b3cc2 100644 --- a/doc/pub/DecisionTrees/ipynb/DecisionTrees.ipynb +++ b/doc/pub/DecisionTrees/ipynb/DecisionTrees.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **Nov 24, 2019**\n", + "Date: **Dec 5, 2019**\n", "\n", "Copyright 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -2145,7 +2145,7 @@ "metadata": {}, "source": [ "where $t=\\gamma_0+\\gamma_1 x$ and the parameters $\\gamma_0$ and\n", - "$\\gamma_1$ where determined by the Logistic Regression fitting\n", + "$\\gamma_1$ were determined by the Logistic Regression fitting\n", "algorithm.\n", "\n", "As another example, consider the cost function we defined for linear regression" @@ -2166,8 +2166,8 @@ "source": [ "In this case the function $f(x)$ was replaced by the design matrix\n", "$\\boldsymbol{X}$ and the unknown linear regression parameters $\\boldsymbol{\\beta}$,\n", - "that is $\\boldsymbol{f}=\\boldsymbol{X}\\boldsymbol{\\beta}$. In linear regression we could\n", - "simply invert a matrix and obtained the parameters $\\beta$ by" + "that is $\\boldsymbol{f}=\\boldsymbol{X}\\boldsymbol{\\beta}$. In linear regression we can \n", + "simply invert a matrix and obtain the parameters $\\beta$ by" ] }, { @@ -2214,7 +2214,7 @@ "\n", "For simplicity we assume also that our functions $b(x;\\gamma)=1+\\gamma x$. \n", "\n", - "This means that for every iteration, we need to optimize" + "This means that for every iteration $m$, we need to optimize" ] }, { @@ -2222,7 +2222,7 @@ "metadata": {}, "source": [ "$$\n", - "(\\beta_m,\\gamma_m) \\mathrm{argmin}_{\\beta,\\lambda}\\hspace{0.1cm} \\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\\beta b(x;\\gamma))^2=\\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\\beta(1+\\gamma x_i))^2.\n", + "(\\beta_m,\\gamma_m) = \\mathrm{argmin}_{\\beta,\\lambda}\\hspace{0.1cm} \\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\\beta b(x;\\gamma))^2=\\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\\beta(1+\\gamma x_i))^2.\n", "$$" ] }, @@ -2306,7 +2306,7 @@ "## Iterative Fitting, Classification and AdaBoost\n", "\n", "Let us consider a binary classification problem with two outcomes $y_i \\in \\{-1,1\\}$ and $i=0,1,2,\\dots,n-1$ as our set of\n", - "observations. We define a classification function $G(x)$ which produces a prediction taking any of the two values \n", + "observations. We define a classification function $G(x)$ which produces a prediction taking one or the other of the two values \n", "$\\{-1,1\\}$.\n", "\n", "The error rate of the training sample is then" @@ -2327,7 +2327,7 @@ "source": [ "The iterative procedure starts with defining a weak classifier whose\n", "error rate is barely better than random guessing. The iterative\n", - "procedure in boosting is to sequentially apply a the weak\n", + "procedure in boosting is to sequentially apply a weak\n", "classification algorithm to repeatedly modified versions of the data\n", "producing a sequence of weak classifiers $G_m(x)$.\n", "\n", @@ -2565,7 +2565,7 @@ "\n", "With the above definitions we are now ready to set up the algorithm for AdaBoost.\n", "The basic idea is to set up weights which will be used to scale the correctly classified and the misclassified cases.\n", - "1. We start by initializing all weights to $w_i = 1/n$, with $i=0,1,2,\\dots n-1$. It is to see then that $\\sum_{i=0}^{n-1}w_i = 1$.\n", + "1. We start by initializing all weights to $w_i = 1/n$, with $i=0,1,2,\\dots n-1$. It is easy to see that we must have $\\sum_{i=0}^{n-1}w_i = 1$.\n", "\n", "2. We rewrite the misclassification error as" ] @@ -2585,7 +2585,7 @@ "source": [ "1. Then we start looping over all attempts at classifying, namely we start an iterative process for $m=1:M$, where $M$ is the final number of classifications. Our given classifier could for example be a plain decision tree.\n", "\n", - "a. Fit then a given classifier to the training using the weights $w_i$.\n", + "a. Fit then a given classifier to the training set using the weights $w_i$.\n", "\n", "b. Compute then $\\mathrm{err}$ and figure out which events are classified properly and which are classified wrongly.\n", "\n", @@ -2597,7 +2597,7 @@ "5. Compute the new classifier $G(x)= \\sum_{i=0}^{n-1}\\alpha_m I(y_i\\ne G(x_i)$.\n", "\n", "For the iterations with $m \\le 2$ the weights are modified\n", - "individually at each steps. The obersvations which were misclassified\n", + "individually at each steps. The observations which were misclassified\n", "at iteration $m-1$ have a weight which is larger than those which were\n", "classified properly. As this proceeds, the observations which were\n", "difficult to classifiy correctly are given a larger influence. Each\n", @@ -2608,7 +2608,7 @@ "\n", "## AdaBoost Examples\n", "\n", - "Using **Scikit-Learn** it is easy to appply the adaptive boosting algorithm, as done here." + "Using **Scikit-Learn** it is easy to apply the adaptive boosting algorithm, as done here." ] }, { diff --git a/doc/pub/DecisionTrees/ipynb/ipynb-DecisionTrees-src.tar.gz b/doc/pub/DecisionTrees/ipynb/ipynb-DecisionTrees-src.tar.gz index b8b9833fbffd1099edefd47817b1e1344d899a19..a0743d6653ee058735b059f143d21bfa731631de 100644 GIT binary patch delta 30 mcmZ4cQ*iB1L3a6W4u;41FB{og*%@2enOfPIx3aS=s{sJF>k4-O delta 30 mcmZ4cQ*iB1L3a6W4hD_iw;I`7*%@2enOfPIx3aS=s{sJA;|e(d diff --git a/doc/pub/DecisionTrees/pdf/DecisionTrees-minted.pdf b/doc/pub/DecisionTrees/pdf/DecisionTrees-minted.pdf index fcb8c211418f25d66c33ad5dc4601c437face5e7..a60a2f889e5d309a13fcaed8108cacaca8eadb6c 100644 GIT binary patch delta 19995 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 E7rC04cmMzZ diff --git a/doc/src/DecisionTrees/DecisionTrees.do.txt b/doc/src/DecisionTrees/DecisionTrees.do.txt index a6d2851e1..bf8941655 100644 --- a/doc/src/DecisionTrees/DecisionTrees.do.txt +++ b/doc/src/DecisionTrees/DecisionTrees.do.txt @@ -1709,7 +1709,7 @@ $b(x;\gamma_m)$ into the Sigmoid function !et where $t=\gamma_0+\gamma_1 x$ and the parameters $\gamma_0$ and -$\gamma_1$ where determined by the Logistic Regression fitting +$\gamma_1$ were determined by the Logistic Regression fitting algorithm. As another example, consider the cost function we defined for linear regression @@ -1721,8 +1721,8 @@ C(\bm{y},\bm{f}) = \frac{1}{n} \sum_{i=0}^{n-1}(y_i-f(x_i))^2. In this case the function $f(x)$ was replaced by the design matrix $\bm{X}$ and the unknown linear regression parameters $\bm{\beta}$, -that is $\bm{f}=\bm{X}\bm{\beta}$. In linear regression we could -simply invert a matrix and obtained the parameters $\beta$ by +that is $\bm{f}=\bm{X}\bm{\beta}$. In linear regression we can +simply invert a matrix and obtain the parameters $\beta$ by !bt \[ @@ -1757,11 +1757,11 @@ To better understand what happens, let us develop the steps for the iterative fi For simplicity we assume also that our functions $b(x;\gamma)=1+\gamma x$. -This means that for every iteration, we need to optimize +This means that for every iteration $m$, we need to optimize !bt \[ -(\beta_m,\gamma_m) \mathrm{argmin}_{\beta,\lambda}\hspace{0.1cm} \sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta b(x;\gamma))^2=\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta(1+\gamma x_i))^2. +(\beta_m,\gamma_m) = \mathrm{argmin}_{\beta,\lambda}\hspace{0.1cm} \sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta b(x;\gamma))^2=\sum_{i=0}^{n-1}(y_i-f_{m-1}(x_i)-\beta(1+\gamma x_i))^2. \] !et @@ -1803,7 +1803,7 @@ $f_1(x) = \beta_1(1+\gamma_1x)$. Doing this $M$ times results in our final estim ===== Iterative Fitting, Classification and AdaBoost ===== Let us consider a binary classification problem with two outcomes $y_i \in \{-1,1\}$ and $i=0,1,2,\dots,n-1$ as our set of -observations. We define a classification function $G(x)$ which produces a prediction taking any of the two values +observations. We define a classification function $G(x)$ which produces a prediction taking one or the other of the two values $\{-1,1\}$. The error rate of the training sample is then @@ -1816,7 +1816,7 @@ The error rate of the training sample is then The iterative procedure starts with defining a weak classifier whose error rate is barely better than random guessing. The iterative -procedure in boosting is to sequentially apply a the weak +procedure in boosting is to sequentially apply a weak classification algorithm to repeatedly modified versions of the data producing a sequence of weak classifiers $G_m(x)$. @@ -1934,7 +1934,7 @@ where the function $I()$ is one if we misclassify and zero if we classify correc With the above definitions we are now ready to set up the algorithm for AdaBoost. The basic idea is to set up weights which will be used to scale the correctly classified and the misclassified cases. -o We start by initializing all weights to $w_i = 1/n$, with $i=0,1,2,\dots n-1$. It is to see then that $\sum_{i=0}^{n-1}w_i = 1$. +o We start by initializing all weights to $w_i = 1/n$, with $i=0,1,2,\dots n-1$. It is easy to see that we must have $\sum_{i=0}^{n-1}w_i = 1$. o We rewrite the misclassification error as !bt \[ @@ -1942,14 +1942,14 @@ o We rewrite the misclassification error as \] !et o Then we start looping over all attempts at classifying, namely we start an iterative process for $m=1:M$, where $M$ is the final number of classifications. Our given classifier could for example be a plain decision tree. - o Fit then a given classifier to the training using the weights $w_i$. + o Fit then a given classifier to the training set using the weights $w_i$. o Compute then $\mathrm{err}$ and figure out which events are classified properly and which are classified wrongly. o Define a quantity $\alpha_{m} = \log{(1-\mathrm{\overline{err}}_m)/\mathrm{\overline{err}}_m}$ o Set the new weights to $w_i = w_i\times \exp{(\alpha_m I(y_i\ne G(x_i)}$. o Compute the new classifier $G(x)= \sum_{i=0}^{n-1}\alpha_m I(y_i\ne G(x_i)$. For the iterations with $m \le 2$ the weights are modified -individually at each steps. The obersvations which were misclassified +individually at each steps. The observations which were misclassified at iteration $m-1$ have a weight which is larger than those which were classified properly. As this proceeds, the observations which were difficult to classifiy correctly are given a larger influence. Each @@ -1961,7 +1961,7 @@ observations that are missed in the previous iterations. !split ===== AdaBoost Examples ===== -Using _Scikit-Learn_ it is easy to appply the adaptive boosting algorithm, as done here. +Using _Scikit-Learn_ it is easy to apply the adaptive boosting algorithm, as done here. !bc pycod from sklearn.ensemble import AdaBoostClassifier