From f3a82f7f311ad41ec4faa4cd0888cf8121edb915 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 6 Aug 2023 14:27:55 -0700 Subject: [PATCH 01/19] change to README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9910fba..a7a5300 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Up-to-date version of labs for ISLP. This repo will track labs for ISLP as their source code changes. The intent is that building a conda environment with -`frozen_requirements.txt` and `torch_requirements.txt` will reproduce +`requirements.txt` will reproduce the results in this repo. To install the `v2` version of the requirements run From ba2f7b8adc4a0a516db49d9f49f29327ee16a991 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Wed, 9 Aug 2023 01:51:53 -0700 Subject: [PATCH 02/19] update README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index c8867b2..a87293f 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,6 @@ pip install -r https://raw.githubusercontent.com/intro-stat-learning/ISLP_labs/v The labs can now be run from this directory: ``` -cd notebook; jupyter lab Ch02-statlearning-lab.ipynb ``` From 759eade4e11a0721d1a1f3ef4468938066845734 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 14:01:02 -0700 Subject: [PATCH 03/19] frozen versions for v2 --- requirements.txt | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/requirements.txt b/requirements.txt index f591d4d..1f116b0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,17 +1,16 @@ -numpy>=1.7.1 -scipy>=0.9 -pandas>=0.20 -pandas<=1.9 -lxml # pandas needs this for html -scikit-learn>=1.2 -joblib -statsmodels>=0.13 -lifelines -pygam # for GAM in Ch7 -l0bnb==1.0.0 # for bestsubsets -ISLP -torch -pytorch_lightning -torchmetrics -torchvision -torchinfo +numpy==1.24.2 +scipy==1.11.1 +pandas==1.5.3 +lxml==4.9.3 +scikit-learn==1.3.0 +joblib==1.3.1 +statsmodels==0.14.0 +lifelines==0.27.7 +pygam==0.9.0 +l0bnb==1.0.0 +torch==2.0.1 +torchvision==0.15.2 +pytorch-lightning==2.0.6 +torchinfo==1.8.0 +torchmetrics==1.0.1 +ISLP==0.3.18 From 5c29f1c9e4fa723f09c7c779a3edc7753bb808b1 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 14:40:37 -0700 Subject: [PATCH 04/19] frozen requirements, ISLP==0.3.19 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 1f116b0..c917f5a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,4 +13,4 @@ torchvision==0.15.2 pytorch-lightning==2.0.6 torchinfo==1.8.0 torchmetrics==1.0.1 -ISLP==0.3.18 +ISLP==0.3.19 From fc0c9152cb9405b63bc48d803d67ed3e4046eec7 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 19:31:42 -0700 Subject: [PATCH 05/19] v2.1 notebooks excluding 10,13 --- Ch02-statlearn-lab.Rmd | 161 ++-- Ch02-statlearn-lab.ipynb | 1490 ++++++++++++++++----------------- Ch03-linreg-lab.Rmd | 41 +- Ch03-linreg-lab.ipynb | 473 ++++++----- Ch04-classification-lab.Rmd | 15 +- Ch04-classification-lab.ipynb | 1114 ++++++++++++------------ Ch05-resample-lab.Rmd | 17 +- Ch05-resample-lab.ipynb | 330 ++++---- Ch06-varselect-lab.Rmd | 95 +-- Ch06-varselect-lab.ipynb | 708 ++++++++-------- Ch07-nonlin-lab.Rmd | 84 +- Ch07-nonlin-lab.ipynb | 603 +++++++------ Ch08-baggboost-lab.Rmd | 81 +- Ch08-baggboost-lab.ipynb | 454 +++++----- Ch09-svm-lab.Rmd | 75 +- Ch09-svm-lab.ipynb | 422 +++++----- Ch11-surv-lab.Rmd | 87 +- Ch11-surv-lab.ipynb | 424 +++++----- Ch12-unsup-lab.Rmd | 85 +- Ch12-unsup-lab.ipynb | 712 ++++++++-------- 20 files changed, 3663 insertions(+), 3808 deletions(-) diff --git a/Ch02-statlearn-lab.Rmd b/Ch02-statlearn-lab.Rmd index f6fce5f..93ae70a 100644 --- a/Ch02-statlearn-lab.Rmd +++ b/Ch02-statlearn-lab.Rmd @@ -1,24 +1,11 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - main_language: python - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 ---- - # Chapter 2 # Lab: Introduction to Python - - + + ## Getting Started @@ -74,21 +61,21 @@ inputs. For example, the print('fit a model with', 11, 'variables') ``` - + The following command will provide information about the `print()` function. ```{python} -# print? +print? ``` - + Adding two integers in `Python` is pretty intuitive. ```{python} 3 + 5 ``` - + In `Python`, textual data is handled using *strings*. For instance, `"hello"` and `'hello'` @@ -99,7 +86,7 @@ We can concatenate them using the addition `+` symbol. "hello" + " " + "world" ``` - + A string is actually a type of *sequence*: this is a generic term for an ordered list. The three most important types of sequences are lists, tuples, and strings. We introduce lists now. @@ -115,7 +102,7 @@ x = [3, 4, 5] x ``` - + Note that we used the brackets `[]` to construct this list. @@ -127,14 +114,14 @@ y = [4, 9, 7] x + y ``` - + The result may appear slightly counterintuitive: why did `Python` not add the entries of the lists element-by-element? In `Python`, lists hold *arbitrary* objects, and are added using *concatenation*. In fact, concatenation is the behavior that we saw earlier when we entered `"hello" + " " + "world"`. - - + + This example reflects the fact that `Python` is a general-purpose programming language. Much of `Python`'s data-specific functionality comes from other packages, notably `numpy` @@ -149,8 +136,8 @@ See [docs.scipy.org/doc/numpy/user/quickstart.html](https://docs.scipy.org/doc/n As mentioned earlier, this book makes use of functionality that is contained in the `numpy` *library*, or *package*. A package is a collection of modules that are not necessarily included in the base `Python` distribution. The name `numpy` is an abbreviation for *numerical Python*. - - + + To access `numpy`, we must first `import` it. ```{python} @@ -194,7 +181,7 @@ x - + The object `x` has several *attributes*, or associated objects. To access an attribute of `x`, we type `x.attribute`, where we replace `attribute` @@ -204,7 +191,7 @@ For instance, we can access the `ndim` attribute of `x` as follows. ```{python} x.ndim ``` - + The output indicates that `x` is a two-dimensional array. Similarly, `x.dtype` is the *data type* attribute of the object `x`. This indicates that `x` is comprised of 64-bit integers: @@ -228,7 +215,7 @@ documentation associated with the function `fun`, if it exists. We can try this for `np.array()`. ```{python} -# np.array? +np.array? ``` This documentation indicates that we could create a floating point array by passing a `dtype` argument into `np.array()`. @@ -246,7 +233,7 @@ at its `shape` attribute. x.shape ``` - + A *method* is a function that is associated with an object. @@ -283,10 +270,10 @@ x_reshape = x.reshape((2, 3)) print('reshaped x:\n', x_reshape) ``` - + The previous output reveals that `numpy` arrays are specified as a sequence of *rows*. This is called *row-major ordering*, as opposed to *column-major ordering*. - + `Python` (and hence `numpy`) uses 0-based indexing. This means that to access the top left element of `x_reshape`, @@ -316,13 +303,13 @@ print('x_reshape after we modify its top left element:\n', x_reshape) print('x after we modify top left element of x_reshape:\n', x) ``` - + Modifying `x_reshape` also modified `x` because the two objects occupy the same space in memory. - + We just saw that we can modify an element of an array. Can we also modify a tuple? It turns out that we cannot --- and trying to do so introduces an *exception*, or error. @@ -331,8 +318,8 @@ my_tuple = (3, 4, 5) my_tuple[0] = 2 ``` - - + + We now briefly mention some attributes of arrays that will come in handy. An array's `shape` attribute contains its dimension; this is always a tuple. The `ndim` attribute yields the number of dimensions, and `T` provides its transpose. @@ -340,7 +327,7 @@ The `ndim` attribute yields the number of dimensions, and `T` provides its tran x_reshape.shape, x_reshape.ndim, x_reshape.T ``` - + Notice that the three individual outputs `(2,3)`, `2`, and `array([[5, 4],[2, 5], [3,6]])` are themselves output as a tuple. We will often want to apply functions to arrays. @@ -351,22 +338,22 @@ square root of the entries using the `np.sqrt()` function: np.sqrt(x) ``` - + We can also square the elements: ```{python} x**2 ``` - + We can compute the square roots using the same notation, raising to the power of $1/2$ instead of 2. ```{python} x**0.5 ``` - - + + Throughout this book, we will often want to generate random data. The `np.random.normal()` function generates a vector of random normal variables. We can learn more about this function by looking at the help page, via a call to `np.random.normal?`. @@ -383,7 +370,7 @@ x = np.random.normal(size=50) x ``` - + We create an array `y` by adding an independent $N(50,1)$ random variable to each element of `x`. ```{python} @@ -395,7 +382,7 @@ correlation between `x` and `y`. ```{python} np.corrcoef(x, y) ``` - + If you're following along in your own `Jupyter` notebook, then you probably noticed that you got a different set of results when you ran the past few commands. In particular, each @@ -408,7 +395,7 @@ print(np.random.normal(scale=5, size=2)) ``` - + In order to ensure that our code provides exactly the same results each time it is run, we can set a *random seed* using the @@ -424,7 +411,7 @@ print(rng.normal(scale=5, size=2)) rng2 = np.random.default_rng(1303) print(rng2.normal(scale=5, size=2)) ``` - + Throughout the labs in this book, we use `np.random.default_rng()` whenever we perform calculations involving random quantities within `numpy`. In principle, this should enable the reader to exactly reproduce the stated results. However, as new versions of `numpy` become available, it is possible @@ -447,7 +434,7 @@ np.mean(y), y.mean() ```{python} np.var(y), y.var(), np.mean((y - y.mean())**2) ``` - + Notice that by default `np.var()` divides by the sample size $n$ rather than $n-1$; see the `ddof` argument in `np.var?`. @@ -456,7 +443,7 @@ than $n-1$; see the `ddof` argument in `np.var?`. ```{python} np.sqrt(np.var(y)), np.std(y) ``` - + The `np.mean()`, `np.var()`, and `np.std()` functions can also be applied to the rows and columns of a matrix. To see this, we construct a $10 \times 3$ matrix of $N(0,1)$ random variables, and consider computing its row sums. @@ -470,14 +457,14 @@ Since arrays are row-major ordered, the first axis, i.e. `axis=0`, refers to its ```{python} X.mean(axis=0) ``` - + The following yields the same result. ```{python} X.mean(0) ``` - + ## Graphics In `Python`, common practice is to use the library @@ -543,7 +530,7 @@ As an alternative, we could use the `ax.scatter()` function to create a scatter fig, ax = subplots(figsize=(8, 8)) ax.scatter(x, y, marker='o'); ``` - + Notice that in the code blocks above, we have ended the last line with a semicolon. This prevents `ax.plot(x, y)` from printing text to the notebook. However, it does not prevent a plot from being produced. @@ -584,7 +571,7 @@ fig.set_size_inches(12,3) fig ``` - + Occasionally we will want to create several plots within a figure. This can be achieved by passing additional arguments to `subplots()`. @@ -613,8 +600,8 @@ Type `subplots?` to learn more about - - + + To save the output of `fig`, we call its `savefig()` method. The argument `dpi` is the dots per inch, used to determine how large the figure will be in pixels. @@ -624,7 +611,7 @@ fig.savefig("Figure.png", dpi=400) fig.savefig("Figure.pdf", dpi=200); ``` - + We can continue to modify `fig` using step-by-step updates; for example, we can modify the range of the $x$-axis, re-save the figure, and even re-display it. @@ -676,7 +663,7 @@ fig, ax = subplots(figsize=(8, 8)) ax.imshow(f); ``` - + ## Sequences and Slice Notation @@ -690,8 +677,8 @@ seq1 = np.linspace(0, 10, 11) seq1 ``` - - + + The function `np.arange()` returns a sequence of numbers spaced out by `step`. If `step` is not specified, then a default value of $1$ is used. Let's create a sequence that starts at $0$ and ends at $10$. @@ -701,7 +688,7 @@ seq2 = np.arange(0, 10) seq2 ``` - + Why isn't $10$ output above? This has to do with *slice* notation in `Python`. Slice notation is used to index sequences such as lists, tuples and arrays. @@ -743,7 +730,7 @@ See the documentation `slice?` for useful options in creating slices. - + ## Indexing Data To begin, we create a two-dimensional `numpy` array. @@ -753,7 +740,7 @@ A = np.array(np.arange(16)).reshape((4, 4)) A ``` - + Typing `A[1,2]` retrieves the element corresponding to the second row and third column. (As usual, `Python` indexes from $0.$) @@ -761,7 +748,7 @@ column. (As usual, `Python` indexes from $0.$) A[1,2] ``` - + The first number after the open-bracket symbol `[` refers to the row, and the second number refers to the column. @@ -773,7 +760,7 @@ The first number after the open-bracket symbol `[` A[[1,3]] ``` - + To select the first and third columns, we pass in `[0,2]` as the second argument in the square brackets. In this case we need to supply the first argument `:` which selects all rows. @@ -782,7 +769,7 @@ which selects all rows. A[:,[0,2]] ``` - + Now, suppose that we want to select the submatrix made up of the second and fourth rows as well as the first and third columns. This is where indexing gets slightly tricky. It is natural to try to use lists to retrieve the rows and columns: @@ -791,21 +778,21 @@ indexing gets slightly tricky. It is natural to try to use lists to retrieve th A[[1,3],[0,2]] ``` - + Oops --- what happened? We got a one-dimensional array of length two identical to ```{python} np.array([A[1,0],A[3,2]]) ``` - + Similarly, the following code fails to extract the submatrix comprised of the second and fourth rows and the first, third, and fourth columns: ```{python} A[[1,3],[0,2,3]] ``` - + We can see what has gone wrong here. When supplied with two indexing lists, the `numpy` interpretation is that these provide pairs of $i,j$ indices for a series of entries. That is why the pair of lists must have the same length. However, that was not our intent, since we are looking for a submatrix. One easy way to do this is as follows. We first create a submatrix by subsetting the rows of `A`, and then on the fly we make a further submatrix by subsetting its columns. @@ -816,7 +803,7 @@ A[[1,3]][:,[0,2]] ``` - + There are more efficient ways of achieving the same result. @@ -828,7 +815,7 @@ idx = np.ix_([1,3],[0,2,3]) A[idx] ``` - + Alternatively, we can subset matrices efficiently using slices. @@ -842,7 +829,7 @@ A[1:4:2,0:3:2] ``` - + Why are we able to retrieve a submatrix directly using slices but not using lists? Its because they are different `Python` types, and are treated differently by `numpy`. @@ -858,7 +845,7 @@ Slices can be used to extract objects from arbitrary sequences, such as strings, - + ### Boolean Indexing In `numpy`, a *Boolean* is a type that equals either `True` or `False` (also represented as $1$ and $0$, respectively). @@ -875,7 +862,7 @@ keep_rows[[1,3]] = True keep_rows ``` - + Note that the elements of `keep_rows`, when viewed as integers, are the same as the values of `np.array([0,1,0,1])`. Below, we use `==` to verify their equality. When applied to two arrays, the `==` operation is applied elementwise. @@ -884,7 +871,7 @@ applied to two arrays, the `==` operation is applied elementwise. np.all(keep_rows == np.array([0,1,0,1])) ``` - + (Here, the function `np.all()` has checked whether all entries of an array are `True`. A similar function, `np.any()`, can be used to check whether any entries of an array are `True`.) @@ -896,14 +883,14 @@ The former retrieves the first, second, first, and second rows of `A`. A[np.array([0,1,0,1])] ``` - + By contrast, `keep_rows` retrieves only the second and fourth rows of `A` --- i.e. the rows for which the Boolean equals `TRUE`. ```{python} A[keep_rows] ``` - + This example shows that Booleans and integers are treated differently by `numpy`. @@ -927,7 +914,7 @@ A[idx_mixed] ``` - + For more details on indexing in `numpy`, readers are referred to the `numpy` tutorial mentioned earlier. @@ -980,7 +967,7 @@ files. Before loading data into `Python`, it is a good idea to view it using a text editor or other software, such as Microsoft Excel. - + We now take a look at the column of `Auto` corresponding to the variable `horsepower`: @@ -1001,7 +988,7 @@ We see the culprit is the value `?`, which is being used to encode missing value - + To fix the problem, we must provide `pd.read_csv()` with an argument called `na_values`. Now, each instance of `?` in the file is replaced with the value `np.nan`, which means *not a number*: @@ -1013,8 +1000,8 @@ Auto = pd.read_csv('Auto.data', Auto['horsepower'].sum() ``` - - + + The `Auto.shape` attribute tells us that the data has 397 observations, or rows, and nine variables, or columns. @@ -1022,7 +1009,7 @@ observations, or rows, and nine variables, or columns. Auto.shape ``` - + There are various ways to deal with missing data. In this case, since only five of the rows contain missing @@ -1033,7 +1020,7 @@ Auto_new = Auto.dropna() Auto_new.shape ``` - + ### Basics of Selecting Rows and Columns @@ -1044,7 +1031,7 @@ Auto = Auto_new # overwrite the previous value Auto.columns ``` - + Accessing the rows and columns of a data frame is similar, but not identical, to accessing the rows and columns of an array. Recall that the first argument to the `[]` method @@ -1303,8 +1290,8 @@ The plot methods of a data frame return a familiar object: an axes. We can use it to update the plot as we did previously: ```{python} -ax = Auto.plot.scatter('horsepower', 'mpg'); -ax.set_title('Horsepower vs. MPG') +ax = Auto.plot.scatter('horsepower', 'mpg') +ax.set_title('Horsepower vs. MPG'); ``` If we want to save the figure that contains a given axes, we can find the relevant figure @@ -1329,8 +1316,8 @@ Auto.plot.scatter('horsepower', 'mpg', ax=axes[1]); ``` Note also that the columns of a data frame can be accessed as attributes: try typing in `Auto.horsepower`. - - + + We now consider the `cylinders` variable. Typing in `Auto.cylinders.dtype` reveals that it is being treated as a quantitative variable. However, since there is only a small number of possible values for this variable, we may wish to treat it as qualitative. Below, we replace @@ -1349,7 +1336,7 @@ fig, ax = subplots(figsize=(8, 8)) Auto.boxplot('mpg', by='cylinders', ax=ax); ``` - + The `hist()` method can be used to plot a *histogram*. ```{python} diff --git a/Ch02-statlearn-lab.ipynb b/Ch02-statlearn-lab.ipynb index e7729c9..d84ec4b 100644 --- a/Ch02-statlearn-lab.ipynb +++ b/Ch02-statlearn-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "4a4000ea", + "id": "245f0c86", "metadata": {}, "source": [ "\n", @@ -14,7 +14,7 @@ }, { "cell_type": "markdown", - "id": "ca503bf1", + "id": "5ab29948", "metadata": {}, "source": [ "## Getting Started" @@ -22,7 +22,7 @@ }, { "cell_type": "markdown", - "id": "4d90d49a", + "id": "ed622870", "metadata": {}, "source": [ "To run the labs in this book, you will need two things:\n", @@ -33,7 +33,7 @@ }, { "cell_type": "markdown", - "id": "c05e9a74", + "id": "844d37fc", "metadata": {}, "source": [ "You can download and install `Python3` by following the instructions available at [anaconda.com](http://anaconda.com). " @@ -41,7 +41,7 @@ }, { "cell_type": "markdown", - "id": "a4fa6a12", + "id": "462ff1fe", "metadata": {}, "source": [ " There are a number of ways to get access to `Jupyter`. Here are just a few:\n", @@ -63,7 +63,7 @@ }, { "cell_type": "markdown", - "id": "fb245ea1", + "id": "b46f9182", "metadata": {}, "source": [ "## Basic Commands\n" @@ -71,7 +71,7 @@ }, { "cell_type": "markdown", - "id": "df72fe8e", + "id": "54060fd9", "metadata": {}, "source": [ "In this lab, we will introduce some simple `Python` commands. \n", @@ -83,7 +83,7 @@ }, { "cell_type": "markdown", - "id": "713233e6", + "id": "d3dbd0e9", "metadata": {}, "source": [ "Like most programming languages, `Python` uses *functions*\n", @@ -99,13 +99,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "3e6aae64", + "id": "9e8aa21f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.100366Z", - "iopub.status.busy": "2023-08-07T01:31:07.099907Z", - "iopub.status.idle": "2023-08-07T01:31:07.112719Z", - "shell.execute_reply": "2023-08-07T01:31:07.112404Z" + "iopub.execute_input": "2023-08-21T02:30:50.006830Z", + "iopub.status.busy": "2023-08-21T02:30:50.006669Z", + "iopub.status.idle": "2023-08-21T02:30:50.012514Z", + "shell.execute_reply": "2023-08-21T02:30:50.012071Z" } }, "outputs": [ @@ -123,7 +123,7 @@ }, { "cell_type": "markdown", - "id": "790e89ef", + "id": "27d935f8", "metadata": {}, "source": [ " The following command will provide information about the `print()` function." @@ -132,13 +132,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "086066fd", + "id": "d62ec119", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.114785Z", - "iopub.status.busy": "2023-08-07T01:31:07.114641Z", - "iopub.status.idle": "2023-08-07T01:31:07.142347Z", - "shell.execute_reply": "2023-08-07T01:31:07.142078Z" + "iopub.execute_input": "2023-08-21T02:30:50.014650Z", + "iopub.status.busy": "2023-08-21T02:30:50.014510Z", + "iopub.status.idle": "2023-08-21T02:30:50.037036Z", + "shell.execute_reply": "2023-08-21T02:30:50.036708Z" } }, "outputs": [], @@ -148,7 +148,7 @@ }, { "cell_type": "markdown", - "id": "1519b474", + "id": "04b3e2a3", "metadata": {}, "source": [ "Adding two integers in `Python` is pretty intuitive." @@ -157,13 +157,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "cb86e827", + "id": "c64e9f4d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.143968Z", - "iopub.status.busy": "2023-08-07T01:31:07.143865Z", - "iopub.status.idle": "2023-08-07T01:31:07.147062Z", - "shell.execute_reply": "2023-08-07T01:31:07.146758Z" + "iopub.execute_input": "2023-08-21T02:30:50.039073Z", + "iopub.status.busy": "2023-08-21T02:30:50.038937Z", + "iopub.status.idle": "2023-08-21T02:30:50.042687Z", + "shell.execute_reply": "2023-08-21T02:30:50.042283Z" } }, "outputs": [ @@ -184,7 +184,7 @@ }, { "cell_type": "markdown", - "id": "995ac4a8", + "id": "cd754cba", "metadata": {}, "source": [ "In `Python`, textual data is handled using\n", @@ -197,13 +197,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "f4d45d80", + "id": "9abccc1f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.148744Z", - "iopub.status.busy": "2023-08-07T01:31:07.148640Z", - "iopub.status.idle": "2023-08-07T01:31:07.150772Z", - "shell.execute_reply": "2023-08-07T01:31:07.150514Z" + "iopub.execute_input": "2023-08-21T02:30:50.044384Z", + "iopub.status.busy": "2023-08-21T02:30:50.044255Z", + "iopub.status.idle": "2023-08-21T02:30:50.046837Z", + "shell.execute_reply": "2023-08-21T02:30:50.046505Z" } }, "outputs": [ @@ -224,7 +224,7 @@ }, { "cell_type": "markdown", - "id": "54a86535", + "id": "c28db903", "metadata": {}, "source": [ " A string is actually a type of *sequence*: this is a generic term for an ordered list. \n", @@ -234,7 +234,7 @@ }, { "cell_type": "markdown", - "id": "f2cd64af", + "id": "5fdcc5a1", "metadata": {}, "source": [ "The following command instructs `Python` to join together\n", @@ -246,13 +246,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "e386aff9", + "id": "802ca33c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.152254Z", - "iopub.status.busy": "2023-08-07T01:31:07.152161Z", - "iopub.status.idle": "2023-08-07T01:31:07.154110Z", - "shell.execute_reply": "2023-08-07T01:31:07.153860Z" + "iopub.execute_input": "2023-08-21T02:30:50.048710Z", + "iopub.status.busy": "2023-08-21T02:30:50.048580Z", + "iopub.status.idle": "2023-08-21T02:30:50.050939Z", + "shell.execute_reply": "2023-08-21T02:30:50.050571Z" } }, "outputs": [ @@ -274,7 +274,7 @@ }, { "cell_type": "markdown", - "id": "185fdcfa", + "id": "5492ecd1", "metadata": {}, "source": [ "Note that we used the brackets\n", @@ -287,13 +287,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "f81b1212", + "id": "a8c72744", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.155703Z", - "iopub.status.busy": "2023-08-07T01:31:07.155602Z", - "iopub.status.idle": "2023-08-07T01:31:07.157695Z", - "shell.execute_reply": "2023-08-07T01:31:07.157430Z" + "iopub.execute_input": "2023-08-21T02:30:50.052919Z", + "iopub.status.busy": "2023-08-21T02:30:50.052791Z", + "iopub.status.idle": "2023-08-21T02:30:50.055246Z", + "shell.execute_reply": "2023-08-21T02:30:50.054868Z" } }, "outputs": [ @@ -315,7 +315,7 @@ }, { "cell_type": "markdown", - "id": "f421a679", + "id": "8f42ea1d", "metadata": {}, "source": [ "The result may appear slightly counterintuitive: why did `Python` not add the entries of the lists\n", @@ -327,7 +327,7 @@ }, { "cell_type": "markdown", - "id": "911db9e2", + "id": "69015df5", "metadata": {}, "source": [ "This example reflects the fact that \n", @@ -340,7 +340,7 @@ }, { "cell_type": "markdown", - "id": "2045f04d", + "id": "16bfc4a2", "metadata": {}, "source": [ "## Introduction to Numerical Python\n", @@ -352,7 +352,7 @@ }, { "cell_type": "markdown", - "id": "b4ef08ea", + "id": "f5bed3f0", "metadata": {}, "source": [ " To access `numpy`, we must first `import` it." @@ -361,13 +361,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "13739a14", + "id": "f1c7d1db", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.159285Z", - "iopub.status.busy": "2023-08-07T01:31:07.159192Z", - "iopub.status.idle": "2023-08-07T01:31:07.234257Z", - "shell.execute_reply": "2023-08-07T01:31:07.232929Z" + "iopub.execute_input": "2023-08-21T02:30:50.057236Z", + "iopub.status.busy": "2023-08-21T02:30:50.057113Z", + "iopub.status.idle": "2023-08-21T02:30:50.139977Z", + "shell.execute_reply": "2023-08-21T02:30:50.137735Z" }, "lines_to_next_cell": 0 }, @@ -378,7 +378,7 @@ }, { "cell_type": "markdown", - "id": "587207d9", + "id": "5c8614e7", "metadata": {}, "source": [ "In the previous line, we named the `numpy` *module* `np`; an abbreviation for easier referencing." @@ -386,7 +386,7 @@ }, { "cell_type": "markdown", - "id": "c485aeb9", + "id": "ba1224a6", "metadata": {}, "source": [ "In `numpy`, an *array* is a generic term for a multidimensional\n", @@ -397,13 +397,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "f3f62d0a", + "id": "e2ea2bfd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.242381Z", - "iopub.status.busy": "2023-08-07T01:31:07.241892Z", - "iopub.status.idle": "2023-08-07T01:31:07.248988Z", - "shell.execute_reply": "2023-08-07T01:31:07.248223Z" + "iopub.execute_input": "2023-08-21T02:30:50.147531Z", + "iopub.status.busy": "2023-08-21T02:30:50.146143Z", + "iopub.status.idle": "2023-08-21T02:30:50.152633Z", + "shell.execute_reply": "2023-08-21T02:30:50.151582Z" }, "lines_to_next_cell": 0 }, @@ -415,7 +415,7 @@ }, { "cell_type": "markdown", - "id": "d5e7e5e3", + "id": "a977e05a", "metadata": {}, "source": [ "Note that if you forgot to run the `import numpy as np` command earlier, then\n", @@ -426,7 +426,7 @@ }, { "cell_type": "markdown", - "id": "5ba313c6", + "id": "742431b6", "metadata": {}, "source": [ "Since `x` and `y` have been defined using `np.array()`, we get a sensible result when we add them together. Compare this to our results in the previous section,\n", @@ -436,13 +436,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "3cff111f", + "id": "59fbf9fd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.257202Z", - "iopub.status.busy": "2023-08-07T01:31:07.256782Z", - "iopub.status.idle": "2023-08-07T01:31:07.270208Z", - "shell.execute_reply": "2023-08-07T01:31:07.265441Z" + "iopub.execute_input": "2023-08-21T02:30:50.158172Z", + "iopub.status.busy": "2023-08-21T02:30:50.157789Z", + "iopub.status.idle": "2023-08-21T02:30:50.165288Z", + "shell.execute_reply": "2023-08-21T02:30:50.163928Z" }, "lines_to_next_cell": 0 }, @@ -464,7 +464,7 @@ }, { "cell_type": "markdown", - "id": "96db430f", + "id": "2ceccc2b", "metadata": {}, "source": [ " \n", @@ -473,7 +473,7 @@ }, { "cell_type": "markdown", - "id": "801647e7", + "id": "74be6d74", "metadata": {}, "source": [ "In `numpy`, matrices are typically represented as two-dimensional arrays, and vectors as one-dimensional arrays. {While it is also possible to create matrices using `np.matrix()`, we will use `np.array()` throughout the labs in this book.}\n", @@ -483,13 +483,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "30d6c7f8", + "id": "2279437e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.278373Z", - "iopub.status.busy": "2023-08-07T01:31:07.277218Z", - "iopub.status.idle": "2023-08-07T01:31:07.289564Z", - "shell.execute_reply": "2023-08-07T01:31:07.288533Z" + "iopub.execute_input": "2023-08-21T02:30:50.169832Z", + "iopub.status.busy": "2023-08-21T02:30:50.169269Z", + "iopub.status.idle": "2023-08-21T02:30:50.179794Z", + "shell.execute_reply": "2023-08-21T02:30:50.177395Z" }, "lines_to_next_cell": 0 }, @@ -513,7 +513,7 @@ }, { "cell_type": "markdown", - "id": "5df2b6c3", + "id": "f96f304d", "metadata": {}, "source": [ " \n", @@ -522,7 +522,7 @@ }, { "cell_type": "markdown", - "id": "d7804f5e", + "id": "f764f7d1", "metadata": {}, "source": [ "The object `x` has several \n", @@ -534,13 +534,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "42d49be4", + "id": "75bf1b1e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.295010Z", - "iopub.status.busy": "2023-08-07T01:31:07.294658Z", - "iopub.status.idle": "2023-08-07T01:31:07.304597Z", - "shell.execute_reply": "2023-08-07T01:31:07.303841Z" + "iopub.execute_input": "2023-08-21T02:30:50.186343Z", + "iopub.status.busy": "2023-08-21T02:30:50.185842Z", + "iopub.status.idle": "2023-08-21T02:30:50.192379Z", + "shell.execute_reply": "2023-08-21T02:30:50.190824Z" } }, "outputs": [ @@ -561,7 +561,7 @@ }, { "cell_type": "markdown", - "id": "765e1496", + "id": "4e3b83bf", "metadata": {}, "source": [ "The output indicates that `x` is a two-dimensional array. \n", @@ -572,13 +572,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "de32b275", + "id": "58292240", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.309281Z", - "iopub.status.busy": "2023-08-07T01:31:07.309017Z", - "iopub.status.idle": "2023-08-07T01:31:07.313532Z", - "shell.execute_reply": "2023-08-07T01:31:07.312901Z" + "iopub.execute_input": "2023-08-21T02:30:50.201648Z", + "iopub.status.busy": "2023-08-21T02:30:50.201225Z", + "iopub.status.idle": "2023-08-21T02:30:50.207481Z", + "shell.execute_reply": "2023-08-21T02:30:50.206847Z" }, "lines_to_next_cell": 0 }, @@ -600,7 +600,7 @@ }, { "cell_type": "markdown", - "id": "044bf011", + "id": "cf9cf94b", "metadata": {}, "source": [ "Why is `x` comprised of integers? This is because we created `x` by passing in exclusively integers to the `np.array()` function.\n", @@ -612,13 +612,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "528c3fa0", + "id": "fc5fff57", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.318659Z", - "iopub.status.busy": "2023-08-07T01:31:07.318386Z", - "iopub.status.idle": "2023-08-07T01:31:07.323627Z", - "shell.execute_reply": "2023-08-07T01:31:07.322311Z" + "iopub.execute_input": "2023-08-21T02:30:50.213702Z", + "iopub.status.busy": "2023-08-21T02:30:50.213443Z", + "iopub.status.idle": "2023-08-21T02:30:50.222030Z", + "shell.execute_reply": "2023-08-21T02:30:50.220707Z" }, "lines_to_next_cell": 2 }, @@ -640,7 +640,7 @@ }, { "cell_type": "markdown", - "id": "053da117", + "id": "41a79641", "metadata": {}, "source": [ "Typing `fun?` will cause `Python` to display \n", @@ -651,13 +651,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "fbf8763b", + "id": "762562a6", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.328591Z", - "iopub.status.busy": "2023-08-07T01:31:07.328076Z", - "iopub.status.idle": "2023-08-07T01:31:07.333043Z", - "shell.execute_reply": "2023-08-07T01:31:07.332225Z" + "iopub.execute_input": "2023-08-21T02:30:50.234104Z", + "iopub.status.busy": "2023-08-21T02:30:50.231808Z", + "iopub.status.idle": "2023-08-21T02:30:50.240454Z", + "shell.execute_reply": "2023-08-21T02:30:50.238805Z" }, "lines_to_next_cell": 0 }, @@ -668,7 +668,7 @@ }, { "cell_type": "markdown", - "id": "0df45f3d", + "id": "d4d82167", "metadata": {}, "source": [ "This documentation indicates that we could create a floating point array by passing a `dtype` argument into `np.array()`." @@ -677,13 +677,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "482d0c05", + "id": "66d2b82a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.336392Z", - "iopub.status.busy": "2023-08-07T01:31:07.336129Z", - "iopub.status.idle": "2023-08-07T01:31:07.341753Z", - "shell.execute_reply": "2023-08-07T01:31:07.340890Z" + "iopub.execute_input": "2023-08-21T02:30:50.258586Z", + "iopub.status.busy": "2023-08-21T02:30:50.258302Z", + "iopub.status.idle": "2023-08-21T02:30:50.266396Z", + "shell.execute_reply": "2023-08-21T02:30:50.264847Z" }, "lines_to_next_cell": 2 }, @@ -705,7 +705,7 @@ }, { "cell_type": "markdown", - "id": "757c10a0", + "id": "1e3ba5be", "metadata": {}, "source": [ "The array `x` is two-dimensional. We can find out the number of rows and columns by looking\n", @@ -715,13 +715,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "192cdf26", + "id": "89881402", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.345546Z", - "iopub.status.busy": "2023-08-07T01:31:07.345295Z", - "iopub.status.idle": "2023-08-07T01:31:07.350515Z", - "shell.execute_reply": "2023-08-07T01:31:07.349915Z" + "iopub.execute_input": "2023-08-21T02:30:50.276010Z", + "iopub.status.busy": "2023-08-21T02:30:50.275747Z", + "iopub.status.idle": "2023-08-21T02:30:50.282746Z", + "shell.execute_reply": "2023-08-21T02:30:50.281551Z" }, "lines_to_next_cell": 2 }, @@ -743,7 +743,7 @@ }, { "cell_type": "markdown", - "id": "b3d091f4", + "id": "2967b644", "metadata": {}, "source": [ "A *method* is a function that is associated with an\n", @@ -758,13 +758,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "4420b967", + "id": "0572d3f6", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.353854Z", - "iopub.status.busy": "2023-08-07T01:31:07.353625Z", - "iopub.status.idle": "2023-08-07T01:31:07.359342Z", - "shell.execute_reply": "2023-08-07T01:31:07.358664Z" + "iopub.execute_input": "2023-08-21T02:30:50.289721Z", + "iopub.status.busy": "2023-08-21T02:30:50.289153Z", + "iopub.status.idle": "2023-08-21T02:30:50.296949Z", + "shell.execute_reply": "2023-08-21T02:30:50.296137Z" }, "lines_to_next_cell": 0 }, @@ -787,7 +787,7 @@ }, { "cell_type": "markdown", - "id": "ca0ff297", + "id": "e3f49995", "metadata": {}, "source": [ "We could also sum the elements of `x` by passing in `x` as an argument to the `np.sum()` function. " @@ -796,13 +796,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "5af5e20f", + "id": "33b10a6f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.362588Z", - "iopub.status.busy": "2023-08-07T01:31:07.362222Z", - "iopub.status.idle": "2023-08-07T01:31:07.369274Z", - "shell.execute_reply": "2023-08-07T01:31:07.368440Z" + "iopub.execute_input": "2023-08-21T02:30:50.302890Z", + "iopub.status.busy": "2023-08-21T02:30:50.302062Z", + "iopub.status.idle": "2023-08-21T02:30:50.309355Z", + "shell.execute_reply": "2023-08-21T02:30:50.308370Z" }, "lines_to_next_cell": 0 }, @@ -825,7 +825,7 @@ }, { "cell_type": "markdown", - "id": "355ad58f", + "id": "2f3dd2c3", "metadata": {}, "source": [ " As another example, the\n", @@ -842,13 +842,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "77a0df31", + "id": "a32716db", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.377957Z", - "iopub.status.busy": "2023-08-07T01:31:07.377679Z", - "iopub.status.idle": "2023-08-07T01:31:07.382462Z", - "shell.execute_reply": "2023-08-07T01:31:07.381503Z" + "iopub.execute_input": "2023-08-21T02:30:50.318443Z", + "iopub.status.busy": "2023-08-21T02:30:50.318257Z", + "iopub.status.idle": "2023-08-21T02:30:50.323761Z", + "shell.execute_reply": "2023-08-21T02:30:50.322744Z" } }, "outputs": [ @@ -873,7 +873,7 @@ }, { "cell_type": "markdown", - "id": "e68cddfa", + "id": "2483179e", "metadata": {}, "source": [ "The previous output reveals that `numpy` arrays are specified as a sequence\n", @@ -882,7 +882,7 @@ }, { "cell_type": "markdown", - "id": "4b16c07d", + "id": "e256575f", "metadata": {}, "source": [ "`Python` (and hence `numpy`) uses 0-based\n", @@ -893,13 +893,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "c57ce2ca", + "id": "3db6e1cf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.387542Z", - "iopub.status.busy": "2023-08-07T01:31:07.387391Z", - "iopub.status.idle": "2023-08-07T01:31:07.396846Z", - "shell.execute_reply": "2023-08-07T01:31:07.395028Z" + "iopub.execute_input": "2023-08-21T02:30:50.334724Z", + "iopub.status.busy": "2023-08-21T02:30:50.334410Z", + "iopub.status.idle": "2023-08-21T02:30:50.338378Z", + "shell.execute_reply": "2023-08-21T02:30:50.338028Z" }, "lines_to_next_cell": 0 }, @@ -921,7 +921,7 @@ }, { "cell_type": "markdown", - "id": "9a4feee5", + "id": "0e10119e", "metadata": {}, "source": [ "Similarly, `x_reshape[1,2]` yields the element in the second row and the third column \n", @@ -931,13 +931,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "ea55b034", + "id": "e15c753f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.400701Z", - "iopub.status.busy": "2023-08-07T01:31:07.400457Z", - "iopub.status.idle": "2023-08-07T01:31:07.405575Z", - "shell.execute_reply": "2023-08-07T01:31:07.404866Z" + "iopub.execute_input": "2023-08-21T02:30:50.340165Z", + "iopub.status.busy": "2023-08-21T02:30:50.340074Z", + "iopub.status.idle": "2023-08-21T02:30:50.342590Z", + "shell.execute_reply": "2023-08-21T02:30:50.342221Z" }, "lines_to_next_cell": 0 }, @@ -959,7 +959,7 @@ }, { "cell_type": "markdown", - "id": "7a3c27dd", + "id": "f9c55622", "metadata": {}, "source": [ "Similarly, `x[2]` yields the\n", @@ -972,13 +972,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "b897a965", + "id": "91c6e7d8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.409601Z", - "iopub.status.busy": "2023-08-07T01:31:07.408541Z", - "iopub.status.idle": "2023-08-07T01:31:07.438250Z", - "shell.execute_reply": "2023-08-07T01:31:07.428509Z" + "iopub.execute_input": "2023-08-21T02:30:50.344326Z", + "iopub.status.busy": "2023-08-21T02:30:50.344207Z", + "iopub.status.idle": "2023-08-21T02:30:50.346683Z", + "shell.execute_reply": "2023-08-21T02:30:50.346268Z" } }, "outputs": [ @@ -1009,7 +1009,7 @@ }, { "cell_type": "markdown", - "id": "77ab8534", + "id": "8a840507", "metadata": {}, "source": [ "Modifying `x_reshape` also modified `x` because the two objects occupy the same space in memory.\n", @@ -1020,7 +1020,7 @@ }, { "cell_type": "markdown", - "id": "8d5214bc", + "id": "ec551f3e", "metadata": {}, "source": [ "We just saw that we can modify an element of an array. Can we also modify a tuple? It turns out that we cannot --- and trying to do so introduces\n", @@ -1030,13 +1030,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "1de2f886", + "id": "59d95dce", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.440680Z", - "iopub.status.busy": "2023-08-07T01:31:07.440530Z", - "iopub.status.idle": "2023-08-07T01:31:07.563057Z", - "shell.execute_reply": "2023-08-07T01:31:07.562758Z" + "iopub.execute_input": "2023-08-21T02:30:50.348719Z", + "iopub.status.busy": "2023-08-21T02:30:50.348588Z", + "iopub.status.idle": "2023-08-21T02:30:50.475469Z", + "shell.execute_reply": "2023-08-21T02:30:50.475072Z" }, "lines_to_next_cell": 2 }, @@ -1060,7 +1060,7 @@ }, { "cell_type": "markdown", - "id": "5f8a5095", + "id": "d594f1af", "metadata": {}, "source": [ "We now briefly mention some attributes of arrays that will come in handy. An array's `shape` attribute contains its dimension; this is always a tuple.\n", @@ -1070,13 +1070,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "634a18d8", + "id": "a6fde9af", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.564736Z", - "iopub.status.busy": "2023-08-07T01:31:07.564627Z", - "iopub.status.idle": "2023-08-07T01:31:07.567288Z", - "shell.execute_reply": "2023-08-07T01:31:07.566927Z" + "iopub.execute_input": "2023-08-21T02:30:50.477504Z", + "iopub.status.busy": "2023-08-21T02:30:50.477351Z", + "iopub.status.idle": "2023-08-21T02:30:50.480282Z", + "shell.execute_reply": "2023-08-21T02:30:50.479934Z" } }, "outputs": [ @@ -1101,7 +1101,7 @@ }, { "cell_type": "markdown", - "id": "1db9f878", + "id": "76d20b98", "metadata": {}, "source": [ "Notice that the three individual outputs `(2,3)`, `2`, and `array([[5, 4],[2, 5], [3,6]])` are themselves output as a tuple. \n", @@ -1114,13 +1114,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "38563574", + "id": "fadb6b45", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.568776Z", - "iopub.status.busy": "2023-08-07T01:31:07.568658Z", - "iopub.status.idle": "2023-08-07T01:31:07.570939Z", - "shell.execute_reply": "2023-08-07T01:31:07.570683Z" + "iopub.execute_input": "2023-08-21T02:30:50.482380Z", + "iopub.status.busy": "2023-08-21T02:30:50.482050Z", + "iopub.status.idle": "2023-08-21T02:30:50.484844Z", + "shell.execute_reply": "2023-08-21T02:30:50.484499Z" } }, "outputs": [ @@ -1142,7 +1142,7 @@ }, { "cell_type": "markdown", - "id": "cdee1904", + "id": "22fab2ce", "metadata": {}, "source": [ "We can also square the elements:" @@ -1151,13 +1151,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "6d7eb044", + "id": "fda3134b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.572448Z", - "iopub.status.busy": "2023-08-07T01:31:07.572351Z", - "iopub.status.idle": "2023-08-07T01:31:07.575587Z", - "shell.execute_reply": "2023-08-07T01:31:07.575322Z" + "iopub.execute_input": "2023-08-21T02:30:50.486624Z", + "iopub.status.busy": "2023-08-21T02:30:50.486495Z", + "iopub.status.idle": "2023-08-21T02:30:50.489228Z", + "shell.execute_reply": "2023-08-21T02:30:50.488779Z" } }, "outputs": [ @@ -1178,7 +1178,7 @@ }, { "cell_type": "markdown", - "id": "7322f04a", + "id": "1278f26b", "metadata": {}, "source": [ "We can compute the square roots using the same notation, raising to the power of $1/2$ instead of 2." @@ -1187,13 +1187,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "dcf49c32", + "id": "52eb335b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.577102Z", - "iopub.status.busy": "2023-08-07T01:31:07.577016Z", - "iopub.status.idle": "2023-08-07T01:31:07.579246Z", - "shell.execute_reply": "2023-08-07T01:31:07.578999Z" + "iopub.execute_input": "2023-08-21T02:30:50.491134Z", + "iopub.status.busy": "2023-08-21T02:30:50.491017Z", + "iopub.status.idle": "2023-08-21T02:30:50.493502Z", + "shell.execute_reply": "2023-08-21T02:30:50.493215Z" }, "lines_to_next_cell": 2 }, @@ -1216,7 +1216,7 @@ }, { "cell_type": "markdown", - "id": "a4ccea4f", + "id": "299a5a85", "metadata": {}, "source": [ "Throughout this book, we will often want to generate random data. \n", @@ -1234,29 +1234,29 @@ { "cell_type": "code", "execution_count": 28, - "id": "dec2f36f", + "id": "ac5e9d29", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.580689Z", - "iopub.status.busy": "2023-08-07T01:31:07.580612Z", - "iopub.status.idle": "2023-08-07T01:31:07.584056Z", - "shell.execute_reply": "2023-08-07T01:31:07.583793Z" + "iopub.execute_input": "2023-08-21T02:30:50.495119Z", + "iopub.status.busy": "2023-08-21T02:30:50.494978Z", + "iopub.status.idle": "2023-08-21T02:30:50.497930Z", + "shell.execute_reply": "2023-08-21T02:30:50.497509Z" } }, "outputs": [ { "data": { "text/plain": [ - "array([ 0.28487251, -0.0534236 , -1.86832864, 1.78827374, 0.48221682,\n", - " -3.17793931, -1.6332484 , -0.49585356, -0.31492622, -1.36713814,\n", - " 0.37968558, 0.81464237, -0.47429689, 0.2679195 , 1.63996671,\n", - " -1.23937763, 1.521238 , 1.98059926, -0.80482822, 1.32876276,\n", - " -0.03759817, -0.36373966, -0.9397031 , 1.23617303, 0.4805475 ,\n", - " -1.09917818, 0.53757099, -0.53317193, 0.8570799 , 0.04315739,\n", - " 0.78414684, -0.66807876, 0.26146739, 1.96090522, 0.35778689,\n", - " 0.01948734, -1.31777815, -0.19436238, -0.4786966 , 1.44525401,\n", - " -2.90436114, -0.00827639, -0.30648127, 1.68072061, -0.74265177,\n", - " 1.1388691 , 0.54610802, -1.03849966, 1.31594301, 1.6775233 ])" + "array([ 2.19545458, -1.12223315, 0.95847166, 0.46122203, 1.84897705,\n", + " -1.04047853, 0.83676339, -2.19601245, 0.39698389, 0.04758151,\n", + " 1.34792486, 0.51216256, -1.63880563, -0.26767825, 0.36112938,\n", + " -1.42339276, 0.13806048, -0.38045245, -0.13536739, 0.48214194,\n", + " -0.25054293, 0.13424863, 0.04936946, -1.27853449, -0.4209532 ,\n", + " 0.08910682, 0.18748123, -1.31285374, -1.08644178, 1.49900139,\n", + " 0.40544918, 1.20019396, -0.51036262, 0.23765685, 1.47352058,\n", + " -0.07829232, 0.24262252, 0.37759976, -0.57005929, -1.32513296,\n", + " -0.21046393, -1.25442347, -0.43034269, -0.11200235, 0.79479638,\n", + " 0.33250308, 0.06516935, 0.60136446, 0.20490462, -2.49918682])" ] }, "execution_count": 28, @@ -1271,7 +1271,7 @@ }, { "cell_type": "markdown", - "id": "9c60001d", + "id": "d77cf45a", "metadata": {}, "source": [ "We create an array `y` by adding an independent $N(50,1)$ random variable to each element of `x`." @@ -1280,13 +1280,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "f535fba4", + "id": "55fa905e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.585516Z", - "iopub.status.busy": "2023-08-07T01:31:07.585421Z", - "iopub.status.idle": "2023-08-07T01:31:07.587077Z", - "shell.execute_reply": "2023-08-07T01:31:07.586859Z" + "iopub.execute_input": "2023-08-21T02:30:50.499959Z", + "iopub.status.busy": "2023-08-21T02:30:50.499825Z", + "iopub.status.idle": "2023-08-21T02:30:50.501900Z", + "shell.execute_reply": "2023-08-21T02:30:50.501456Z" }, "lines_to_next_cell": 0 }, @@ -1297,7 +1297,7 @@ }, { "cell_type": "markdown", - "id": "b267be24", + "id": "eacfecc9", "metadata": {}, "source": [ "The `np.corrcoef()` function computes the correlation matrix between `x` and `y`. The off-diagonal elements give the \n", @@ -1307,21 +1307,21 @@ { "cell_type": "code", "execution_count": 30, - "id": "faf3be25", + "id": "fde0dc19", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.588387Z", - "iopub.status.busy": "2023-08-07T01:31:07.588316Z", - "iopub.status.idle": "2023-08-07T01:31:07.590543Z", - "shell.execute_reply": "2023-08-07T01:31:07.590276Z" + "iopub.execute_input": "2023-08-21T02:30:50.503809Z", + "iopub.status.busy": "2023-08-21T02:30:50.503642Z", + "iopub.status.idle": "2023-08-21T02:30:50.506488Z", + "shell.execute_reply": "2023-08-21T02:30:50.506173Z" } }, "outputs": [ { "data": { "text/plain": [ - "array([[1. , 0.76101507],\n", - " [0.76101507, 1. ]])" + "array([[1. , 0.71287035],\n", + " [0.71287035, 1. ]])" ] }, "execution_count": 30, @@ -1335,7 +1335,7 @@ }, { "cell_type": "markdown", - "id": "c6d0e0ce", + "id": "8a594218", "metadata": {}, "source": [ "If you're following along in your own `Jupyter` notebook, then you probably noticed that you got a different set of results when you ran the past few \n", @@ -1347,13 +1347,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "b6a756e0", + "id": "5099cf54", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.591890Z", - "iopub.status.busy": "2023-08-07T01:31:07.591819Z", - "iopub.status.idle": "2023-08-07T01:31:07.593770Z", - "shell.execute_reply": "2023-08-07T01:31:07.593476Z" + "iopub.execute_input": "2023-08-21T02:30:50.508266Z", + "iopub.status.busy": "2023-08-21T02:30:50.508129Z", + "iopub.status.idle": "2023-08-21T02:30:50.510286Z", + "shell.execute_reply": "2023-08-21T02:30:50.510024Z" }, "lines_to_next_cell": 0 }, @@ -1362,8 +1362,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[-2.54011944 -5.17951981]\n", - "[-1.35824341 8.18618852]\n" + "[-1.87653343 5.36922939]\n", + "[0.09491232 4.0715443 ]\n" ] } ], @@ -1374,7 +1374,7 @@ }, { "cell_type": "markdown", - "id": "a1071413", + "id": "2e209118", "metadata": {}, "source": [ " " @@ -1382,7 +1382,7 @@ }, { "cell_type": "markdown", - "id": "31d9911e", + "id": "ed7697a4", "metadata": {}, "source": [ "In order to ensure that our code provides exactly the same results\n", @@ -1398,13 +1398,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "921b634a", + "id": "9d8074e5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.595226Z", - "iopub.status.busy": "2023-08-07T01:31:07.595146Z", - "iopub.status.idle": "2023-08-07T01:31:07.597847Z", - "shell.execute_reply": "2023-08-07T01:31:07.597615Z" + "iopub.execute_input": "2023-08-21T02:30:50.511982Z", + "iopub.status.busy": "2023-08-21T02:30:50.511863Z", + "iopub.status.idle": "2023-08-21T02:30:50.514616Z", + "shell.execute_reply": "2023-08-21T02:30:50.514196Z" } }, "outputs": [ @@ -1426,7 +1426,7 @@ }, { "cell_type": "markdown", - "id": "7a4da703", + "id": "93f826ef", "metadata": {}, "source": [ "Throughout the labs in this book, we use `np.random.default_rng()` whenever we\n", @@ -1444,13 +1444,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "fe28973e", + "id": "e98472df", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.599368Z", - "iopub.status.busy": "2023-08-07T01:31:07.599288Z", - "iopub.status.idle": "2023-08-07T01:31:07.601614Z", - "shell.execute_reply": "2023-08-07T01:31:07.601377Z" + "iopub.execute_input": "2023-08-21T02:30:50.516571Z", + "iopub.status.busy": "2023-08-21T02:30:50.516443Z", + "iopub.status.idle": "2023-08-21T02:30:50.519319Z", + "shell.execute_reply": "2023-08-21T02:30:50.519062Z" }, "lines_to_next_cell": 0 }, @@ -1474,7 +1474,7 @@ }, { "cell_type": "markdown", - "id": "b6092d9c", + "id": "2870d61f", "metadata": {}, "source": [ " \n" @@ -1483,13 +1483,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "04c26742", + "id": "8c2784fd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.602999Z", - "iopub.status.busy": "2023-08-07T01:31:07.602908Z", - "iopub.status.idle": "2023-08-07T01:31:07.605296Z", - "shell.execute_reply": "2023-08-07T01:31:07.605025Z" + "iopub.execute_input": "2023-08-21T02:30:50.521216Z", + "iopub.status.busy": "2023-08-21T02:30:50.521078Z", + "iopub.status.idle": "2023-08-21T02:30:50.523819Z", + "shell.execute_reply": "2023-08-21T02:30:50.523437Z" }, "lines_to_next_cell": 2 }, @@ -1511,7 +1511,7 @@ }, { "cell_type": "markdown", - "id": "b9212f82", + "id": "86261a69", "metadata": {}, "source": [ "Notice that by default `np.var()` divides by the sample size $n$ rather\n", @@ -1521,13 +1521,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "e35cdcbf", + "id": "7e7205f2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.606804Z", - "iopub.status.busy": "2023-08-07T01:31:07.606687Z", - "iopub.status.idle": "2023-08-07T01:31:07.608810Z", - "shell.execute_reply": "2023-08-07T01:31:07.608584Z" + "iopub.execute_input": "2023-08-21T02:30:50.525631Z", + "iopub.status.busy": "2023-08-21T02:30:50.525508Z", + "iopub.status.idle": "2023-08-21T02:30:50.528164Z", + "shell.execute_reply": "2023-08-21T02:30:50.527790Z" } }, "outputs": [ @@ -1548,7 +1548,7 @@ }, { "cell_type": "markdown", - "id": "41eb4c38", + "id": "d4faf901", "metadata": {}, "source": [ "The `np.mean()`, `np.var()`, and `np.std()` functions can also be applied to the rows and columns of a matrix. \n", @@ -1558,13 +1558,13 @@ { "cell_type": "code", "execution_count": 36, - "id": "fbd49766", + "id": "fce06849", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.610329Z", - "iopub.status.busy": "2023-08-07T01:31:07.610222Z", - "iopub.status.idle": "2023-08-07T01:31:07.612436Z", - "shell.execute_reply": "2023-08-07T01:31:07.612189Z" + "iopub.execute_input": "2023-08-21T02:30:50.529819Z", + "iopub.status.busy": "2023-08-21T02:30:50.529694Z", + "iopub.status.idle": "2023-08-21T02:30:50.532249Z", + "shell.execute_reply": "2023-08-21T02:30:50.531905Z" } }, "outputs": [ @@ -1595,7 +1595,7 @@ }, { "cell_type": "markdown", - "id": "5520aeae", + "id": "6cc355d2", "metadata": {}, "source": [ "Since arrays are row-major ordered, the first axis, i.e. `axis=0`, refers to its rows. We pass this argument into the `mean()` method for the object `X`. " @@ -1604,13 +1604,13 @@ { "cell_type": "code", "execution_count": 37, - "id": "f5865859", + "id": "1403ff7a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.613857Z", - "iopub.status.busy": "2023-08-07T01:31:07.613760Z", - "iopub.status.idle": "2023-08-07T01:31:07.615869Z", - "shell.execute_reply": "2023-08-07T01:31:07.615629Z" + "iopub.execute_input": "2023-08-21T02:30:50.533992Z", + "iopub.status.busy": "2023-08-21T02:30:50.533874Z", + "iopub.status.idle": "2023-08-21T02:30:50.536260Z", + "shell.execute_reply": "2023-08-21T02:30:50.535886Z" } }, "outputs": [ @@ -1631,7 +1631,7 @@ }, { "cell_type": "markdown", - "id": "8aedc41d", + "id": "6785c0ec", "metadata": {}, "source": [ "The following yields the same result." @@ -1640,13 +1640,13 @@ { "cell_type": "code", "execution_count": 38, - "id": "e27b30bf", + "id": "7e9255ba", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.617213Z", - "iopub.status.busy": "2023-08-07T01:31:07.617122Z", - "iopub.status.idle": "2023-08-07T01:31:07.619194Z", - "shell.execute_reply": "2023-08-07T01:31:07.618941Z" + "iopub.execute_input": "2023-08-21T02:30:50.538076Z", + "iopub.status.busy": "2023-08-21T02:30:50.537954Z", + "iopub.status.idle": "2023-08-21T02:30:50.540507Z", + "shell.execute_reply": "2023-08-21T02:30:50.540123Z" }, "lines_to_next_cell": 0 }, @@ -1668,7 +1668,7 @@ }, { "cell_type": "markdown", - "id": "4ee7f516", + "id": "5de246dc", "metadata": {}, "source": [ " " @@ -1676,7 +1676,7 @@ }, { "cell_type": "markdown", - "id": "80ab3209", + "id": "30b002fa", "metadata": {}, "source": [ "## Graphics\n", @@ -1710,13 +1710,13 @@ { "cell_type": "code", "execution_count": 39, - "id": "fed2376c", + "id": "8236e5f7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.620746Z", - "iopub.status.busy": "2023-08-07T01:31:07.620651Z", - "iopub.status.idle": "2023-08-07T01:31:07.972690Z", - "shell.execute_reply": "2023-08-07T01:31:07.972306Z" + "iopub.execute_input": "2023-08-21T02:30:50.542570Z", + "iopub.status.busy": "2023-08-21T02:30:50.542445Z", + "iopub.status.idle": "2023-08-21T02:30:50.874657Z", + "shell.execute_reply": "2023-08-21T02:30:50.874194Z" } }, "outputs": [ @@ -1741,7 +1741,7 @@ }, { "cell_type": "markdown", - "id": "9b697b2a", + "id": "bbef67e6", "metadata": {}, "source": [ "We pause here to note that we have *unpacked* the tuple of length two returned by `subplots()` into the two distinct\n", @@ -1752,13 +1752,13 @@ { "cell_type": "code", "execution_count": 40, - "id": "228ee04d", + "id": "ddc9ed4f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:07.974537Z", - "iopub.status.busy": "2023-08-07T01:31:07.974393Z", - "iopub.status.idle": "2023-08-07T01:31:08.047977Z", - "shell.execute_reply": "2023-08-07T01:31:08.047698Z" + "iopub.execute_input": "2023-08-21T02:30:50.877137Z", + "iopub.status.busy": "2023-08-21T02:30:50.876928Z", + "iopub.status.idle": "2023-08-21T02:30:50.956590Z", + "shell.execute_reply": "2023-08-21T02:30:50.956301Z" } }, "outputs": [ @@ -1781,7 +1781,7 @@ }, { "cell_type": "markdown", - "id": "e040ba84", + "id": "104d6b8f", "metadata": {}, "source": [ "We see that our earlier cell produced a line plot, which is the default. To create a scatterplot, we provide an additional argument to `ax.plot()`, indicating that circles should be displayed." @@ -1790,13 +1790,13 @@ { "cell_type": "code", "execution_count": 41, - "id": "e1dc79d2", + "id": "c64ed600", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:08.049644Z", - "iopub.status.busy": "2023-08-07T01:31:08.049531Z", - "iopub.status.idle": "2023-08-07T01:31:08.126415Z", - "shell.execute_reply": "2023-08-07T01:31:08.126088Z" + "iopub.execute_input": "2023-08-21T02:30:50.958481Z", + "iopub.status.busy": "2023-08-21T02:30:50.958357Z", + "iopub.status.idle": "2023-08-21T02:30:51.038344Z", + "shell.execute_reply": "2023-08-21T02:30:51.037979Z" }, "lines_to_next_cell": 0 }, @@ -1819,7 +1819,7 @@ }, { "cell_type": "markdown", - "id": "960d0ceb", + "id": "840be2a9", "metadata": {}, "source": [ "Different values\n", @@ -1829,7 +1829,7 @@ }, { "cell_type": "markdown", - "id": "833d6751", + "id": "971b98bd", "metadata": {}, "source": [ "As an alternative, we could use the `ax.scatter()` function to create a scatterplot." @@ -1838,13 +1838,13 @@ { "cell_type": "code", "execution_count": 42, - "id": "d6e6bf34", + "id": "bc6245e2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:08.128232Z", - "iopub.status.busy": "2023-08-07T01:31:08.128110Z", - "iopub.status.idle": "2023-08-07T01:31:08.209380Z", - "shell.execute_reply": "2023-08-07T01:31:08.209060Z" + "iopub.execute_input": "2023-08-21T02:30:51.040710Z", + "iopub.status.busy": "2023-08-21T02:30:51.040587Z", + "iopub.status.idle": "2023-08-21T02:30:51.134964Z", + "shell.execute_reply": "2023-08-21T02:30:51.132456Z" } }, "outputs": [ @@ -1866,7 +1866,7 @@ }, { "cell_type": "markdown", - "id": "ff56b51f", + "id": "97f36df0", "metadata": {}, "source": [ "Notice that in the code blocks above, we have ended\n", @@ -1878,13 +1878,13 @@ { "cell_type": "code", "execution_count": 43, - "id": "9c1ea81c", + "id": "2454807b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:08.211056Z", - "iopub.status.busy": "2023-08-07T01:31:08.210953Z", - "iopub.status.idle": "2023-08-07T01:31:08.288790Z", - "shell.execute_reply": "2023-08-07T01:31:08.288489Z" + "iopub.execute_input": "2023-08-21T02:30:51.151101Z", + "iopub.status.busy": "2023-08-21T02:30:51.149919Z", + "iopub.status.idle": "2023-08-21T02:30:51.282995Z", + "shell.execute_reply": "2023-08-21T02:30:51.282645Z" }, "lines_to_next_cell": 0 }, @@ -1892,7 +1892,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 43, @@ -1917,7 +1917,7 @@ }, { "cell_type": "markdown", - "id": "abdc9ceb", + "id": "1230c0a6", "metadata": {}, "source": [ "In what follows, we will use\n", @@ -1930,7 +1930,7 @@ }, { "cell_type": "markdown", - "id": "4b9491f5", + "id": "0ccb9964", "metadata": {}, "source": [ "To label our plot, we make use of the `set_xlabel()`, `set_ylabel()`, and `set_title()` methods\n", @@ -1941,13 +1941,13 @@ { "cell_type": "code", "execution_count": 44, - "id": "e6217bc8", + "id": "1e18a793", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:08.290604Z", - "iopub.status.busy": "2023-08-07T01:31:08.290483Z", - "iopub.status.idle": "2023-08-07T01:31:08.385545Z", - "shell.execute_reply": "2023-08-07T01:31:08.385224Z" + "iopub.execute_input": "2023-08-21T02:30:51.284915Z", + "iopub.status.busy": "2023-08-21T02:30:51.284785Z", + "iopub.status.idle": "2023-08-21T02:30:51.391963Z", + "shell.execute_reply": "2023-08-21T02:30:51.391488Z" } }, "outputs": [ @@ -1972,7 +1972,7 @@ }, { "cell_type": "markdown", - "id": "e8228a39", + "id": "f2d818ee", "metadata": {}, "source": [ " Having access to the figure object `fig` itself means that we can go in and change some aspects and then redisplay it. Here, we change\n", @@ -1982,13 +1982,13 @@ { "cell_type": "code", "execution_count": 45, - "id": "2feef77c", + "id": "aec3f009", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:08.387416Z", - "iopub.status.busy": "2023-08-07T01:31:08.387273Z", - "iopub.status.idle": "2023-08-07T01:31:08.450595Z", - "shell.execute_reply": "2023-08-07T01:31:08.450300Z" + "iopub.execute_input": "2023-08-21T02:30:51.394098Z", + "iopub.status.busy": "2023-08-21T02:30:51.393919Z", + "iopub.status.idle": "2023-08-21T02:30:51.559529Z", + "shell.execute_reply": "2023-08-21T02:30:51.559203Z" }, "lines_to_next_cell": 0 }, @@ -2012,7 +2012,7 @@ }, { "cell_type": "markdown", - "id": "d22f3886", + "id": "dee531cc", "metadata": {}, "source": [ " " @@ -2020,7 +2020,7 @@ }, { "cell_type": "markdown", - "id": "e9187ea8", + "id": "011bf802", "metadata": {}, "source": [ "Occasionally we will want to create several plots within a figure. This can be\n", @@ -2036,13 +2036,13 @@ { "cell_type": "code", "execution_count": 46, - "id": "24c9bd3c", + "id": "2cbc7fd4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:08.452281Z", - "iopub.status.busy": "2023-08-07T01:31:08.452163Z", - "iopub.status.idle": "2023-08-07T01:31:08.736272Z", - "shell.execute_reply": "2023-08-07T01:31:08.735912Z" + "iopub.execute_input": "2023-08-21T02:30:51.561597Z", + "iopub.status.busy": "2023-08-21T02:30:51.561439Z", + "iopub.status.idle": "2023-08-21T02:30:51.881758Z", + "shell.execute_reply": "2023-08-21T02:30:51.881426Z" }, "lines_to_next_cell": 0 }, @@ -2066,7 +2066,7 @@ }, { "cell_type": "markdown", - "id": "7c6bdba5", + "id": "b8ff2e6d", "metadata": {}, "source": [ "We now produce a scatter plot with `'o'` in the second column of the first row and\n", @@ -2076,13 +2076,13 @@ { "cell_type": "code", "execution_count": 47, - "id": "dbe7d87c", + "id": "702f80d9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:08.737985Z", - "iopub.status.busy": "2023-08-07T01:31:08.737874Z", - "iopub.status.idle": "2023-08-07T01:31:08.923196Z", - "shell.execute_reply": "2023-08-07T01:31:08.922900Z" + "iopub.execute_input": "2023-08-21T02:30:51.884225Z", + "iopub.status.busy": "2023-08-21T02:30:51.884077Z", + "iopub.status.idle": "2023-08-21T02:30:52.087336Z", + "shell.execute_reply": "2023-08-21T02:30:52.086823Z" }, "lines_to_next_cell": 0 }, @@ -2107,7 +2107,7 @@ }, { "cell_type": "markdown", - "id": "81d8fa9f", + "id": "5b265f8b", "metadata": {}, "source": [ "Type `subplots?` to learn more about \n", @@ -2118,7 +2118,7 @@ }, { "cell_type": "markdown", - "id": "d3760a25", + "id": "1bd7e707", "metadata": {}, "source": [ "To save the output of `fig`, we call its `savefig()`\n", @@ -2129,13 +2129,13 @@ { "cell_type": "code", "execution_count": 48, - "id": "c86bffe6", + "id": "5493d229", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:08.924865Z", - "iopub.status.busy": "2023-08-07T01:31:08.924753Z", - "iopub.status.idle": "2023-08-07T01:31:10.016493Z", - "shell.execute_reply": "2023-08-07T01:31:10.016161Z" + "iopub.execute_input": "2023-08-21T02:30:52.089376Z", + "iopub.status.busy": "2023-08-21T02:30:52.089230Z", + "iopub.status.idle": "2023-08-21T02:30:53.204823Z", + "shell.execute_reply": "2023-08-21T02:30:53.204456Z" }, "lines_to_next_cell": 2 }, @@ -2147,7 +2147,7 @@ }, { "cell_type": "markdown", - "id": "fd9dbb47", + "id": "7152d0c7", "metadata": {}, "source": [ "We can continue to modify `fig` using step-by-step updates; for example, we can modify the range of the $x$-axis, re-save the figure, and even re-display it. " @@ -2156,13 +2156,13 @@ { "cell_type": "code", "execution_count": 49, - "id": "07f180e1", + "id": "bd07af12", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.018504Z", - "iopub.status.busy": "2023-08-07T01:31:10.018247Z", - "iopub.status.idle": "2023-08-07T01:31:10.254580Z", - "shell.execute_reply": "2023-08-07T01:31:10.254159Z" + "iopub.execute_input": "2023-08-21T02:30:53.206962Z", + "iopub.status.busy": "2023-08-21T02:30:53.206769Z", + "iopub.status.idle": "2023-08-21T02:30:53.457239Z", + "shell.execute_reply": "2023-08-21T02:30:53.456817Z" } }, "outputs": [ @@ -2186,7 +2186,7 @@ }, { "cell_type": "markdown", - "id": "8e013a6f", + "id": "b5278857", "metadata": {}, "source": [ "We now create some more sophisticated plots. The \n", @@ -2206,13 +2206,13 @@ { "cell_type": "code", "execution_count": 50, - "id": "a465c3aa", + "id": "01019508", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.256456Z", - "iopub.status.busy": "2023-08-07T01:31:10.256321Z", - "iopub.status.idle": "2023-08-07T01:31:10.384297Z", - "shell.execute_reply": "2023-08-07T01:31:10.383977Z" + "iopub.execute_input": "2023-08-21T02:30:53.459284Z", + "iopub.status.busy": "2023-08-21T02:30:53.459137Z", + "iopub.status.idle": "2023-08-21T02:30:53.566977Z", + "shell.execute_reply": "2023-08-21T02:30:53.566630Z" }, "lines_to_next_cell": 0 }, @@ -2238,7 +2238,7 @@ }, { "cell_type": "markdown", - "id": "df35daed", + "id": "9ef3c475", "metadata": {}, "source": [ "We can increase the resolution by adding more levels to the image." @@ -2247,13 +2247,13 @@ { "cell_type": "code", "execution_count": 51, - "id": "469979b0", + "id": "7d08992f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.386049Z", - "iopub.status.busy": "2023-08-07T01:31:10.385919Z", - "iopub.status.idle": "2023-08-07T01:31:10.512226Z", - "shell.execute_reply": "2023-08-07T01:31:10.511830Z" + "iopub.execute_input": "2023-08-21T02:30:53.568782Z", + "iopub.status.busy": "2023-08-21T02:30:53.568655Z", + "iopub.status.idle": "2023-08-21T02:30:53.705311Z", + "shell.execute_reply": "2023-08-21T02:30:53.704960Z" }, "lines_to_next_cell": 0 }, @@ -2276,7 +2276,7 @@ }, { "cell_type": "markdown", - "id": "e6aa9a72", + "id": "8e1d37a2", "metadata": {}, "source": [ "To fine-tune the output of the\n", @@ -2293,13 +2293,13 @@ { "cell_type": "code", "execution_count": 52, - "id": "31092abb", + "id": "1f89d704", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.514024Z", - "iopub.status.busy": "2023-08-07T01:31:10.513935Z", - "iopub.status.idle": "2023-08-07T01:31:10.616223Z", - "shell.execute_reply": "2023-08-07T01:31:10.615932Z" + "iopub.execute_input": "2023-08-21T02:30:53.707932Z", + "iopub.status.busy": "2023-08-21T02:30:53.707762Z", + "iopub.status.idle": "2023-08-21T02:30:53.817487Z", + "shell.execute_reply": "2023-08-21T02:30:53.816855Z" }, "lines_to_next_cell": 2 }, @@ -2322,7 +2322,7 @@ }, { "cell_type": "markdown", - "id": "aba44db2", + "id": "2500a6ec", "metadata": {}, "source": [ "## Sequences and Slice Notation" @@ -2330,7 +2330,7 @@ }, { "cell_type": "markdown", - "id": "f0edc818", + "id": "07001b88", "metadata": {}, "source": [ "As seen above, the\n", @@ -2341,13 +2341,13 @@ { "cell_type": "code", "execution_count": 53, - "id": "4e834c17", + "id": "cd971131", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.617982Z", - "iopub.status.busy": "2023-08-07T01:31:10.617853Z", - "iopub.status.idle": "2023-08-07T01:31:10.620257Z", - "shell.execute_reply": "2023-08-07T01:31:10.620018Z" + "iopub.execute_input": "2023-08-21T02:30:53.819476Z", + "iopub.status.busy": "2023-08-21T02:30:53.819332Z", + "iopub.status.idle": "2023-08-21T02:30:53.822437Z", + "shell.execute_reply": "2023-08-21T02:30:53.822105Z" }, "lines_to_next_cell": 2 }, @@ -2370,7 +2370,7 @@ }, { "cell_type": "markdown", - "id": "e95ff002", + "id": "926f96fc", "metadata": {}, "source": [ "The function `np.arange()`\n", @@ -2381,13 +2381,13 @@ { "cell_type": "code", "execution_count": 54, - "id": "65d67d22", + "id": "aa630d16", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.621739Z", - "iopub.status.busy": "2023-08-07T01:31:10.621629Z", - "iopub.status.idle": "2023-08-07T01:31:10.623853Z", - "shell.execute_reply": "2023-08-07T01:31:10.623599Z" + "iopub.execute_input": "2023-08-21T02:30:53.824422Z", + "iopub.status.busy": "2023-08-21T02:30:53.824319Z", + "iopub.status.idle": "2023-08-21T02:30:53.827452Z", + "shell.execute_reply": "2023-08-21T02:30:53.826993Z" } }, "outputs": [ @@ -2409,7 +2409,7 @@ }, { "cell_type": "markdown", - "id": "09d51db7", + "id": "6908bad7", "metadata": {}, "source": [ "Why isn't $10$ output above? This has to do with *slice* notation in `Python`. \n", @@ -2422,13 +2422,13 @@ { "cell_type": "code", "execution_count": 55, - "id": "676ab564", + "id": "89955ee2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.625319Z", - "iopub.status.busy": "2023-08-07T01:31:10.625215Z", - "iopub.status.idle": "2023-08-07T01:31:10.627212Z", - "shell.execute_reply": "2023-08-07T01:31:10.626959Z" + "iopub.execute_input": "2023-08-21T02:30:53.829480Z", + "iopub.status.busy": "2023-08-21T02:30:53.829354Z", + "iopub.status.idle": "2023-08-21T02:30:53.831664Z", + "shell.execute_reply": "2023-08-21T02:30:53.831363Z" }, "lines_to_next_cell": 0 }, @@ -2450,7 +2450,7 @@ }, { "cell_type": "markdown", - "id": "d51b85fc", + "id": "17d73e4d", "metadata": {}, "source": [ "In the code block above, the notation `3:6` is shorthand for `slice(3,6)` when used inside\n", @@ -2460,13 +2460,13 @@ { "cell_type": "code", "execution_count": 56, - "id": "569f45ab", + "id": "517f592d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.628618Z", - "iopub.status.busy": "2023-08-07T01:31:10.628524Z", - "iopub.status.idle": "2023-08-07T01:31:10.630558Z", - "shell.execute_reply": "2023-08-07T01:31:10.630261Z" + "iopub.execute_input": "2023-08-21T02:30:53.833607Z", + "iopub.status.busy": "2023-08-21T02:30:53.833470Z", + "iopub.status.idle": "2023-08-21T02:30:53.836016Z", + "shell.execute_reply": "2023-08-21T02:30:53.835622Z" } }, "outputs": [ @@ -2487,7 +2487,7 @@ }, { "cell_type": "markdown", - "id": "b82b891c", + "id": "680fe656", "metadata": {}, "source": [ "You might have expected `slice(3,6)` to output the fourth through seventh characters in the text string (recalling that `Python` begins its indexing at zero), but instead it output the fourth through sixth. \n", @@ -2517,7 +2517,7 @@ }, { "cell_type": "markdown", - "id": "46aa45f7", + "id": "522a2761", "metadata": {}, "source": [ "## Indexing Data\n", @@ -2527,13 +2527,13 @@ { "cell_type": "code", "execution_count": 57, - "id": "7cf343bd", + "id": "35927abd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.632040Z", - "iopub.status.busy": "2023-08-07T01:31:10.631944Z", - "iopub.status.idle": "2023-08-07T01:31:10.634375Z", - "shell.execute_reply": "2023-08-07T01:31:10.634116Z" + "iopub.execute_input": "2023-08-21T02:30:53.837884Z", + "iopub.status.busy": "2023-08-21T02:30:53.837772Z", + "iopub.status.idle": "2023-08-21T02:30:53.840479Z", + "shell.execute_reply": "2023-08-21T02:30:53.840004Z" } }, "outputs": [ @@ -2558,7 +2558,7 @@ }, { "cell_type": "markdown", - "id": "a396d5a6", + "id": "27c88984", "metadata": {}, "source": [ "Typing `A[1,2]` retrieves the element corresponding to the second row and third\n", @@ -2568,13 +2568,13 @@ { "cell_type": "code", "execution_count": 58, - "id": "2f4c1b37", + "id": "78ee7f5b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.635903Z", - "iopub.status.busy": "2023-08-07T01:31:10.635803Z", - "iopub.status.idle": "2023-08-07T01:31:10.638090Z", - "shell.execute_reply": "2023-08-07T01:31:10.637830Z" + "iopub.execute_input": "2023-08-21T02:30:53.842677Z", + "iopub.status.busy": "2023-08-21T02:30:53.842548Z", + "iopub.status.idle": "2023-08-21T02:30:53.844992Z", + "shell.execute_reply": "2023-08-21T02:30:53.844526Z" } }, "outputs": [ @@ -2595,7 +2595,7 @@ }, { "cell_type": "markdown", - "id": "839feee0", + "id": "dd65ec1c", "metadata": {}, "source": [ "The first number after the open-bracket symbol `[`\n", @@ -2609,13 +2609,13 @@ { "cell_type": "code", "execution_count": 59, - "id": "a8ef1be5", + "id": "16212696", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.639610Z", - "iopub.status.busy": "2023-08-07T01:31:10.639493Z", - "iopub.status.idle": "2023-08-07T01:31:10.641807Z", - "shell.execute_reply": "2023-08-07T01:31:10.641471Z" + "iopub.execute_input": "2023-08-21T02:30:53.847326Z", + "iopub.status.busy": "2023-08-21T02:30:53.847150Z", + "iopub.status.idle": "2023-08-21T02:30:53.849618Z", + "shell.execute_reply": "2023-08-21T02:30:53.849294Z" } }, "outputs": [ @@ -2637,7 +2637,7 @@ }, { "cell_type": "markdown", - "id": "abe68415", + "id": "0b8b3ce3", "metadata": {}, "source": [ "To select the first and third columns, we pass in `[0,2]` as the second argument in the square brackets.\n", @@ -2648,13 +2648,13 @@ { "cell_type": "code", "execution_count": 60, - "id": "830897a9", + "id": "d5f473d2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.643332Z", - "iopub.status.busy": "2023-08-07T01:31:10.643229Z", - "iopub.status.idle": "2023-08-07T01:31:10.645370Z", - "shell.execute_reply": "2023-08-07T01:31:10.645098Z" + "iopub.execute_input": "2023-08-21T02:30:53.851386Z", + "iopub.status.busy": "2023-08-21T02:30:53.851246Z", + "iopub.status.idle": "2023-08-21T02:30:53.853942Z", + "shell.execute_reply": "2023-08-21T02:30:53.853591Z" } }, "outputs": [ @@ -2678,7 +2678,7 @@ }, { "cell_type": "markdown", - "id": "004f3600", + "id": "471ed1b4", "metadata": {}, "source": [ "Now, suppose that we want to select the submatrix made up of the second and fourth \n", @@ -2689,13 +2689,13 @@ { "cell_type": "code", "execution_count": 61, - "id": "12e88036", + "id": "c89646d6", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.646899Z", - "iopub.status.busy": "2023-08-07T01:31:10.646796Z", - "iopub.status.idle": "2023-08-07T01:31:10.648980Z", - "shell.execute_reply": "2023-08-07T01:31:10.648674Z" + "iopub.execute_input": "2023-08-21T02:30:53.855928Z", + "iopub.status.busy": "2023-08-21T02:30:53.855791Z", + "iopub.status.idle": "2023-08-21T02:30:53.858120Z", + "shell.execute_reply": "2023-08-21T02:30:53.857789Z" } }, "outputs": [ @@ -2716,7 +2716,7 @@ }, { "cell_type": "markdown", - "id": "9b978348", + "id": "9cbf1ff9", "metadata": {}, "source": [ " Oops --- what happened? We got a one-dimensional array of length two identical to" @@ -2725,13 +2725,13 @@ { "cell_type": "code", "execution_count": 62, - "id": "c4098144", + "id": "87f6b4f2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.650497Z", - "iopub.status.busy": "2023-08-07T01:31:10.650397Z", - "iopub.status.idle": "2023-08-07T01:31:10.652730Z", - "shell.execute_reply": "2023-08-07T01:31:10.652444Z" + "iopub.execute_input": "2023-08-21T02:30:53.860248Z", + "iopub.status.busy": "2023-08-21T02:30:53.860104Z", + "iopub.status.idle": "2023-08-21T02:30:53.862866Z", + "shell.execute_reply": "2023-08-21T02:30:53.862370Z" } }, "outputs": [ @@ -2752,7 +2752,7 @@ }, { "cell_type": "markdown", - "id": "2dcd98eb", + "id": "9a93dc96", "metadata": {}, "source": [ " Similarly, the following code fails to extract the submatrix comprised of the second and fourth rows and the first, third, and fourth columns:" @@ -2761,13 +2761,13 @@ { "cell_type": "code", "execution_count": 63, - "id": "b4d6bd49", + "id": "5da5bda8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.654426Z", - "iopub.status.busy": "2023-08-07T01:31:10.654322Z", - "iopub.status.idle": "2023-08-07T01:31:10.676847Z", - "shell.execute_reply": "2023-08-07T01:31:10.676566Z" + "iopub.execute_input": "2023-08-21T02:30:53.864935Z", + "iopub.status.busy": "2023-08-21T02:30:53.864779Z", + "iopub.status.idle": "2023-08-21T02:30:53.891611Z", + "shell.execute_reply": "2023-08-21T02:30:53.891242Z" } }, "outputs": [ @@ -2789,7 +2789,7 @@ }, { "cell_type": "markdown", - "id": "dcac422f", + "id": "f4fd2f83", "metadata": {}, "source": [ "We can see what has gone wrong here. When supplied with two indexing lists, the `numpy` interpretation is that these provide pairs of $i,j$ indices for a series of entries. That is why the pair of lists must have the same length. However, that was not our intent, since we are looking for a submatrix.\n", @@ -2800,13 +2800,13 @@ { "cell_type": "code", "execution_count": 64, - "id": "e46c3267", + "id": "ac48a95b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.678520Z", - "iopub.status.busy": "2023-08-07T01:31:10.678411Z", - "iopub.status.idle": "2023-08-07T01:31:10.680808Z", - "shell.execute_reply": "2023-08-07T01:31:10.680507Z" + "iopub.execute_input": "2023-08-21T02:30:53.893738Z", + "iopub.status.busy": "2023-08-21T02:30:53.893596Z", + "iopub.status.idle": "2023-08-21T02:30:53.896262Z", + "shell.execute_reply": "2023-08-21T02:30:53.895953Z" }, "lines_to_next_cell": 0 }, @@ -2829,7 +2829,7 @@ }, { "cell_type": "markdown", - "id": "d14bb320", + "id": "5e8388aa", "metadata": {}, "source": [ " " @@ -2837,7 +2837,7 @@ }, { "cell_type": "markdown", - "id": "a3d7e667", + "id": "a09467cd", "metadata": {}, "source": [ "There are more efficient ways of achieving the same result.\n", @@ -2849,13 +2849,13 @@ { "cell_type": "code", "execution_count": 65, - "id": "96d2355e", + "id": "ee195cc4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.682406Z", - "iopub.status.busy": "2023-08-07T01:31:10.682293Z", - "iopub.status.idle": "2023-08-07T01:31:10.684749Z", - "shell.execute_reply": "2023-08-07T01:31:10.684457Z" + "iopub.execute_input": "2023-08-21T02:30:53.898200Z", + "iopub.status.busy": "2023-08-21T02:30:53.898084Z", + "iopub.status.idle": "2023-08-21T02:30:53.900679Z", + "shell.execute_reply": "2023-08-21T02:30:53.900285Z" }, "lines_to_next_cell": 2 }, @@ -2879,7 +2879,7 @@ }, { "cell_type": "markdown", - "id": "d462675f", + "id": "b7177cb9", "metadata": {}, "source": [ "Alternatively, we can subset matrices efficiently using slices.\n", @@ -2892,13 +2892,13 @@ { "cell_type": "code", "execution_count": 66, - "id": "326ef740", + "id": "48917bb5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.686325Z", - "iopub.status.busy": "2023-08-07T01:31:10.686221Z", - "iopub.status.idle": "2023-08-07T01:31:10.688428Z", - "shell.execute_reply": "2023-08-07T01:31:10.688159Z" + "iopub.execute_input": "2023-08-21T02:30:53.902581Z", + "iopub.status.busy": "2023-08-21T02:30:53.902429Z", + "iopub.status.idle": "2023-08-21T02:30:53.905816Z", + "shell.execute_reply": "2023-08-21T02:30:53.905285Z" }, "lines_to_next_cell": 0 }, @@ -2921,7 +2921,7 @@ }, { "cell_type": "markdown", - "id": "e2eeed28", + "id": "697c5ab0", "metadata": {}, "source": [ " " @@ -2929,7 +2929,7 @@ }, { "cell_type": "markdown", - "id": "5139b99f", + "id": "c647dbf0", "metadata": {}, "source": [ "Why are we able to retrieve a submatrix directly using slices but not using lists?\n", @@ -2951,7 +2951,7 @@ }, { "cell_type": "markdown", - "id": "417c640e", + "id": "2dce8961", "metadata": {}, "source": [ "### Boolean Indexing\n", @@ -2962,13 +2962,13 @@ { "cell_type": "code", "execution_count": 67, - "id": "62ad65f2", + "id": "5d4caf22", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.690010Z", - "iopub.status.busy": "2023-08-07T01:31:10.689906Z", - "iopub.status.idle": "2023-08-07T01:31:10.692045Z", - "shell.execute_reply": "2023-08-07T01:31:10.691792Z" + "iopub.execute_input": "2023-08-21T02:30:53.907744Z", + "iopub.status.busy": "2023-08-21T02:30:53.907644Z", + "iopub.status.idle": "2023-08-21T02:30:53.910223Z", + "shell.execute_reply": "2023-08-21T02:30:53.909939Z" }, "lines_to_next_cell": 0 }, @@ -2991,7 +2991,7 @@ }, { "cell_type": "markdown", - "id": "117d1718", + "id": "d83fadb5", "metadata": {}, "source": [ "We now set two of the elements to `True`. " @@ -3000,13 +3000,13 @@ { "cell_type": "code", "execution_count": 68, - "id": "683f49a3", + "id": "348820e3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.693550Z", - "iopub.status.busy": "2023-08-07T01:31:10.693452Z", - "iopub.status.idle": "2023-08-07T01:31:10.695470Z", - "shell.execute_reply": "2023-08-07T01:31:10.695224Z" + "iopub.execute_input": "2023-08-21T02:30:53.912039Z", + "iopub.status.busy": "2023-08-21T02:30:53.911912Z", + "iopub.status.idle": "2023-08-21T02:30:53.914998Z", + "shell.execute_reply": "2023-08-21T02:30:53.914528Z" } }, "outputs": [ @@ -3028,7 +3028,7 @@ }, { "cell_type": "markdown", - "id": "5036e0f2", + "id": "a0fb487d", "metadata": {}, "source": [ "Note that the elements of `keep_rows`, when viewed as integers, are the same as the\n", @@ -3039,13 +3039,13 @@ { "cell_type": "code", "execution_count": 69, - "id": "ede73656", + "id": "4aafe45b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.696929Z", - "iopub.status.busy": "2023-08-07T01:31:10.696830Z", - "iopub.status.idle": "2023-08-07T01:31:10.699180Z", - "shell.execute_reply": "2023-08-07T01:31:10.698918Z" + "iopub.execute_input": "2023-08-21T02:30:53.917006Z", + "iopub.status.busy": "2023-08-21T02:30:53.916872Z", + "iopub.status.idle": "2023-08-21T02:30:53.919581Z", + "shell.execute_reply": "2023-08-21T02:30:53.919265Z" } }, "outputs": [ @@ -3066,7 +3066,7 @@ }, { "cell_type": "markdown", - "id": "45587df2", + "id": "603c0c53", "metadata": {}, "source": [ "(Here, the function `np.all()` has checked whether\n", @@ -3075,7 +3075,7 @@ }, { "cell_type": "markdown", - "id": "cd3e2b53", + "id": "b0a449d1", "metadata": {}, "source": [ " However, even though `np.array([0,1,0,1])` and `keep_rows` are equal according to `==`, they index different sets of rows!\n", @@ -3085,13 +3085,13 @@ { "cell_type": "code", "execution_count": 70, - "id": "f65c75d6", + "id": "1be6a588", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.700773Z", - "iopub.status.busy": "2023-08-07T01:31:10.700664Z", - "iopub.status.idle": "2023-08-07T01:31:10.702948Z", - "shell.execute_reply": "2023-08-07T01:31:10.702676Z" + "iopub.execute_input": "2023-08-21T02:30:53.921419Z", + "iopub.status.busy": "2023-08-21T02:30:53.921284Z", + "iopub.status.idle": "2023-08-21T02:30:53.924120Z", + "shell.execute_reply": "2023-08-21T02:30:53.923471Z" } }, "outputs": [ @@ -3115,7 +3115,7 @@ }, { "cell_type": "markdown", - "id": "12479298", + "id": "e45bbebe", "metadata": {}, "source": [ " By contrast, `keep_rows` retrieves only the second and fourth rows of `A` --- i.e. the rows for which the Boolean equals `TRUE`. " @@ -3124,13 +3124,13 @@ { "cell_type": "code", "execution_count": 71, - "id": "31a8ff76", + "id": "e83da57b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.704480Z", - "iopub.status.busy": "2023-08-07T01:31:10.704376Z", - "iopub.status.idle": "2023-08-07T01:31:10.706569Z", - "shell.execute_reply": "2023-08-07T01:31:10.706309Z" + "iopub.execute_input": "2023-08-21T02:30:53.926561Z", + "iopub.status.busy": "2023-08-21T02:30:53.926423Z", + "iopub.status.idle": "2023-08-21T02:30:53.929442Z", + "shell.execute_reply": "2023-08-21T02:30:53.929029Z" } }, "outputs": [ @@ -3152,7 +3152,7 @@ }, { "cell_type": "markdown", - "id": "40932333", + "id": "374d34a7", "metadata": {}, "source": [ "This example shows that Booleans and integers are treated differently by `numpy`." @@ -3160,7 +3160,7 @@ }, { "cell_type": "markdown", - "id": "8751cf99", + "id": "25db74bf", "metadata": {}, "source": [ "We again make use of the `np.ix_()` function\n", @@ -3171,13 +3171,13 @@ { "cell_type": "code", "execution_count": 72, - "id": "c91f330e", + "id": "09675294", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.708121Z", - "iopub.status.busy": "2023-08-07T01:31:10.708021Z", - "iopub.status.idle": "2023-08-07T01:31:10.710601Z", - "shell.execute_reply": "2023-08-07T01:31:10.710273Z" + "iopub.execute_input": "2023-08-21T02:30:53.931269Z", + "iopub.status.busy": "2023-08-21T02:30:53.931159Z", + "iopub.status.idle": "2023-08-21T02:30:53.934244Z", + "shell.execute_reply": "2023-08-21T02:30:53.933825Z" } }, "outputs": [ @@ -3202,7 +3202,7 @@ }, { "cell_type": "markdown", - "id": "e8b9619b", + "id": "0166c179", "metadata": {}, "source": [ "We can also mix a list with an array of Booleans in the arguments to `np.ix_()`:" @@ -3211,13 +3211,13 @@ { "cell_type": "code", "execution_count": 73, - "id": "fb53de70", + "id": "a85614e4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.712157Z", - "iopub.status.busy": "2023-08-07T01:31:10.712057Z", - "iopub.status.idle": "2023-08-07T01:31:10.714439Z", - "shell.execute_reply": "2023-08-07T01:31:10.714160Z" + "iopub.execute_input": "2023-08-21T02:30:53.936078Z", + "iopub.status.busy": "2023-08-21T02:30:53.935930Z", + "iopub.status.idle": "2023-08-21T02:30:53.938750Z", + "shell.execute_reply": "2023-08-21T02:30:53.938474Z" }, "lines_to_next_cell": 0 }, @@ -3241,7 +3241,7 @@ }, { "cell_type": "markdown", - "id": "18f16a0a", + "id": "f6a338f1", "metadata": {}, "source": [ " " @@ -3249,7 +3249,7 @@ }, { "cell_type": "markdown", - "id": "f6e932f4", + "id": "b3541e0c", "metadata": {}, "source": [ "For more details on indexing in `numpy`, readers are referred\n", @@ -3258,7 +3258,7 @@ }, { "cell_type": "markdown", - "id": "8c59352f", + "id": "ab75f168", "metadata": {}, "source": [ "## Loading Data\n", @@ -3275,7 +3275,7 @@ }, { "cell_type": "markdown", - "id": "4417d4d4", + "id": "ca018d13", "metadata": {}, "source": [ "### Reading in a Data Set\n", @@ -3294,7 +3294,7 @@ }, { "cell_type": "markdown", - "id": "f9fd0896", + "id": "b76342df", "metadata": {}, "source": [ "We will begin by reading in `Auto.csv`, available on the book website. This is a comma-separated file, and can be read in using `pd.read_csv()`: " @@ -3303,13 +3303,13 @@ { "cell_type": "code", "execution_count": 74, - "id": "cc87ed8c", + "id": "ff81e644", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.716255Z", - "iopub.status.busy": "2023-08-07T01:31:10.716148Z", - "iopub.status.idle": "2023-08-07T01:31:10.983712Z", - "shell.execute_reply": "2023-08-07T01:31:10.983447Z" + "iopub.execute_input": "2023-08-21T02:30:53.940735Z", + "iopub.status.busy": "2023-08-21T02:30:53.940592Z", + "iopub.status.idle": "2023-08-21T02:30:54.204936Z", + "shell.execute_reply": "2023-08-21T02:30:54.204512Z" } }, "outputs": [ @@ -3526,7 +3526,7 @@ }, { "cell_type": "markdown", - "id": "5c4cf682", + "id": "42d6a799", "metadata": {}, "source": [ "The book website also has a whitespace-delimited version of this data, called `Auto.data`. This can be read in as follows:" @@ -3535,13 +3535,13 @@ { "cell_type": "code", "execution_count": 75, - "id": "69b34e00", + "id": "5b45aa7f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.985226Z", - "iopub.status.busy": "2023-08-07T01:31:10.985129Z", - "iopub.status.idle": "2023-08-07T01:31:10.988425Z", - "shell.execute_reply": "2023-08-07T01:31:10.988171Z" + "iopub.execute_input": "2023-08-21T02:30:54.208893Z", + "iopub.status.busy": "2023-08-21T02:30:54.208755Z", + "iopub.status.idle": "2023-08-21T02:30:54.213896Z", + "shell.execute_reply": "2023-08-21T02:30:54.213498Z" }, "lines_to_next_cell": 0 }, @@ -3552,7 +3552,7 @@ }, { "cell_type": "markdown", - "id": "61b12987", + "id": "f942c457", "metadata": {}, "source": [ " Both `Auto.csv` and `Auto.data` are simply text\n", @@ -3563,7 +3563,7 @@ }, { "cell_type": "markdown", - "id": "8de34877", + "id": "1aceff38", "metadata": {}, "source": [ "We now take a look at the column of `Auto` corresponding to the variable `horsepower`: " @@ -3572,13 +3572,13 @@ { "cell_type": "code", "execution_count": 76, - "id": "c45b3e32", + "id": "413f626a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.989963Z", - "iopub.status.busy": "2023-08-07T01:31:10.989869Z", - "iopub.status.idle": "2023-08-07T01:31:10.992471Z", - "shell.execute_reply": "2023-08-07T01:31:10.992206Z" + "iopub.execute_input": "2023-08-21T02:30:54.217296Z", + "iopub.status.busy": "2023-08-21T02:30:54.216961Z", + "iopub.status.idle": "2023-08-21T02:30:54.221903Z", + "shell.execute_reply": "2023-08-21T02:30:54.221443Z" }, "lines_to_next_cell": 0 }, @@ -3611,7 +3611,7 @@ }, { "cell_type": "markdown", - "id": "7b5df8f9", + "id": "fd11e757", "metadata": {}, "source": [ "We see that the `dtype` of this column is `object`. \n", @@ -3623,13 +3623,13 @@ { "cell_type": "code", "execution_count": 77, - "id": "fdac0ada", + "id": "57b86346", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.993831Z", - "iopub.status.busy": "2023-08-07T01:31:10.993734Z", - "iopub.status.idle": "2023-08-07T01:31:10.996080Z", - "shell.execute_reply": "2023-08-07T01:31:10.995843Z" + "iopub.execute_input": "2023-08-21T02:30:54.224504Z", + "iopub.status.busy": "2023-08-21T02:30:54.224354Z", + "iopub.status.idle": "2023-08-21T02:30:54.227857Z", + "shell.execute_reply": "2023-08-21T02:30:54.227319Z" }, "lines_to_next_cell": 0 }, @@ -3664,7 +3664,7 @@ }, { "cell_type": "markdown", - "id": "dc6e92aa", + "id": "f0aee233", "metadata": {}, "source": [ "We see the culprit is the value `?`, which is being used to encode missing values.\n", @@ -3673,7 +3673,7 @@ }, { "cell_type": "markdown", - "id": "f15457ad", + "id": "b7b032d4", "metadata": {}, "source": [ "To fix the problem, we must provide `pd.read_csv()` with an argument called `na_values`.\n", @@ -3684,13 +3684,13 @@ { "cell_type": "code", "execution_count": 78, - "id": "883e0b73", + "id": "a9698b26", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:10.997462Z", - "iopub.status.busy": "2023-08-07T01:31:10.997371Z", - "iopub.status.idle": "2023-08-07T01:31:11.000881Z", - "shell.execute_reply": "2023-08-07T01:31:11.000649Z" + "iopub.execute_input": "2023-08-21T02:30:54.231380Z", + "iopub.status.busy": "2023-08-21T02:30:54.231205Z", + "iopub.status.idle": "2023-08-21T02:30:54.236930Z", + "shell.execute_reply": "2023-08-21T02:30:54.236485Z" }, "lines_to_next_cell": 2 }, @@ -3715,7 +3715,7 @@ }, { "cell_type": "markdown", - "id": "cbc53f2a", + "id": "13cb364e", "metadata": {}, "source": [ "The `Auto.shape` attribute tells us that the data has 397\n", @@ -3725,13 +3725,13 @@ { "cell_type": "code", "execution_count": 79, - "id": "c733c1e8", + "id": "4877cb2c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.002281Z", - "iopub.status.busy": "2023-08-07T01:31:11.002200Z", - "iopub.status.idle": "2023-08-07T01:31:11.004273Z", - "shell.execute_reply": "2023-08-07T01:31:11.004037Z" + "iopub.execute_input": "2023-08-21T02:30:54.239516Z", + "iopub.status.busy": "2023-08-21T02:30:54.239347Z", + "iopub.status.idle": "2023-08-21T02:30:54.242212Z", + "shell.execute_reply": "2023-08-21T02:30:54.241735Z" } }, "outputs": [ @@ -3752,7 +3752,7 @@ }, { "cell_type": "markdown", - "id": "94c32cfb", + "id": "3fdc6f47", "metadata": {}, "source": [ "There are\n", @@ -3764,13 +3764,13 @@ { "cell_type": "code", "execution_count": 80, - "id": "0e0e9956", + "id": "2ba1d33d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.005625Z", - "iopub.status.busy": "2023-08-07T01:31:11.005549Z", - "iopub.status.idle": "2023-08-07T01:31:11.008121Z", - "shell.execute_reply": "2023-08-07T01:31:11.007860Z" + "iopub.execute_input": "2023-08-21T02:30:54.243922Z", + "iopub.status.busy": "2023-08-21T02:30:54.243777Z", + "iopub.status.idle": "2023-08-21T02:30:54.247951Z", + "shell.execute_reply": "2023-08-21T02:30:54.247019Z" }, "lines_to_next_cell": 2 }, @@ -3793,7 +3793,7 @@ }, { "cell_type": "markdown", - "id": "7250498b", + "id": "ac9748d9", "metadata": {}, "source": [ "### Basics of Selecting Rows and Columns\n", @@ -3804,13 +3804,13 @@ { "cell_type": "code", "execution_count": 81, - "id": "0477b4ff", + "id": "3d03baab", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.009525Z", - "iopub.status.busy": "2023-08-07T01:31:11.009445Z", - "iopub.status.idle": "2023-08-07T01:31:11.011490Z", - "shell.execute_reply": "2023-08-07T01:31:11.011252Z" + "iopub.execute_input": "2023-08-21T02:30:54.250515Z", + "iopub.status.busy": "2023-08-21T02:30:54.250359Z", + "iopub.status.idle": "2023-08-21T02:30:54.253509Z", + "shell.execute_reply": "2023-08-21T02:30:54.253038Z" }, "lines_to_next_cell": 2 }, @@ -3835,7 +3835,7 @@ }, { "cell_type": "markdown", - "id": "c2084300", + "id": "d24d4d42", "metadata": {}, "source": [ "Accessing the rows and columns of a data frame is similar, but not identical, to accessing the rows and columns of an array. \n", @@ -3848,13 +3848,13 @@ { "cell_type": "code", "execution_count": 82, - "id": "a989e541", + "id": "410b4dd7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.012867Z", - "iopub.status.busy": "2023-08-07T01:31:11.012778Z", - "iopub.status.idle": "2023-08-07T01:31:11.017097Z", - "shell.execute_reply": "2023-08-07T01:31:11.016832Z" + "iopub.execute_input": "2023-08-21T02:30:54.255708Z", + "iopub.status.busy": "2023-08-21T02:30:54.255564Z", + "iopub.status.idle": "2023-08-21T02:30:54.261449Z", + "shell.execute_reply": "2023-08-21T02:30:54.260677Z" }, "lines_to_next_cell": 0 }, @@ -3955,7 +3955,7 @@ }, { "cell_type": "markdown", - "id": "b5af114e", + "id": "4ea0be7b", "metadata": {}, "source": [ "Similarly, an array of Booleans can be used to subset the rows:" @@ -3964,13 +3964,13 @@ { "cell_type": "code", "execution_count": 83, - "id": "d336e7ce", + "id": "3540804d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.018564Z", - "iopub.status.busy": "2023-08-07T01:31:11.018470Z", - "iopub.status.idle": "2023-08-07T01:31:11.031326Z", - "shell.execute_reply": "2023-08-07T01:31:11.031050Z" + "iopub.execute_input": "2023-08-21T02:30:54.264292Z", + "iopub.status.busy": "2023-08-21T02:30:54.264129Z", + "iopub.status.idle": "2023-08-21T02:30:54.279045Z", + "shell.execute_reply": "2023-08-21T02:30:54.278512Z" }, "lines_to_next_cell": 0 }, @@ -4842,7 +4842,7 @@ }, { "cell_type": "markdown", - "id": "2f09c4df", + "id": "a02221a2", "metadata": {}, "source": [ "However, if we pass in a list of strings to the `[]` method, then we obtain a data frame containing the corresponding set of *columns*. " @@ -4851,13 +4851,13 @@ { "cell_type": "code", "execution_count": 84, - "id": "88e9a63b", + "id": "66d174f1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.032876Z", - "iopub.status.busy": "2023-08-07T01:31:11.032768Z", - "iopub.status.idle": "2023-08-07T01:31:11.037134Z", - "shell.execute_reply": "2023-08-07T01:31:11.036881Z" + "iopub.execute_input": "2023-08-21T02:30:54.281472Z", + "iopub.status.busy": "2023-08-21T02:30:54.281322Z", + "iopub.status.idle": "2023-08-21T02:30:54.287633Z", + "shell.execute_reply": "2023-08-21T02:30:54.287100Z" }, "lines_to_next_cell": 0 }, @@ -4976,7 +4976,7 @@ }, { "cell_type": "markdown", - "id": "b372687d", + "id": "54bef6a3", "metadata": {}, "source": [ "Since we did not specify an *index* column when we loaded our data frame, the rows are labeled using integers\n", @@ -4986,13 +4986,13 @@ { "cell_type": "code", "execution_count": 85, - "id": "aed049d8", + "id": "52789c77", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.038623Z", - "iopub.status.busy": "2023-08-07T01:31:11.038544Z", - "iopub.status.idle": "2023-08-07T01:31:11.040721Z", - "shell.execute_reply": "2023-08-07T01:31:11.040472Z" + "iopub.execute_input": "2023-08-21T02:30:54.290101Z", + "iopub.status.busy": "2023-08-21T02:30:54.289961Z", + "iopub.status.idle": "2023-08-21T02:30:54.292706Z", + "shell.execute_reply": "2023-08-21T02:30:54.292398Z" }, "lines_to_next_cell": 0 }, @@ -5017,7 +5017,7 @@ }, { "cell_type": "markdown", - "id": "f18f3695", + "id": "3f5fcb26", "metadata": {}, "source": [ "We can use the\n", @@ -5027,13 +5027,13 @@ { "cell_type": "code", "execution_count": 86, - "id": "c93cefd3", + "id": "d83650bf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.042164Z", - "iopub.status.busy": "2023-08-07T01:31:11.042059Z", - "iopub.status.idle": "2023-08-07T01:31:11.048132Z", - "shell.execute_reply": "2023-08-07T01:31:11.047881Z" + "iopub.execute_input": "2023-08-21T02:30:54.294807Z", + "iopub.status.busy": "2023-08-21T02:30:54.294621Z", + "iopub.status.idle": "2023-08-21T02:30:54.301957Z", + "shell.execute_reply": "2023-08-21T02:30:54.301554Z" } }, "outputs": [ @@ -5251,13 +5251,13 @@ { "cell_type": "code", "execution_count": 87, - "id": "84947a78", + "id": "880d79d9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.049482Z", - "iopub.status.busy": "2023-08-07T01:31:11.049405Z", - "iopub.status.idle": "2023-08-07T01:31:11.051545Z", - "shell.execute_reply": "2023-08-07T01:31:11.051304Z" + "iopub.execute_input": "2023-08-21T02:30:54.304000Z", + "iopub.status.busy": "2023-08-21T02:30:54.303858Z", + "iopub.status.idle": "2023-08-21T02:30:54.306514Z", + "shell.execute_reply": "2023-08-21T02:30:54.306217Z" }, "lines_to_next_cell": 0 }, @@ -5281,7 +5281,7 @@ }, { "cell_type": "markdown", - "id": "fc160806", + "id": "dbee53b8", "metadata": {}, "source": [ "We see that the column `'name'` is no longer there.\n", @@ -5294,13 +5294,13 @@ { "cell_type": "code", "execution_count": 88, - "id": "7ee59fae", + "id": "c01f4095", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.052942Z", - "iopub.status.busy": "2023-08-07T01:31:11.052867Z", - "iopub.status.idle": "2023-08-07T01:31:11.057027Z", - "shell.execute_reply": "2023-08-07T01:31:11.056776Z" + "iopub.execute_input": "2023-08-21T02:30:54.308396Z", + "iopub.status.busy": "2023-08-21T02:30:54.308140Z", + "iopub.status.idle": "2023-08-21T02:30:54.313637Z", + "shell.execute_reply": "2023-08-21T02:30:54.313232Z" }, "lines_to_next_cell": 0 }, @@ -5398,7 +5398,7 @@ }, { "cell_type": "markdown", - "id": "232fe34c", + "id": "29688cab", "metadata": {}, "source": [ "As an alternative to using the index name, we could retrieve the 4th and 5th rows of `Auto` using the `{iloc[]`} method:" @@ -5407,13 +5407,13 @@ { "cell_type": "code", "execution_count": 89, - "id": "4b5a0e01", + "id": "a4202eb8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.058375Z", - "iopub.status.busy": "2023-08-07T01:31:11.058300Z", - "iopub.status.idle": "2023-08-07T01:31:11.062622Z", - "shell.execute_reply": "2023-08-07T01:31:11.062365Z" + "iopub.execute_input": "2023-08-21T02:30:54.315524Z", + "iopub.status.busy": "2023-08-21T02:30:54.315402Z", + "iopub.status.idle": "2023-08-21T02:30:54.320287Z", + "shell.execute_reply": "2023-08-21T02:30:54.319867Z" }, "lines_to_next_cell": 0 }, @@ -5510,7 +5510,7 @@ }, { "cell_type": "markdown", - "id": "6c409a01", + "id": "5427ede0", "metadata": {}, "source": [ "We can also use it to retrieve the 1st, 3rd and and 4th columns of `Auto_re`:" @@ -5519,13 +5519,13 @@ { "cell_type": "code", "execution_count": 90, - "id": "8814803e", + "id": "948b2d07", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.064096Z", - "iopub.status.busy": "2023-08-07T01:31:11.063996Z", - "iopub.status.idle": "2023-08-07T01:31:11.068538Z", - "shell.execute_reply": "2023-08-07T01:31:11.068278Z" + "iopub.execute_input": "2023-08-21T02:30:54.322501Z", + "iopub.status.busy": "2023-08-21T02:30:54.322247Z", + "iopub.status.idle": "2023-08-21T02:30:54.328102Z", + "shell.execute_reply": "2023-08-21T02:30:54.327668Z" }, "lines_to_next_cell": 0 }, @@ -5663,7 +5663,7 @@ }, { "cell_type": "markdown", - "id": "f02f0d24", + "id": "b83d56eb", "metadata": {}, "source": [ "We can extract the 4th and 5th rows, as well as the 1st, 3rd and 4th columns, using\n", @@ -5673,13 +5673,13 @@ { "cell_type": "code", "execution_count": 91, - "id": "c7567dd0", + "id": "1cfdcc5c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.069957Z", - "iopub.status.busy": "2023-08-07T01:31:11.069879Z", - "iopub.status.idle": "2023-08-07T01:31:11.073308Z", - "shell.execute_reply": "2023-08-07T01:31:11.073061Z" + "iopub.execute_input": "2023-08-21T02:30:54.330104Z", + "iopub.status.busy": "2023-08-21T02:30:54.329925Z", + "iopub.status.idle": "2023-08-21T02:30:54.333962Z", + "shell.execute_reply": "2023-08-21T02:30:54.333547Z" }, "lines_to_next_cell": 0 }, @@ -5751,7 +5751,7 @@ }, { "cell_type": "markdown", - "id": "3073ab09", + "id": "2bde6514", "metadata": {}, "source": [ "Index entries need not be unique: there are several cars in the data frame named `ford galaxie 500`." @@ -5760,13 +5760,13 @@ { "cell_type": "code", "execution_count": 92, - "id": "63638341", + "id": "fd9c5cda", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.074744Z", - "iopub.status.busy": "2023-08-07T01:31:11.074667Z", - "iopub.status.idle": "2023-08-07T01:31:11.077994Z", - "shell.execute_reply": "2023-08-07T01:31:11.077698Z" + "iopub.execute_input": "2023-08-21T02:30:54.335649Z", + "iopub.status.busy": "2023-08-21T02:30:54.335500Z", + "iopub.status.idle": "2023-08-21T02:30:54.339467Z", + "shell.execute_reply": "2023-08-21T02:30:54.339111Z" }, "lines_to_next_cell": 0 }, @@ -5840,7 +5840,7 @@ }, { "cell_type": "markdown", - "id": "2fbe4a9b", + "id": "4d097282", "metadata": {}, "source": [ "### More on Selecting Rows and Columns\n", @@ -5853,13 +5853,13 @@ { "cell_type": "code", "execution_count": 93, - "id": "57d6de11", + "id": "6d431cb5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.079313Z", - "iopub.status.busy": "2023-08-07T01:31:11.079237Z", - "iopub.status.idle": "2023-08-07T01:31:11.084842Z", - "shell.execute_reply": "2023-08-07T01:31:11.084603Z" + "iopub.execute_input": "2023-08-21T02:30:54.341293Z", + "iopub.status.busy": "2023-08-21T02:30:54.341159Z", + "iopub.status.idle": "2023-08-21T02:30:54.347607Z", + "shell.execute_reply": "2023-08-21T02:30:54.347316Z" }, "lines_to_next_cell": 2 }, @@ -6264,7 +6264,7 @@ }, { "cell_type": "markdown", - "id": "a58067ce", + "id": "838a03e0", "metadata": {}, "source": [ "To do this more concisely, we can use an anonymous function called a `lambda`: " @@ -6273,13 +6273,13 @@ { "cell_type": "code", "execution_count": 94, - "id": "ed95866c", + "id": "fac41ce1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.086189Z", - "iopub.status.busy": "2023-08-07T01:31:11.086113Z", - "iopub.status.idle": "2023-08-07T01:31:11.091704Z", - "shell.execute_reply": "2023-08-07T01:31:11.091435Z" + "iopub.execute_input": "2023-08-21T02:30:54.349344Z", + "iopub.status.busy": "2023-08-21T02:30:54.349222Z", + "iopub.status.idle": "2023-08-21T02:30:54.356013Z", + "shell.execute_reply": "2023-08-21T02:30:54.355554Z" }, "lines_to_next_cell": 0 }, @@ -6683,7 +6683,7 @@ }, { "cell_type": "markdown", - "id": "13bb6d1f", + "id": "08e61254", "metadata": {}, "source": [ "The `lambda` call creates a function that takes a single\n", @@ -6697,13 +6697,13 @@ { "cell_type": "code", "execution_count": 95, - "id": "e3725c98", + "id": "b0885654", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.093150Z", - "iopub.status.busy": "2023-08-07T01:31:11.093070Z", - "iopub.status.idle": "2023-08-07T01:31:11.098048Z", - "shell.execute_reply": "2023-08-07T01:31:11.097773Z" + "iopub.execute_input": "2023-08-21T02:30:54.357696Z", + "iopub.status.busy": "2023-08-21T02:30:54.357569Z", + "iopub.status.idle": "2023-08-21T02:30:54.370331Z", + "shell.execute_reply": "2023-08-21T02:30:54.363261Z" }, "lines_to_next_cell": 0 }, @@ -6965,7 +6965,7 @@ }, { "cell_type": "markdown", - "id": "6da7a099", + "id": "d87fc459", "metadata": {}, "source": [ "The symbol `&` computes an element-wise *and* operation.\n", @@ -6977,13 +6977,13 @@ { "cell_type": "code", "execution_count": 96, - "id": "f617c333", + "id": "213945a6", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.099565Z", - "iopub.status.busy": "2023-08-07T01:31:11.099460Z", - "iopub.status.idle": "2023-08-07T01:31:11.105423Z", - "shell.execute_reply": "2023-08-07T01:31:11.105167Z" + "iopub.execute_input": "2023-08-21T02:30:54.383965Z", + "iopub.status.busy": "2023-08-21T02:30:54.383724Z", + "iopub.status.idle": "2023-08-21T02:30:54.390819Z", + "shell.execute_reply": "2023-08-21T02:30:54.390472Z" }, "lines_to_next_cell": 0 }, @@ -7349,7 +7349,7 @@ }, { "cell_type": "markdown", - "id": "924428a0", + "id": "8a940fd1", "metadata": {}, "source": [ "Here, the symbol `|` computes an element-wise *or* operation.\n", @@ -7368,13 +7368,13 @@ { "cell_type": "code", "execution_count": 97, - "id": "17f13a72", + "id": "a3c4060a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.106825Z", - "iopub.status.busy": "2023-08-07T01:31:11.106745Z", - "iopub.status.idle": "2023-08-07T01:31:11.108709Z", - "shell.execute_reply": "2023-08-07T01:31:11.108475Z" + "iopub.execute_input": "2023-08-21T02:30:54.393069Z", + "iopub.status.busy": "2023-08-21T02:30:54.392909Z", + "iopub.status.idle": "2023-08-21T02:30:54.395305Z", + "shell.execute_reply": "2023-08-21T02:30:54.394949Z" }, "lines_to_next_cell": 0 }, @@ -7396,7 +7396,7 @@ }, { "cell_type": "markdown", - "id": "15f0c1b1", + "id": "9117e3a1", "metadata": {}, "source": [ "The indented code beneath the line with the `for` statement is run\n", @@ -7412,13 +7412,13 @@ { "cell_type": "code", "execution_count": 98, - "id": "07e6a011", + "id": "f2bffb69", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.110115Z", - "iopub.status.busy": "2023-08-07T01:31:11.110038Z", - "iopub.status.idle": "2023-08-07T01:31:11.111909Z", - "shell.execute_reply": "2023-08-07T01:31:11.111676Z" + "iopub.execute_input": "2023-08-21T02:30:54.397356Z", + "iopub.status.busy": "2023-08-21T02:30:54.397106Z", + "iopub.status.idle": "2023-08-21T02:30:54.399443Z", + "shell.execute_reply": "2023-08-21T02:30:54.399193Z" }, "lines_to_next_cell": 0 }, @@ -7441,7 +7441,7 @@ }, { "cell_type": "markdown", - "id": "fd8124cb", + "id": "9f99e85b", "metadata": {}, "source": [ "Above, we summed over each combination of `value` and `weight`.\n", @@ -7464,13 +7464,13 @@ { "cell_type": "code", "execution_count": 99, - "id": "377ab16f", + "id": "ee827a53", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.113286Z", - "iopub.status.busy": "2023-08-07T01:31:11.113209Z", - "iopub.status.idle": "2023-08-07T01:31:11.115177Z", - "shell.execute_reply": "2023-08-07T01:31:11.114956Z" + "iopub.execute_input": "2023-08-21T02:30:54.401377Z", + "iopub.status.busy": "2023-08-21T02:30:54.401240Z", + "iopub.status.idle": "2023-08-21T02:30:54.403651Z", + "shell.execute_reply": "2023-08-21T02:30:54.403260Z" } }, "outputs": [ @@ -7492,7 +7492,7 @@ }, { "cell_type": "markdown", - "id": "345a595b", + "id": "dec18466", "metadata": {}, "source": [ "### String Formatting\n", @@ -7519,13 +7519,13 @@ { "cell_type": "code", "execution_count": 100, - "id": "91276344", + "id": "3a097fbc", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.116581Z", - "iopub.status.busy": "2023-08-07T01:31:11.116502Z", - "iopub.status.idle": "2023-08-07T01:31:11.121412Z", - "shell.execute_reply": "2023-08-07T01:31:11.121148Z" + "iopub.execute_input": "2023-08-21T02:30:54.405735Z", + "iopub.status.busy": "2023-08-21T02:30:54.405417Z", + "iopub.status.idle": "2023-08-21T02:30:54.411020Z", + "shell.execute_reply": "2023-08-21T02:30:54.410657Z" }, "lines_to_next_cell": 2 }, @@ -7615,13 +7615,13 @@ { "cell_type": "code", "execution_count": 101, - "id": "c655fcd1", + "id": "e064e170", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.122898Z", - "iopub.status.busy": "2023-08-07T01:31:11.122806Z", - "iopub.status.idle": "2023-08-07T01:31:11.125291Z", - "shell.execute_reply": "2023-08-07T01:31:11.125056Z" + "iopub.execute_input": "2023-08-21T02:30:54.412983Z", + "iopub.status.busy": "2023-08-21T02:30:54.412748Z", + "iopub.status.idle": "2023-08-21T02:30:54.415622Z", + "shell.execute_reply": "2023-08-21T02:30:54.415301Z" }, "lines_to_next_cell": 0 }, @@ -7647,7 +7647,7 @@ }, { "cell_type": "markdown", - "id": "7267a350", + "id": "7a3e4dd8", "metadata": {}, "source": [ "We see that the `template.format()` method expects two arguments `{0}`\n", @@ -7661,7 +7661,7 @@ }, { "cell_type": "markdown", - "id": "763fe84a", + "id": "d8fd496a", "metadata": {}, "source": [ "## Additional Graphical and Numerical Summaries\n", @@ -7672,13 +7672,13 @@ { "cell_type": "code", "execution_count": 102, - "id": "cd9e0046", + "id": "c915ca52", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.126787Z", - "iopub.status.busy": "2023-08-07T01:31:11.126695Z", - "iopub.status.idle": "2023-08-07T01:31:11.219932Z", - "shell.execute_reply": "2023-08-07T01:31:11.219639Z" + "iopub.execute_input": "2023-08-21T02:30:54.417426Z", + "iopub.status.busy": "2023-08-21T02:30:54.417324Z", + "iopub.status.idle": "2023-08-21T02:30:54.519306Z", + "shell.execute_reply": "2023-08-21T02:30:54.518811Z" }, "lines_to_next_cell": 0 }, @@ -7712,7 +7712,7 @@ }, { "cell_type": "markdown", - "id": "0f0f16b8", + "id": "63d47021", "metadata": {}, "source": [ "We can address this by accessing the columns directly:" @@ -7721,13 +7721,13 @@ { "cell_type": "code", "execution_count": 103, - "id": "49d239e5", + "id": "65cd6d02", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.221650Z", - "iopub.status.busy": "2023-08-07T01:31:11.221537Z", - "iopub.status.idle": "2023-08-07T01:31:11.307646Z", - "shell.execute_reply": "2023-08-07T01:31:11.307346Z" + "iopub.execute_input": "2023-08-21T02:30:54.521470Z", + "iopub.status.busy": "2023-08-21T02:30:54.521326Z", + "iopub.status.idle": "2023-08-21T02:30:54.615961Z", + "shell.execute_reply": "2023-08-21T02:30:54.615578Z" }, "lines_to_next_cell": 0 }, @@ -7750,7 +7750,7 @@ }, { "cell_type": "markdown", - "id": "154e405c", + "id": "726836f0", "metadata": {}, "source": [ "Alternatively, we can use the `plot()` method with the call `Auto.plot()`.\n", @@ -7763,27 +7763,17 @@ { "cell_type": "code", "execution_count": 104, - "id": "5c892a6a", + "id": "76b5c0b1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.309269Z", - "iopub.status.busy": "2023-08-07T01:31:11.309162Z", - "iopub.status.idle": "2023-08-07T01:31:11.406142Z", - "shell.execute_reply": "2023-08-07T01:31:11.405853Z" + "iopub.execute_input": "2023-08-21T02:30:54.617831Z", + "iopub.status.busy": "2023-08-21T02:30:54.617705Z", + "iopub.status.idle": "2023-08-21T02:30:54.724737Z", + "shell.execute_reply": "2023-08-21T02:30:54.724372Z" }, "lines_to_next_cell": 0 }, "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'Horsepower vs. MPG')" - ] - }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" - }, { "data": { "image/png": "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", @@ -7796,13 +7786,13 @@ } ], "source": [ - "ax = Auto.plot.scatter('horsepower', 'mpg');\n", - "ax.set_title('Horsepower vs. MPG')" + "ax = Auto.plot.scatter('horsepower', 'mpg')\n", + "ax.set_title('Horsepower vs. MPG');" ] }, { "cell_type": "markdown", - "id": "74ed42da", + "id": "69c46251", "metadata": {}, "source": [ "If we want to save\n", @@ -7813,13 +7803,13 @@ { "cell_type": "code", "execution_count": 105, - "id": "92a626b0", + "id": "183a2c2b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.407917Z", - "iopub.status.busy": "2023-08-07T01:31:11.407805Z", - "iopub.status.idle": "2023-08-07T01:31:11.448580Z", - "shell.execute_reply": "2023-08-07T01:31:11.448273Z" + "iopub.execute_input": "2023-08-21T02:30:54.726841Z", + "iopub.status.busy": "2023-08-21T02:30:54.726711Z", + "iopub.status.idle": "2023-08-21T02:30:54.769714Z", + "shell.execute_reply": "2023-08-21T02:30:54.769215Z" } }, "outputs": [], @@ -7830,7 +7820,7 @@ }, { "cell_type": "markdown", - "id": "7c47c9a8", + "id": "6f10cb46", "metadata": {}, "source": [ "We can further instruct the data frame to plot to a particular axes object. In this\n", @@ -7844,13 +7834,13 @@ { "cell_type": "code", "execution_count": 106, - "id": "bf9771b9", + "id": "75fbb981", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.450347Z", - "iopub.status.busy": "2023-08-07T01:31:11.450242Z", - "iopub.status.idle": "2023-08-07T01:31:11.618267Z", - "shell.execute_reply": "2023-08-07T01:31:11.617958Z" + "iopub.execute_input": "2023-08-21T02:30:54.772071Z", + "iopub.status.busy": "2023-08-21T02:30:54.771921Z", + "iopub.status.idle": "2023-08-21T02:30:54.959763Z", + "shell.execute_reply": "2023-08-21T02:30:54.959369Z" } }, "outputs": [ @@ -7872,7 +7862,7 @@ }, { "cell_type": "markdown", - "id": "a27e61c6", + "id": "53ffc0da", "metadata": {}, "source": [ "Note also that the columns of a data frame can be accessed as attributes: try typing in `Auto.horsepower`. " @@ -7880,7 +7870,7 @@ }, { "cell_type": "markdown", - "id": "7d4e028a", + "id": "1c4705e0", "metadata": {}, "source": [ "We now consider the `cylinders` variable. Typing in `Auto.cylinders.dtype` reveals that it is being treated as a quantitative variable. \n", @@ -7892,13 +7882,13 @@ { "cell_type": "code", "execution_count": 107, - "id": "745d2c5f", + "id": "55b3a1cc", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.620009Z", - "iopub.status.busy": "2023-08-07T01:31:11.619897Z", - "iopub.status.idle": "2023-08-07T01:31:11.623078Z", - "shell.execute_reply": "2023-08-07T01:31:11.622761Z" + "iopub.execute_input": "2023-08-21T02:30:54.961682Z", + "iopub.status.busy": "2023-08-21T02:30:54.961534Z", + "iopub.status.idle": "2023-08-21T02:30:54.965199Z", + "shell.execute_reply": "2023-08-21T02:30:54.964816Z" }, "lines_to_next_cell": 0 }, @@ -7921,7 +7911,7 @@ }, { "cell_type": "markdown", - "id": "d9c6dc9e", + "id": "adc75408", "metadata": {}, "source": [ " Now that `cylinders` is qualitative, we can display it using\n", @@ -7931,13 +7921,13 @@ { "cell_type": "code", "execution_count": 108, - "id": "8b1069bc", + "id": "f3d88794", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.624575Z", - "iopub.status.busy": "2023-08-07T01:31:11.624486Z", - "iopub.status.idle": "2023-08-07T01:31:11.732936Z", - "shell.execute_reply": "2023-08-07T01:31:11.732643Z" + "iopub.execute_input": "2023-08-21T02:30:54.967173Z", + "iopub.status.busy": "2023-08-21T02:30:54.967059Z", + "iopub.status.idle": "2023-08-21T02:30:55.081822Z", + "shell.execute_reply": "2023-08-21T02:30:55.081482Z" } }, "outputs": [ @@ -7959,7 +7949,7 @@ }, { "cell_type": "markdown", - "id": "f96288b4", + "id": "62d6582f", "metadata": {}, "source": [ "The `hist()` method can be used to plot a *histogram*." @@ -7968,13 +7958,13 @@ { "cell_type": "code", "execution_count": 109, - "id": "d9faa85a", + "id": "eea49f5b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.734729Z", - "iopub.status.busy": "2023-08-07T01:31:11.734614Z", - "iopub.status.idle": "2023-08-07T01:31:11.835474Z", - "shell.execute_reply": "2023-08-07T01:31:11.835156Z" + "iopub.execute_input": "2023-08-21T02:30:55.083629Z", + "iopub.status.busy": "2023-08-21T02:30:55.083497Z", + "iopub.status.idle": "2023-08-21T02:30:55.194581Z", + "shell.execute_reply": "2023-08-21T02:30:55.193963Z" }, "lines_to_next_cell": 0 }, @@ -7997,7 +7987,7 @@ }, { "cell_type": "markdown", - "id": "8f743bb2", + "id": "c5a5933c", "metadata": {}, "source": [ "The color of the bars and the number of bins can be changed:" @@ -8006,13 +7996,13 @@ { "cell_type": "code", "execution_count": 110, - "id": "59d4a0b6", + "id": "d5bcfff8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.837167Z", - "iopub.status.busy": "2023-08-07T01:31:11.837045Z", - "iopub.status.idle": "2023-08-07T01:31:11.934716Z", - "shell.execute_reply": "2023-08-07T01:31:11.934431Z" + "iopub.execute_input": "2023-08-21T02:30:55.196850Z", + "iopub.status.busy": "2023-08-21T02:30:55.196698Z", + "iopub.status.idle": "2023-08-21T02:30:55.304087Z", + "shell.execute_reply": "2023-08-21T02:30:55.303692Z" }, "lines_to_next_cell": 0 }, @@ -8035,7 +8025,7 @@ }, { "cell_type": "markdown", - "id": "59d4f72f", + "id": "60c36b6c", "metadata": {}, "source": [ " See `Auto.hist?` for more plotting\n", @@ -8048,13 +8038,13 @@ { "cell_type": "code", "execution_count": 111, - "id": "fb5ed57d", + "id": "edb66cae", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:11.936712Z", - "iopub.status.busy": "2023-08-07T01:31:11.936407Z", - "iopub.status.idle": "2023-08-07T01:31:12.877266Z", - "shell.execute_reply": "2023-08-07T01:31:12.876964Z" + "iopub.execute_input": "2023-08-21T02:30:55.306152Z", + "iopub.status.busy": "2023-08-21T02:30:55.306018Z", + "iopub.status.idle": "2023-08-21T02:30:56.362145Z", + "shell.execute_reply": "2023-08-21T02:30:56.361802Z" }, "lines_to_next_cell": 0 }, @@ -8076,7 +8066,7 @@ }, { "cell_type": "markdown", - "id": "7f671845", + "id": "0b162bd9", "metadata": {}, "source": [ " We can also produce scatterplots\n", @@ -8086,13 +8076,13 @@ { "cell_type": "code", "execution_count": 112, - "id": "8e117e38", + "id": "4f5d25d9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:12.879017Z", - "iopub.status.busy": "2023-08-07T01:31:12.878899Z", - "iopub.status.idle": "2023-08-07T01:31:13.105163Z", - "shell.execute_reply": "2023-08-07T01:31:13.104811Z" + "iopub.execute_input": "2023-08-21T02:30:56.364362Z", + "iopub.status.busy": "2023-08-21T02:30:56.364138Z", + "iopub.status.idle": "2023-08-21T02:30:56.613380Z", + "shell.execute_reply": "2023-08-21T02:30:56.612496Z" }, "lines_to_next_cell": 0 }, @@ -8116,7 +8106,7 @@ }, { "cell_type": "markdown", - "id": "97921078", + "id": "8cae5dfc", "metadata": {}, "source": [ "The `describe()` method produces a numerical summary of each column in a data frame." @@ -8125,13 +8115,13 @@ { "cell_type": "code", "execution_count": 113, - "id": "9e0b12f2", + "id": "ce7b23e2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:13.106923Z", - "iopub.status.busy": "2023-08-07T01:31:13.106799Z", - "iopub.status.idle": "2023-08-07T01:31:13.112755Z", - "shell.execute_reply": "2023-08-07T01:31:13.112431Z" + "iopub.execute_input": "2023-08-21T02:30:56.615725Z", + "iopub.status.busy": "2023-08-21T02:30:56.615530Z", + "iopub.status.idle": "2023-08-21T02:30:56.622977Z", + "shell.execute_reply": "2023-08-21T02:30:56.622071Z" }, "lines_to_next_cell": 0 }, @@ -8229,7 +8219,7 @@ }, { "cell_type": "markdown", - "id": "93fc12de", + "id": "d5042294", "metadata": {}, "source": [ "We can also produce a summary of just a single column." @@ -8238,13 +8228,13 @@ { "cell_type": "code", "execution_count": 114, - "id": "ba4aa0f6", + "id": "a6545d2f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T01:31:13.114362Z", - "iopub.status.busy": "2023-08-07T01:31:13.114259Z", - "iopub.status.idle": "2023-08-07T01:31:13.118767Z", - "shell.execute_reply": "2023-08-07T01:31:13.118402Z" + "iopub.execute_input": "2023-08-21T02:30:56.625913Z", + "iopub.status.busy": "2023-08-21T02:30:56.625760Z", + "iopub.status.idle": "2023-08-21T02:30:56.630979Z", + "shell.execute_reply": "2023-08-21T02:30:56.630640Z" }, "lines_to_next_cell": 0 }, @@ -8275,7 +8265,7 @@ }, { "cell_type": "markdown", - "id": "c029ae61", + "id": "c2ea7f81", "metadata": {}, "source": [ "To exit `Jupyter`, select `File / Close and Halt`.\n", @@ -8288,8 +8278,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "language_info": { "codemirror_mode": { diff --git a/Ch03-linreg-lab.Rmd b/Ch03-linreg-lab.Rmd index 4ea50d2..5d00ee4 100644 --- a/Ch03-linreg-lab.Rmd +++ b/Ch03-linreg-lab.Rmd @@ -1,22 +1,7 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - main_language: python - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 ---- - # Chapter 3 - - # Lab: Linear Regression ## Importing packages @@ -29,7 +14,7 @@ import pandas as pd from matplotlib.pyplot import subplots ``` - + ### New imports Throughout this lab we will introduce new functions and libraries. However, @@ -105,7 +90,7 @@ A.sum() ``` - + ## Simple Linear Regression In this section we will construct model @@ -127,7 +112,7 @@ Boston = load_data("Boston") Boston.columns ``` - + Type `Boston?` to find out more about these data. We start by using the `sm.OLS()` function to fit a @@ -142,7 +127,7 @@ X = pd.DataFrame({'intercept': np.ones(Boston.shape[0]), X[:4] ``` - + We extract the response, and fit the model. ```{python} @@ -164,7 +149,7 @@ method, and returns such a summary. summarize(results) ``` - + Before we describe other methods for working with fitted models, we outline a more useful and general framework for constructing a model matrix~`X`. ### Using Transformations: Fit and Transform @@ -235,8 +220,8 @@ The fitted coefficients can also be retrieved as the results.params ``` - - + + The `get_prediction()` method can be used to obtain predictions, and produce confidence intervals and prediction intervals for the prediction of `medv` for given values of `lstat`. @@ -277,7 +262,7 @@ value of 25.05 for `medv` when `lstat` equals 10), but the latter are substantially wider. Next we will plot `medv` and `lstat` -using `DataFrame.plot.scatter()`, +using `DataFrame.plot.scatter()`, \definelongblankMR{plot.scatter()}{plot.slashslashscatter()} and wish to add the regression line to the resulting plot. @@ -399,14 +384,14 @@ Notice how we have compacted the first line into a succinct expression describin The `Boston` data set contains 12 variables, and so it would be cumbersome to have to type all of these in order to perform a regression using all of the predictors. -Instead, we can use the following short-hand: +Instead, we can use the following short-hand:\definelongblankMR{columns.drop()}{columns.slashslashdrop()} ```{python} terms = Boston.columns.drop('medv') terms ``` - + We can now fit the model with all the variables in `terms` using the same model matrix builder. @@ -417,7 +402,7 @@ results = model.fit() summarize(results) ``` - + What if we would like to perform a regression using all of the variables but one? For example, in the above regression output, `age` has a high $p$-value. So we may wish to run a regression excluding this predictor. @@ -492,7 +477,7 @@ model2 = sm.OLS(y, X) summarize(model2.fit()) ``` - + ## Non-linear Transformations of the Predictors The model matrix builder can include terms beyond @@ -567,7 +552,7 @@ there is little discernible pattern in the residuals. In order to create a cubic or higher-degree polynomial fit, we can simply change the degree argument to `poly()`. - + ## Qualitative Predictors Here we use the `Carseats` data, which is included in the diff --git a/Ch03-linreg-lab.ipynb b/Ch03-linreg-lab.ipynb index 1b5c61b..84f4720 100644 --- a/Ch03-linreg-lab.ipynb +++ b/Ch03-linreg-lab.ipynb @@ -2,17 +2,16 @@ "cells": [ { "cell_type": "markdown", - "id": "82bce88a", + "id": "cfd81b34", "metadata": {}, "source": [ "\n", - "# Chapter 3\n", - "\n" + "# Chapter 3" ] }, { "cell_type": "markdown", - "id": "dcffdceb", + "id": "52e6256f", "metadata": {}, "source": [ "# Lab: Linear Regression\n", @@ -25,13 +24,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "ca5277a6", + "id": "b18c1628", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:29.402170Z", - "iopub.status.busy": "2023-08-07T00:18:29.401851Z", - "iopub.status.idle": "2023-08-07T00:18:29.884854Z", - "shell.execute_reply": "2023-08-07T00:18:29.884559Z" + "iopub.execute_input": "2023-08-21T02:28:52.978537Z", + "iopub.status.busy": "2023-08-21T02:28:52.978403Z", + "iopub.status.idle": "2023-08-21T02:28:53.456488Z", + "shell.execute_reply": "2023-08-21T02:28:53.456172Z" }, "lines_to_next_cell": 2 }, @@ -44,7 +43,7 @@ }, { "cell_type": "markdown", - "id": "95b0ae8c", + "id": "735a61a6", "metadata": {}, "source": [ "### New imports\n", @@ -58,13 +57,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "675f24e6", + "id": "a10a1d7d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:29.886827Z", - "iopub.status.busy": "2023-08-07T00:18:29.886604Z", - "iopub.status.idle": "2023-08-07T00:18:30.513216Z", - "shell.execute_reply": "2023-08-07T00:18:30.512918Z" + "iopub.execute_input": "2023-08-21T02:28:53.458574Z", + "iopub.status.busy": "2023-08-21T02:28:53.458356Z", + "iopub.status.idle": "2023-08-21T02:28:54.074306Z", + "shell.execute_reply": "2023-08-21T02:28:54.073950Z" }, "lines_to_next_cell": 0 }, @@ -75,7 +74,7 @@ }, { "cell_type": "markdown", - "id": "1fb0799f", + "id": "4c10ec5f", "metadata": {}, "source": [ " We will provide relevant details about the\n", @@ -91,13 +90,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "a0ee23c2", + "id": "756c0524", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.515096Z", - "iopub.status.busy": "2023-08-07T00:18:30.514948Z", - "iopub.status.idle": "2023-08-07T00:18:30.517757Z", - "shell.execute_reply": "2023-08-07T00:18:30.517502Z" + "iopub.execute_input": "2023-08-21T02:28:54.076206Z", + "iopub.status.busy": "2023-08-21T02:28:54.076055Z", + "iopub.status.idle": "2023-08-21T02:28:54.079277Z", + "shell.execute_reply": "2023-08-21T02:28:54.079022Z" } }, "outputs": [], @@ -109,7 +108,7 @@ }, { "cell_type": "markdown", - "id": "dbfd346e", + "id": "686eb4ee", "metadata": {}, "source": [ "As one of the import statements above is quite a long line, we inserted a line break `\\` to\n", @@ -122,13 +121,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "b35eb887", + "id": "2c370a6e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.519241Z", - "iopub.status.busy": "2023-08-07T00:18:30.519152Z", - "iopub.status.idle": "2023-08-07T00:18:30.676458Z", - "shell.execute_reply": "2023-08-07T00:18:30.675986Z" + "iopub.execute_input": "2023-08-21T02:28:54.080812Z", + "iopub.status.busy": "2023-08-21T02:28:54.080717Z", + "iopub.status.idle": "2023-08-21T02:28:54.212489Z", + "shell.execute_reply": "2023-08-21T02:28:54.212195Z" } }, "outputs": [], @@ -141,7 +140,7 @@ }, { "cell_type": "markdown", - "id": "84a8177e", + "id": "163af4a1", "metadata": {}, "source": [ "### Inspecting Objects and Namespaces\n", @@ -154,13 +153,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "961908f7", + "id": "43bcb3a9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.678594Z", - "iopub.status.busy": "2023-08-07T00:18:30.678317Z", - "iopub.status.idle": "2023-08-07T00:18:30.682161Z", - "shell.execute_reply": "2023-08-07T00:18:30.681889Z" + "iopub.execute_input": "2023-08-21T02:28:54.214288Z", + "iopub.status.busy": "2023-08-21T02:28:54.214131Z", + "iopub.status.idle": "2023-08-21T02:28:54.218521Z", + "shell.execute_reply": "2023-08-21T02:28:54.217256Z" }, "lines_to_next_cell": 0 }, @@ -218,7 +217,7 @@ }, { "cell_type": "markdown", - "id": "3efc6d99", + "id": "3d936b00", "metadata": {}, "source": [ " This shows you everything that `Python` can find at the top level.\n", @@ -235,13 +234,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "662caa15", + "id": "cb81bfb0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.683690Z", - "iopub.status.busy": "2023-08-07T00:18:30.683590Z", - "iopub.status.idle": "2023-08-07T00:18:30.686573Z", - "shell.execute_reply": "2023-08-07T00:18:30.686323Z" + "iopub.execute_input": "2023-08-21T02:28:54.228152Z", + "iopub.status.busy": "2023-08-21T02:28:54.227968Z", + "iopub.status.idle": "2023-08-21T02:28:54.231888Z", + "shell.execute_reply": "2023-08-21T02:28:54.231418Z" }, "lines_to_next_cell": 0 }, @@ -429,7 +428,7 @@ }, { "cell_type": "markdown", - "id": "49bdd416", + "id": "c5693cc8", "metadata": {}, "source": [ " This indicates that the object `A.sum` exists. In this case it is a method\n", @@ -439,13 +438,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "ebb7d126", + "id": "29e9bdab", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.688076Z", - "iopub.status.busy": "2023-08-07T00:18:30.687980Z", - "iopub.status.idle": "2023-08-07T00:18:30.690330Z", - "shell.execute_reply": "2023-08-07T00:18:30.690041Z" + "iopub.execute_input": "2023-08-21T02:28:54.233644Z", + "iopub.status.busy": "2023-08-21T02:28:54.233538Z", + "iopub.status.idle": "2023-08-21T02:28:54.236077Z", + "shell.execute_reply": "2023-08-21T02:28:54.235804Z" }, "lines_to_next_cell": 0 }, @@ -467,7 +466,7 @@ }, { "cell_type": "markdown", - "id": "3b9db985", + "id": "d000df26", "metadata": {}, "source": [ " " @@ -475,7 +474,7 @@ }, { "cell_type": "markdown", - "id": "9fbed3f3", + "id": "2fff2f42", "metadata": {}, "source": [ "## Simple Linear Regression\n", @@ -497,13 +496,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "1ea46cee", + "id": "72a15de5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.693238Z", - "iopub.status.busy": "2023-08-07T00:18:30.693135Z", - "iopub.status.idle": "2023-08-07T00:18:30.700216Z", - "shell.execute_reply": "2023-08-07T00:18:30.699965Z" + "iopub.execute_input": "2023-08-21T02:28:54.237580Z", + "iopub.status.busy": "2023-08-21T02:28:54.237492Z", + "iopub.status.idle": "2023-08-21T02:28:54.242855Z", + "shell.execute_reply": "2023-08-21T02:28:54.242574Z" } }, "outputs": [ @@ -527,7 +526,7 @@ }, { "cell_type": "markdown", - "id": "a8cceee6", + "id": "d4fefb35", "metadata": {}, "source": [ "Type `Boston?` to find out more about these data.\n", @@ -541,13 +540,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "26c0ba88", + "id": "26837cfe", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.701638Z", - "iopub.status.busy": "2023-08-07T00:18:30.701559Z", - "iopub.status.idle": "2023-08-07T00:18:30.706894Z", - "shell.execute_reply": "2023-08-07T00:18:30.706635Z" + "iopub.execute_input": "2023-08-21T02:28:54.244219Z", + "iopub.status.busy": "2023-08-21T02:28:54.244127Z", + "iopub.status.idle": "2023-08-21T02:28:54.249714Z", + "shell.execute_reply": "2023-08-21T02:28:54.249432Z" } }, "outputs": [ @@ -622,7 +621,7 @@ }, { "cell_type": "markdown", - "id": "5ac7f183", + "id": "73cb41ca", "metadata": {}, "source": [ "We extract the response, and fit the model." @@ -631,13 +630,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "d4dd511b", + "id": "c70cbdb5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.708348Z", - "iopub.status.busy": "2023-08-07T00:18:30.708254Z", - "iopub.status.idle": "2023-08-07T00:18:30.710731Z", - "shell.execute_reply": "2023-08-07T00:18:30.710460Z" + "iopub.execute_input": "2023-08-21T02:28:54.251263Z", + "iopub.status.busy": "2023-08-21T02:28:54.251136Z", + "iopub.status.idle": "2023-08-21T02:28:54.253671Z", + "shell.execute_reply": "2023-08-21T02:28:54.253397Z" }, "lines_to_next_cell": 0 }, @@ -650,7 +649,7 @@ }, { "cell_type": "markdown", - "id": "ddf44723", + "id": "e87fbd51", "metadata": {}, "source": [ "Note that `sm.OLS()` does\n", @@ -666,13 +665,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "eef9f8e3", + "id": "6f2d7c78", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.712145Z", - "iopub.status.busy": "2023-08-07T00:18:30.712039Z", - "iopub.status.idle": "2023-08-07T00:18:30.771318Z", - "shell.execute_reply": "2023-08-07T00:18:30.771048Z" + "iopub.execute_input": "2023-08-21T02:28:54.255193Z", + "iopub.status.busy": "2023-08-21T02:28:54.255089Z", + "iopub.status.idle": "2023-08-21T02:28:54.314793Z", + "shell.execute_reply": "2023-08-21T02:28:54.314504Z" }, "lines_to_next_cell": 2 }, @@ -740,7 +739,7 @@ }, { "cell_type": "markdown", - "id": "db916e19", + "id": "cf6f045c", "metadata": {}, "source": [ "Before we describe other methods for working with fitted models, we outline a more useful and general framework for constructing a model matrix~`X`.\n", @@ -777,13 +776,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "557170d4", + "id": "cdec4294", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.772908Z", - "iopub.status.busy": "2023-08-07T00:18:30.772767Z", - "iopub.status.idle": "2023-08-07T00:18:30.777533Z", - "shell.execute_reply": "2023-08-07T00:18:30.777292Z" + "iopub.execute_input": "2023-08-21T02:28:54.316521Z", + "iopub.status.busy": "2023-08-21T02:28:54.316363Z", + "iopub.status.idle": "2023-08-21T02:28:54.323224Z", + "shell.execute_reply": "2023-08-21T02:28:54.322970Z" }, "lines_to_next_cell": 0 }, @@ -860,7 +859,7 @@ }, { "cell_type": "markdown", - "id": "86615813", + "id": "1de3a91e", "metadata": {}, "source": [ "In this simple case, the `fit()` method does very little; it simply checks that the variable `'lstat'` specified in `design` exists in `Boston`. Then `transform()` constructs the model matrix with two columns: an `intercept` and the variable `lstat`.\n", @@ -872,13 +871,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "b83ec097", + "id": "edf2efcb", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.778980Z", - "iopub.status.busy": "2023-08-07T00:18:30.778901Z", - "iopub.status.idle": "2023-08-07T00:18:30.783086Z", - "shell.execute_reply": "2023-08-07T00:18:30.782821Z" + "iopub.execute_input": "2023-08-21T02:28:54.324750Z", + "iopub.status.busy": "2023-08-21T02:28:54.324644Z", + "iopub.status.idle": "2023-08-21T02:28:54.330945Z", + "shell.execute_reply": "2023-08-21T02:28:54.330680Z" }, "lines_to_next_cell": 0 }, @@ -954,7 +953,7 @@ }, { "cell_type": "markdown", - "id": "c6becbcb", + "id": "4eab8574", "metadata": {}, "source": [ "Note that, as in the previous code chunk when the two steps were done separately, the `design` object is changed as a result of the `fit()` operation. The power of this pipeline will become clearer when we fit more complex models that involve interactions and transformations." @@ -962,7 +961,7 @@ }, { "cell_type": "markdown", - "id": "e097120f", + "id": "7336a90b", "metadata": {}, "source": [ "Let's return to our fitted regression model.\n", @@ -976,13 +975,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "d4dce5f6", + "id": "49fc8992", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.784600Z", - "iopub.status.busy": "2023-08-07T00:18:30.784504Z", - "iopub.status.idle": "2023-08-07T00:18:30.793701Z", - "shell.execute_reply": "2023-08-07T00:18:30.793458Z" + "iopub.execute_input": "2023-08-21T02:28:54.332402Z", + "iopub.status.busy": "2023-08-21T02:28:54.332319Z", + "iopub.status.idle": "2023-08-21T02:28:54.341724Z", + "shell.execute_reply": "2023-08-21T02:28:54.341409Z" } }, "outputs": [ @@ -1001,10 +1000,10 @@ " Method: Least Squares F-statistic: 601.6\n", "\n", "\n", - " Date: Sun, 06 Aug 2023 Prob (F-statistic): 5.08e-88\n", + " Date: Sun, 20 Aug 2023 Prob (F-statistic): 5.08e-88\n", "\n", "\n", - " Time: 17:18:30 Log-Likelihood: -1641.5\n", + " Time: 19:28:54 Log-Likelihood: -1641.5\n", "\n", "\n", " No. Observations: 506 AIC: 3287.\n", @@ -1052,8 +1051,8 @@ "\\textbf{Dep. Variable:} & medv & \\textbf{ R-squared: } & 0.544 \\\\\n", "\\textbf{Model:} & OLS & \\textbf{ Adj. R-squared: } & 0.543 \\\\\n", "\\textbf{Method:} & Least Squares & \\textbf{ F-statistic: } & 601.6 \\\\\n", - "\\textbf{Date:} & Sun, 06 Aug 2023 & \\textbf{ Prob (F-statistic):} & 5.08e-88 \\\\\n", - "\\textbf{Time:} & 17:18:30 & \\textbf{ Log-Likelihood: } & -1641.5 \\\\\n", + "\\textbf{Date:} & Sun, 20 Aug 2023 & \\textbf{ Prob (F-statistic):} & 5.08e-88 \\\\\n", + "\\textbf{Time:} & 19:28:54 & \\textbf{ Log-Likelihood: } & -1641.5 \\\\\n", "\\textbf{No. Observations:} & 506 & \\textbf{ AIC: } & 3287. \\\\\n", "\\textbf{Df Residuals:} & 504 & \\textbf{ BIC: } & 3295. \\\\\n", "\\textbf{Df Model:} & 1 & \\textbf{ } & \\\\\n", @@ -1088,8 +1087,8 @@ "Dep. Variable: medv R-squared: 0.544\n", "Model: OLS Adj. R-squared: 0.543\n", "Method: Least Squares F-statistic: 601.6\n", - "Date: Sun, 06 Aug 2023 Prob (F-statistic): 5.08e-88\n", - "Time: 17:18:30 Log-Likelihood: -1641.5\n", + "Date: Sun, 20 Aug 2023 Prob (F-statistic): 5.08e-88\n", + "Time: 19:28:54 Log-Likelihood: -1641.5\n", "No. Observations: 506 AIC: 3287.\n", "Df Residuals: 504 BIC: 3295.\n", "Df Model: 1 \n", @@ -1122,7 +1121,7 @@ }, { "cell_type": "markdown", - "id": "9a367738", + "id": "cbadf6fb", "metadata": {}, "source": [ "The fitted coefficients can also be retrieved as the\n", @@ -1132,13 +1131,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "a0edf555", + "id": "6d0f4c3a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.795155Z", - "iopub.status.busy": "2023-08-07T00:18:30.795070Z", - "iopub.status.idle": "2023-08-07T00:18:30.797528Z", - "shell.execute_reply": "2023-08-07T00:18:30.797283Z" + "iopub.execute_input": "2023-08-21T02:28:54.343317Z", + "iopub.status.busy": "2023-08-21T02:28:54.343206Z", + "iopub.status.idle": "2023-08-21T02:28:54.345604Z", + "shell.execute_reply": "2023-08-21T02:28:54.345339Z" }, "lines_to_next_cell": 2 }, @@ -1162,7 +1161,7 @@ }, { "cell_type": "markdown", - "id": "4472913f", + "id": "f97d477a", "metadata": {}, "source": [ "The `get_prediction()` method can be used to obtain predictions, and produce confidence intervals and\n", @@ -1175,13 +1174,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "fdc5a3f3", + "id": "132ffded", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.798957Z", - "iopub.status.busy": "2023-08-07T00:18:30.798873Z", - "iopub.status.idle": "2023-08-07T00:18:30.802562Z", - "shell.execute_reply": "2023-08-07T00:18:30.802313Z" + "iopub.execute_input": "2023-08-21T02:28:54.347097Z", + "iopub.status.busy": "2023-08-21T02:28:54.346984Z", + "iopub.status.idle": "2023-08-21T02:28:54.350802Z", + "shell.execute_reply": "2023-08-21T02:28:54.350563Z" } }, "outputs": [ @@ -1250,7 +1249,7 @@ }, { "cell_type": "markdown", - "id": "590d6b7d", + "id": "e99b90dc", "metadata": {}, "source": [ "Next we compute the predictions at `newX`, and view them by extracting the `predicted_mean` attribute." @@ -1259,13 +1258,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "2c6acbf0", + "id": "b654a050", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.803979Z", - "iopub.status.busy": "2023-08-07T00:18:30.803903Z", - "iopub.status.idle": "2023-08-07T00:18:30.806278Z", - "shell.execute_reply": "2023-08-07T00:18:30.806017Z" + "iopub.execute_input": "2023-08-21T02:28:54.352369Z", + "iopub.status.busy": "2023-08-21T02:28:54.352275Z", + "iopub.status.idle": "2023-08-21T02:28:54.354743Z", + "shell.execute_reply": "2023-08-21T02:28:54.354502Z" }, "lines_to_next_cell": 0 }, @@ -1288,7 +1287,7 @@ }, { "cell_type": "markdown", - "id": "f2d7e037", + "id": "cca6cef5", "metadata": {}, "source": [ "We can produce confidence intervals for the predicted values." @@ -1297,13 +1296,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "c472ef33", + "id": "148ed59d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.807645Z", - "iopub.status.busy": "2023-08-07T00:18:30.807570Z", - "iopub.status.idle": "2023-08-07T00:18:30.809883Z", - "shell.execute_reply": "2023-08-07T00:18:30.809646Z" + "iopub.execute_input": "2023-08-21T02:28:54.356140Z", + "iopub.status.busy": "2023-08-21T02:28:54.356063Z", + "iopub.status.idle": "2023-08-21T02:28:54.358315Z", + "shell.execute_reply": "2023-08-21T02:28:54.358059Z" }, "lines_to_next_cell": 0 }, @@ -1327,7 +1326,7 @@ }, { "cell_type": "markdown", - "id": "dfabf8a7", + "id": "c217e5e2", "metadata": {}, "source": [ "Prediction intervals are computing by setting `obs=True`:" @@ -1336,13 +1335,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "3e2ffc7a", + "id": "d9d7b844", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.811226Z", - "iopub.status.busy": "2023-08-07T00:18:30.811154Z", - "iopub.status.idle": "2023-08-07T00:18:30.813455Z", - "shell.execute_reply": "2023-08-07T00:18:30.813210Z" + "iopub.execute_input": "2023-08-21T02:28:54.359757Z", + "iopub.status.busy": "2023-08-21T02:28:54.359678Z", + "iopub.status.idle": "2023-08-21T02:28:54.362165Z", + "shell.execute_reply": "2023-08-21T02:28:54.361908Z" }, "lines_to_next_cell": 0 }, @@ -1366,7 +1365,7 @@ }, { "cell_type": "markdown", - "id": "65463c75", + "id": "a26d3660", "metadata": {}, "source": [ " For instance, the 95% confidence interval associated with an\n", @@ -1377,14 +1376,14 @@ "10), but the latter are substantially wider.\n", "\n", "Next we will plot `medv` and `lstat` \n", - "using `DataFrame.plot.scatter()`, \n", + "using `DataFrame.plot.scatter()`, \\definelongblankMR{plot.scatter()}{plot.slashslashscatter()}\n", "and wish to\n", "add the regression line to the resulting plot." ] }, { "cell_type": "markdown", - "id": "f699e856", + "id": "50db5bf6", "metadata": {}, "source": [ "### Defining Functions\n", @@ -1396,13 +1395,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "4e56a1d3", + "id": "79de2913", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.814985Z", - "iopub.status.busy": "2023-08-07T00:18:30.814910Z", - "iopub.status.idle": "2023-08-07T00:18:30.816725Z", - "shell.execute_reply": "2023-08-07T00:18:30.816494Z" + "iopub.execute_input": "2023-08-21T02:28:54.363741Z", + "iopub.status.busy": "2023-08-21T02:28:54.363634Z", + "iopub.status.idle": "2023-08-21T02:28:54.365531Z", + "shell.execute_reply": "2023-08-21T02:28:54.365292Z" }, "lines_to_next_cell": 0 }, @@ -1417,7 +1416,7 @@ }, { "cell_type": "markdown", - "id": "e0a0dce5", + "id": "f66dd38d", "metadata": {}, "source": [ " A few things are illustrated above. First we see the syntax for defining a function:\n", @@ -1430,13 +1429,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "7f43ffe7", + "id": "a9b843c7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.818143Z", - "iopub.status.busy": "2023-08-07T00:18:30.818041Z", - "iopub.status.idle": "2023-08-07T00:18:30.819998Z", - "shell.execute_reply": "2023-08-07T00:18:30.819773Z" + "iopub.execute_input": "2023-08-21T02:28:54.366874Z", + "iopub.status.busy": "2023-08-21T02:28:54.366784Z", + "iopub.status.idle": "2023-08-21T02:28:54.368713Z", + "shell.execute_reply": "2023-08-21T02:28:54.368464Z" }, "lines_to_next_cell": 0 }, @@ -1451,7 +1450,7 @@ }, { "cell_type": "markdown", - "id": "4f4981fa", + "id": "25ba4401", "metadata": {}, "source": [ "The addition of `*args` allows any number of\n", @@ -1470,13 +1469,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "3f7b67c9", + "id": "7e116800", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.821345Z", - "iopub.status.busy": "2023-08-07T00:18:30.821254Z", - "iopub.status.idle": "2023-08-07T00:18:30.930375Z", - "shell.execute_reply": "2023-08-07T00:18:30.929550Z" + "iopub.execute_input": "2023-08-21T02:28:54.370163Z", + "iopub.status.busy": "2023-08-21T02:28:54.370073Z", + "iopub.status.idle": "2023-08-21T02:28:54.466696Z", + "shell.execute_reply": "2023-08-21T02:28:54.466338Z" }, "lines_to_next_cell": 0 }, @@ -1503,7 +1502,7 @@ }, { "cell_type": "markdown", - "id": "50d7066f", + "id": "9a3e8b26", "metadata": {}, "source": [ "Thus, the final call to `ax.plot()` is `ax.plot(xlim, ylim, 'r--', linewidth=3)`.\n", @@ -1517,7 +1516,7 @@ }, { "cell_type": "markdown", - "id": "82ab1913", + "id": "1d78b981", "metadata": {}, "source": [ "Next we examine some diagnostic plots, several of which were discussed\n", @@ -1534,13 +1533,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "b35a2fd3", + "id": "b524399e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:30.934324Z", - "iopub.status.busy": "2023-08-07T00:18:30.934035Z", - "iopub.status.idle": "2023-08-07T00:18:31.102742Z", - "shell.execute_reply": "2023-08-07T00:18:31.101921Z" + "iopub.execute_input": "2023-08-21T02:28:54.468561Z", + "iopub.status.busy": "2023-08-21T02:28:54.468356Z", + "iopub.status.idle": "2023-08-21T02:28:54.566644Z", + "shell.execute_reply": "2023-08-21T02:28:54.566337Z" }, "lines_to_next_cell": 0 }, @@ -1566,7 +1565,7 @@ }, { "cell_type": "markdown", - "id": "4deb547b", + "id": "590a8be9", "metadata": {}, "source": [ " We add a horizontal line at 0 for reference using the\n", @@ -1582,13 +1581,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "82673b80", + "id": "8c95b6b0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.106724Z", - "iopub.status.busy": "2023-08-07T00:18:31.106292Z", - "iopub.status.idle": "2023-08-07T00:18:31.200890Z", - "shell.execute_reply": "2023-08-07T00:18:31.200597Z" + "iopub.execute_input": "2023-08-21T02:28:54.568423Z", + "iopub.status.busy": "2023-08-21T02:28:54.568307Z", + "iopub.status.idle": "2023-08-21T02:28:54.658553Z", + "shell.execute_reply": "2023-08-21T02:28:54.658267Z" }, "lines_to_next_cell": 0 }, @@ -1625,7 +1624,7 @@ }, { "cell_type": "markdown", - "id": "7eb69d75", + "id": "7712b1e1", "metadata": {}, "source": [ " The `np.argmax()` function identifies the index of the largest element of an array, optionally computed over an axis of the array.\n", @@ -1635,7 +1634,7 @@ }, { "cell_type": "markdown", - "id": "94c0a8c1", + "id": "c17dacc1", "metadata": {}, "source": [ "## Multiple Linear Regression\n", @@ -1650,13 +1649,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "54596dc4", + "id": "04ed8362", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.202583Z", - "iopub.status.busy": "2023-08-07T00:18:31.202480Z", - "iopub.status.idle": "2023-08-07T00:18:31.212391Z", - "shell.execute_reply": "2023-08-07T00:18:31.212135Z" + "iopub.execute_input": "2023-08-21T02:28:54.660197Z", + "iopub.status.busy": "2023-08-21T02:28:54.660075Z", + "iopub.status.idle": "2023-08-21T02:28:54.672237Z", + "shell.execute_reply": "2023-08-21T02:28:54.671994Z" }, "lines_to_next_cell": 0 }, @@ -1735,26 +1734,26 @@ }, { "cell_type": "markdown", - "id": "88450596", + "id": "3af076fd", "metadata": {}, "source": [ "Notice how we have compacted the first line into a succinct expression describing the construction of `X`.\n", "\n", "The `Boston` data set contains 12 variables, and so it would be cumbersome\n", "to have to type all of these in order to perform a regression using all of the predictors.\n", - "Instead, we can use the following short-hand:" + "Instead, we can use the following short-hand:\\definelongblankMR{columns.drop()}{columns.slashslashdrop()}" ] }, { "cell_type": "code", "execution_count": 26, - "id": "75c78238", + "id": "6483e190", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.214024Z", - "iopub.status.busy": "2023-08-07T00:18:31.213941Z", - "iopub.status.idle": "2023-08-07T00:18:31.216399Z", - "shell.execute_reply": "2023-08-07T00:18:31.216121Z" + "iopub.execute_input": "2023-08-21T02:28:54.673721Z", + "iopub.status.busy": "2023-08-21T02:28:54.673628Z", + "iopub.status.idle": "2023-08-21T02:28:54.676304Z", + "shell.execute_reply": "2023-08-21T02:28:54.675993Z" } }, "outputs": [ @@ -1778,7 +1777,7 @@ }, { "cell_type": "markdown", - "id": "653715b5", + "id": "b79a6810", "metadata": {}, "source": [ "We can now fit the model with all the variables in `terms` using\n", @@ -1788,13 +1787,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "f14b9e1a", + "id": "99a6f9d0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.217829Z", - "iopub.status.busy": "2023-08-07T00:18:31.217726Z", - "iopub.status.idle": "2023-08-07T00:18:31.232053Z", - "shell.execute_reply": "2023-08-07T00:18:31.231736Z" + "iopub.execute_input": "2023-08-21T02:28:54.677828Z", + "iopub.status.busy": "2023-08-21T02:28:54.677709Z", + "iopub.status.idle": "2023-08-21T02:28:54.696704Z", + "shell.execute_reply": "2023-08-21T02:28:54.696381Z" } }, "outputs": [ @@ -1952,7 +1951,7 @@ }, { "cell_type": "markdown", - "id": "26acd5ab", + "id": "719d42ae", "metadata": {}, "source": [ "What if we would like to perform a regression using all of the variables but one? For\n", @@ -1964,13 +1963,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "0a2714b1", + "id": "78cf55d0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.233879Z", - "iopub.status.busy": "2023-08-07T00:18:31.233764Z", - "iopub.status.idle": "2023-08-07T00:18:31.247573Z", - "shell.execute_reply": "2023-08-07T00:18:31.247300Z" + "iopub.execute_input": "2023-08-21T02:28:54.698261Z", + "iopub.status.busy": "2023-08-21T02:28:54.698177Z", + "iopub.status.idle": "2023-08-21T02:28:54.716362Z", + "shell.execute_reply": "2023-08-21T02:28:54.716082Z" } }, "outputs": [ @@ -2120,7 +2119,7 @@ }, { "cell_type": "markdown", - "id": "28538920", + "id": "526a80bc", "metadata": {}, "source": [ "## Multivariate Goodness of Fit\n", @@ -2152,13 +2151,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "961c9128", + "id": "902f6474", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.249268Z", - "iopub.status.busy": "2023-08-07T00:18:31.249149Z", - "iopub.status.idle": "2023-08-07T00:18:31.256436Z", - "shell.execute_reply": "2023-08-07T00:18:31.256170Z" + "iopub.execute_input": "2023-08-21T02:28:54.718076Z", + "iopub.status.busy": "2023-08-21T02:28:54.717951Z", + "iopub.status.idle": "2023-08-21T02:28:54.725146Z", + "shell.execute_reply": "2023-08-21T02:28:54.724859Z" }, "lines_to_next_cell": 0 }, @@ -2271,7 +2270,7 @@ }, { "cell_type": "markdown", - "id": "d052f0ab", + "id": "2a1567ea", "metadata": {}, "source": [ "The function `VIF()` takes two arguments: a dataframe or array,\n", @@ -2284,13 +2283,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "4886f9e9", + "id": "ea1c88e9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.257965Z", - "iopub.status.busy": "2023-08-07T00:18:31.257856Z", - "iopub.status.idle": "2023-08-07T00:18:31.262942Z", - "shell.execute_reply": "2023-08-07T00:18:31.262707Z" + "iopub.execute_input": "2023-08-21T02:28:54.726658Z", + "iopub.status.busy": "2023-08-21T02:28:54.726565Z", + "iopub.status.idle": "2023-08-21T02:28:54.731850Z", + "shell.execute_reply": "2023-08-21T02:28:54.731595Z" }, "lines_to_next_cell": 0 }, @@ -2303,7 +2302,7 @@ }, { "cell_type": "markdown", - "id": "fd3732d5", + "id": "18fb24e5", "metadata": {}, "source": [ "List comprehension allows us to perform such repetitive operations in a more straightforward way.\n", @@ -2317,13 +2316,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "b54d2da1", + "id": "e9ff159c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.264400Z", - "iopub.status.busy": "2023-08-07T00:18:31.264319Z", - "iopub.status.idle": "2023-08-07T00:18:31.274870Z", - "shell.execute_reply": "2023-08-07T00:18:31.274588Z" + "iopub.execute_input": "2023-08-21T02:28:54.733388Z", + "iopub.status.busy": "2023-08-21T02:28:54.733294Z", + "iopub.status.idle": "2023-08-21T02:28:54.747346Z", + "shell.execute_reply": "2023-08-21T02:28:54.747067Z" }, "lines_to_next_cell": 2 }, @@ -2411,7 +2410,7 @@ }, { "cell_type": "markdown", - "id": "c72c4846", + "id": "92604d18", "metadata": {}, "source": [ "## Non-linear Transformations of the Predictors\n", @@ -2425,13 +2424,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "1b71633a", + "id": "c98f54b2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.276448Z", - "iopub.status.busy": "2023-08-07T00:18:31.276353Z", - "iopub.status.idle": "2023-08-07T00:18:31.287456Z", - "shell.execute_reply": "2023-08-07T00:18:31.287173Z" + "iopub.execute_input": "2023-08-21T02:28:54.748856Z", + "iopub.status.busy": "2023-08-21T02:28:54.748774Z", + "iopub.status.idle": "2023-08-21T02:28:54.763149Z", + "shell.execute_reply": "2023-08-21T02:28:54.762853Z" }, "lines_to_next_cell": 0 }, @@ -2518,7 +2517,7 @@ }, { "cell_type": "markdown", - "id": "9f32c813", + "id": "ccc11d8c", "metadata": {}, "source": [ "The effectively zero *p*-value associated with the quadratic term\n", @@ -2543,13 +2542,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "6d30a306", + "id": "53065cac", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.289067Z", - "iopub.status.busy": "2023-08-07T00:18:31.288970Z", - "iopub.status.idle": "2023-08-07T00:18:31.294816Z", - "shell.execute_reply": "2023-08-07T00:18:31.294545Z" + "iopub.execute_input": "2023-08-21T02:28:54.764924Z", + "iopub.status.busy": "2023-08-21T02:28:54.764796Z", + "iopub.status.idle": "2023-08-21T02:28:54.770846Z", + "shell.execute_reply": "2023-08-21T02:28:54.770578Z" }, "lines_to_next_cell": 0 }, @@ -2623,7 +2622,7 @@ }, { "cell_type": "markdown", - "id": "bd0155d4", + "id": "c0696dc2", "metadata": {}, "source": [ "Here `results1` represents the linear submodel containing\n", @@ -2653,13 +2652,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "9a5ec13f", + "id": "8c654809", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.296264Z", - "iopub.status.busy": "2023-08-07T00:18:31.296175Z", - "iopub.status.idle": "2023-08-07T00:18:31.396371Z", - "shell.execute_reply": "2023-08-07T00:18:31.396036Z" + "iopub.execute_input": "2023-08-21T02:28:54.772408Z", + "iopub.status.busy": "2023-08-21T02:28:54.772296Z", + "iopub.status.idle": "2023-08-21T02:28:54.872389Z", + "shell.execute_reply": "2023-08-21T02:28:54.872086Z" }, "lines_to_next_cell": 0 }, @@ -2667,7 +2666,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 34, @@ -2695,7 +2694,7 @@ }, { "cell_type": "markdown", - "id": "88272f6f", + "id": "f79b542d", "metadata": {}, "source": [ "We see that when the quadratic term is included in the model,\n", @@ -2706,7 +2705,7 @@ }, { "cell_type": "markdown", - "id": "e1a34084", + "id": "6123a191", "metadata": {}, "source": [ "## Qualitative Predictors\n", @@ -2719,13 +2718,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "09bbc0c6", + "id": "2182f0ec", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.398199Z", - "iopub.status.busy": "2023-08-07T00:18:31.398079Z", - "iopub.status.idle": "2023-08-07T00:18:31.403054Z", - "shell.execute_reply": "2023-08-07T00:18:31.402775Z" + "iopub.execute_input": "2023-08-21T02:28:54.874000Z", + "iopub.status.busy": "2023-08-21T02:28:54.873893Z", + "iopub.status.idle": "2023-08-21T02:28:54.879085Z", + "shell.execute_reply": "2023-08-21T02:28:54.878817Z" }, "lines_to_next_cell": 0 }, @@ -2750,7 +2749,7 @@ }, { "cell_type": "markdown", - "id": "1a882e65", + "id": "66672403", "metadata": {}, "source": [ "The `Carseats` \n", @@ -2770,13 +2769,13 @@ { "cell_type": "code", "execution_count": 36, - "id": "2e1da1fa", + "id": "d614fdcb", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:31.404630Z", - "iopub.status.busy": "2023-08-07T00:18:31.404535Z", - "iopub.status.idle": "2023-08-07T00:18:31.424741Z", - "shell.execute_reply": "2023-08-07T00:18:31.424459Z" + "iopub.execute_input": "2023-08-21T02:28:54.880583Z", + "iopub.status.busy": "2023-08-21T02:28:54.880499Z", + "iopub.status.idle": "2023-08-21T02:28:54.907341Z", + "shell.execute_reply": "2023-08-21T02:28:54.907079Z" }, "lines_to_next_cell": 0 }, @@ -2946,7 +2945,7 @@ }, { "cell_type": "markdown", - "id": "79d9127c", + "id": "2402763b", "metadata": {}, "source": [ "In the first line above, we made `allvars` a list, so that we\n", @@ -2968,8 +2967,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "language_info": { "codemirror_mode": { diff --git a/Ch04-classification-lab.Rmd b/Ch04-classification-lab.Rmd index 6266d03..baa6b16 100644 --- a/Ch04-classification-lab.Rmd +++ b/Ch04-classification-lab.Rmd @@ -1,16 +1,3 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - main_language: python - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 ---- - # Chapter 4 @@ -807,7 +794,7 @@ feature_std.std() ``` -Notice that the standard deviations are not quite $1$ here; this is again due to some procedures using the $1/n$ convention for variances (in this case `scaler()`), while others use $1/(n-1)$ (the `std()` method). See the footnote on page 103. +Notice that the standard deviations are not quite $1$ here; this is again due to some procedures using the $1/n$ convention for variances (in this case `scaler()`), while others use $1/(n-1)$ (the `std()` method). See the footnote on page 200. In this case it does not matter, as long as the variables are all on the same scale. Using the function `train_test_split()` we now split the observations into a test set, diff --git a/Ch04-classification-lab.ipynb b/Ch04-classification-lab.ipynb index 90fb9c8..da425fa 100644 --- a/Ch04-classification-lab.ipynb +++ b/Ch04-classification-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "cb3c07d1", + "id": "5443fa92", "metadata": {}, "source": [ "\n", @@ -13,7 +13,7 @@ }, { "cell_type": "markdown", - "id": "daef3e2e", + "id": "3fc2dfec", "metadata": {}, "source": [ "# Lab: Logistic Regression, LDA, QDA, and KNN\n" @@ -21,7 +21,7 @@ }, { "cell_type": "markdown", - "id": "3cb93478", + "id": "0c96d561", "metadata": {}, "source": [ "## The Stock Market Data\n", @@ -43,13 +43,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "7b8d78b9", + "id": "95d28c33", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:32.688752Z", - "iopub.status.busy": "2023-08-07T00:18:32.688456Z", - "iopub.status.idle": "2023-08-07T00:18:33.723127Z", - "shell.execute_reply": "2023-08-07T00:18:33.722505Z" + "iopub.execute_input": "2023-08-21T02:28:56.229892Z", + "iopub.status.busy": "2023-08-21T02:28:56.229672Z", + "iopub.status.idle": "2023-08-21T02:28:57.250402Z", + "shell.execute_reply": "2023-08-21T02:28:57.249963Z" } }, "outputs": [], @@ -65,7 +65,7 @@ }, { "cell_type": "markdown", - "id": "f420141c", + "id": "0c887b44", "metadata": {}, "source": [ "We also collect together the new imports needed for this lab." @@ -74,13 +74,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "b5938862", + "id": "f7fb5f2a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.725437Z", - "iopub.status.busy": "2023-08-07T00:18:33.725139Z", - "iopub.status.idle": "2023-08-07T00:18:33.743611Z", - "shell.execute_reply": "2023-08-07T00:18:33.743322Z" + "iopub.execute_input": "2023-08-21T02:28:57.252390Z", + "iopub.status.busy": "2023-08-21T02:28:57.252224Z", + "iopub.status.idle": "2023-08-21T02:28:57.272851Z", + "shell.execute_reply": "2023-08-21T02:28:57.272588Z" }, "lines_to_next_cell": 2 }, @@ -100,7 +100,7 @@ }, { "cell_type": "markdown", - "id": "34413b1c", + "id": "f5fd2bfd", "metadata": {}, "source": [ "Now we are ready to load the `Smarket` data." @@ -109,13 +109,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "e9fdf040", + "id": "7845390b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.745195Z", - "iopub.status.busy": "2023-08-07T00:18:33.745084Z", - "iopub.status.idle": "2023-08-07T00:18:33.757813Z", - "shell.execute_reply": "2023-08-07T00:18:33.757521Z" + "iopub.execute_input": "2023-08-21T02:28:57.274355Z", + "iopub.status.busy": "2023-08-21T02:28:57.274258Z", + "iopub.status.idle": "2023-08-21T02:28:57.285160Z", + "shell.execute_reply": "2023-08-21T02:28:57.284894Z" }, "lines_to_next_cell": 0 }, @@ -319,7 +319,7 @@ }, { "cell_type": "markdown", - "id": "d3533960", + "id": "6b585d9b", "metadata": {}, "source": [ "This gives a truncated listing of the data.\n", @@ -329,13 +329,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "69d5cfae", + "id": "a92e287a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.759381Z", - "iopub.status.busy": "2023-08-07T00:18:33.759278Z", - "iopub.status.idle": "2023-08-07T00:18:33.761642Z", - "shell.execute_reply": "2023-08-07T00:18:33.761397Z" + "iopub.execute_input": "2023-08-21T02:28:57.286715Z", + "iopub.status.busy": "2023-08-21T02:28:57.286616Z", + "iopub.status.idle": "2023-08-21T02:28:57.288883Z", + "shell.execute_reply": "2023-08-21T02:28:57.288648Z" }, "lines_to_next_cell": 0 }, @@ -359,7 +359,7 @@ }, { "cell_type": "markdown", - "id": "c1e0cc8c", + "id": "31ec6135", "metadata": {}, "source": [ "We compute the correlation matrix using the `corr()` method\n", @@ -373,13 +373,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "a4c0648e", + "id": "96bb1e00", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.763041Z", - "iopub.status.busy": "2023-08-07T00:18:33.762950Z", - "iopub.status.idle": "2023-08-07T00:18:33.767711Z", - "shell.execute_reply": "2023-08-07T00:18:33.767453Z" + "iopub.execute_input": "2023-08-21T02:28:57.290357Z", + "iopub.status.busy": "2023-08-21T02:28:57.290259Z", + "iopub.status.idle": "2023-08-21T02:28:57.295352Z", + "shell.execute_reply": "2023-08-21T02:28:57.295083Z" }, "lines_to_next_cell": 0 }, @@ -541,7 +541,7 @@ }, { "cell_type": "markdown", - "id": "c68bb37a", + "id": "9ff113ca", "metadata": {}, "source": [ "As one would expect, the correlations between the lagged return variables and\n", @@ -554,13 +554,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "cd40274b", + "id": "4ddb96ba", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.769148Z", - "iopub.status.busy": "2023-08-07T00:18:33.769072Z", - "iopub.status.idle": "2023-08-07T00:18:33.882743Z", - "shell.execute_reply": "2023-08-07T00:18:33.880710Z" + "iopub.execute_input": "2023-08-21T02:28:57.296784Z", + "iopub.status.busy": "2023-08-21T02:28:57.296683Z", + "iopub.status.idle": "2023-08-21T02:28:57.392956Z", + "shell.execute_reply": "2023-08-21T02:28:57.392526Z" }, "lines_to_next_cell": 2 }, @@ -582,7 +582,7 @@ }, { "cell_type": "markdown", - "id": "685b96e8", + "id": "c2fe10a0", "metadata": {}, "source": [ "## Logistic Regression\n", @@ -601,13 +601,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "35b8bffe", + "id": "df59bcac", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:33.886763Z", - "iopub.status.busy": "2023-08-07T00:18:33.886512Z", - "iopub.status.idle": "2023-08-07T00:18:34.002815Z", - "shell.execute_reply": "2023-08-07T00:18:34.002006Z" + "iopub.execute_input": "2023-08-21T02:28:57.394870Z", + "iopub.status.busy": "2023-08-21T02:28:57.394721Z", + "iopub.status.idle": "2023-08-21T02:28:57.461746Z", + "shell.execute_reply": "2023-08-21T02:28:57.461390Z" }, "lines_to_next_cell": 0 }, @@ -723,7 +723,7 @@ }, { "cell_type": "markdown", - "id": "68cca865", + "id": "cc5b69fc", "metadata": {}, "source": [ "The smallest *p*-value here is associated with `Lag1`. The\n", @@ -741,13 +741,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "4f9c5324", + "id": "f45f26de", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.007435Z", - "iopub.status.busy": "2023-08-07T00:18:34.006910Z", - "iopub.status.idle": "2023-08-07T00:18:34.014901Z", - "shell.execute_reply": "2023-08-07T00:18:34.014079Z" + "iopub.execute_input": "2023-08-21T02:28:57.463719Z", + "iopub.status.busy": "2023-08-21T02:28:57.463515Z", + "iopub.status.idle": "2023-08-21T02:28:57.466512Z", + "shell.execute_reply": "2023-08-21T02:28:57.466227Z" }, "lines_to_next_cell": 0 }, @@ -776,7 +776,7 @@ }, { "cell_type": "markdown", - "id": "681ca0cb", + "id": "56749219", "metadata": {}, "source": [ "Likewise we can use the\n", @@ -786,13 +786,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "75e44d01", + "id": "e9f38895", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.019225Z", - "iopub.status.busy": "2023-08-07T00:18:34.018883Z", - "iopub.status.idle": "2023-08-07T00:18:34.025804Z", - "shell.execute_reply": "2023-08-07T00:18:34.025086Z" + "iopub.execute_input": "2023-08-21T02:28:57.468254Z", + "iopub.status.busy": "2023-08-21T02:28:57.468113Z", + "iopub.status.idle": "2023-08-21T02:28:57.470717Z", + "shell.execute_reply": "2023-08-21T02:28:57.470403Z" } }, "outputs": [ @@ -820,7 +820,7 @@ }, { "cell_type": "markdown", - "id": "d4fd87bf", + "id": "b5f86e0b", "metadata": {}, "source": [ "The `predict()` method of `results` can be used to predict the\n", @@ -837,13 +837,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "40164af5", + "id": "4f20356d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.029989Z", - "iopub.status.busy": "2023-08-07T00:18:34.029690Z", - "iopub.status.idle": "2023-08-07T00:18:34.036791Z", - "shell.execute_reply": "2023-08-07T00:18:34.036138Z" + "iopub.execute_input": "2023-08-21T02:28:57.472719Z", + "iopub.status.busy": "2023-08-21T02:28:57.472578Z", + "iopub.status.idle": "2023-08-21T02:28:57.475369Z", + "shell.execute_reply": "2023-08-21T02:28:57.475043Z" }, "lines_to_next_cell": 0 }, @@ -867,7 +867,7 @@ }, { "cell_type": "markdown", - "id": "94607ba9", + "id": "4aab2080", "metadata": {}, "source": [ "In order to make a prediction as to whether the market will go up or\n", @@ -881,13 +881,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "daf20de2", + "id": "152b3063", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.040976Z", - "iopub.status.busy": "2023-08-07T00:18:34.040685Z", - "iopub.status.idle": "2023-08-07T00:18:34.046531Z", - "shell.execute_reply": "2023-08-07T00:18:34.045877Z" + "iopub.execute_input": "2023-08-21T02:28:57.477166Z", + "iopub.status.busy": "2023-08-21T02:28:57.477052Z", + "iopub.status.idle": "2023-08-21T02:28:57.479161Z", + "shell.execute_reply": "2023-08-21T02:28:57.478803Z" }, "lines_to_next_cell": 0 }, @@ -899,7 +899,7 @@ }, { "cell_type": "markdown", - "id": "085aead4", + "id": "a825abf5", "metadata": {}, "source": [ "The `confusion_table()`\n", @@ -914,13 +914,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "71f4a40c", + "id": "0f89f7ae", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.050481Z", - "iopub.status.busy": "2023-08-07T00:18:34.050167Z", - "iopub.status.idle": "2023-08-07T00:18:34.059868Z", - "shell.execute_reply": "2023-08-07T00:18:34.059588Z" + "iopub.execute_input": "2023-08-21T02:28:57.480867Z", + "iopub.status.busy": "2023-08-21T02:28:57.480737Z", + "iopub.status.idle": "2023-08-21T02:28:57.487133Z", + "shell.execute_reply": "2023-08-21T02:28:57.486778Z" } }, "outputs": [ @@ -987,7 +987,7 @@ }, { "cell_type": "markdown", - "id": "3a338f26", + "id": "9e9ff255", "metadata": {}, "source": [ "The diagonal elements of the confusion matrix indicate correct\n", @@ -1003,13 +1003,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "78b2946b", + "id": "d55dd7ec", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.061456Z", - "iopub.status.busy": "2023-08-07T00:18:34.061336Z", - "iopub.status.idle": "2023-08-07T00:18:34.064074Z", - "shell.execute_reply": "2023-08-07T00:18:34.063814Z" + "iopub.execute_input": "2023-08-21T02:28:57.488873Z", + "iopub.status.busy": "2023-08-21T02:28:57.488756Z", + "iopub.status.idle": "2023-08-21T02:28:57.491458Z", + "shell.execute_reply": "2023-08-21T02:28:57.491162Z" }, "lines_to_next_cell": 0 }, @@ -1031,7 +1031,7 @@ }, { "cell_type": "markdown", - "id": "54962226", + "id": "d73690be", "metadata": {}, "source": [ "\n" @@ -1039,7 +1039,7 @@ }, { "cell_type": "markdown", - "id": "aa9be981", + "id": "3d8958eb", "metadata": {}, "source": [ "At first glance, it appears that the logistic regression model is\n", @@ -1066,13 +1066,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "e8a4d12e", + "id": "b998a060", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.065518Z", - "iopub.status.busy": "2023-08-07T00:18:34.065416Z", - "iopub.status.idle": "2023-08-07T00:18:34.068254Z", - "shell.execute_reply": "2023-08-07T00:18:34.067978Z" + "iopub.execute_input": "2023-08-21T02:28:57.493306Z", + "iopub.status.busy": "2023-08-21T02:28:57.493174Z", + "iopub.status.idle": "2023-08-21T02:28:57.496464Z", + "shell.execute_reply": "2023-08-21T02:28:57.496107Z" }, "lines_to_next_cell": 2 }, @@ -1097,7 +1097,7 @@ }, { "cell_type": "markdown", - "id": "946fac68", + "id": "8c337c63", "metadata": {}, "source": [ "The object `train` is a vector of 1,250 elements, corresponding\n", @@ -1132,13 +1132,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "fd16bc2c", + "id": "814e34ce", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.069659Z", - "iopub.status.busy": "2023-08-07T00:18:34.069561Z", - "iopub.status.idle": "2023-08-07T00:18:34.074343Z", - "shell.execute_reply": "2023-08-07T00:18:34.074055Z" + "iopub.execute_input": "2023-08-21T02:28:57.498135Z", + "iopub.status.busy": "2023-08-21T02:28:57.498043Z", + "iopub.status.idle": "2023-08-21T02:28:57.502996Z", + "shell.execute_reply": "2023-08-21T02:28:57.502676Z" } }, "outputs": [], @@ -1154,7 +1154,7 @@ }, { "cell_type": "markdown", - "id": "12382c18", + "id": "312c605a", "metadata": {}, "source": [ "Notice that we have trained and tested our model on two completely\n", @@ -1169,13 +1169,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "aaa9d07c", + "id": "644823f9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.075820Z", - "iopub.status.busy": "2023-08-07T00:18:34.075734Z", - "iopub.status.idle": "2023-08-07T00:18:34.077644Z", - "shell.execute_reply": "2023-08-07T00:18:34.077397Z" + "iopub.execute_input": "2023-08-21T02:28:57.504874Z", + "iopub.status.busy": "2023-08-21T02:28:57.504743Z", + "iopub.status.idle": "2023-08-21T02:28:57.506879Z", + "shell.execute_reply": "2023-08-21T02:28:57.506558Z" }, "lines_to_next_cell": 0 }, @@ -1187,7 +1187,7 @@ }, { "cell_type": "markdown", - "id": "cc0d0c3a", + "id": "4c9f0ae0", "metadata": {}, "source": [ "Now we threshold the\n", @@ -1198,13 +1198,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "5f0b3282", + "id": "51217c85", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.079028Z", - "iopub.status.busy": "2023-08-07T00:18:34.078951Z", - "iopub.status.idle": "2023-08-07T00:18:34.083263Z", - "shell.execute_reply": "2023-08-07T00:18:34.083022Z" + "iopub.execute_input": "2023-08-21T02:28:57.508502Z", + "iopub.status.busy": "2023-08-21T02:28:57.508403Z", + "iopub.status.idle": "2023-08-21T02:28:57.512973Z", + "shell.execute_reply": "2023-08-21T02:28:57.512720Z" }, "lines_to_next_cell": 0 }, @@ -1274,7 +1274,7 @@ }, { "cell_type": "markdown", - "id": "71ca598e", + "id": "ff5f3218", "metadata": {}, "source": [ "The test accuracy is about 48% while the error rate is about 52%" @@ -1283,13 +1283,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "7f4e49c0", + "id": "a73446bf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.084664Z", - "iopub.status.busy": "2023-08-07T00:18:34.084577Z", - "iopub.status.idle": "2023-08-07T00:18:34.087059Z", - "shell.execute_reply": "2023-08-07T00:18:34.086816Z" + "iopub.execute_input": "2023-08-21T02:28:57.514459Z", + "iopub.status.busy": "2023-08-21T02:28:57.514377Z", + "iopub.status.idle": "2023-08-21T02:28:57.517011Z", + "shell.execute_reply": "2023-08-21T02:28:57.516758Z" }, "lines_to_next_cell": 2 }, @@ -1311,7 +1311,7 @@ }, { "cell_type": "markdown", - "id": "96d75735", + "id": "149949d9", "metadata": {}, "source": [ "The `!=` notation means *not equal to*, and so the last command\n", @@ -1341,13 +1341,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "9f94de4b", + "id": "8174767d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.088387Z", - "iopub.status.busy": "2023-08-07T00:18:34.088307Z", - "iopub.status.idle": "2023-08-07T00:18:34.096165Z", - "shell.execute_reply": "2023-08-07T00:18:34.095892Z" + "iopub.execute_input": "2023-08-21T02:28:57.518464Z", + "iopub.status.busy": "2023-08-21T02:28:57.518363Z", + "iopub.status.idle": "2023-08-21T02:28:57.528289Z", + "shell.execute_reply": "2023-08-21T02:28:57.527983Z" }, "lines_to_next_cell": 2 }, @@ -1425,7 +1425,7 @@ }, { "cell_type": "markdown", - "id": "1dd9ce3d", + "id": "9992d709", "metadata": {}, "source": [ "Let’s evaluate the overall accuracy as well as the accuracy within the days when\n", @@ -1435,13 +1435,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "69a4dd6b", + "id": "cba7e815", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.097583Z", - "iopub.status.busy": "2023-08-07T00:18:34.097501Z", - "iopub.status.idle": "2023-08-07T00:18:34.099616Z", - "shell.execute_reply": "2023-08-07T00:18:34.099375Z" + "iopub.execute_input": "2023-08-21T02:28:57.529915Z", + "iopub.status.busy": "2023-08-21T02:28:57.529812Z", + "iopub.status.idle": "2023-08-21T02:28:57.532108Z", + "shell.execute_reply": "2023-08-21T02:28:57.531849Z" } }, "outputs": [ @@ -1462,7 +1462,7 @@ }, { "cell_type": "markdown", - "id": "14cf6b55", + "id": "cfe9b256", "metadata": {}, "source": [ "Now the results appear to be a little better: 56% of the daily\n", @@ -1489,13 +1489,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "975fa3ca", + "id": "97993185", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.101046Z", - "iopub.status.busy": "2023-08-07T00:18:34.100966Z", - "iopub.status.idle": "2023-08-07T00:18:34.104502Z", - "shell.execute_reply": "2023-08-07T00:18:34.104254Z" + "iopub.execute_input": "2023-08-21T02:28:57.533565Z", + "iopub.status.busy": "2023-08-21T02:28:57.533462Z", + "iopub.status.idle": "2023-08-21T02:28:57.537458Z", + "shell.execute_reply": "2023-08-21T02:28:57.537180Z" }, "lines_to_next_cell": 2 }, @@ -1522,7 +1522,7 @@ }, { "cell_type": "markdown", - "id": "bdc2c0bb", + "id": "3b56915d", "metadata": {}, "source": [ "## Linear Discriminant Analysis" @@ -1530,7 +1530,7 @@ }, { "cell_type": "markdown", - "id": "41deab79", + "id": "5fd3e6e0", "metadata": {}, "source": [ "We begin by performing LDA on the `Smarket` data, using the function\n", @@ -1541,13 +1541,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "7237ffa7", + "id": "4bc774e9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.105969Z", - "iopub.status.busy": "2023-08-07T00:18:34.105892Z", - "iopub.status.idle": "2023-08-07T00:18:34.107535Z", - "shell.execute_reply": "2023-08-07T00:18:34.107296Z" + "iopub.execute_input": "2023-08-21T02:28:57.539054Z", + "iopub.status.busy": "2023-08-21T02:28:57.538952Z", + "iopub.status.idle": "2023-08-21T02:28:57.540857Z", + "shell.execute_reply": "2023-08-21T02:28:57.540537Z" } }, "outputs": [], @@ -1557,7 +1557,7 @@ }, { "cell_type": "markdown", - "id": "7289db40", + "id": "3d1a82d1", "metadata": {}, "source": [ "Since the `LDA` estimator automatically \n", @@ -1569,13 +1569,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "43a850eb", + "id": "8c6c0723", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.108941Z", - "iopub.status.busy": "2023-08-07T00:18:34.108865Z", - "iopub.status.idle": "2023-08-07T00:18:34.114955Z", - "shell.execute_reply": "2023-08-07T00:18:34.114708Z" + "iopub.execute_input": "2023-08-21T02:28:57.542568Z", + "iopub.status.busy": "2023-08-21T02:28:57.542481Z", + "iopub.status.idle": "2023-08-21T02:28:57.548927Z", + "shell.execute_reply": "2023-08-21T02:28:57.548581Z" }, "lines_to_next_cell": 0 }, @@ -1602,7 +1602,7 @@ }, { "cell_type": "markdown", - "id": "d3e0901f", + "id": "d4db3bde", "metadata": {}, "source": [ "Here we have used the list comprehensions introduced\n", @@ -1625,13 +1625,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "86b6cece", + "id": "cf8fd5ac", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.116386Z", - "iopub.status.busy": "2023-08-07T00:18:34.116305Z", - "iopub.status.idle": "2023-08-07T00:18:34.118455Z", - "shell.execute_reply": "2023-08-07T00:18:34.118209Z" + "iopub.execute_input": "2023-08-21T02:28:57.550601Z", + "iopub.status.busy": "2023-08-21T02:28:57.550496Z", + "iopub.status.idle": "2023-08-21T02:28:57.552737Z", + "shell.execute_reply": "2023-08-21T02:28:57.552471Z" }, "lines_to_next_cell": 2 }, @@ -1654,7 +1654,7 @@ }, { "cell_type": "markdown", - "id": "6d75a932", + "id": "bcd5c21f", "metadata": {}, "source": [ "The estimated prior probabilities are stored in the `priors_` attribute.\n", @@ -1666,13 +1666,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "9362c7c6", + "id": "bfd6b3f8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.119865Z", - "iopub.status.busy": "2023-08-07T00:18:34.119787Z", - "iopub.status.idle": "2023-08-07T00:18:34.121925Z", - "shell.execute_reply": "2023-08-07T00:18:34.121681Z" + "iopub.execute_input": "2023-08-21T02:28:57.554217Z", + "iopub.status.busy": "2023-08-21T02:28:57.554117Z", + "iopub.status.idle": "2023-08-21T02:28:57.556249Z", + "shell.execute_reply": "2023-08-21T02:28:57.555998Z" }, "lines_to_next_cell": 2 }, @@ -1694,7 +1694,7 @@ }, { "cell_type": "markdown", - "id": "61f77e19", + "id": "60fe91d9", "metadata": {}, "source": [ "The LDA output indicates that $\\hat\\pi_{Down}=0.492$ and\n", @@ -1704,13 +1704,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "e59858dc", + "id": "a1f75de4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.123314Z", - "iopub.status.busy": "2023-08-07T00:18:34.123233Z", - "iopub.status.idle": "2023-08-07T00:18:34.125369Z", - "shell.execute_reply": "2023-08-07T00:18:34.125137Z" + "iopub.execute_input": "2023-08-21T02:28:57.557716Z", + "iopub.status.busy": "2023-08-21T02:28:57.557623Z", + "iopub.status.idle": "2023-08-21T02:28:57.559886Z", + "shell.execute_reply": "2023-08-21T02:28:57.559582Z" }, "lines_to_next_cell": 2 }, @@ -1732,7 +1732,7 @@ }, { "cell_type": "markdown", - "id": "43a8fde1", + "id": "47e60686", "metadata": {}, "source": [ "The linear discriminant vectors can be found in the `scalings_` attribute:" @@ -1741,13 +1741,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "9b5f74e8", + "id": "82794178", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.126738Z", - "iopub.status.busy": "2023-08-07T00:18:34.126660Z", - "iopub.status.idle": "2023-08-07T00:18:34.128726Z", - "shell.execute_reply": "2023-08-07T00:18:34.128484Z" + "iopub.execute_input": "2023-08-21T02:28:57.561606Z", + "iopub.status.busy": "2023-08-21T02:28:57.561489Z", + "iopub.status.idle": "2023-08-21T02:28:57.563996Z", + "shell.execute_reply": "2023-08-21T02:28:57.563652Z" } }, "outputs": [ @@ -1769,7 +1769,7 @@ }, { "cell_type": "markdown", - "id": "4655809e", + "id": "ac6ad759", "metadata": {}, "source": [ "These values provide the linear combination of `Lag1` and `Lag2` that are used to form the LDA decision rule. In other words, these are the multipliers of the elements of $X=x$ in (4.24).\n", @@ -1779,13 +1779,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "fd8e6794", + "id": "9b571047", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.130043Z", - "iopub.status.busy": "2023-08-07T00:18:34.129971Z", - "iopub.status.idle": "2023-08-07T00:18:34.132079Z", - "shell.execute_reply": "2023-08-07T00:18:34.131833Z" + "iopub.execute_input": "2023-08-21T02:28:57.565689Z", + "iopub.status.busy": "2023-08-21T02:28:57.565573Z", + "iopub.status.idle": "2023-08-21T02:28:57.568080Z", + "shell.execute_reply": "2023-08-21T02:28:57.567748Z" } }, "outputs": [], @@ -1795,7 +1795,7 @@ }, { "cell_type": "markdown", - "id": "2d211f0a", + "id": "61522ffc", "metadata": {}, "source": [ "As we observed in our comparison of classification methods\n", @@ -1806,13 +1806,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "3bb63fb1", + "id": "60f3d13a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.133469Z", - "iopub.status.busy": "2023-08-07T00:18:34.133393Z", - "iopub.status.idle": "2023-08-07T00:18:34.137177Z", - "shell.execute_reply": "2023-08-07T00:18:34.136944Z" + "iopub.execute_input": "2023-08-21T02:28:57.569793Z", + "iopub.status.busy": "2023-08-21T02:28:57.569674Z", + "iopub.status.idle": "2023-08-21T02:28:57.574322Z", + "shell.execute_reply": "2023-08-21T02:28:57.573986Z" }, "lines_to_next_cell": 2 }, @@ -1880,7 +1880,7 @@ }, { "cell_type": "markdown", - "id": "8e31152b", + "id": "6b88f943", "metadata": {}, "source": [ "We can also estimate the\n", @@ -1893,13 +1893,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "2b91f491", + "id": "96e680d9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.138619Z", - "iopub.status.busy": "2023-08-07T00:18:34.138537Z", - "iopub.status.idle": "2023-08-07T00:18:34.141314Z", - "shell.execute_reply": "2023-08-07T00:18:34.141072Z" + "iopub.execute_input": "2023-08-21T02:28:57.576103Z", + "iopub.status.busy": "2023-08-21T02:28:57.575991Z", + "iopub.status.idle": "2023-08-21T02:28:57.579068Z", + "shell.execute_reply": "2023-08-21T02:28:57.578805Z" }, "lines_to_next_cell": 2 }, @@ -1924,7 +1924,7 @@ }, { "cell_type": "markdown", - "id": "d3a76822", + "id": "d20f6d2b", "metadata": {}, "source": [ "Above, we used the `np.where()` function that\n", @@ -1937,13 +1937,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "3a085714", + "id": "b6695125", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.142668Z", - "iopub.status.busy": "2023-08-07T00:18:34.142591Z", - "iopub.status.idle": "2023-08-07T00:18:34.144963Z", - "shell.execute_reply": "2023-08-07T00:18:34.144712Z" + "iopub.execute_input": "2023-08-21T02:28:57.580746Z", + "iopub.status.busy": "2023-08-21T02:28:57.580639Z", + "iopub.status.idle": "2023-08-21T02:28:57.583327Z", + "shell.execute_reply": "2023-08-21T02:28:57.583073Z" }, "lines_to_next_cell": 2 }, @@ -1967,7 +1967,7 @@ }, { "cell_type": "markdown", - "id": "0aa9cbb3", + "id": "9661ed20", "metadata": {}, "source": [ "If we wanted to use a posterior probability threshold other than\n", @@ -1983,13 +1983,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "345fb8c6", + "id": "3f38a14e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.146325Z", - "iopub.status.busy": "2023-08-07T00:18:34.146248Z", - "iopub.status.idle": "2023-08-07T00:18:34.148323Z", - "shell.execute_reply": "2023-08-07T00:18:34.148102Z" + "iopub.execute_input": "2023-08-21T02:28:57.584834Z", + "iopub.status.busy": "2023-08-21T02:28:57.584748Z", + "iopub.status.idle": "2023-08-21T02:28:57.587140Z", + "shell.execute_reply": "2023-08-21T02:28:57.586884Z" } }, "outputs": [ @@ -2010,7 +2010,7 @@ }, { "cell_type": "markdown", - "id": "6798146c", + "id": "c12fe607", "metadata": {}, "source": [ "No days in 2005 meet that threshold! In fact, the greatest posterior\n", @@ -2034,7 +2034,7 @@ }, { "cell_type": "markdown", - "id": "58f2984f", + "id": "8a384f92", "metadata": {}, "source": [ "## Quadratic Discriminant Analysis\n", @@ -2048,13 +2048,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "22c6c2a3", + "id": "9b645803", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.149774Z", - "iopub.status.busy": "2023-08-07T00:18:34.149693Z", - "iopub.status.idle": "2023-08-07T00:18:34.153308Z", - "shell.execute_reply": "2023-08-07T00:18:34.153071Z" + "iopub.execute_input": "2023-08-21T02:28:57.588684Z", + "iopub.status.busy": "2023-08-21T02:28:57.588575Z", + "iopub.status.idle": "2023-08-21T02:28:57.592433Z", + "shell.execute_reply": "2023-08-21T02:28:57.592165Z" } }, "outputs": [ @@ -2079,7 +2079,7 @@ }, { "cell_type": "markdown", - "id": "fba0bb3a", + "id": "0c595cd6", "metadata": {}, "source": [ "The `QDA()` function will again compute `means_` and `priors_`." @@ -2088,13 +2088,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "992a790a", + "id": "abfae544", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.154710Z", - "iopub.status.busy": "2023-08-07T00:18:34.154631Z", - "iopub.status.idle": "2023-08-07T00:18:34.156853Z", - "shell.execute_reply": "2023-08-07T00:18:34.156611Z" + "iopub.execute_input": "2023-08-21T02:28:57.593864Z", + "iopub.status.busy": "2023-08-21T02:28:57.593784Z", + "iopub.status.idle": "2023-08-21T02:28:57.596074Z", + "shell.execute_reply": "2023-08-21T02:28:57.595807Z" } }, "outputs": [ @@ -2117,7 +2117,7 @@ }, { "cell_type": "markdown", - "id": "8bc030e2", + "id": "47c8a520", "metadata": {}, "source": [ "The `QDA()` classifier will estimate one covariance per class. Here is the\n", @@ -2127,13 +2127,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "074c9d46", + "id": "2a3bb41e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.158287Z", - "iopub.status.busy": "2023-08-07T00:18:34.158209Z", - "iopub.status.idle": "2023-08-07T00:18:34.160379Z", - "shell.execute_reply": "2023-08-07T00:18:34.160138Z" + "iopub.execute_input": "2023-08-21T02:28:57.597540Z", + "iopub.status.busy": "2023-08-21T02:28:57.597455Z", + "iopub.status.idle": "2023-08-21T02:28:57.599658Z", + "shell.execute_reply": "2023-08-21T02:28:57.599399Z" }, "lines_to_next_cell": 0 }, @@ -2156,7 +2156,7 @@ }, { "cell_type": "markdown", - "id": "fa5963f6", + "id": "01a6ad38", "metadata": {}, "source": [ "The output contains the group means. But it does not contain the\n", @@ -2169,13 +2169,13 @@ { "cell_type": "code", "execution_count": 36, - "id": "3c95aae1", + "id": "1c64310b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.161750Z", - "iopub.status.busy": "2023-08-07T00:18:34.161677Z", - "iopub.status.idle": "2023-08-07T00:18:34.166050Z", - "shell.execute_reply": "2023-08-07T00:18:34.165798Z" + "iopub.execute_input": "2023-08-21T02:28:57.601097Z", + "iopub.status.busy": "2023-08-21T02:28:57.601019Z", + "iopub.status.idle": "2023-08-21T02:28:57.605729Z", + "shell.execute_reply": "2023-08-21T02:28:57.605444Z" }, "lines_to_next_cell": 0 }, @@ -2244,7 +2244,7 @@ }, { "cell_type": "markdown", - "id": "0a72c1b8", + "id": "7b797db4", "metadata": {}, "source": [ "Interestingly, the QDA predictions are accurate almost 60% of the\n", @@ -2254,13 +2254,13 @@ { "cell_type": "code", "execution_count": 37, - "id": "935b2079", + "id": "0c05c5a8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.167439Z", - "iopub.status.busy": "2023-08-07T00:18:34.167360Z", - "iopub.status.idle": "2023-08-07T00:18:34.169654Z", - "shell.execute_reply": "2023-08-07T00:18:34.169417Z" + "iopub.execute_input": "2023-08-21T02:28:57.607207Z", + "iopub.status.busy": "2023-08-21T02:28:57.607093Z", + "iopub.status.idle": "2023-08-21T02:28:57.609626Z", + "shell.execute_reply": "2023-08-21T02:28:57.609348Z" }, "lines_to_next_cell": 2 }, @@ -2282,7 +2282,7 @@ }, { "cell_type": "markdown", - "id": "cbf4d7d1", + "id": "bb1a8707", "metadata": {}, "source": [ "This level of accuracy is quite impressive for stock market data, which is\n", @@ -2296,7 +2296,7 @@ }, { "cell_type": "markdown", - "id": "b89dfb88", + "id": "1bb713b7", "metadata": {}, "source": [ "## Naive Bayes\n", @@ -2310,13 +2310,13 @@ { "cell_type": "code", "execution_count": 38, - "id": "628b0355", + "id": "47d85305", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.171111Z", - "iopub.status.busy": "2023-08-07T00:18:34.171037Z", - "iopub.status.idle": "2023-08-07T00:18:34.174682Z", - "shell.execute_reply": "2023-08-07T00:18:34.174410Z" + "iopub.execute_input": "2023-08-21T02:28:57.611305Z", + "iopub.status.busy": "2023-08-21T02:28:57.611177Z", + "iopub.status.idle": "2023-08-21T02:28:57.615527Z", + "shell.execute_reply": "2023-08-21T02:28:57.615221Z" }, "lines_to_next_cell": 2 }, @@ -2342,7 +2342,7 @@ }, { "cell_type": "markdown", - "id": "66916c68", + "id": "363a04ab", "metadata": {}, "source": [ "The classes are stored as `classes_`." @@ -2351,13 +2351,13 @@ { "cell_type": "code", "execution_count": 39, - "id": "8a5fc302", + "id": "c553aadf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.176064Z", - "iopub.status.busy": "2023-08-07T00:18:34.175981Z", - "iopub.status.idle": "2023-08-07T00:18:34.178020Z", - "shell.execute_reply": "2023-08-07T00:18:34.177775Z" + "iopub.execute_input": "2023-08-21T02:28:57.617346Z", + "iopub.status.busy": "2023-08-21T02:28:57.617202Z", + "iopub.status.idle": "2023-08-21T02:28:57.619612Z", + "shell.execute_reply": "2023-08-21T02:28:57.619301Z" }, "lines_to_next_cell": 2 }, @@ -2379,7 +2379,7 @@ }, { "cell_type": "markdown", - "id": "753c7d37", + "id": "88ba284a", "metadata": {}, "source": [ "The class prior probabilities are stored in the `class_prior_` attribute." @@ -2388,13 +2388,13 @@ { "cell_type": "code", "execution_count": 40, - "id": "6b1b5cc6", + "id": "4604bd3d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.179469Z", - "iopub.status.busy": "2023-08-07T00:18:34.179381Z", - "iopub.status.idle": "2023-08-07T00:18:34.181492Z", - "shell.execute_reply": "2023-08-07T00:18:34.181231Z" + "iopub.execute_input": "2023-08-21T02:28:57.621294Z", + "iopub.status.busy": "2023-08-21T02:28:57.621168Z", + "iopub.status.idle": "2023-08-21T02:28:57.623355Z", + "shell.execute_reply": "2023-08-21T02:28:57.623086Z" }, "lines_to_next_cell": 2 }, @@ -2416,7 +2416,7 @@ }, { "cell_type": "markdown", - "id": "848e5d7c", + "id": "29471619", "metadata": {}, "source": [ "The parameters of the features can be found in the `theta_` and `var_` attributes. The number of rows\n", @@ -2427,13 +2427,13 @@ { "cell_type": "code", "execution_count": 41, - "id": "1a4b7cb0", + "id": "5ac2cabe", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.182840Z", - "iopub.status.busy": "2023-08-07T00:18:34.182768Z", - "iopub.status.idle": "2023-08-07T00:18:34.184754Z", - "shell.execute_reply": "2023-08-07T00:18:34.184502Z" + "iopub.execute_input": "2023-08-21T02:28:57.624902Z", + "iopub.status.busy": "2023-08-21T02:28:57.624775Z", + "iopub.status.idle": "2023-08-21T02:28:57.627201Z", + "shell.execute_reply": "2023-08-21T02:28:57.626911Z" } }, "outputs": [ @@ -2455,7 +2455,7 @@ }, { "cell_type": "markdown", - "id": "60efd24c", + "id": "83986c67", "metadata": {}, "source": [ "Its variance is 1.503." @@ -2464,13 +2464,13 @@ { "cell_type": "code", "execution_count": 42, - "id": "f59d7cb4", + "id": "f8623945", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.186100Z", - "iopub.status.busy": "2023-08-07T00:18:34.186027Z", - "iopub.status.idle": "2023-08-07T00:18:34.188103Z", - "shell.execute_reply": "2023-08-07T00:18:34.187846Z" + "iopub.execute_input": "2023-08-21T02:28:57.628781Z", + "iopub.status.busy": "2023-08-21T02:28:57.628673Z", + "iopub.status.idle": "2023-08-21T02:28:57.631185Z", + "shell.execute_reply": "2023-08-21T02:28:57.630909Z" }, "lines_to_next_cell": 0 }, @@ -2493,7 +2493,7 @@ }, { "cell_type": "markdown", - "id": "4518d5db", + "id": "735e373e", "metadata": {}, "source": [ "How do we know the names of these attributes? We use `NB?` (or `?NB`).\n", @@ -2504,13 +2504,13 @@ { "cell_type": "code", "execution_count": 43, - "id": "aa50d0b8", + "id": "0790f26e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.189446Z", - "iopub.status.busy": "2023-08-07T00:18:34.189365Z", - "iopub.status.idle": "2023-08-07T00:18:34.192272Z", - "shell.execute_reply": "2023-08-07T00:18:34.192020Z" + "iopub.execute_input": "2023-08-21T02:28:57.632749Z", + "iopub.status.busy": "2023-08-21T02:28:57.632622Z", + "iopub.status.idle": "2023-08-21T02:28:57.635950Z", + "shell.execute_reply": "2023-08-21T02:28:57.635645Z" }, "lines_to_next_cell": 2 }, @@ -2534,7 +2534,7 @@ }, { "cell_type": "markdown", - "id": "3ee8e214", + "id": "d6c04b6f", "metadata": {}, "source": [ "Similarly for the variance:" @@ -2543,13 +2543,13 @@ { "cell_type": "code", "execution_count": 44, - "id": "3a2b0653", + "id": "4a8cf0ce", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.193606Z", - "iopub.status.busy": "2023-08-07T00:18:34.193530Z", - "iopub.status.idle": "2023-08-07T00:18:34.196330Z", - "shell.execute_reply": "2023-08-07T00:18:34.196080Z" + "iopub.execute_input": "2023-08-21T02:28:57.637431Z", + "iopub.status.busy": "2023-08-21T02:28:57.637345Z", + "iopub.status.idle": "2023-08-21T02:28:57.640679Z", + "shell.execute_reply": "2023-08-21T02:28:57.640387Z" }, "lines_to_next_cell": 0 }, @@ -2573,7 +2573,7 @@ }, { "cell_type": "markdown", - "id": "5cb3b59d", + "id": "ada40be5", "metadata": {}, "source": [ "Since `NB()` is a classifier in the `sklearn` library, making predictions\n", @@ -2583,13 +2583,13 @@ { "cell_type": "code", "execution_count": 45, - "id": "938f09ea", + "id": "94e7ff1a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.197723Z", - "iopub.status.busy": "2023-08-07T00:18:34.197649Z", - "iopub.status.idle": "2023-08-07T00:18:34.201814Z", - "shell.execute_reply": "2023-08-07T00:18:34.201560Z" + "iopub.execute_input": "2023-08-21T02:28:57.642306Z", + "iopub.status.busy": "2023-08-21T02:28:57.642190Z", + "iopub.status.idle": "2023-08-21T02:28:57.646804Z", + "shell.execute_reply": "2023-08-21T02:28:57.646534Z" } }, "outputs": [ @@ -2657,7 +2657,7 @@ }, { "cell_type": "markdown", - "id": "a0ce38d6", + "id": "83ee1f52", "metadata": {}, "source": [ "Naive Bayes performs well on these data, with accurate predictions over 59% of the time. This is slightly worse than QDA, but much better than LDA.\n", @@ -2668,13 +2668,13 @@ { "cell_type": "code", "execution_count": 46, - "id": "42f0e4a2", + "id": "137e23aa", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.203256Z", - "iopub.status.busy": "2023-08-07T00:18:34.203171Z", - "iopub.status.idle": "2023-08-07T00:18:34.206007Z", - "shell.execute_reply": "2023-08-07T00:18:34.205785Z" + "iopub.execute_input": "2023-08-21T02:28:57.648357Z", + "iopub.status.busy": "2023-08-21T02:28:57.648246Z", + "iopub.status.idle": "2023-08-21T02:28:57.651178Z", + "shell.execute_reply": "2023-08-21T02:28:57.650935Z" }, "lines_to_next_cell": 2 }, @@ -2700,7 +2700,7 @@ }, { "cell_type": "markdown", - "id": "ede194da", + "id": "52c4905b", "metadata": {}, "source": [ "## K-Nearest Neighbors\n", @@ -2718,13 +2718,13 @@ { "cell_type": "code", "execution_count": 47, - "id": "8b833ee4", + "id": "142c5217", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.207393Z", - "iopub.status.busy": "2023-08-07T00:18:34.207316Z", - "iopub.status.idle": "2023-08-07T00:18:34.217410Z", - "shell.execute_reply": "2023-08-07T00:18:34.217153Z" + "iopub.execute_input": "2023-08-21T02:28:57.652781Z", + "iopub.status.busy": "2023-08-21T02:28:57.652676Z", + "iopub.status.idle": "2023-08-21T02:28:57.665013Z", + "shell.execute_reply": "2023-08-21T02:28:57.664742Z" } }, "outputs": [ @@ -2795,7 +2795,7 @@ }, { "cell_type": "markdown", - "id": "5fb57a8d", + "id": "7122ab7d", "metadata": {}, "source": [ "The results using $K=1$ are not very good, since only $50%$ of the\n", @@ -2806,13 +2806,13 @@ { "cell_type": "code", "execution_count": 48, - "id": "45410b7f", + "id": "f5a272ee", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.218786Z", - "iopub.status.busy": "2023-08-07T00:18:34.218710Z", - "iopub.status.idle": "2023-08-07T00:18:34.221046Z", - "shell.execute_reply": "2023-08-07T00:18:34.220711Z" + "iopub.execute_input": "2023-08-21T02:28:57.666910Z", + "iopub.status.busy": "2023-08-21T02:28:57.666782Z", + "iopub.status.idle": "2023-08-21T02:28:57.669498Z", + "shell.execute_reply": "2023-08-21T02:28:57.669179Z" } }, "outputs": [ @@ -2833,7 +2833,7 @@ }, { "cell_type": "markdown", - "id": "500e00a1", + "id": "978e8677", "metadata": {}, "source": [ "We repeat the\n", @@ -2843,13 +2843,13 @@ { "cell_type": "code", "execution_count": 49, - "id": "ae6e0156", + "id": "95e206a8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.223557Z", - "iopub.status.busy": "2023-08-07T00:18:34.223449Z", - "iopub.status.idle": "2023-08-07T00:18:34.231477Z", - "shell.execute_reply": "2023-08-07T00:18:34.231224Z" + "iopub.execute_input": "2023-08-21T02:28:57.671045Z", + "iopub.status.busy": "2023-08-21T02:28:57.670939Z", + "iopub.status.idle": "2023-08-21T02:28:57.679000Z", + "shell.execute_reply": "2023-08-21T02:28:57.678715Z" }, "lines_to_next_cell": 0 }, @@ -2873,7 +2873,7 @@ }, { "cell_type": "markdown", - "id": "11a369af", + "id": "181bed9c", "metadata": {}, "source": [ "The results have improved slightly. But increasing *K* further\n", @@ -2884,7 +2884,7 @@ }, { "cell_type": "markdown", - "id": "ab3b1e64", + "id": "07a9cc30", "metadata": {}, "source": [ "KNN does not perform well on the `Smarket` data, but it often does provide impressive results. As an example we will apply the KNN approach to the `Caravan` data set, which is part of the `ISLP` library. This data set includes 85\n", @@ -2898,13 +2898,13 @@ { "cell_type": "code", "execution_count": 50, - "id": "9338564d", + "id": "422563b7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.233037Z", - "iopub.status.busy": "2023-08-07T00:18:34.232954Z", - "iopub.status.idle": "2023-08-07T00:18:34.250597Z", - "shell.execute_reply": "2023-08-07T00:18:34.250317Z" + "iopub.execute_input": "2023-08-21T02:28:57.680643Z", + "iopub.status.busy": "2023-08-21T02:28:57.680560Z", + "iopub.status.idle": "2023-08-21T02:28:57.698929Z", + "shell.execute_reply": "2023-08-21T02:28:57.698652Z" }, "lines_to_next_cell": 2 }, @@ -2930,7 +2930,7 @@ }, { "cell_type": "markdown", - "id": "ba5e14a9", + "id": "1d928895", "metadata": {}, "source": [ "The method `value_counts()` takes a `pd.Series` or `pd.DataFrame` and returns\n", @@ -2942,13 +2942,13 @@ { "cell_type": "code", "execution_count": 51, - "id": "a94f2ea7", + "id": "583c860c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.252089Z", - "iopub.status.busy": "2023-08-07T00:18:34.252008Z", - "iopub.status.idle": "2023-08-07T00:18:34.254154Z", - "shell.execute_reply": "2023-08-07T00:18:34.253908Z" + "iopub.execute_input": "2023-08-21T02:28:57.700534Z", + "iopub.status.busy": "2023-08-21T02:28:57.700406Z", + "iopub.status.idle": "2023-08-21T02:28:57.702790Z", + "shell.execute_reply": "2023-08-21T02:28:57.702539Z" }, "lines_to_next_cell": 2 }, @@ -2970,7 +2970,7 @@ }, { "cell_type": "markdown", - "id": "a753d948", + "id": "c4f745d5", "metadata": {}, "source": [ "Our features will include all columns except `Purchase`." @@ -2979,13 +2979,13 @@ { "cell_type": "code", "execution_count": 52, - "id": "6b6438b0", + "id": "19ee3bf2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.255519Z", - "iopub.status.busy": "2023-08-07T00:18:34.255441Z", - "iopub.status.idle": "2023-08-07T00:18:34.258008Z", - "shell.execute_reply": "2023-08-07T00:18:34.257754Z" + "iopub.execute_input": "2023-08-21T02:28:57.704427Z", + "iopub.status.busy": "2023-08-21T02:28:57.704308Z", + "iopub.status.idle": "2023-08-21T02:28:57.707107Z", + "shell.execute_reply": "2023-08-21T02:28:57.706716Z" } }, "outputs": [], @@ -2995,7 +2995,7 @@ }, { "cell_type": "markdown", - "id": "52a62ab9", + "id": "3b9a30b4", "metadata": {}, "source": [ "Because the KNN classifier predicts the class of a given test\n", @@ -3028,13 +3028,13 @@ { "cell_type": "code", "execution_count": 53, - "id": "158bfb3f", + "id": "fdc0e5f1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.259410Z", - "iopub.status.busy": "2023-08-07T00:18:34.259332Z", - "iopub.status.idle": "2023-08-07T00:18:34.261018Z", - "shell.execute_reply": "2023-08-07T00:18:34.260785Z" + "iopub.execute_input": "2023-08-21T02:28:57.708836Z", + "iopub.status.busy": "2023-08-21T02:28:57.708707Z", + "iopub.status.idle": "2023-08-21T02:28:57.710507Z", + "shell.execute_reply": "2023-08-21T02:28:57.710220Z" }, "lines_to_next_cell": 0 }, @@ -3047,7 +3047,7 @@ }, { "cell_type": "markdown", - "id": "45baf26c", + "id": "7613cdcd", "metadata": {}, "source": [ "The argument `with_mean` indicates whether or not\n", @@ -3067,13 +3067,13 @@ { "cell_type": "code", "execution_count": 54, - "id": "d11b04c4", + "id": "2bb9d48b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.262381Z", - "iopub.status.busy": "2023-08-07T00:18:34.262309Z", - "iopub.status.idle": "2023-08-07T00:18:34.268511Z", - "shell.execute_reply": "2023-08-07T00:18:34.268240Z" + "iopub.execute_input": "2023-08-21T02:28:57.712025Z", + "iopub.status.busy": "2023-08-21T02:28:57.711919Z", + "iopub.status.idle": "2023-08-21T02:28:57.717961Z", + "shell.execute_reply": "2023-08-21T02:28:57.717623Z" }, "lines_to_next_cell": 0 }, @@ -3085,7 +3085,7 @@ }, { "cell_type": "markdown", - "id": "f388fe5b", + "id": "fb65f78c", "metadata": {}, "source": [ "Now every column of `feature_std` below has a standard deviation of\n", @@ -3095,13 +3095,13 @@ { "cell_type": "code", "execution_count": 55, - "id": "f0c65b34", + "id": "649b57b3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.270915Z", - "iopub.status.busy": "2023-08-07T00:18:34.270815Z", - "iopub.status.idle": "2023-08-07T00:18:34.280162Z", - "shell.execute_reply": "2023-08-07T00:18:34.279871Z" + "iopub.execute_input": "2023-08-21T02:28:57.719733Z", + "iopub.status.busy": "2023-08-21T02:28:57.719643Z", + "iopub.status.idle": "2023-08-21T02:28:57.725788Z", + "shell.execute_reply": "2023-08-21T02:28:57.725511Z" } }, "outputs": [ @@ -3136,10 +3136,10 @@ }, { "cell_type": "markdown", - "id": "9668a83b", + "id": "758fa566", "metadata": {}, "source": [ - "Notice that the standard deviations are not quite $1$ here; this is again due to some procedures using the $1/n$ convention for variances (in this case `scaler()`), while others use $1/(n-1)$ (the `std()` method). See the footnote on page 103.\n", + "Notice that the standard deviations are not quite $1$ here; this is again due to some procedures using the $1/n$ convention for variances (in this case `scaler()`), while others use $1/(n-1)$ (the `std()` method). See the footnote on page 200.\n", "In this case it does not matter, as long as the variables are all on the same scale.\n", "\n", "Using the function `train_test_split()` we now split the observations into a test set,\n", @@ -3151,13 +3151,13 @@ { "cell_type": "code", "execution_count": 56, - "id": "3861cc4f", + "id": "d0aafd5e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.281711Z", - "iopub.status.busy": "2023-08-07T00:18:34.281622Z", - "iopub.status.idle": "2023-08-07T00:18:34.285831Z", - "shell.execute_reply": "2023-08-07T00:18:34.285544Z" + "iopub.execute_input": "2023-08-21T02:28:57.727208Z", + "iopub.status.busy": "2023-08-21T02:28:57.727114Z", + "iopub.status.idle": "2023-08-21T02:28:57.730769Z", + "shell.execute_reply": "2023-08-21T02:28:57.730507Z" }, "lines_to_next_cell": 0 }, @@ -3174,7 +3174,7 @@ }, { "cell_type": "markdown", - "id": "3cd24d0a", + "id": "03b585b9", "metadata": {}, "source": [ "`?train_test_split` reveals that the non-keyword arguments can be `lists`, `arrays`, `pandas dataframes` etc that all have the same length (`shape[0]`) and hence are *indexable*. In this case they are the dataframe `feature_std` and the response variable `Purchase`.\n", @@ -3186,13 +3186,13 @@ { "cell_type": "code", "execution_count": 57, - "id": "1b9d7b32", + "id": "ad02fb42", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.287335Z", - "iopub.status.busy": "2023-08-07T00:18:34.287257Z", - "iopub.status.idle": "2023-08-07T00:18:34.618181Z", - "shell.execute_reply": "2023-08-07T00:18:34.617751Z" + "iopub.execute_input": "2023-08-21T02:28:57.732302Z", + "iopub.status.busy": "2023-08-21T02:28:57.732202Z", + "iopub.status.idle": "2023-08-21T02:28:58.059169Z", + "shell.execute_reply": "2023-08-21T02:28:58.058739Z" }, "lines_to_next_cell": 2 }, @@ -3216,7 +3216,7 @@ }, { "cell_type": "markdown", - "id": "0464c302", + "id": "b9dd0550", "metadata": {}, "source": [ "The KNN error rate on the 1,000 test observations is about $11%$.\n", @@ -3239,13 +3239,13 @@ { "cell_type": "code", "execution_count": 58, - "id": "d683b2f9", + "id": "901f772e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.620146Z", - "iopub.status.busy": "2023-08-07T00:18:34.620027Z", - "iopub.status.idle": "2023-08-07T00:18:34.626198Z", - "shell.execute_reply": "2023-08-07T00:18:34.625901Z" + "iopub.execute_input": "2023-08-21T02:28:58.061293Z", + "iopub.status.busy": "2023-08-21T02:28:58.061165Z", + "iopub.status.idle": "2023-08-21T02:28:58.067519Z", + "shell.execute_reply": "2023-08-21T02:28:58.067152Z" } }, "outputs": [ @@ -3312,7 +3312,7 @@ }, { "cell_type": "markdown", - "id": "19ed36b1", + "id": "b6260417", "metadata": {}, "source": [ "It turns out that KNN with $K=1$ does far better than random guessing\n", @@ -3324,13 +3324,13 @@ { "cell_type": "code", "execution_count": 59, - "id": "3498856a", + "id": "684f8941", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.627931Z", - "iopub.status.busy": "2023-08-07T00:18:34.627821Z", - "iopub.status.idle": "2023-08-07T00:18:34.630085Z", - "shell.execute_reply": "2023-08-07T00:18:34.629798Z" + "iopub.execute_input": "2023-08-21T02:28:58.069340Z", + "iopub.status.busy": "2023-08-21T02:28:58.069223Z", + "iopub.status.idle": "2023-08-21T02:28:58.071737Z", + "shell.execute_reply": "2023-08-21T02:28:58.071247Z" }, "lines_to_next_cell": 2 }, @@ -3352,7 +3352,7 @@ }, { "cell_type": "markdown", - "id": "3ec215b9", + "id": "19dcfad2", "metadata": {}, "source": [ "### Tuning Parameters\n", @@ -3368,13 +3368,13 @@ { "cell_type": "code", "execution_count": 60, - "id": "9ed36c50", + "id": "4d984cf0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.631783Z", - "iopub.status.busy": "2023-08-07T00:18:34.631676Z", - "iopub.status.idle": "2023-08-07T00:18:34.704358Z", - "shell.execute_reply": "2023-08-07T00:18:34.703933Z" + "iopub.execute_input": "2023-08-21T02:28:58.073571Z", + "iopub.status.busy": "2023-08-21T02:28:58.073457Z", + "iopub.status.idle": "2023-08-21T02:28:58.146516Z", + "shell.execute_reply": "2023-08-21T02:28:58.146020Z" }, "lines_to_next_cell": 0 }, @@ -3409,7 +3409,7 @@ }, { "cell_type": "markdown", - "id": "0718d8f0", + "id": "04c42362", "metadata": {}, "source": [ "We see some variability --- the numbers for `K=4` are very different from the rest.\n", @@ -3435,13 +3435,13 @@ { "cell_type": "code", "execution_count": 61, - "id": "8605a327", + "id": "d24f4e50", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:34.706353Z", - "iopub.status.busy": "2023-08-07T00:18:34.706235Z", - "iopub.status.idle": "2023-08-07T00:18:35.327825Z", - "shell.execute_reply": "2023-08-07T00:18:35.327057Z" + "iopub.execute_input": "2023-08-21T02:28:58.148624Z", + "iopub.status.busy": "2023-08-21T02:28:58.148360Z", + "iopub.status.idle": "2023-08-21T02:28:58.773984Z", + "shell.execute_reply": "2023-08-21T02:28:58.773325Z" } }, "outputs": [ @@ -3512,7 +3512,7 @@ }, { "cell_type": "markdown", - "id": "daf1655f", + "id": "f2d91f33", "metadata": {}, "source": [ "We used the argument `solver='liblinear'` above to\n", @@ -3532,13 +3532,13 @@ { "cell_type": "code", "execution_count": 62, - "id": "e686f675", + "id": "25152580", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.331998Z", - "iopub.status.busy": "2023-08-07T00:18:35.331623Z", - "iopub.status.idle": "2023-08-07T00:18:35.345291Z", - "shell.execute_reply": "2023-08-07T00:18:35.344659Z" + "iopub.execute_input": "2023-08-21T02:28:58.778052Z", + "iopub.status.busy": "2023-08-21T02:28:58.777754Z", + "iopub.status.idle": "2023-08-21T02:28:58.791505Z", + "shell.execute_reply": "2023-08-21T02:28:58.790362Z" } }, "outputs": [ @@ -3607,13 +3607,13 @@ { "cell_type": "code", "execution_count": 63, - "id": "d92cfcd4", + "id": "b8ea6e08", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.349220Z", - "iopub.status.busy": "2023-08-07T00:18:35.348866Z", - "iopub.status.idle": "2023-08-07T00:18:35.355490Z", - "shell.execute_reply": "2023-08-07T00:18:35.354787Z" + "iopub.execute_input": "2023-08-21T02:28:58.798441Z", + "iopub.status.busy": "2023-08-21T02:28:58.798187Z", + "iopub.status.idle": "2023-08-21T02:28:58.805015Z", + "shell.execute_reply": "2023-08-21T02:28:58.804266Z" }, "lines_to_next_cell": 0 }, @@ -3635,7 +3635,7 @@ }, { "cell_type": "markdown", - "id": "8a0c1140", + "id": "bb96ed25", "metadata": {}, "source": [ "## Linear and Poisson Regression on the Bikeshare Data\n", @@ -3647,13 +3647,13 @@ { "cell_type": "code", "execution_count": 64, - "id": "6f93060c", + "id": "def80d79", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.359503Z", - "iopub.status.busy": "2023-08-07T00:18:35.359134Z", - "iopub.status.idle": "2023-08-07T00:18:35.374649Z", - "shell.execute_reply": "2023-08-07T00:18:35.373898Z" + "iopub.execute_input": "2023-08-21T02:28:58.808423Z", + "iopub.status.busy": "2023-08-21T02:28:58.807929Z", + "iopub.status.idle": "2023-08-21T02:28:58.826147Z", + "shell.execute_reply": "2023-08-21T02:28:58.825308Z" }, "lines_to_next_cell": 0 }, @@ -3664,7 +3664,7 @@ }, { "cell_type": "markdown", - "id": "af82d61e", + "id": "146abe69", "metadata": {}, "source": [ "Let's have a peek at the dimensions and names of the variables in this dataframe." @@ -3673,13 +3673,13 @@ { "cell_type": "code", "execution_count": 65, - "id": "725ce173", + "id": "f899d5ab", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.378452Z", - "iopub.status.busy": "2023-08-07T00:18:35.378048Z", - "iopub.status.idle": "2023-08-07T00:18:35.382634Z", - "shell.execute_reply": "2023-08-07T00:18:35.382022Z" + "iopub.execute_input": "2023-08-21T02:28:58.838005Z", + "iopub.status.busy": "2023-08-21T02:28:58.837542Z", + "iopub.status.idle": "2023-08-21T02:28:58.842697Z", + "shell.execute_reply": "2023-08-21T02:28:58.841989Z" } }, "outputs": [ @@ -3704,7 +3704,7 @@ }, { "cell_type": "markdown", - "id": "9b133dc3", + "id": "b07be452", "metadata": {}, "source": [ "### Linear Regression\n", @@ -3715,13 +3715,13 @@ { "cell_type": "code", "execution_count": 66, - "id": "ee3e5e3b", + "id": "76f4cea5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.386155Z", - "iopub.status.busy": "2023-08-07T00:18:35.385658Z", - "iopub.status.idle": "2023-08-07T00:18:35.457335Z", - "shell.execute_reply": "2023-08-07T00:18:35.456140Z" + "iopub.execute_input": "2023-08-21T02:28:58.846154Z", + "iopub.status.busy": "2023-08-21T02:28:58.845860Z", + "iopub.status.idle": "2023-08-21T02:28:58.936368Z", + "shell.execute_reply": "2023-08-21T02:28:58.931496Z" } }, "outputs": [ @@ -3755,86 +3755,86 @@ " \n", " \n", " intercept\n", - " -27.2068\n", - " 6.715\n", - " -4.052\n", + " -68.6317\n", + " 5.307\n", + " -12.932\n", " 0.000\n", " \n", " \n", - " mnth[Aug]\n", - " 11.8181\n", - " 4.698\n", - " 2.515\n", - " 0.012\n", - " \n", - " \n", - " mnth[Dec]\n", - " 5.0328\n", - " 4.280\n", - " 1.176\n", - " 0.240\n", - " \n", - " \n", " mnth[Feb]\n", - " -34.5797\n", - " 4.575\n", - " -7.558\n", - " 0.000\n", - " \n", - " \n", - " mnth[Jan]\n", - " -41.4249\n", - " 4.972\n", - " -8.331\n", - " 0.000\n", - " \n", - " \n", - " mnth[July]\n", - " 3.8996\n", - " 5.003\n", - " 0.779\n", - " 0.436\n", - " \n", - " \n", - " mnth[June]\n", - " 26.3938\n", - " 4.642\n", - " 5.686\n", - " 0.000\n", + " 6.8452\n", + " 4.287\n", + " 1.597\n", + " 0.110\n", " \n", " \n", " mnth[March]\n", - " -24.8735\n", - " 4.277\n", - " -5.815\n", + " 16.5514\n", + " 4.301\n", + " 3.848\n", + " 0.000\n", + " \n", + " \n", + " mnth[April]\n", + " 41.4249\n", + " 4.972\n", + " 8.331\n", " 0.000\n", " \n", " \n", " mnth[May]\n", - " 31.1322\n", - " 4.150\n", - " 7.501\n", + " 72.5571\n", + " 5.641\n", + " 12.862\n", " 0.000\n", " \n", " \n", - " mnth[Nov]\n", - " 18.8851\n", - " 4.099\n", - " 4.607\n", + " mnth[June]\n", + " 67.8187\n", + " 6.544\n", + " 10.364\n", " 0.000\n", " \n", " \n", - " mnth[Oct]\n", - " 34.4093\n", - " 4.006\n", - " 8.589\n", + " mnth[July]\n", + " 45.3245\n", + " 7.081\n", + " 6.401\n", + " 0.000\n", + " \n", + " \n", + " mnth[Aug]\n", + " 53.2430\n", + " 6.640\n", + " 8.019\n", " 0.000\n", " \n", " \n", " mnth[Sept]\n", - " 25.2534\n", - " 4.293\n", - " 5.883\n", + " 66.6783\n", + " 5.925\n", + " 11.254\n", + " 0.000\n", + " \n", + " \n", + " mnth[Oct]\n", + " 75.8343\n", + " 4.950\n", + " 15.319\n", + " 0.000\n", + " \n", + " \n", + " mnth[Nov]\n", + " 60.3100\n", + " 4.610\n", + " 13.083\n", + " 0.000\n", + " \n", + " \n", + " mnth[Dec]\n", + " 46.4577\n", + " 4.271\n", + " 10.878\n", " 0.000\n", " \n", " \n", @@ -4039,18 +4039,18 @@ ], "text/plain": [ " coef std err t P>|t|\n", - "intercept -27.2068 6.715 -4.052 0.000\n", - "mnth[Aug] 11.8181 4.698 2.515 0.012\n", - "mnth[Dec] 5.0328 4.280 1.176 0.240\n", - "mnth[Feb] -34.5797 4.575 -7.558 0.000\n", - "mnth[Jan] -41.4249 4.972 -8.331 0.000\n", - "mnth[July] 3.8996 5.003 0.779 0.436\n", - "mnth[June] 26.3938 4.642 5.686 0.000\n", - "mnth[March] -24.8735 4.277 -5.815 0.000\n", - "mnth[May] 31.1322 4.150 7.501 0.000\n", - "mnth[Nov] 18.8851 4.099 4.607 0.000\n", - "mnth[Oct] 34.4093 4.006 8.589 0.000\n", - "mnth[Sept] 25.2534 4.293 5.883 0.000\n", + "intercept -68.6317 5.307 -12.932 0.000\n", + "mnth[Feb] 6.8452 4.287 1.597 0.110\n", + "mnth[March] 16.5514 4.301 3.848 0.000\n", + "mnth[April] 41.4249 4.972 8.331 0.000\n", + "mnth[May] 72.5571 5.641 12.862 0.000\n", + "mnth[June] 67.8187 6.544 10.364 0.000\n", + "mnth[July] 45.3245 7.081 6.401 0.000\n", + "mnth[Aug] 53.2430 6.640 8.019 0.000\n", + "mnth[Sept] 66.6783 5.925 11.254 0.000\n", + "mnth[Oct] 75.8343 4.950 15.319 0.000\n", + "mnth[Nov] 60.3100 4.610 13.083 0.000\n", + "mnth[Dec] 46.4577 4.271 10.878 0.000\n", "hr[1] -14.5793 5.699 -2.558 0.011\n", "hr[2] -21.5791 5.733 -3.764 0.000\n", "hr[3] -31.1408 5.778 -5.389 0.000\n", @@ -4099,7 +4099,7 @@ }, { "cell_type": "markdown", - "id": "36f3063f", + "id": "46d55b3d", "metadata": {}, "source": [ "There are 24 levels in `hr` and 40 rows in all.\n", @@ -4119,13 +4119,13 @@ { "cell_type": "code", "execution_count": 67, - "id": "d6a047f5", + "id": "5778ada8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.461563Z", - "iopub.status.busy": "2023-08-07T00:18:35.460853Z", - "iopub.status.idle": "2023-08-07T00:18:35.464618Z", - "shell.execute_reply": "2023-08-07T00:18:35.463961Z" + "iopub.execute_input": "2023-08-21T02:28:58.941746Z", + "iopub.status.busy": "2023-08-21T02:28:58.941366Z", + "iopub.status.idle": "2023-08-21T02:28:58.948890Z", + "shell.execute_reply": "2023-08-21T02:28:58.947630Z" }, "lines_to_next_cell": 0 }, @@ -4137,7 +4137,7 @@ }, { "cell_type": "markdown", - "id": "6ed435ca", + "id": "06849d92", "metadata": {}, "source": [ "Refitting again:" @@ -4146,13 +4146,13 @@ { "cell_type": "code", "execution_count": 68, - "id": "d7f6edaf", + "id": "c6da14b9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.467867Z", - "iopub.status.busy": "2023-08-07T00:18:35.467482Z", - "iopub.status.idle": "2023-08-07T00:18:35.536860Z", - "shell.execute_reply": "2023-08-07T00:18:35.535938Z" + "iopub.execute_input": "2023-08-21T02:28:58.953721Z", + "iopub.status.busy": "2023-08-21T02:28:58.953330Z", + "iopub.status.idle": "2023-08-21T02:28:59.054283Z", + "shell.execute_reply": "2023-08-21T02:28:59.053564Z" } }, "outputs": [ @@ -4530,7 +4530,7 @@ }, { "cell_type": "markdown", - "id": "edea9530", + "id": "62d884bd", "metadata": {}, "source": [ "What is the difference between the two codings? In `M2_lm`, a\n", @@ -4556,20 +4556,20 @@ { "cell_type": "code", "execution_count": 69, - "id": "412ce964", + "id": "461d57c5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.541020Z", - "iopub.status.busy": "2023-08-07T00:18:35.540717Z", - "iopub.status.idle": "2023-08-07T00:18:35.554132Z", - "shell.execute_reply": "2023-08-07T00:18:35.552973Z" + "iopub.execute_input": "2023-08-21T02:28:59.063565Z", + "iopub.status.busy": "2023-08-21T02:28:59.063233Z", + "iopub.status.idle": "2023-08-21T02:28:59.071787Z", + "shell.execute_reply": "2023-08-21T02:28:59.070620Z" } }, "outputs": [ { "data": { "text/plain": [ - "4.186226544780569e-19" + "1.0353919305327476e-18" ] }, "execution_count": 69, @@ -4583,7 +4583,7 @@ }, { "cell_type": "markdown", - "id": "69539d1c", + "id": "a5a50827", "metadata": {}, "source": [ "The sum of squared differences is zero. We can also see this using the\n", @@ -4593,13 +4593,13 @@ { "cell_type": "code", "execution_count": 70, - "id": "5afd0d5d", + "id": "05d33247", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.559035Z", - "iopub.status.busy": "2023-08-07T00:18:35.558329Z", - "iopub.status.idle": "2023-08-07T00:18:35.566101Z", - "shell.execute_reply": "2023-08-07T00:18:35.565469Z" + "iopub.execute_input": "2023-08-21T02:28:59.077767Z", + "iopub.status.busy": "2023-08-21T02:28:59.077090Z", + "iopub.status.idle": "2023-08-21T02:28:59.085265Z", + "shell.execute_reply": "2023-08-21T02:28:59.084291Z" }, "lines_to_next_cell": 2 }, @@ -4621,7 +4621,7 @@ }, { "cell_type": "markdown", - "id": "fdc83f2e", + "id": "41256e16", "metadata": {}, "source": [ "To reproduce the left-hand side of Figure 4.13\n", @@ -4636,13 +4636,13 @@ { "cell_type": "code", "execution_count": 71, - "id": "4629f2c9", + "id": "bee42b38", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.570679Z", - "iopub.status.busy": "2023-08-07T00:18:35.570231Z", - "iopub.status.idle": "2023-08-07T00:18:35.579784Z", - "shell.execute_reply": "2023-08-07T00:18:35.579027Z" + "iopub.execute_input": "2023-08-21T02:28:59.089190Z", + "iopub.status.busy": "2023-08-21T02:28:59.088696Z", + "iopub.status.idle": "2023-08-21T02:28:59.099445Z", + "shell.execute_reply": "2023-08-21T02:28:59.098750Z" }, "lines_to_next_cell": 0 }, @@ -4676,7 +4676,7 @@ }, { "cell_type": "markdown", - "id": "6fdd5f23", + "id": "976ff3e0", "metadata": {}, "source": [ "Next, we append `Dec` as the negative of the sum of all other months." @@ -4685,13 +4685,13 @@ { "cell_type": "code", "execution_count": 72, - "id": "b3e55833", + "id": "4aa60857", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.583928Z", - "iopub.status.busy": "2023-08-07T00:18:35.583623Z", - "iopub.status.idle": "2023-08-07T00:18:35.592868Z", - "shell.execute_reply": "2023-08-07T00:18:35.592219Z" + "iopub.execute_input": "2023-08-21T02:28:59.103423Z", + "iopub.status.busy": "2023-08-21T02:28:59.103057Z", + "iopub.status.idle": "2023-08-21T02:28:59.112346Z", + "shell.execute_reply": "2023-08-21T02:28:59.111002Z" }, "lines_to_next_cell": 0 }, @@ -4732,7 +4732,7 @@ }, { "cell_type": "markdown", - "id": "4d1f1d30", + "id": "39be6060", "metadata": {}, "source": [ "Finally, to make the plot neater, we’ll just use the first letter of each month, which is the $6$th entry of each of\n", @@ -4742,13 +4742,13 @@ { "cell_type": "code", "execution_count": 73, - "id": "cdbebc03", + "id": "894d3e2c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.597005Z", - "iopub.status.busy": "2023-08-07T00:18:35.596605Z", - "iopub.status.idle": "2023-08-07T00:18:35.727830Z", - "shell.execute_reply": "2023-08-07T00:18:35.726982Z" + "iopub.execute_input": "2023-08-21T02:28:59.116495Z", + "iopub.status.busy": "2023-08-21T02:28:59.116193Z", + "iopub.status.idle": "2023-08-21T02:28:59.250351Z", + "shell.execute_reply": "2023-08-21T02:28:59.249608Z" } }, "outputs": [ @@ -4775,7 +4775,7 @@ }, { "cell_type": "markdown", - "id": "6f845be8", + "id": "fe1d213c", "metadata": {}, "source": [ "Reproducing the right-hand plot in Figure 4.13 follows a similar process." @@ -4784,13 +4784,13 @@ { "cell_type": "code", "execution_count": 74, - "id": "170fd6fd", + "id": "d636746e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.733543Z", - "iopub.status.busy": "2023-08-07T00:18:35.731394Z", - "iopub.status.idle": "2023-08-07T00:18:35.740654Z", - "shell.execute_reply": "2023-08-07T00:18:35.740001Z" + "iopub.execute_input": "2023-08-21T02:28:59.253708Z", + "iopub.status.busy": "2023-08-21T02:28:59.253326Z", + "iopub.status.idle": "2023-08-21T02:28:59.260644Z", + "shell.execute_reply": "2023-08-21T02:28:59.259501Z" } }, "outputs": [], @@ -4804,7 +4804,7 @@ }, { "cell_type": "markdown", - "id": "100190e3", + "id": "c181f106", "metadata": {}, "source": [ "We now make the hour plot." @@ -4813,13 +4813,13 @@ { "cell_type": "code", "execution_count": 75, - "id": "1e09e126", + "id": "ce6a1623", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.744368Z", - "iopub.status.busy": "2023-08-07T00:18:35.744031Z", - "iopub.status.idle": "2023-08-07T00:18:35.880750Z", - "shell.execute_reply": "2023-08-07T00:18:35.880425Z" + "iopub.execute_input": "2023-08-21T02:28:59.264364Z", + "iopub.status.busy": "2023-08-21T02:28:59.264112Z", + "iopub.status.idle": "2023-08-21T02:28:59.384102Z", + "shell.execute_reply": "2023-08-21T02:28:59.383714Z" } }, "outputs": [ @@ -4846,7 +4846,7 @@ }, { "cell_type": "markdown", - "id": "bf730e5d", + "id": "8cafb6b7", "metadata": {}, "source": [ "### Poisson Regression\n", @@ -4859,13 +4859,13 @@ { "cell_type": "code", "execution_count": 76, - "id": "a6667dcf", + "id": "9fb8b759", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.882429Z", - "iopub.status.busy": "2023-08-07T00:18:35.882313Z", - "iopub.status.idle": "2023-08-07T00:18:35.968054Z", - "shell.execute_reply": "2023-08-07T00:18:35.967220Z" + "iopub.execute_input": "2023-08-21T02:28:59.386009Z", + "iopub.status.busy": "2023-08-21T02:28:59.385867Z", + "iopub.status.idle": "2023-08-21T02:28:59.478822Z", + "shell.execute_reply": "2023-08-21T02:28:59.477841Z" } }, "outputs": [], @@ -4875,7 +4875,7 @@ }, { "cell_type": "markdown", - "id": "8309c1fc", + "id": "9cc0ea6d", "metadata": {}, "source": [ "We can plot the coefficients associated with `mnth` and `hr`, in order to reproduce Figure 4.15. We first complete these coefficients as before." @@ -4884,13 +4884,13 @@ { "cell_type": "code", "execution_count": 77, - "id": "c20de5d8", + "id": "ee272341", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:35.973009Z", - "iopub.status.busy": "2023-08-07T00:18:35.972664Z", - "iopub.status.idle": "2023-08-07T00:18:35.996642Z", - "shell.execute_reply": "2023-08-07T00:18:35.996051Z" + "iopub.execute_input": "2023-08-21T02:28:59.482988Z", + "iopub.status.busy": "2023-08-21T02:28:59.482517Z", + "iopub.status.idle": "2023-08-21T02:28:59.506926Z", + "shell.execute_reply": "2023-08-21T02:28:59.506267Z" }, "lines_to_next_cell": 0 }, @@ -4909,7 +4909,7 @@ }, { "cell_type": "markdown", - "id": "41e58943", + "id": "4a86df8c", "metadata": {}, "source": [ "The plotting is as before." @@ -4918,13 +4918,13 @@ { "cell_type": "code", "execution_count": 78, - "id": "4a1a8488", + "id": "1f5bde07", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:36.000164Z", - "iopub.status.busy": "2023-08-07T00:18:35.999622Z", - "iopub.status.idle": "2023-08-07T00:18:36.204622Z", - "shell.execute_reply": "2023-08-07T00:18:36.203590Z" + "iopub.execute_input": "2023-08-21T02:28:59.510834Z", + "iopub.status.busy": "2023-08-21T02:28:59.510470Z", + "iopub.status.idle": "2023-08-21T02:28:59.792175Z", + "shell.execute_reply": "2023-08-21T02:28:59.791845Z" }, "lines_to_next_cell": 0 }, @@ -4933,7 +4933,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/16/8y65_zv174qgdp4ktlmpv12h0000gq/T/ipykernel_19145/3779905754.py:8: UserWarning: FixedFormatter should only be used together with FixedLocator\n", + "/var/folders/16/8y65_zv174qgdp4ktlmpv12h0000gq/T/ipykernel_80940/3779905754.py:8: UserWarning: FixedFormatter should only be used together with FixedLocator\n", " ax_hr.set_xticklabels(range(24)[::2], fontsize=20)\n" ] }, @@ -4963,7 +4963,7 @@ }, { "cell_type": "markdown", - "id": "5e74d13e", + "id": "ff00b931", "metadata": {}, "source": [ "We compare the fitted values of the two models.\n", @@ -4975,13 +4975,13 @@ { "cell_type": "code", "execution_count": 79, - "id": "a3158334", + "id": "b0bd66a1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:36.209262Z", - "iopub.status.busy": "2023-08-07T00:18:36.208838Z", - "iopub.status.idle": "2023-08-07T00:18:36.338262Z", - "shell.execute_reply": "2023-08-07T00:18:36.337899Z" + "iopub.execute_input": "2023-08-21T02:28:59.793823Z", + "iopub.status.busy": "2023-08-21T02:28:59.793732Z", + "iopub.status.idle": "2023-08-21T02:28:59.904438Z", + "shell.execute_reply": "2023-08-21T02:28:59.904151Z" } }, "outputs": [ @@ -5009,7 +5009,7 @@ }, { "cell_type": "markdown", - "id": "2b03ac4f", + "id": "a3b4b06e", "metadata": {}, "source": [ "The predictions from the Poisson regression model are correlated with\n", @@ -5031,8 +5031,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "language_info": { "codemirror_mode": { diff --git a/Ch05-resample-lab.Rmd b/Ch05-resample-lab.Rmd index 0b606f7..03ba45c 100644 --- a/Ch05-resample-lab.Rmd +++ b/Ch05-resample-lab.Rmd @@ -1,16 +1,3 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - main_language: python - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 ---- - # Chapter 5 @@ -518,13 +505,13 @@ slope. Interestingly, these are somewhat different from the estimates obtained using the bootstrap. Does this indicate a problem with the bootstrap? In fact, it suggests the opposite. Recall that the standard formulas given in - {Equation 3.8 on page 80} + {Equation 3.8 on page 82} rely on certain assumptions. For example, they depend on the unknown parameter $\sigma^2$, the noise variance. We then estimate $\sigma^2$ using the RSS. Now although the formula for the standard errors do not rely on the linear model being correct, the estimate for $\sigma^2$ does. We see - {in Figure 3.8 on page 106} that there is + {in Figure 3.8 on page 108} that there is a non-linear relationship in the data, and so the residuals from a linear fit will be inflated, and so will $\hat{\sigma}^2$. Secondly, the standard formulas assume (somewhat unrealistically) that the $x_i$ diff --git a/Ch05-resample-lab.ipynb b/Ch05-resample-lab.ipynb index 3a18390..57a41a8 100644 --- a/Ch05-resample-lab.ipynb +++ b/Ch05-resample-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "3a3f2f85", + "id": "85ad9863", "metadata": {}, "source": [ "\n", @@ -12,7 +12,7 @@ }, { "cell_type": "markdown", - "id": "bb22af17", + "id": "ac8b08af", "metadata": {}, "source": [ "# Lab: Cross-Validation and the Bootstrap\n", @@ -26,13 +26,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "60fad148", + "id": "e7712cfe", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:37.622425Z", - "iopub.status.busy": "2023-08-07T00:18:37.621828Z", - "iopub.status.idle": "2023-08-07T00:18:38.459128Z", - "shell.execute_reply": "2023-08-07T00:18:38.458689Z" + "iopub.execute_input": "2023-08-21T02:29:01.252458Z", + "iopub.status.busy": "2023-08-21T02:29:01.251970Z", + "iopub.status.idle": "2023-08-21T02:29:02.044045Z", + "shell.execute_reply": "2023-08-21T02:29:02.043730Z" }, "lines_to_next_cell": 2 }, @@ -49,7 +49,7 @@ }, { "cell_type": "markdown", - "id": "78fcfe7a", + "id": "784a2ba3", "metadata": {}, "source": [ "There are several new imports needed for this lab." @@ -58,13 +58,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "2478aeb4", + "id": "21c2ed4f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.461290Z", - "iopub.status.busy": "2023-08-07T00:18:38.461070Z", - "iopub.status.idle": "2023-08-07T00:18:38.463158Z", - "shell.execute_reply": "2023-08-07T00:18:38.462899Z" + "iopub.execute_input": "2023-08-21T02:29:02.045927Z", + "iopub.status.busy": "2023-08-21T02:29:02.045761Z", + "iopub.status.idle": "2023-08-21T02:29:02.047761Z", + "shell.execute_reply": "2023-08-21T02:29:02.047491Z" }, "lines_to_next_cell": 2 }, @@ -81,7 +81,7 @@ }, { "cell_type": "markdown", - "id": "713d30db", + "id": "9ac3acd5", "metadata": {}, "source": [ "## The Validation Set Approach\n", @@ -102,13 +102,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "99c95faf", + "id": "8af59641", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.464725Z", - "iopub.status.busy": "2023-08-07T00:18:38.464616Z", - "iopub.status.idle": "2023-08-07T00:18:38.472566Z", - "shell.execute_reply": "2023-08-07T00:18:38.472315Z" + "iopub.execute_input": "2023-08-21T02:29:02.049239Z", + "iopub.status.busy": "2023-08-21T02:29:02.049145Z", + "iopub.status.idle": "2023-08-21T02:29:02.055524Z", + "shell.execute_reply": "2023-08-21T02:29:02.055162Z" } }, "outputs": [], @@ -121,7 +121,7 @@ }, { "cell_type": "markdown", - "id": "57be35df", + "id": "e76383f0", "metadata": {}, "source": [ "Now we can fit a linear regression using only the observations corresponding to the training set `Auto_train`." @@ -130,13 +130,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "41b0717d", + "id": "d9b0b7c8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.474061Z", - "iopub.status.busy": "2023-08-07T00:18:38.473957Z", - "iopub.status.idle": "2023-08-07T00:18:38.477686Z", - "shell.execute_reply": "2023-08-07T00:18:38.477432Z" + "iopub.execute_input": "2023-08-21T02:29:02.057278Z", + "iopub.status.busy": "2023-08-21T02:29:02.057182Z", + "iopub.status.idle": "2023-08-21T02:29:02.062537Z", + "shell.execute_reply": "2023-08-21T02:29:02.062265Z" } }, "outputs": [], @@ -150,7 +150,7 @@ }, { "cell_type": "markdown", - "id": "7f1bef95", + "id": "d196dd08", "metadata": {}, "source": [ "We now use the `predict()` method of `results` evaluated on the model matrix for this model\n", @@ -160,13 +160,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "d7ea3c0d", + "id": "3e77d831", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.479141Z", - "iopub.status.busy": "2023-08-07T00:18:38.479053Z", - "iopub.status.idle": "2023-08-07T00:18:38.483270Z", - "shell.execute_reply": "2023-08-07T00:18:38.483037Z" + "iopub.execute_input": "2023-08-21T02:29:02.064056Z", + "iopub.status.busy": "2023-08-21T02:29:02.063966Z", + "iopub.status.idle": "2023-08-21T02:29:02.068279Z", + "shell.execute_reply": "2023-08-21T02:29:02.068024Z" } }, "outputs": [ @@ -190,7 +190,7 @@ }, { "cell_type": "markdown", - "id": "6dba5d55", + "id": "f4369ee6", "metadata": {}, "source": [ "Hence our estimate for the validation MSE of the linear regression\n", @@ -204,13 +204,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "a02a2d05", + "id": "0aa4bfcc", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.484782Z", - "iopub.status.busy": "2023-08-07T00:18:38.484689Z", - "iopub.status.idle": "2023-08-07T00:18:38.486891Z", - "shell.execute_reply": "2023-08-07T00:18:38.486642Z" + "iopub.execute_input": "2023-08-21T02:29:02.069789Z", + "iopub.status.busy": "2023-08-21T02:29:02.069682Z", + "iopub.status.idle": "2023-08-21T02:29:02.071953Z", + "shell.execute_reply": "2023-08-21T02:29:02.071703Z" } }, "outputs": [], @@ -235,7 +235,7 @@ }, { "cell_type": "markdown", - "id": "39ab59b1", + "id": "0271dc50", "metadata": {}, "source": [ "Let’s use this function to estimate the validation MSE\n", @@ -247,13 +247,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "51d93dea", + "id": "a0dbd55f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.488297Z", - "iopub.status.busy": "2023-08-07T00:18:38.488205Z", - "iopub.status.idle": "2023-08-07T00:18:38.497955Z", - "shell.execute_reply": "2023-08-07T00:18:38.497708Z" + "iopub.execute_input": "2023-08-21T02:29:02.073322Z", + "iopub.status.busy": "2023-08-21T02:29:02.073229Z", + "iopub.status.idle": "2023-08-21T02:29:02.088464Z", + "shell.execute_reply": "2023-08-21T02:29:02.088192Z" } }, "outputs": [ @@ -280,7 +280,7 @@ }, { "cell_type": "markdown", - "id": "936e168a", + "id": "a7401536", "metadata": {}, "source": [ "These error rates are $23.62, 18.76$, and $18.80$, respectively. If we\n", @@ -291,13 +291,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "83432f06", + "id": "885136a4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.499478Z", - "iopub.status.busy": "2023-08-07T00:18:38.499391Z", - "iopub.status.idle": "2023-08-07T00:18:38.509735Z", - "shell.execute_reply": "2023-08-07T00:18:38.509466Z" + "iopub.execute_input": "2023-08-21T02:29:02.089889Z", + "iopub.status.busy": "2023-08-21T02:29:02.089804Z", + "iopub.status.idle": "2023-08-21T02:29:02.105353Z", + "shell.execute_reply": "2023-08-21T02:29:02.105089Z" } }, "outputs": [ @@ -327,7 +327,7 @@ }, { "cell_type": "markdown", - "id": "f5ceb357", + "id": "00785402", "metadata": {}, "source": [ "Using this split of the observations into a training set and a validation set,\n", @@ -341,7 +341,7 @@ }, { "cell_type": "markdown", - "id": "6d624a5c", + "id": "21c071b8", "metadata": {}, "source": [ "## Cross-Validation\n", @@ -374,13 +374,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "bcfc433f", + "id": "6d957d8c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:38.511210Z", - "iopub.status.busy": "2023-08-07T00:18:38.511122Z", - "iopub.status.idle": "2023-08-07T00:18:39.069624Z", - "shell.execute_reply": "2023-08-07T00:18:39.069325Z" + "iopub.execute_input": "2023-08-21T02:29:02.106979Z", + "iopub.status.busy": "2023-08-21T02:29:02.106884Z", + "iopub.status.idle": "2023-08-21T02:29:03.184550Z", + "shell.execute_reply": "2023-08-21T02:29:03.184259Z" }, "lines_to_next_cell": 0 }, @@ -410,7 +410,7 @@ }, { "cell_type": "markdown", - "id": "5b0f6f30", + "id": "c17e2bc8", "metadata": {}, "source": [ "The arguments to `cross_validate()` are as follows: an\n", @@ -426,7 +426,7 @@ }, { "cell_type": "markdown", - "id": "b527f67f", + "id": "5c7901f2", "metadata": {}, "source": [ "We can repeat this procedure for increasingly complex polynomial fits.\n", @@ -442,13 +442,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "f951ffc8", + "id": "e2b5ce95", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:39.071240Z", - "iopub.status.busy": "2023-08-07T00:18:39.071138Z", - "iopub.status.idle": "2023-08-07T00:18:39.674084Z", - "shell.execute_reply": "2023-08-07T00:18:39.673774Z" + "iopub.execute_input": "2023-08-21T02:29:03.186226Z", + "iopub.status.busy": "2023-08-21T02:29:03.186108Z", + "iopub.status.idle": "2023-08-21T02:29:03.782413Z", + "shell.execute_reply": "2023-08-21T02:29:03.782122Z" }, "lines_to_next_cell": 0 }, @@ -480,7 +480,7 @@ }, { "cell_type": "markdown", - "id": "792f1304", + "id": "03706248", "metadata": {}, "source": [ "As in Figure 5.4, we see a sharp drop in the estimated test MSE between the linear and\n", @@ -499,13 +499,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "e3610b5a", + "id": "1dda1bd7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:18:39.675725Z", - "iopub.status.busy": "2023-08-07T00:18:39.675614Z", - "iopub.status.idle": "2023-08-07T00:18:39.678046Z", - "shell.execute_reply": "2023-08-07T00:18:39.677762Z" + "iopub.execute_input": "2023-08-21T02:29:03.783997Z", + "iopub.status.busy": "2023-08-21T02:29:03.783886Z", + "iopub.status.idle": "2023-08-21T02:29:03.786132Z", + "shell.execute_reply": "2023-08-21T02:29:03.785881Z" } }, "outputs": [ @@ -530,7 +530,7 @@ }, { "cell_type": "markdown", - "id": "983625b2", + "id": "f5092f1b", "metadata": {}, "source": [ "In the CV example above, we used $K=n$, but of course we can also use $K 8, "No") ``` - + We now use `DecisionTreeClassifier()` to fit a classification tree in order to predict `High` using all variables but `Sales`. To do so, we must form a model matrix as we did when fitting regression @@ -93,8 +80,8 @@ clf = DTC(criterion='entropy', clf.fit(X, High) ``` - - + + In our discussion of qualitative features in Section 3.3, we noted that for a linear regression model such a feature could be represented by including a matrix of dummy variables (one-hot-encoding) in the model @@ -110,8 +97,8 @@ advantage of this approach; instead it simply treats the one-hot-encoded levels accuracy_score(High, clf.predict(X)) ``` - - + + With only the default arguments, the training error rate is 21%. For classification trees, we can @@ -129,7 +116,7 @@ resid_dev = np.sum(log_loss(High, clf.predict_proba(X))) resid_dev ``` - + This is closely related to the *entropy*, defined in (8.7). A small deviance indicates a tree that provides a good fit to the (training) data. @@ -161,7 +148,7 @@ print(export_text(clf, show_weights=True)) ``` - + In order to properly evaluate the performance of a classification tree on these data, we must estimate the test error rather than simply computing the training error. We split the observations into a @@ -264,8 +251,8 @@ confusion = confusion_table(best_.predict(X_test), confusion ``` - - + + Now 72.0% of the test observations are correctly classified, which is slightly worse than the error for the full tree (with 35 leaves). So cross-validation has not helped us much here; it only pruned off 5 leaves, at a cost of a slightly worse error. These results would change if we were to change the random number seeds above; even though cross-validation gives an unbiased approach to model selection, it does have variance. @@ -283,7 +270,7 @@ feature_names = list(D.columns) X = np.asarray(D) ``` - + First, we split the data into training and test sets, and fit the tree to the training data. Here we use 30% of the data for the test set. @@ -298,7 +285,7 @@ to the training data. Here we use 30% of the data for the test set. random_state=0) ``` - + Having formed our training and test data sets, we fit the regression tree. ```{python} @@ -310,7 +297,7 @@ plot_tree(reg, ax=ax); ``` - + The variable `lstat` measures the percentage of individuals with lower socioeconomic status. The tree indicates that lower values of `lstat` correspond to more expensive houses. @@ -334,7 +321,7 @@ grid = skm.GridSearchCV(reg, G = grid.fit(X_train, y_train) ``` - + In keeping with the cross-validation results, we use the pruned tree to make predictions on the test set. @@ -343,8 +330,8 @@ best_ = grid.best_estimator_ np.mean((y_test - best_.predict(X_test))**2) ``` - - + + In other words, the test set MSE associated with the regression tree is 28.07. The square root of the MSE is therefore around @@ -367,7 +354,7 @@ plot_tree(G.best_estimator_, ## Bagging and Random Forests - + Here we apply bagging and random forests to the `Boston` data, using the `RandomForestRegressor()` from the `sklearn.ensemble` package. Recall @@ -380,8 +367,8 @@ bag_boston = RF(max_features=X_train.shape[1], random_state=0) bag_boston.fit(X_train, y_train) ``` - - + + The argument `max_features` indicates that all 12 predictors should be considered for each split of the tree --- in other words, that bagging should be done. How well does this bagged model perform on @@ -394,7 +381,7 @@ ax.scatter(y_hat_bag, y_test) np.mean((y_test - y_hat_bag)**2) ``` - + The test set MSE associated with the bagged regression tree is 14.63, about half that obtained using an optimally-pruned single tree. We could change the number of trees grown from the default of @@ -425,8 +412,8 @@ y_hat_RF = RF_boston.predict(X_test) np.mean((y_test - y_hat_RF)**2) ``` - - + + The test set MSE is 20.04; this indicates that random forests did somewhat worse than bagging in this case. Extracting the `feature_importances_` values from the fitted model, we can view the @@ -450,7 +437,7 @@ house size (`rm`) are by far the two most important variables. ## Boosting - + Here we use `GradientBoostingRegressor()` from `sklearn.ensemble` to fit boosted regression trees to the `Boston` data @@ -469,7 +456,7 @@ boost_boston = GBR(n_estimators=5000, boost_boston.fit(X_train, y_train) ``` - + We can see how the training error decreases with the `train_score_` attribute. To get an idea of how the test error decreases we can use the `staged_predict()` method to get the predicted values along the path. @@ -492,7 +479,7 @@ ax.plot(plot_idx, ax.legend(); ``` - + We now use the boosted model to predict `medv` on the test set: ```{python} @@ -500,7 +487,7 @@ y_hat_boost = boost_boston.predict(X_test); np.mean((y_test - y_hat_boost)**2) ``` - + The test MSE obtained is 14.48, similar to the test MSE for bagging. If we want to, we can perform boosting with a different value of the shrinkage parameter @@ -518,8 +505,8 @@ y_hat_boost = boost_boston.predict(X_test); np.mean((y_test - y_hat_boost)**2) ``` - - + + In this case, using $\lambda=0.2$ leads to a almost the same test MSE as when using $\lambda=0.001$. @@ -527,7 +514,7 @@ as when using $\lambda=0.001$. ## Bayesian Additive Regression Trees - + In this section we demonstrate a `Python` implementation of BART found in the `ISLP.bart` package. We fit a model @@ -540,8 +527,8 @@ bart_boston = BART(random_state=0, burnin=5, ndraw=15) bart_boston.fit(X_train, y_train) ``` - - + + On this data set, with this split into test and training, we see that the test error of BART is similar to that of random forest. ```{python} @@ -549,8 +536,8 @@ yhat_test = bart_boston.predict(X_test.astype(np.float32)) np.mean((y_test - yhat_test)**2) ``` - - + + We can check how many times each variable appeared in the collection of trees. This gives a summary similar to the variable importance plot for boosting and random forests. diff --git a/Ch08-baggboost-lab.ipynb b/Ch08-baggboost-lab.ipynb index 9597777..5c79fcf 100644 --- a/Ch08-baggboost-lab.ipynb +++ b/Ch08-baggboost-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "15894965", + "id": "0c50ec24", "metadata": {}, "source": [ "\n", @@ -12,7 +12,7 @@ }, { "cell_type": "markdown", - "id": "997ad844", + "id": "98b86be9", "metadata": {}, "source": [ "# Lab: Tree-Based Methods\n", @@ -23,13 +23,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "03f4774e", + "id": "5061d7d5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:13.530947Z", - "iopub.status.busy": "2023-08-07T00:19:13.530593Z", - "iopub.status.idle": "2023-08-07T00:19:14.651396Z", - "shell.execute_reply": "2023-08-07T00:19:14.650958Z" + "iopub.execute_input": "2023-08-21T02:29:43.521031Z", + "iopub.status.busy": "2023-08-21T02:29:43.520759Z", + "iopub.status.idle": "2023-08-21T02:29:44.874525Z", + "shell.execute_reply": "2023-08-21T02:29:44.874222Z" }, "lines_to_next_cell": 0 }, @@ -45,7 +45,7 @@ }, { "cell_type": "markdown", - "id": "87f2f0d6", + "id": "98ffeb1c", "metadata": {}, "source": [ "We also collect the new imports\n", @@ -55,13 +55,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "45944bc2", + "id": "747b056a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:14.653980Z", - "iopub.status.busy": "2023-08-07T00:19:14.653658Z", - "iopub.status.idle": "2023-08-07T00:19:14.719205Z", - "shell.execute_reply": "2023-08-07T00:19:14.718913Z" + "iopub.execute_input": "2023-08-21T02:29:44.876483Z", + "iopub.status.busy": "2023-08-21T02:29:44.876317Z", + "iopub.status.idle": "2023-08-21T02:29:44.941466Z", + "shell.execute_reply": "2023-08-21T02:29:44.941148Z" }, "lines_to_next_cell": 2 }, @@ -81,7 +81,7 @@ }, { "cell_type": "markdown", - "id": "72228f44", + "id": "4feef94d", "metadata": {}, "source": [ "## Fitting Classification Trees" @@ -89,7 +89,7 @@ }, { "cell_type": "markdown", - "id": "de444669", + "id": "b977dbf4", "metadata": {}, "source": [ "We first use classification trees to analyze the `Carseats` data set.\n", @@ -103,13 +103,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "f5b68c46", + "id": "a29167fd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:14.721043Z", - "iopub.status.busy": "2023-08-07T00:19:14.720936Z", - "iopub.status.idle": "2023-08-07T00:19:14.726941Z", - "shell.execute_reply": "2023-08-07T00:19:14.726682Z" + "iopub.execute_input": "2023-08-21T02:29:44.943319Z", + "iopub.status.busy": "2023-08-21T02:29:44.943207Z", + "iopub.status.idle": "2023-08-21T02:29:44.948609Z", + "shell.execute_reply": "2023-08-21T02:29:44.948363Z" } }, "outputs": [], @@ -122,7 +122,7 @@ }, { "cell_type": "markdown", - "id": "0b64c42c", + "id": "9887c34b", "metadata": {}, "source": [ "We now use `DecisionTreeClassifier()` to fit a classification tree in\n", @@ -134,13 +134,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "a04ebae3", + "id": "9fc6c8b9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:14.728534Z", - "iopub.status.busy": "2023-08-07T00:19:14.728433Z", - "iopub.status.idle": "2023-08-07T00:19:14.738427Z", - "shell.execute_reply": "2023-08-07T00:19:14.738158Z" + "iopub.execute_input": "2023-08-21T02:29:44.950122Z", + "iopub.status.busy": "2023-08-21T02:29:44.950017Z", + "iopub.status.idle": "2023-08-21T02:29:44.964042Z", + "shell.execute_reply": "2023-08-21T02:29:44.963794Z" }, "lines_to_next_cell": 0 }, @@ -154,7 +154,7 @@ }, { "cell_type": "markdown", - "id": "48a7240b", + "id": "86912d40", "metadata": {}, "source": [ "We have converted `D` from a data frame to an array `X`, which is needed in some of the analysis below. We also need the `feature_names` for annotating our plots later.\n", @@ -169,13 +169,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "c859e1bc", + "id": "533f0949", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:14.740061Z", - "iopub.status.busy": "2023-08-07T00:19:14.739971Z", - "iopub.status.idle": "2023-08-07T00:19:14.746540Z", - "shell.execute_reply": "2023-08-07T00:19:14.746250Z" + "iopub.execute_input": "2023-08-21T02:29:44.965639Z", + "iopub.status.busy": "2023-08-21T02:29:44.965555Z", + "iopub.status.idle": "2023-08-21T02:29:44.972079Z", + "shell.execute_reply": "2023-08-21T02:29:44.971812Z" }, "lines_to_next_cell": 2 }, @@ -203,7 +203,7 @@ }, { "cell_type": "markdown", - "id": "1f96b0d3", + "id": "118bae59", "metadata": {}, "source": [ "In our discussion of qualitative features in Section 3.3,\n", @@ -221,13 +221,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "25f3d7d9", + "id": "c4a8718e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:14.748036Z", - "iopub.status.busy": "2023-08-07T00:19:14.747935Z", - "iopub.status.idle": "2023-08-07T00:19:14.750728Z", - "shell.execute_reply": "2023-08-07T00:19:14.750466Z" + "iopub.execute_input": "2023-08-21T02:29:44.973649Z", + "iopub.status.busy": "2023-08-21T02:29:44.973541Z", + "iopub.status.idle": "2023-08-21T02:29:44.976459Z", + "shell.execute_reply": "2023-08-21T02:29:44.976196Z" }, "lines_to_next_cell": 2 }, @@ -249,7 +249,7 @@ }, { "cell_type": "markdown", - "id": "0be04bee", + "id": "dcbbe99a", "metadata": {}, "source": [ "With only the default arguments, the training error rate is\n", @@ -268,13 +268,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "1aee216b", + "id": "2fe92cb1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:14.752234Z", - "iopub.status.busy": "2023-08-07T00:19:14.752131Z", - "iopub.status.idle": "2023-08-07T00:19:14.755378Z", - "shell.execute_reply": "2023-08-07T00:19:14.755124Z" + "iopub.execute_input": "2023-08-21T02:29:44.977909Z", + "iopub.status.busy": "2023-08-21T02:29:44.977813Z", + "iopub.status.idle": "2023-08-21T02:29:44.980904Z", + "shell.execute_reply": "2023-08-21T02:29:44.980648Z" } }, "outputs": [ @@ -296,7 +296,7 @@ }, { "cell_type": "markdown", - "id": "e226e2e0", + "id": "e47c068c", "metadata": {}, "source": [ "This is closely related to the *entropy*, defined in (8.7).\n", @@ -311,13 +311,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "7404fab4", + "id": "823745dc", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:14.756770Z", - "iopub.status.busy": "2023-08-07T00:19:14.756680Z", - "iopub.status.idle": "2023-08-07T00:19:15.066948Z", - "shell.execute_reply": "2023-08-07T00:19:15.066318Z" + "iopub.execute_input": "2023-08-21T02:29:44.982460Z", + "iopub.status.busy": "2023-08-21T02:29:44.982347Z", + "iopub.status.idle": "2023-08-21T02:29:45.271601Z", + "shell.execute_reply": "2023-08-21T02:29:45.271198Z" }, "lines_to_next_cell": 0 }, @@ -342,7 +342,7 @@ }, { "cell_type": "markdown", - "id": "95052722", + "id": "d089b674", "metadata": {}, "source": [ "The most important indicator of `Sales` appears to be `ShelveLoc`.\n", @@ -359,13 +359,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "f9774fa0", + "id": "38ec5f13", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:15.071485Z", - "iopub.status.busy": "2023-08-07T00:19:15.070792Z", - "iopub.status.idle": "2023-08-07T00:19:15.077522Z", - "shell.execute_reply": "2023-08-07T00:19:15.076947Z" + "iopub.execute_input": "2023-08-21T02:29:45.273437Z", + "iopub.status.busy": "2023-08-21T02:29:45.273325Z", + "iopub.status.idle": "2023-08-21T02:29:45.276242Z", + "shell.execute_reply": "2023-08-21T02:29:45.275887Z" } }, "outputs": [ @@ -407,7 +407,7 @@ }, { "cell_type": "markdown", - "id": "b4bdd532", + "id": "3f6a131b", "metadata": {}, "source": [ "In order to properly evaluate the performance of a classification tree\n", @@ -424,13 +424,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "17d3bb25", + "id": "3959f39a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:15.082203Z", - "iopub.status.busy": "2023-08-07T00:19:15.080917Z", - "iopub.status.idle": "2023-08-07T00:19:15.097569Z", - "shell.execute_reply": "2023-08-07T00:19:15.096829Z" + "iopub.execute_input": "2023-08-21T02:29:45.277931Z", + "iopub.status.busy": "2023-08-21T02:29:45.277817Z", + "iopub.status.idle": "2023-08-21T02:29:45.284043Z", + "shell.execute_reply": "2023-08-21T02:29:45.283649Z" }, "lines_to_next_cell": 0 }, @@ -459,7 +459,7 @@ }, { "cell_type": "markdown", - "id": "890d1cd6", + "id": "8e226364", "metadata": {}, "source": [ " " @@ -467,7 +467,7 @@ }, { "cell_type": "markdown", - "id": "273ee930", + "id": "710f158a", "metadata": {}, "source": [ "Next, we consider whether pruning the tree might lead to improved\n", @@ -480,13 +480,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "0534db0a", + "id": "201c4690", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:15.101765Z", - "iopub.status.busy": "2023-08-07T00:19:15.101080Z", - "iopub.status.idle": "2023-08-07T00:19:15.110105Z", - "shell.execute_reply": "2023-08-07T00:19:15.109537Z" + "iopub.execute_input": "2023-08-21T02:29:45.286011Z", + "iopub.status.busy": "2023-08-21T02:29:45.285866Z", + "iopub.status.idle": "2023-08-21T02:29:45.288396Z", + "shell.execute_reply": "2023-08-21T02:29:45.288038Z" }, "lines_to_next_cell": 0 }, @@ -504,7 +504,7 @@ }, { "cell_type": "markdown", - "id": "666f4683", + "id": "4eed4457", "metadata": {}, "source": [ "We first refit the full tree on the training set; here we do not set a `max_depth` parameter, since we will learn that through cross-validation.\n" @@ -513,13 +513,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "32518104", + "id": "a8dc5c3a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:15.113991Z", - "iopub.status.busy": "2023-08-07T00:19:15.113456Z", - "iopub.status.idle": "2023-08-07T00:19:15.122601Z", - "shell.execute_reply": "2023-08-07T00:19:15.121808Z" + "iopub.execute_input": "2023-08-21T02:29:45.290090Z", + "iopub.status.busy": "2023-08-21T02:29:45.289979Z", + "iopub.status.idle": "2023-08-21T02:29:45.293957Z", + "shell.execute_reply": "2023-08-21T02:29:45.293696Z" }, "lines_to_next_cell": 0 }, @@ -543,7 +543,7 @@ }, { "cell_type": "markdown", - "id": "fa0ef12b", + "id": "78654680", "metadata": {}, "source": [ "Next we use the `cost_complexity_pruning_path()` method of\n", @@ -553,13 +553,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "72399ed8", + "id": "0cbe0d28", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:15.125858Z", - "iopub.status.busy": "2023-08-07T00:19:15.125392Z", - "iopub.status.idle": "2023-08-07T00:19:15.134122Z", - "shell.execute_reply": "2023-08-07T00:19:15.133558Z" + "iopub.execute_input": "2023-08-21T02:29:45.295541Z", + "iopub.status.busy": "2023-08-21T02:29:45.295458Z", + "iopub.status.idle": "2023-08-21T02:29:45.299182Z", + "shell.execute_reply": "2023-08-21T02:29:45.298807Z" }, "lines_to_next_cell": 0 }, @@ -573,7 +573,7 @@ }, { "cell_type": "markdown", - "id": "0ebebce3", + "id": "854bd2fe", "metadata": {}, "source": [ "This yields a set of impurities and $\\alpha$ values\n", @@ -583,13 +583,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "65729550", + "id": "ea649080", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:15.137575Z", - "iopub.status.busy": "2023-08-07T00:19:15.137059Z", - "iopub.status.idle": "2023-08-07T00:19:15.410424Z", - "shell.execute_reply": "2023-08-07T00:19:15.410124Z" + "iopub.execute_input": "2023-08-21T02:29:45.300868Z", + "iopub.status.busy": "2023-08-21T02:29:45.300771Z", + "iopub.status.idle": "2023-08-21T02:29:45.571746Z", + "shell.execute_reply": "2023-08-21T02:29:45.571364Z" }, "lines_to_next_cell": 0 }, @@ -617,7 +617,7 @@ }, { "cell_type": "markdown", - "id": "9df5690f", + "id": "8b8e7965", "metadata": {}, "source": [ "Let’s take a look at the pruned true." @@ -626,13 +626,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "f08fac89", + "id": "e005da14", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:15.412179Z", - "iopub.status.busy": "2023-08-07T00:19:15.412065Z", - "iopub.status.idle": "2023-08-07T00:19:16.193494Z", - "shell.execute_reply": "2023-08-07T00:19:16.193158Z" + "iopub.execute_input": "2023-08-21T02:29:45.573701Z", + "iopub.status.busy": "2023-08-21T02:29:45.573563Z", + "iopub.status.idle": "2023-08-21T02:29:46.379024Z", + "shell.execute_reply": "2023-08-21T02:29:46.378601Z" }, "lines_to_next_cell": 0 }, @@ -658,7 +658,7 @@ }, { "cell_type": "markdown", - "id": "ad338c5d", + "id": "923e44d2", "metadata": {}, "source": [ "This is quite a bushy tree. We could count the leaves, or query\n", @@ -668,13 +668,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "9d9f3282", + "id": "23324f7e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.195338Z", - "iopub.status.busy": "2023-08-07T00:19:16.195213Z", - "iopub.status.idle": "2023-08-07T00:19:16.197763Z", - "shell.execute_reply": "2023-08-07T00:19:16.197462Z" + "iopub.execute_input": "2023-08-21T02:29:46.381085Z", + "iopub.status.busy": "2023-08-21T02:29:46.380960Z", + "iopub.status.idle": "2023-08-21T02:29:46.383318Z", + "shell.execute_reply": "2023-08-21T02:29:46.383057Z" }, "lines_to_next_cell": 0 }, @@ -696,7 +696,7 @@ }, { "cell_type": "markdown", - "id": "c7026950", + "id": "a0d9bb88", "metadata": {}, "source": [ "The tree with 30 terminal\n", @@ -708,13 +708,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "acf1ff61", + "id": "6dcd8b37", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.199288Z", - "iopub.status.busy": "2023-08-07T00:19:16.199177Z", - "iopub.status.idle": "2023-08-07T00:19:16.206436Z", - "shell.execute_reply": "2023-08-07T00:19:16.206130Z" + "iopub.execute_input": "2023-08-21T02:29:46.385077Z", + "iopub.status.busy": "2023-08-21T02:29:46.384936Z", + "iopub.status.idle": "2023-08-21T02:29:46.392841Z", + "shell.execute_reply": "2023-08-21T02:29:46.392541Z" }, "lines_to_next_cell": 2 }, @@ -793,7 +793,7 @@ }, { "cell_type": "markdown", - "id": "18a49a50", + "id": "42c39ca1", "metadata": {}, "source": [ "Now 72.0% of the test observations are correctly classified, which is slightly worse than the error for the full tree (with 35 leaves). So cross-validation has not helped us much here; it only pruned off 5 leaves, at a cost of a slightly worse error. These results would change if we were to change the random number seeds above; even though cross-validation gives an unbiased approach to model selection, it does have variance.\n", @@ -803,7 +803,7 @@ }, { "cell_type": "markdown", - "id": "29a0f063", + "id": "94ac4462", "metadata": {}, "source": [ "## Fitting Regression Trees\n", @@ -814,13 +814,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "852e2e4e", + "id": "0459d3a9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.208086Z", - "iopub.status.busy": "2023-08-07T00:19:16.207971Z", - "iopub.status.idle": "2023-08-07T00:19:16.215413Z", - "shell.execute_reply": "2023-08-07T00:19:16.215122Z" + "iopub.execute_input": "2023-08-21T02:29:46.395016Z", + "iopub.status.busy": "2023-08-21T02:29:46.394693Z", + "iopub.status.idle": "2023-08-21T02:29:46.408492Z", + "shell.execute_reply": "2023-08-21T02:29:46.408187Z" } }, "outputs": [], @@ -834,7 +834,7 @@ }, { "cell_type": "markdown", - "id": "1c386d58", + "id": "2b09cc1f", "metadata": {}, "source": [ "First, we split the data into training and test sets, and fit the tree\n", @@ -844,13 +844,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "2e09e93b", + "id": "34bf2864", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.216947Z", - "iopub.status.busy": "2023-08-07T00:19:16.216850Z", - "iopub.status.idle": "2023-08-07T00:19:16.219599Z", - "shell.execute_reply": "2023-08-07T00:19:16.219309Z" + "iopub.execute_input": "2023-08-21T02:29:46.411065Z", + "iopub.status.busy": "2023-08-21T02:29:46.410850Z", + "iopub.status.idle": "2023-08-21T02:29:46.413541Z", + "shell.execute_reply": "2023-08-21T02:29:46.413268Z" } }, "outputs": [], @@ -866,7 +866,7 @@ }, { "cell_type": "markdown", - "id": "f60141a3", + "id": "dc5ddbb2", "metadata": {}, "source": [ "Having formed our training and test data sets, we fit the regression tree." @@ -875,19 +875,19 @@ { "cell_type": "code", "execution_count": 20, - "id": "74aa3bf0", + "id": "dd0dfd8a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.221232Z", - "iopub.status.busy": "2023-08-07T00:19:16.221142Z", - "iopub.status.idle": "2023-08-07T00:19:16.496476Z", - "shell.execute_reply": "2023-08-07T00:19:16.496097Z" + "iopub.execute_input": "2023-08-21T02:29:46.415108Z", + "iopub.status.busy": "2023-08-21T02:29:46.414996Z", + "iopub.status.idle": "2023-08-21T02:29:46.704739Z", + "shell.execute_reply": "2023-08-21T02:29:46.704318Z" } }, "outputs": [ { "data": { - "image/png": "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T82aNUtQBgAAHAnFFgDgVP79e7Vxu63//vhpvL29dfz4cf3888+aPHmyjh49qipVqqhjx47KmjVrgnds/fz8rC/8dObMGWXOnPmpj7du3TpVrFhRadKksV4W9yJRt2/fVoMGDVSyZEnrdUFBQVqyZMlzPwcAABwRxRYAgBdgMpnk7e0tb29vxcTEaP369fr777+VNWvWBO/Y+vn5aePGjTKbzYqOjra+4vGGDRt05coV66nHc+fOVceOHeMd27dvX+3du1cpUqTQqFGjlDJlSknS4cOH5eHhobx58ybiZwsAgH0wWSwWi9EhAADO58CBAypevLj279/P+9g6AL6fAAAj8arIAAAAAAC7RrEFAAAAANg1ii0AAAAAwK5RbAEA+JfAwEAFBQUZHSNBIiMjVaVKFVWqVEnlypXTr7/+Gu/6oUOHytPT84njoqOjra+wbDab5e7ursOHD0uSfvvtN1WtWlW+vr768MMPJT16/99MmTJZb79q1aqk/+QAAEggXhUZAOA0Hj58+MTb/ST148S9RuN/vZXQy2abN2+eypcvr2HDhmnHjh0aMWKEli5dKkm6cOGCTp48+dTjUqVKpbCwMEnS+fPnVbVqVb333nuKjo5W7969tWTJknjv9ys9es/fzZs3v3BGAACSGju2AACbEBERofLly8vHx0dms1mRkZH6+++/5efnpypVqqhz587y9/eXJLVt21Y7duyQJIWFhal9+/aSpO+++06+vr4qUaKEBg8ebL3vnDlzqkuXLqpSpYpu3rypxo0by9fXVz4+Pjpx4oQkafny5SpatKhq166t/fv3PzNnTEyMOnToIF9fX3l7e2vXrl3WTJ06dVKtWrUUHBwsT09PDRo0SH5+fjp//ryaNm2qSpUqqXz58tb7//cxL6NgwYK6deuWJOn69et67bXXrNcFBgbG+zo8S1BQkFq0aCFJ2r17t9KlS6fWrVvLbDbHew/e3377TRUqVFDLli115cqVl8oLAEBSYMcWAGATQkJCVLlyZQUGBkp6tNPZs2dPtWvXTi1atNCMGTOsJfRZ2rdvr08//VQWi0XlypVThw4dlDNnTl28eFF9+vRRrly51L9/f9WvX19NmzbVkSNH1LdvXy1btkz9+/fXnj17lC5dOvn6+j7zMaZPn668efPqxx9/1JUrV1S7dm1ruc2ePbsmT54sSercubOqV6+uL774Qt99950KFCighQsXKjw8XG3atNHu3bufOOZxnTt31tGjR+NdljZt2nhFU5K8vLw0ZMgQFSlSRDdu3NC2bdskSYcOHZIkFS5c+LlfM+nRru/atWslPdrlPXDggA4ePCiLxaLy5curYsWKevPNN3XmzBmlS5dOM2bMUO/evTV79uz/vG8AAJIDxRYAYBMaN26skSNHqkWLFsqZM6cCAwMVHh6ubt26SZLKlSun+fPnS4p/Wu/jb8e+dOlSTZs2TSaTSWfPntX58+eVM2dOZc+eXbly5ZIkHT58WFu3btUPP/xgva8rV67otddes556W6ZMmWfmPHz4sHbu3KkNGzZIkm7cuGG9ztvb2/qxq6urypUrJ0k6fvy4GjRoIEnKnz+/rl279tRjHjdp0qTnfLX+z5gxY1S/fn317t1bu3fvVpcuXbR+/XoNHTpUEyZM+M/j9+/fr6xZs+qdd96RJGXOnFllypRRxowZJUnvv/++Tp06JS8vL7m5uUmSWrRoobFjxyYoHwAAyYFiCwCwCS4uLho5cqQkqV27dgoODla+fPn0yy+/KG/evNYdTulR+Tp37pwkae/evdbLhwwZouPHj8vNzU3ly5e3lt7Hf3e1cOHCKlu2rOrVqyfp0Ysoubq66u+//9atW7eULl067dmzR0WKFHlqzsKFC8vT01M9e/a0Hh/n8ccxmUzWAl6gQAFt375d/v7+Cg8PV5YsWZ56zOMSumMrSdmyZbP+P65onz592nqK9l9//aUuXbpo4sSJTxw7d+5ctWrVyvrnMmXKaNCgQYqJiZHFYtGxY8eUM2dO3bx501r8Q0NDlS9fvqfmBgDACBRbAIBNWLNmjcaPHy9XV1e5ubnJ29tbJUqUUPPmzTVz5sx4RbN9+/Zq3ry55s+fr9y5c1svr1+/vsqXL68CBQoobdq0T32cQYMG6ZNPPtH48eMlSQEBAerXr5++/PJLVaxYUTly5FDmzJmfmbNDhw7q2rWrfHx8JEnFihX7z93LDh06qG3btqpYsaIePHhgfeznSeiObbdu3dSqVSvNnDlT9+7d0+jRoyXJ+grHkuTp6WkttaNGjVKNGjX03nvv6cGDB1qxYoWGDx9uvW2GDBnUu3dv+fj4KDo6Wt27d1eWLFmst0uXLp3c3Nw0derUBOUDACA5mCyPn8MFAEAyOXDggIoXL679+/fLy8vrP28fERGh9u3b86q8NupFv58AACQmdmwBAHiG1q1bW095lh6dAr1s2TIDEwEAgKeh2AIA7EKuXLmSfbd2zpw5yfp4AADg5fA+tgAAvAJPT89keZwZM2bI29tbFStWVK1atazvXdu2bVsVK1ZMZrNZ9evXj3dMdHS0PD09NWLEiGTJCACAUSi2AADYgZYtW2rHjh3atm2bihUrprlz51qvGz9+vMLCwp44TXrixIkqVKhQckcFACDZUWwBAA4pIiJC5cuXl4+Pj8xmsyIjI7Vt2zb5+PioQoUKql27tu7duydJMpvN6tmzpwICAmQ2mzV//nwFBASoaNGiOnHihPU2Xbp0UeXKleXn56fLly/He7yYmBh16NBBvr6+8vb21q5duyRJI0aMUKlSpeTr6/tK7/2aKlUq68d37txR4cKFrX/u1auXKlSoYH2fX+nR++tu3rz5iV1cAAAcEcUWAOCQQkJCVLlyZYWGhiosLEwZM2ZU8eLFFRoaqu3bt6tgwYJatGiR9faVKlVScHCwPD09tXfvXgUHB6t3796aMWOG9TalS5fWpk2b1KJFC3311VfxHm/69OnKmzevQkJCtHz5cvXq1UuSNG/ePIWGhiokJEQ9evR4Imf9+vVlNpvj/Rf3/rP/NnnyZBUpUkQ7duywFtuvv/5ae/bs0erVq/XNN9/o5MmTkqQvvvhC/fr1e6WvIQAA9oIXjwIAOKTGjRtr5MiRatGihXLmzKnAwEAdOXJEgwcP1v379/X3338rffr01tsXL15ckpQ9e3blzZvX+vHWrVuttylXrpz1/8uXL4/3eIcPH9bOnTu1YcMGSY92TCVpwoQJ6tKlix48eKBPPvlE3t7e8Y57kVdZ7tSpkzp16qRRo0bpq6++0pgxY5Q1a1ZJUsaMGRUQEKCDBw8qZcqUOnv2rCpWrKgzZ84k+P4BALBXFFsAgENycXHRyJEjJUnt2rVTcHCwpk2bps8//1xly5ZV37599fhbuZtMpqd+/Phtdu/eLU9PT+3evVv58+eP93iFCxeWp6enevbsKenRCzdJUtmyZeXn56dz586pXr162r9/f7zj6tevr+vXr8e7zNPTU9OmTYt3WVRUlNzd3SVJmTJlUlRUlKRHBTpjxoyKiYnRjh071KRJEx04cEAXL15U1apVdeHCBd2/f19FihRR3bp1E/4FBADAjlBsAQAOac2aNRo/frxcXV3l5uYmb29v3blzRx999JEKFCig9OnTx9uxTYgDBw5o9uzZevjwoRYsWBDvug4dOqhr167y8fGRJBUrVkxjx45VvXr1FBUVpaioKHXp0uWJ+0zoju3w4cO1c+dOSY/eTzfuFOkmTZrozp07iomJUdOmTfXBBx/ogw8+sP5u7axZs3T+/HlKLQDAoZksjy9FAwCQTA4cOKDixYtr//798vLyMjrOfzKbzQoKClL27NmNjmKT7O37CQBwLLx4FAAAAADArnEqMgAACRAWFmZ0BAAA8Azs2AIAAAAA7BrFFgDg9CIiIuTv759sjxcYGKjSpUurfPny6t69u/WVlz/++GOVKVNGZcqU0ahRo5447ty5c/He7zZlypSKjIy0Xh8eHq6UKVNqx44dkh7tMr/55pvW2+/Zsyd5PkEAAJIZpyIDAJDMmjdvrsDAQEmP3m83JCREfn5+6t27t/Lly6fY2FiVL19ejRo1sr6nriS988471lOid+7cqREjRihTpkzW6wMDA2U2m+M9Vo0aNZ546yAAABwNO7YAAIfUu3dvLV26VJL04MEDvf/++4qJidHAgQPl6+srLy8vTZ48+Ynj2rZtG2/Hs3379pKk33//Xf7+/vL19VWjRo109+7dl86WL18+68dubm5ydXWNd7mLi4tSpEhhvfxp5syZo1atWln/vG3bNuXKlUtvv/12vNtt3LhR3t7e6ty58ytlBgDAllFsAQAOqW3btpo9e7YkKTg4WL6+vkqZMqUGDRqkkJAQ7dq1S+PGjVNMTEyC7q9z586aMWOGQkJCZDabNXXq1HjXR0dHxztNOO6/wYMHP/M+w8LCdP78eVWsWDHe5UFBQcqRI4dy5cr11OOio6O1fv1663vTWiwWjRw5Uv369Yt3u+LFi+vEiRPasWOHsmbNqtGjRyfocwUAwN5wKjIAwCEVKVJEV65c0eXLlzV79mwNGDBAkjR58mStWLFCrq6uunz5si5fvhzvOJPJZP348bd6P3LkiFq3bi1Jun///hOn/KZKleqFXjn5wIEDGjBggNasWSMXl/9bZ16/fr3mzJmjVatWPfPY1atXy9fXV6lTp5YkLVy4UP7+/sqYMWO826VLl876ccuWLdWzZ88E5wMAwJ5QbAEADqtFixaaOHGiIiIiVKxYMUVGRmrmzJk6dOiQYmJilD9//njlVZIyZ86sc+fOSZL27t1rvbxIkSJasGCB3nzzTUmPdk0fFx0drSpVqjyRwdvbWyNGjIh32bFjx/Txxx9rxYoVypIli/Xybdu2acSIEVq3bp3c3d2f+XnNnTtX3bt3t/754MGD2rdvnzZv3qzDhw/r+PHjmj9/vrJkyaIMGTJIkkJCQpQ/f/7nfr0AALBXFFsAgMNq3ry5cuTIoeHDh0uSMmbMqEKFCsnb21uFChWKVyrjtG/fXs2bN9f8+fOVO3du6+UTJ05U27Ztracu9+3bV1WrVrVe/yI7tp06ddKtW7fUsmVLSVKvXr1Uu3ZttW7dWunTp1edOnUkSWPGjFGpUqXUo0cPDRo0SNmyZdO1a9d06NCheDvGj59i3LZtW7Vv31558uTRpEmTNHPmTKVOnVqZM2fWjBkzEvaFAwDAzpgs/16qBgAgGRw4cEDFixfX/v375eXlZXQcvCK+nwAAI/HiUQAAAAAAu0axBQAAAADYNYotAAAAAMCu8eJRAABDHTt2zOgISAR8HwEARqLYAgAMkTVrVnl4eFhfGRj2z8PDQ1mzZjU6BgDACfGqyAAAw5w7d05Xr1415LEPHz6sLl26KG/evBo/frzSpk1rSI5XdefOHXXt2lVnzpzRpEmTVKRIEcOyZM2aVe+8845hjw8AcF4UWwCA09m9e7cCAgL03nvvaf369UqXLp3RkV7J7du3VbVqVf3+++/auHGjSpcubXQkAACSFS8eBQBwKrt27VKVKlX0/vvvO0SplaR06dJpw4YNeu+991S5cmXt2rXL6EgAACQrii0AwGns3LlTVapUUdGiRR2m1MZJly6d1q9fr6JFiyogIEA7d+40OhIAAMmGYgsAcAo///yzAgIC5OXlpXXr1tnt79Q+T7p06bRu3ToVK1ZMAQEB+vnnn42OBABAsqDYAgAc3vbt2xUQEKASJUo4bKmNkzZtWq1du1bFixdX1apVtWPHDqMjAQCQ5Ci2AACHtm3bNlWrVk2lSpXSmjVrlCZNGqMjJbm4cluiRAlVrVpV27dvNzoSAABJimILAHBYW7duVfXq1VW6dGmnKbVx0qRJo7Vr16pUqVKqVq2atm3bZnQkAACSDMUWAOCQwsLCVL16dZUpU0arV6+Wh4eH0ZGSnYeHh9asWaPSpUurWrVq2rp1q9GRAABIEhRbAIDDCQ0NVfXq1VW+fHmnLbVxPDw8tHr1apUrV07Vq1dXWFiY0ZEAAEh0FFsAgEMJCQlRjRo1VKFCBa1cuVKpU6c2OpLhPDw8tGrVKpUvX17Vq1dXSEiI0ZEAAEhUFFsAgMPYvHmzatSooYoVK2rFihWU2sekTp1aK1euVIUKFVSzZk1t2bLF6EgAACQaii0AwCFs2rRJtWrVktlsptQ+Q1y5rVSpkmrWrKnNmzcbHQkAgERBsQUA2L2NGzeqdu3a8vX11fLly+Xu7m50JJvl7u6u5cuXy8fHR7Vq1dKmTZuMjgQAwCuj2AIA7FpwcLBq164tPz8/LVu2jFKbAO7u7lq2bJl8fX1Vq1YtBQcHGx0JAIBXQrEFANitDRs2qE6dOqpcubKWLl0qNzc3oyPZjbhy6+/vrzp16mjDhg1GRwIA4KVRbAEAdmndunWqU6eOqlSpoiVLllBqX4Kbm5uWLl2qKlWqqG7dulq/fr3RkQAAeCkUWwCA3Vm7dq3q1aunatWqUWpfkZubmxYvXqyAgADVrVtX69atMzoSAAAvjGILALAra9asUb169VS9enUtWrRIqVKlMjqS3Ysrt9WqVVO9evW0Zs0aoyMBAPBCKLYAALuxevVq1a9fXzVr1qTUJrJUqVJp0aJFqlGjhurXr6/Vq1cbHQkAgASj2AIA7MLKlSvVoEED1a5dWz/99JNSpkxpdCSHkypVKv3000+qVauWGjRooFWrVhkdCQCABKHYAgBs3ooVK9SwYUPVqVNHCxYsoNQmoZQpU2rhwoWqXbu2GjZsqJUrVxodCQCA/0SxBQDYtOXLl6tRo0aqV6+e5s+fT6lNBilTptSCBQtUt25dNWzYUMuXLzc6EgAAz0WxBQDYrKVLl6px48Zq0KABpTaZpUyZUvPmzVP9+vXVuHFjLVu2zOhIAAA8E8UWAGCTlixZoiZNmqhhw4YKCgpSihQpjI7kdOLKbcOGDdW4cWMtXbrU6EgAADwVxRYAYHMWL16spk2bqkmTJpo7dy6l1kApUqTQ3Llz1bhxYzVp0kSLFy82OhIAAE/gJwUAgE356aef1KJFCzVt2lSzZs2i1NqAFClSaM6cOTKZTGrWrJksFosaN25sdCwAAKz4aQEAYDMWLlyoFi1aqEWLFpo5c6ZcXV2NjoT/L67curi4qHnz5rJYLGrSpInRsQAAkESxBQDYiPnz56tVq1Zq2bKlZsyYQam1Qa6urpo1a5ZMJpOaN2+u2NhYNWvWzOhYAABQbAEAxps3b55at26tVq1aafr06ZRaG+bq6qqZM2fKZDKpZcuWslgsat68udGxAABOjmILADBUUFCQ2rRpozZt2ujHH3+k1NoBV1dXzZgxQy4uLmrVqpViY2PVsmVLo2MBAJwYxRYAYJg5c+aobdu2+vDDD/Xjjz/KxYUX67cXrq6umj59ukwmk9q0aSOLxaJWrVoZHQsA4KQotgAAQ8yePVsffvihPvroI02ZMoVSa4dcXFw0bdo0ubi4qE2bNoqNjVWbNm2MjgUAcEIUWwBAsps5c6Y++ugjtW/fXj/88AOl1o65uLho6tSpMplM+vDDD2WxWNS2bVujYwEAnAzFFgCQrGbMmKH27dvr448/1qRJkyi1DsDFxcW6696uXTtZLBZ9+OGHRscCADgRii0AINlMmzZNHTp00CeffKKJEydSah2Ii4uLJk+eLJPJpI8++kixsbH66KOPjI4FAHASFFsAQLL48ccf9fHHH6tz586aMGGCTCaT0ZGQyFxcXKy78O3bt5fFYlH79u2NjgUAcAIUWwBAkps6dao6duyoLl26aPz48ZRaB+bi4qKJEyfKZDKpQ4cOio2N1ccff2x0LACAg6PYAgCS1A8//KBOnTqpW7du+u677yi1TsBkMmnChAlycXFRx44dZbFY1LFjR6NjAQAcGMUWAJBkJk2apC5duujTTz/VuHHjKLVOxGQy6fvvv5eLi4s++eQTxcbGqlOnTkbHAgA4KIotACBJTJw4UV27dlWPHj00duxYSq0TMplM+vbbb2UymdS5c2dZLBZ17tzZ6FgAAAdEsQUAJLrx48ere/fu6tmzp7755htKrRMzmUzW3fouXbooNjZWXbt2NToWAMDBUGwBAInq+++/16effqrPPvtMX331FaUWMplMGjt2rFxcXNStWzdZLBZ169bN6FgAAAdCsQUAJJpvv/1WPXv2VJ8+fTR69GhKLaxMJpO+/vprubi4qHv37oqNjdWnn35qdCwAgIOg2AIAEsW4cePUq1cv9e3bV6NGjaLU4gkmk0ljxoyRyWRSjx49FBsbq549exodCwDgACi2AIBX9s0336h3797q37+/Ro4cSanFM5lMJo0ePVouLi7q1auXLBaLevXqZXQsAICdo9gCAF7J119/rT59+mjgwIEaMWIEpRb/yWQy6csvv5SLi4s+++wzWSwWffbZZ0bHAgDYMYotAOCljRkzRv369dOgQYP0v//9j1KLBDOZTPriiy9kMpnUu3dvxcbGqk+fPkbHAgDYKYotAOCljB49Wv3799eQIUP0+eefU2rxwkwmk0aMGCEXFxf17dtXFotFffv2NToWAMAOUWwBAC/syy+/1MCBAzVs2DAFBgYaHQd2zGQyafjw4XJxcVG/fv0UGxur/v37Gx0LAGBnKLYAgBfyxRdfaPDgwQoMDNSwYcOMjgMHYDKZrLv+AwYMUGxsrAYOHGh0LACAHaHYAgASbMSIEdZTj4cOHWp0HDiYwMBAmUwmDRo0SBaLRYMGDTI6EgDATlBsAQAJMnz4cA0bNkzDhw/XkCFDjI4DBzVs2DCZTCYNHjxYsbGx/F0DACQIxRYA8J8CAwP1+eefa8SIEeyiIckNHTpULi4uGjJkiGJjYznlHQDwnyi2AIBnslgsCgwM1PDhwzVy5EgNGDDA6EhwEoMHD5aLi4v1tGRepAwA8DwUWwDAU1ksFg0bNkz/+9//9OWXX/JKtUh2AwcOlMlk0sCBA63llreVAgA8DcUWAPAEi8WiIUOG6IsvvtDo0aN5b1EYZsCAAXJxcVH//v0VGxur4cOHU24BAE+g2AIA4rFYLBo8eLBGjhypr776Sr179zY6Epxcv3795OLior59+8piseh///sf5RYAEA/FFgBgZbFYNHDgQI0aNUpff/21PvvsM6MjAZKkPn36yGQyqU+fPoqNjdUXX3xBuQUAWFFsAQCSHpXa/v37a8yYMRo7dqx69uxpdCQgnt69e8vFxUWfffaZYmNj9eWXX1JuAQCSKLYAAD0qtf369dNXX32lcePGqUePHkZHAp6qV69eMplM6tWrlywWi0aNGkW5BQBQbAHA2VksFvXp00fffPONvvvuO3Xv3t3oSMBz9ezZUy4uLurRo4diY2M1ZswYyi0AODmKLQA4MYvFos8++0zjxo3T+PHj1bVrV6MjAQny6aefysXFRd27d1dsbKy+/vpryi0AODGKLQA4KYvFol69eunbb7/VhAkT1KVLF6MjAS+kW7duMplM6tatmywWi7755hvKLQA4KYotADghi8WiHj166Pvvv9fEiRPVuXNnoyMBL6Vr164ymUzq2rWrYmNjNW7cOMotADghii0AOBmLxaJPP/1U48eP1+TJk/XJJ58YHQl4JV26dJGLi4s6d+4si8Wib7/9lnILAE6GYgsATsRisahbt26aOHGipkyZoo8//tjoSECi6NSpk1xcXPTJJ58oNjZW33//PeUWAJwIxRYAnERsbKy6du2qyZMna+rUqerQoYPRkYBE1bFjR5lMJnXs2FGxsbGaMGEC5RYAnATFFgCcQGxsrLp06aIpU6Zo2rRp+uijj4yOBCSJjz/+WC4uLurQoYMsFosmTJggFxcXo2MBAJIYxRYAHFxsbKw6d+6sqVOnatq0aWrXrp3RkYAk1b59e5lMJmu5nThxIuUWABwcxRYAHFhsbKw++eQTTZs2TdOnT9eHH35odCQgWXz00UcymUxq3769YmNjNXnyZMotADgwii0AOKjY2Fh17NhR06dP18yZM9WmTRujIwHJql27dnJxcVG7du0UGxurKVOmUG4BwEFRbAHAAcXGxqpDhw6aOXOmZs2apdatWxsdCTBE27ZtZTKZ9OGHH8pisWjq1KmUWwBwQBRbAHAwDx8+VPv27TVnzhzNmTNHLVu2NDoSYKg2bdrIxcVFbdq0UWxsrKZNm0a5BQAHQ7EFAAfy8OFDffTRR5o7d67mzJmjFi1aGB0JsAmtWrWSyWRSmzZtZLFYNG3aNLm6uhodCwCQSCi2AOAgHj58qHbt2ikoKEhz585V8+bNjY4E2JSWLVvKxcVFrVq1ksVi0fTp0ym3AOAgKLYA4AAePnyotm3bav78+Zo3b56aNm1qdCTAJjVv3lwmk0ktW7ZUbGysZs6cSbkFAAdAsQUAO/fw4UO1adNGCxcu1Pz589WkSROjIwE2rVmzZnJxcVGLFi1ksVg0a9Ysyi0A2DmKLQDYsQcPHqhNmzb66aeftGDBAjVq1MjoSIBdaNKkiUwmk5o3b67Y2FjNnj1bKVLwYxEA2Cv+BQcAO/XgwQO1atVKixcv1sKFC9WwYUOjIwF2pXHjxjKZTGrWrJksFovmzJlDuQUAO8W/3gBghx48eKCWLVtq6dKl+umnn9SgQQOjIwF2qVGjRnJxcVHTpk1lsVg0d+5cyi0A2CGTxWKxGB0CAJBwMTExatGihZYvX65FixapXr16RkcC7N6yZcvUpEkT1a9fX/PmzaPcAoCdodgCgB2JiYlR8+bNtWLFCi1evFh169Y1OhLgMJYvX67GjRurXr16mjdvnlKmTGl0JABAAlFsAcBOxMTEqFmzZlq1apUWL16sOnXqGB0JcDgrV65Uo0aNVLt2bS1YsIByCwB2gmILAHYgOjpaTZs21Zo1a7R06VLVqlXL6EiAw1q1apUaNmyoWrVqaeHChZRbALADFFsAsHHR0dFq0qSJ1q1bp6VLl6pmzZpGRwIc3urVq9WgQQPVrFlTCxcuVKpUqYyOBAB4DootANiw6OhoNW7cWOvXr9eyZctUo0YNoyMBTmPNmjVq0KCBqlWrpkWLFlFuAcCGUWwBwEbdv39fjRo1UnBwsJYvX67q1asbHQlwOuvWrVO9evVUtWpVLV68mHILADaKYgsANuj+/ftq2LChNm3apBUrVqhq1apGRwKc1vr161WvXj1VqVJFixcvlpubm9GRAAD/QrEFABtz//59NWjQQJs3b9bKlSsVEBBgdCTA6W3YsEF169aVv7+/li5dSrkFABvjYnQAAMD/iYqKUv369bVlyxatWrWKUgvYiKpVq2rlypXavHmz6tevr6ioKKMjAQAew44tANiIqKgo1atXT2FhYVq1apUqV65sdCQA/7Jx40bVqVNHPj4+WrZsmdzd3Y2OBAAQxRYAbEJUVJTq1q2rbdu2afXq1fLz8zM6EoBn2Lx5s2rVqiWz2azly5dTbgHABlBsAcBg9+7dU926dbV9+3atWbNGvr6+RkcC8B+2bNmiWrVqqUKFClqxYoVSp05tdCQAcGoUWwAw0N27d1WnTh39/PPPWrt2rXx8fIyOBCCBQkJCVLNmTXl7e2vlypWUWwAwEMUWAAxy9+5d1a5dW7t27dLatWtlNpuNjgTgBYWFhalGjRoqV66cVq5cKQ8PD6MjAYBTotgCgAHu3r2rWrVqaffu3Vq3bp0qVapkdCQAL2nr1q2qXr26ypYtq1WrVlFuAcAAvN0PACSzf/75RzVr1tQvv/yi9evXU2oBO1epUiWtX79eu3fvVs2aNfXPP/8YHQkAnA47tgCQjOJK7b59+7R+/Xp5e3sbHQlAItm+fbuqVaumkiVLas2aNUqTJo3RkQDAaVBsASCZ3LlzRzVq1NCBAwe0YcMGlS9f3uhIABLZjh07VK1aNRUvXlxr166l3AJAMqHYAkAyuHPnjqpXr66DBw9qw4YNKleunNGRACSRn3/+WVWrVpWXl5fWrl2rtGnTGh0JABwexRYAktjt27dVvXp1/fbbbwoODlbZsmWNjgQgie3cuVNVq1ZV0aJFtW7dOsotACQxii0AJKHbt2+rWrVqOnz4sIKDg1WmTBmjIwFIJrt27VJAQIA++OADrVu3TunSpTM6EgA4LIotACSRW7duqVq1avr999+1ceNGlS5d2uhIAJLZ7t27FRAQoCJFimj9+vVKnz690ZEAwCFRbAEgCdy6dUtVq1bV0aNHtXHjRpUqVcroSAAMsmfPHlWpUkWFChXShg0bKLcAkAQotgCQyG7evKmqVavq2LFj2rRpk0qWLGl0JAAG27t3rypXrqyCBQtqw4YNypAhg9GRAMChUGwBIBHduHFDAQEBOnHihDZt2qQSJUoYHQmAjdi3b58qV66s/PnzKzg4mHILAImIYgsAieTGjRuqUqWKTp06pU2bNql48eJGRwJgY/bv3y9/f3/ly5dPwcHBypgxo9GRAMAhUGwBIBFERkaqSpUqOn36tDZv3iwvLy+jIwGwUQcOHJC/v788PT21ceNGyi0AJAIXowMAgL2LjIxU5cqVdebMGW3ZsoVSC+C5vLy8tGXLFp0+fVqVK1dWZGSk0ZEAwO6xYwsAr+D69euqXLmyIiIitGXLFhUtWtToSADsxMGDB+Xn56fcuXNr06ZNypQpk9GRAMBusWMLAC/p+vXr8vf31x9//KGQkBBKLYAXUrRoUYWEhCgiIkL+/v66fv260ZEAwG5RbAHgJVy7dk1+fn76888/FRISog8++MDoSADs0AcffKCQkBCdO3dOfn5+unbtmtGRAMAucSoyALygq1evyt/fXxcuXFBISIjee+89oyMBsHOHDx+Wr6+vsmfPrs2bNytLlixGRwIAu8KOLQC8gKtXr8rPz08XL15UaGgopRZAonjvvfcUGhqqCxcuyM/PT1evXjU6EgDYFYotACTQlStX5Ovrq0uXLik0NFRFihQxOhIAB1KkSBGFhobqr7/+kq+vr65cuWJ0JACwGxRbAEiAy5cvy9fXV5cvX1ZoaKgKFy5sdCQADqhw4cIKDQ3V33//LT8/P8otACQQxRYA/kNcqb1y5YpCQ0NVqFAhoyMBcGCFChVSaGhovAU1AMDz8eJRAPAcf//9t3x9fXX9+nWFhoaqQIECRkcC4CSOHz8uHx8fZc6cWSEhIXr99deNjgQANosdWwB4hkuXLsnHx0eRkZEKCwuj1AJIVgUKFFBoaKiuX78uX19f/f3330ZHAgCbRbEFgKf466+/5OPjo5s3byosLEz58+c3OhIAJ1SgQAGFhYUpMjJSPj4+unTpktGRAMAmUWwB4F/iSu3t27cVFhamfPnyGR0JgBPLnz+/wsLCdPPmTfn4+Oivv/4yOhIA2Bx+xxYAHnPx4kX5+Pjon3/+UVhYmDw9PY2OBACSpJMnT8rHx0dp06ZVaGio3nzzTaMjAYDNYMcWAP6/CxcuyGw26+7du5RaADbn3XffVVhYmP755x+ZzWZdvHjR6EgAYDMotgAg6fz58zKbzYqKiqLUArBZnp6eCgsL071792Q2m3XhwgWjIwGATeBUZABOL67UxsTEKDQ0VHny5DE6EgA815kzZ2Q2m+Xm5qbQ0FBlz57d6EgAYCh2bAE4tT///FNms1kPHjxQWFgYpRaAXciTJ4/CwsIUHR0ts9msP//80+hIAGAoii0Ap3Xu3Ll4pTZ37txGRwKABIsrtw8ePJDZbNa5c+eMjgQAhqHYAnBKf/zxh8xms2JjY7V161blypXL6EgA8MJy586tsLAwxcbGUm4BODWKLQCnExERIbPZLEkKCwtTzpw5jQ0EAK8gV65cCgsLk8Vikdls1h9//GF0JABIdhRbAE4lrtS6uLhQagE4jJw5c2rr1q2SJLPZrIiICGMDAUAyo9gCcBpnz55VpUqVlCJFCoWFhemdd94xOhIAJJp33nlHW7dulYuLi8xms86ePWt0JABINhRbAE7hzJkzqlSpklKmTKmwsDDlyJHD6EgAkOhy5MihsLAwpUiRQmazWWfOnDE6EgAkC4otAId3+vRpmc1mubu7a+vWrbzfIwCHFlduU6VKRbkF4DQotgAc2qlTp6ylNjQ0VG+//bbRkQAgyWXPnl1hYWFyd3dXpUqVdPr0aaMjAUCSotgCcFgnT56U2WyWh4eHwsLCKLUAnMrbb7+t0NBQeXh4qFKlSjp16pTRkQAgyVBsATikuFKbNm1ahYWF6a233jI6EgAku7hymzZtWpnNZp08edLoSACQJCi2ABxOeHi4KlWqpPTp0yssLExvvvmm0ZEAwDBvvfWWQkNDlS5dOpnNZp04ccLoSACQ6Ci2ABxKeHi4fHx8lDFjRoWGhuqNN94wOhIAGO7NN99UaGio0qdPL7PZrPDwcKMjAUCiotgCcBjHjx+X2WxWpkyZKLUA8C9vvPGGwsLClClTJvn4+Oj48eNGRwKAREOxBeAQjh07JrPZrCxZsig0NFSvv/660ZEAwOa8/vrrCgkJsZbbY8eOGR0JABIFxRaA3Tt69KjMZrOyZcumkJAQvfbaa0ZHAgCb9frrrys0NFRZsmSRj4+Pjh49anQkAHhlFFsAdu3IkSPy8fGx7kJQagHgv7322msKDQ3Va6+9RrkF4BAotgDs1u+//y4fHx+98cYbCgkJUbZs2YyOBAB2I1u2bNqyZYtef/11mc1m/f7770ZHAoCXRrEFYJcOHz4sHx8fvfXWW9qyZYuyZs1qdCQAsDtxv8Lx5ptvytfXl3ILwG5RbAHYnUOHDsnX11fZs2en1ALAK8qaNatCQkL09ttvy8fHR4cPHzY6EgC8MIotALvy22+/ydfXVzly5NCWLVuUJUsWoyMBgN3LkiWLNm/erBw5csjHx0e//fab0ZEA4IVQbAHYjYMHD8rX11c5c+bU5s2blTlzZqMjAYDDiCu377zzjvz8/Ci3AOwKxRaAXfj111/l5+en3LlzU2oBIIlkzpxZmzdvVq5cueTr66uDBw8aHQkAEoRiC8DmHThwQH5+fsqTJ482b96sTJkyGR0JABxW5syZtWnTJuXJk0e+vr46cOCA0ZEA4D9RbAHYtP3798vPz0+enp7atGmTMmbMaHQkAHB4mTJl0qZNm+Tp6Sl/f3/KLQCbR7EFYLP27dsnf39/5c+fn1ILAMksY8aM2rhxo9599135+flp//79RkcCgGei2AKwSXv37pW/v78KFCig4OBgZciQwehIAOB04spt/vz55e/vr7179xodCQCeimILwObs2bNH/v7+KlSoEKUWAAyWIUMGBQcHq0CBAqpcubL27NljdCQAeALFFoBN+eWXX1S5cmUVKVJEGzZsUPr06Y2OBABOL67cFipUSJUrV9Yvv/xidCQAiIdiC8Bm7Nq1S5UrV9Z7771HqQUAG5M+fXoFBwerSJEiqlKlinbv3m10JACwotgCsAk7d+5UQECAPvjgA61fv17p0qUzOhIA4F/SpUunDRs26L333lOVKlW0a9cuoyMBgCSKLQAb8PPPPysgIEBFixal1AKAjUuXLp3Wr1+vDz74QAEBAdq5c6fRkQCAYgvAWDt27FDVqlXl5eWldevWKW3atEZHAgD8h7hyW7RoUQUEBOjnn382OhIAJ0exBWCY7du3q2rVqipRogSlFgDsTNq0abVu3ToVL15cAQEB2rFjh9GRADgxii0AQ2zbtk3VqlVTqVKltGbNGqVJk8boSACAF5Q2bVqtXbtWJUuWVNWqVbV9+3ajIwFwUhRbAMlu69atqlatmkqXLk2pBQA7lyZNGq1Zs0alSpVStWrVtHXrVqMjAXBCFFsAySosLEzVq1dX2bJltXr1anl4eBgdCQDwiuLKbenSpVW9enWFhYUZHQmAk6HYAkg2ISEhql69usqVK0epBQAH4+HhodWrV6tcuXKqUaOGQkNDjY4EwIlQbAEkiy1btqhmzZry9vbWqlWrlDp1aqMjAQASmYeHh1atWqXy5curRo0aCgkJMToSACdBsQWQ5DZv3qyaNWuqYsWKWrlyJaUWABxY6tSptXLlSlWoUEE1atTQli1bjI4EwAlQbAEkqU2bNqlWrVoym81asWIFpRYAnEBcua1UqZJq1qypzZs3Gx0JgIOj2AJIMsHBwapVq5Z8fHy0fPlyubu7Gx0JAJBM3N3dtWLFCpnNZtWqVUsbN240OhIAB0axBZAkNmzYoDp16sjf359SCwBOyt3dXcuXL5evr69q166t4OBgoyMBcFAUWwCJbv369apbt64qV66spUuXys3NzehIAACDuLu7a9myZfL391edOnW0YcMGoyMBcEAUWwCJat26dapbt66qVKmiJUuWUGoBAHJzc9PSpUtVuXJl1alTR+vWrTM6EgAHQ7EFkGjWrFmjevXqqVq1apRaAEA8bm5uWrJkiapWrap69epp7dq1RkcC4EAotgASxerVq1W/fn1Vr15dixYtUqpUqYyOBACwMW5ublq8eLGqVaum+vXra82aNUZHAuAgKLYAXtmqVavUoEED1axZUz/99BOlFgDwTKlSpdKiRYtUvXp11a9fX6tXrzY6EgAHQLEF8MKioqK0b98+SdLKlSvVsGFD1a5dm1ILAEiQuHJbq1YtNWjQQCtXrpQk7du3T1FRUQanA2CPKLYAXtiXX36pBg0aaPny5WrYsKHq1KmjBQsWKGXKlEZHAwDYiZQpU2rhwoWqXbu2GjVqpBUrVqhBgwb68ssvjY4GwA6ZLBaLxegQAOyHxWJRgQIF9Pbbb2v79u2qV6+e5s2bR6kFALyUmJgYNW/eXCtWrFCFChV08eJFHTt2TCaTyehoAOwIO7YAXsihQ4d04sQJhYWFycvLS5K0bds2g1MBAOxV3Azx8vLS1q1bFR4ersOHDxucCoC9odgCeCFffPGF9eM9e/bo4sWLypw5s4GJAAD2LHPmzPrrr7+0Z88exZ1IOGLECINTAbA3FFsAL+TevXt66623NHbsWJ0/f147duxQsWLFjI4FALBTxYoV044dO3T+/HmNHTtWb731lu7du2d0LAB2ht+xBQAAAADYNXZsAQAAAAB2LYXRAYCkdO7cOV29etXoGEhEWbNm1TvvvGN0DABweMxQx8MMhSOj2MJhnTt3TgULFtTdu3eNjoJE5OHhoWPHjjGYASAJMUMdEzMUjoxiC4d19epV3b17V0FBQSpYsKDRcZAIjh07ppYtW+rq1asMZQBIQsxQx8MMhaOj2MLhFSxY0Pp+qwAAIOGYoQDsBS8eBbyEiIgI+fv7P/P6WbNm6datW8+9j7CwMB06dCixo8UzcOBA5cyZ86lZr127pkyZMikoKOiZx4eEhMhkMun8+fOSpPv376t169aqUKGC6tatq5s3b0qSAgMDVbBgQZnNZpnNZkVHRyfNJwQAQDKYOnWqdaYVKFBADRo0eOZtW7duHW/ONmjQQJUqVVKJEiU0btw46+WpU6e23ufUqVOTND/gjCi2QBJIimJ7586dF87RtWtXhYaGPvW6ESNGyNvb+5nHxsbG6uuvv1aJEiWsl82ePVu5cuXS9u3bVb16dY0dO9Z63aBBgxQWFqawsDClSpXqhbMCAPC4hw8fJsr9xMbGvvDvCn/88cfWmVaxYkU1adLkqbc7cODAE/N+wYIF2rp1q3bv3q1Jkybp9u3bkqS3337bep8ff/zxy30yAJ6JYgu8ohkzZqhkyZLy9fVVv379FBISooMHD6pRo0Zq3769IiMj5e/vL7PZrHLlyun48eO6fv26Zs2apS+++EJms/mZpfXOnTsKCgpSrVq11Lt37xfO9tZbb8nF5cmn+alTp3Tt2jUVL178mccGBQWpdu3aSpMmjfWy0NBQ1atXT5JUt27deKV5zJgx8vb2jrc6DQDAi4iIiFDJkiXVunVrtWzZUrNmzVL9+vXVsGFDFSxYUIsWLVLDhg1VtGhRff/998+9r0OHDqlv377y9vbWkSNHXipPVFSUNm7cqNq1az/1+uHDh2vQoEHxLotb3L17967eeecdeXh4SJIuXbqkSpUqqW7dujpz5sxL5QHwbPyOLfCKZs2apcWLFytXrlyKjY2Vi4uLihYtqqCgIGXPnl0xMTFat26dUqVKpfXr12v06NGaOXOm2rZtK09PT7Vs2fKJ+9y4caPmzJmjq1evqnbt2poxY4ayZcsmSdqzZ4/69u37xDFdu3ZVw4YNE5R56NCh+t///qe5c+c+9fp79+5pzpw52rBhgxYuXGi9PO70ZUnKlCmTrl27Jknq1q2bhg0bpvv376tOnToqWrSofHx8EpQFAIDHRUREaPPmzcqQIYNmzZql2NhYLVu2TDt27FCTJk108uRJubi4qEiRIurevXu8Y69cuaIZM2YoODhY+fPnV/PmzTV69GiZTCZJUufOnXX06NF4x6RNm1Zr1qx5apbVq1fL399f7u7uT1y3Zs0aeXl5Wefz4+rUqaNdu3apU6dOcnV1tX5eWbNm1ZYtW9SuXTuFhYW9zJcHwDNQbIFXNG7cOP3vf//TvXv31LRp0ydWdW/cuKEuXbro0qVLio6OVrp06f7zPufNm6fTp0+rW7duql27ttKmTWu9rlSpUq80DHfu3KksWbIob968z7zNt99+q08++UQpUsT/JyJLliyKjIxUrly5dOPGDWXJksV6uSS5u7urQYMG2rdvH8UWAPBSihQpogwZMlj/HHd2Ufbs2VWgQAHrDujThIeHa8aMGapVq5Zat26t999/P971kyZNeqEsc+bMeeoZUw8fPtTYsWO1evVqXbly5YnrV65cqX/++cd6GnOhQoWUNWtWSZKfn586duz4QjkA/DeKLfCKChYsqOnTpysqKkrvvvuuateurVSpUunBgweSHp3SW6xYMQ0YMEDr1q2z/l7q47f5t9mzZ+vatWv66aefVK9ePWXNmlVt27ZVQEDAK+/Y7tu3T4cOHVLVqlV16tQppUmTRnnz5lXZsmWttzly5Ii2bt2qadOm6dChQ2rVqpXWrFkjs9msVatWqVixYlq1apXMZrOkR+U9Y8aMslgsCg0NVbNmzV70ywgAgCRZdzjjxO22/vvjp/H29tbx48f1888/a/LkyTp69KiqVKmijh07KmvWrC+0Y3vlyhUdO3ZMFStWfOK6S5cuKTIyUg0aNNC9e/d05MgRDR8+XIMHD9bDhw+VMmVKpU6d2vrfnTt3lDp1arm6uur3339X5syZX+RLAiABKLbAK+rcubPOnj2r6OhoffLJJ5Kk+vXrq127dipevLjatm2r5s2ba/v27SpUqJD1uMqVK6tHjx5as2aN5syZ88QKdJYsWdS5c2fr/e/YsUPSi+3Yfvfdd1q8eLGOHTsmf39/TZo0Sd27d7eeuhUYGChPT0+VLVtWly5d0ldffaVvvvkm3islm81mzZ07V2nSpFHbtm3Vvn17VaxYUZkyZdLs2bMlST169FB4eLgsFosqVKjwzN9FAgAgqZlMJnl7e8vb21sxMTFav369/v77b2XNmvWFdmwXLlyoxo0bxyvTs2bN0ttvv63KlSvr119/lfToFOP27dtr6NChun37tmrVqiXp0TsJNG3aVLlz59aePXvUsWNH61lbU6ZMScTPGIAkmSwWi8XoEEBSOHDggIoXL679+/fzHnwOgu8pACQP/r11PHxP4eh4VWQAAAAAgF2j2AIAAAAA7BrFFgAAAABg1yi2gEECAwPjvUiTLduwYYPKly8vs9ksX19f/fnnn5IefQ4FCxaU2WyW2WxWdHT0E8du2bJFZcuWVdmyZbVgwQLr5f7+/sqWLZtGjBhhvezEiRPy8vJS2rRprS+WBQDAv9nTDI2MjFSVKlVUqVIllStXzvqiUwmZoeXKlVOlSpVUsmRJ6wyNjo5W48aNVaFCBZUqVUqbNm2SJJ05c0YVK1a03t8ff/yRfJ8kYAMotkAie/jwYbI/jsViUUJeB+5ls/n6+urnn39WWFiYWrZsqe+//9563aBBgxQWFqawsDClSpXqicfr1auX1qxZo5CQEI0ePVq3b9+W9OiVJb/66qt4t8+ePbu2bNmSoLctAgA4HkecofPmzVP58uW1detWjRkzJt6C7vNmqCSFhYVp69at2rJliwYOHChJ2rhxo9KkSaPt27dr6dKl6t+/v6RH79H70UcfKSwsTO3bt483qwFnQLGFU4mIiFD58uXl4+Mjs9msyMhI/f333/Lz81OVKlXUuXNn+fv7S5Latm1r3TWMGxLSo7fQ8fX1VYkSJTR48GDrfefMmVNdunRRlSpVdPPmTTVu3Fi+vr7y8fHRiRMnJEnLly9X0aJFVbt2be3fv/+ZOWNiYtShQwf5+vrK29tbu3btsmbq1KmTatWqpeDgYHl6emrQoEHy8/PT+fPn1bRpU1WqVEnly5e33v+/j3kZjw/bGzduxHvD+zFjxsjb21vjxo174rhTp04pV65cypIli1KnTq1y5cpp7969kh6V2H/z8PBQpkyZXiojACBpMUNfboYWLFhQt27dkiRdv35dr732mvW6581Q6f/m7+3bt1W4cGFJUt68eXX//n1ZLBZFRkZa769w4cK6cePGUx8HcAa8jy2cSkhIiCpXrqzAwEBJj1Zpe/bsqXbt2qlFixaaMWOGdYA+S/v27fXpp5/KYrGoXLly6tChg3LmzKmLFy+qT58+ypUrl/r376/69euradOmOnLkiPr27atly5apf//+2rNnj9KlSydfX99nPsb06dOVN29e/fjjj7py5Ypq165tHczZs2fX5MmTJT16D93q1avriy++0HfffacCBQpo4cKFCg8PV5s2bbR79+4njnnci7xR/fLly/XFF1/o5s2bWr9+vSSpW7duGjZsmO7fv686deqoaNGi8vHxsR5z7dq1eEU1U6ZMunbt2nO/vgAA28QMjS+hM9TLy0tDhgxRkSJFdOPGDW3btk3Sf89QSbp3754CAgJ05MgRjRo1SpKUJ08e3b17VwUKFNCNGze0cuVKSZKfn58CAgI0ffp0RUVFac+ePc/9XgCOhmILp9K4cWONHDlSLVq0UM6cORUYGKjw8HB169ZN0qPfZZk/f74kxXtD9sdPUVq6dKmmTZsmk8mks2fP6vz588qZM6eyZ8+uXLlySZIOHz6srVu36ocffrDe15UrV/Taa68pQ4YMkqQyZco8M+fhw4e1c+dObdiwQZKsK7CS5O3tbf3Y1dVV5cqVkyQdP35cDRo0kCTlz58/XoF8/JjHvcgb1derV0/16tXTwoULNXDgQC1atEhZsmSRJLm7u6tBgwbat29fvKGcJUsWRUZGWv9848YN6zEAAPvCDI0voTN0zJgxql+/vnr37q3du3erS5cuWr9+/X/OUElKnTq1tm3bpqtXr6pkyZJq3LixFi5cqOzZs2vFihWKiIhQvXr19Ouvv6pfv3763//+p4YNG2rhwoUaMGDAUws54KgotnAqLi4uGjlypCSpXbt2Cg4OVr58+fTLL78ob9681tVZScqcObPOnTsnSdbTZyVpyJAhOn78uNzc3FS+fHnrwHZ1dbXepnDhwipbtqzq1asn6dELPbi6uurvv//WrVu3lC5dOu3Zs0dFihR5as7ChQvL09NTPXv2tB4f5/HHMZlM1h8eChQooO3bt8vf31/h4eHx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lcfCloiIiIiIiAyNhS0REREREREZGgtbIiIiIiIiMjSbXu4nJSXFli9HFVTWODBezsEcR8bTOTCezufkyZMAGFNnYS2OjK3x3B4zxtA5MIc6n/LE0iZnRT516hQ6dOiAzMzMyr4U2YinpydSUlLQqlWrYvcxXs7H1dUVBQUFWg+DbITxdD5ubm7qtZLJ+Mw5FgDzqYF5enpi8+bNiImJYQydCHOo8ymtrinKJoUtUFgsXb582RYvRTbQsGHDUoPPeDmXc+fOAYB6QW8yNsbT+WRnZ8Pd3V3rYZCNFM2xzKfGZY4jY+hcmEOdz53qGjObFbZEREREREREWuDJo4iIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGj/BxWf2d82Buy4AAAAAElFTkSuQmCC", + "image/png": "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T82aNUtQBgAAHAnFFgDgVP79e7Vxu63//vhpvL29dfz4cf3888+aPHmyjh49qipVqqhjx47KmjVrgnds/fz8rC/8dObMGWXOnPmpj7du3TpVrFhRadKksV4W9yJRt2/fVoMGDVSyZEnrdUFBQVqyZMlzPwcAABwRxRYAgBdgMpnk7e0tb29vxcTEaP369fr777+VNWvWBO/Y+vn5aePGjTKbzYqOjra+4vGGDRt05coV66nHc+fOVceOHeMd27dvX+3du1cpUqTQqFGjlDJlSknS4cOH5eHhobx58ybiZwsAgH0wWSwWi9EhAADO58CBAypevLj279/P+9g6AL6fAAAj8arIAAAAAAC7RrEFAAAAANg1ii0AAAAAwK5RbAEA+JfAwEAFBQUZHSNBIiMjVaVKFVWqVEnlypXTr7/+Gu/6oUOHytPT84njoqOjra+wbDab5e7ursOHD0uSfvvtN1WtWlW+vr768MMPJT16/99MmTJZb79q1aqk/+QAAEggXhUZAOA0Hj58+MTb/ST148S9RuN/vZXQy2abN2+eypcvr2HDhmnHjh0aMWKEli5dKkm6cOGCTp48+dTjUqVKpbCwMEnS+fPnVbVqVb333nuKjo5W7969tWTJknjv9ys9es/fzZs3v3BGAACSGju2AACbEBERofLly8vHx0dms1mRkZH6+++/5efnpypVqqhz587y9/eXJLVt21Y7duyQJIWFhal9+/aSpO+++06+vr4qUaKEBg8ebL3vnDlzqkuXLqpSpYpu3rypxo0by9fXVz4+Pjpx4oQkafny5SpatKhq166t/fv3PzNnTEyMOnToIF9fX3l7e2vXrl3WTJ06dVKtWrUUHBwsT09PDRo0SH5+fjp//ryaNm2qSpUqqXz58tb7//cxL6NgwYK6deuWJOn69et67bXXrNcFBgbG+zo8S1BQkFq0aCFJ2r17t9KlS6fWrVvLbDbHew/e3377TRUqVFDLli115cqVl8oLAEBSYMcWAGATQkJCVLlyZQUGBkp6tNPZs2dPtWvXTi1atNCMGTOsJfRZ2rdvr08//VQWi0XlypVThw4dlDNnTl28eFF9+vRRrly51L9/f9WvX19NmzbVkSNH1LdvXy1btkz9+/fXnj17lC5dOvn6+j7zMaZPn668efPqxx9/1JUrV1S7dm1ruc2ePbsmT54sSercubOq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V65cypIli1KnTq1y5cpp7969kh6V2H/z8PBQpkyZXiojACBpMUNfboYWLFhQt27dkiRdv35dr732mvW6581Q6f/m7+3bt1W4cGFJUt68eXX//n1ZLBZFRkZa769w4cK6cePGUx8HcAa8jy2cSkhIiCpXrqzAwEBJj1Zpe/bsqXbt2qlFixaaMWOGdYA+S/v27fXpp5/KYrGoXLly6tChg3LmzKmLFy+qT58+ypUrl/r376/69euradOmOnLkiPr27atly5apf//+2rNnj9KlSydfX99nPsb06dOVN29e/fjjj7py5Ypq165tHczZs2fX5MmTJT16D93q1avriy++0HfffacCBQpo4cKFCg8PV5s2bbR79+4njnnci7xR/fLly/XFF1/o5s2bWr9+vSSpW7duGjZsmO7fv686deqoaNGi8vHxsR5z7dq1eEU1U6ZMunbt2nO/vgAA28QMjS+hM9TLy0tDhgxRkSJFdOPGDW3btk3Sf89QSbp3754CAgJ05MgRjRo1SpKUJ08e3b17VwUKFNCNGze0cuVKSZKfn58CAgI0ffp0RUVFac+ePc/9XgCOhmILp9K4cWONHDlSLVq0UM6cORUYGKjw8HB169ZN0qPfZZk/f74kxXtD9sdPUVq6dKmmTZsmk8mks2fP6vz588qZM6eyZ8+uXLlySZIOHz6srVu36ocffrDe15UrV/Taa68pQ4YMkqQyZco8M+fhw4e1c+dObdiwQZKsK7CS5O3tbf3Y1dVV5cqVkyQdP35cDRo0kCTlz58/XoF8/JjHvcgb1derV0/16tXTwoULNXDgQC1atEhZsmSRJLm7u6tBgwbat29fvKGcJUsWRUZGWv9848YN6zEAAPvCDI0voTN0zJgxql+/vnr37q3du3erS5cuWr9+/X/OUElKnTq1tm3bpqtXr6pkyZJq3LixFi5cqOzZs2vFihWKiIhQvXr19Ouvv6pfv3763//+p4YNG2rhwoUaMGDAUws54KgotnAqLi4uGjlypCSpXbt2Cg4OVr58+fTLL78ob9681tVZScqcObPOnTsnSdbTZyVpyJAhOn78uNzc3FS+fHnrwHZ1dbXepnDhwipbtqzq1asn6dELPbi6uurvv//WrVu3lC5dOu3Zs0dFihR5as7ChQvL09NTPXv2tB4f5/HHMZlM1h8eChQooO3bt8vf31/h4eHx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LbQeii4ZMaZknRFjyflZOiPGlEpm9HhyvhZn9JjSP4weS87P4oweU3vgyaOIiIiIiIjI0LgV2eAURdF6CERUAs5PIuPgfCXSL85PKgt2bImIiIiIiMjQWNjqVGpqKmJiYhz2fnPmzEGfPn0QGhqKJ598Uj0L3ZQpUxAUFISgoCAsWLDA6nMXLlyIPn36IDw8XF1Ry8nJwciRIxEeHo7evXvjt99+AwDExcWhS5cu8PDwwOnTpx3y2YjswdFz9IcffkCHDh3g4eFh9f6IiAir194TQmDGjBkIDg5Gr169sGLFCvX2Z599FuHh4YiJiVHn44kTJxAREaFez++vv/6y34cishNHz8833ngDERERCA0Nxfjx45GbmwsASEpKQlhYGEJCQvDuu+9afe7s2bMREhICSZJw4MABAMCaNWvQp08fREZGYuDAgbhy5QoA5lByDo6en2avvfYa/P39i90+fvx4q+M5deqUxfVtq1evjrS0NADA22+/jdDQUISHhyM5ORkAkJmZieHDh0OSJAwbNgzXrl2z7weiYljYEoDCs7vt2rUL27dvx/nz57FlyxYAwMyZMxEfH48dO3ZgzZo1OH78uMXzLl68iIULFyIuLg7r1q3DzJkzUVBQgE2bNqFWrVrYtm0bfvzxR7z44osAgC5dumDnzp0ICgpy+GckMjJJkvDHH39YPXHGqlWrUL9+favPO3jwIA4ePIidO3dCURS89tprAIDffvsNly9fxrZt2/D8889j1qxZAIBPPvkEjz76KBRFwaRJk/DBBx/Y7TMROYvnnnsOW7duxfbt2wEAmzZtAgBMnz4dX3zxBeLi4qzm0H379mH37t3YsWMHli5diqeeegoAcPfddyMuLg6xsbEYOHAg/vOf/wBgDiWqqDNnzuDPP/8sdntiYiKuX79u9TmtWrWCoihQFAXz589H37594eXlhaNHj2L9+vWIi4vD559/rp4pedGiRQgMDISiKBg6dCjee+89u34mKo6FrQPNnDkTP/74I4DCy9507doVubm5ePnllxEVFYUePXrg008/Lfa8CRMmIC4uDgDUL5sAcODAAcTExCAqKgojRoxAZmZmhcdW9Dqz7u7ucHNzs7jd1dUV1apVU283S01NRceOHVG9enXUq1cP1apVQ2pqKvz8/JCdnQ0hBNLS0tC4cWMAQL169VC7du0Kj5PInvQ8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ERERERGRobGwJSIiIiIiIkNjYUtERERERESGZtPL/aSkpNjy5aiCyhoHxss5mOPIeDoHxtP5nDx5EgBj6iysxZGxNZ7bY8YYOgfmUOdU1nja5KzIp06dQocOHZCZmVnZlyIb8fT0REpKClq1alXsPsbL+bi6uqKgoEDrYZCNMJ7Ox83NTb1WMhmfOccCYD41ME9PT2zevBkxMTGMoRNhDnVOpdU2ZjYpbIHCYuny5cu2eCmygYYNG5YaeMbLuZw7dw4A1At6k7Exns4nOzsb7u7uWg+DbKRojmU+NS5zHBlD58Ic6pzuVNsANixsiYiIiIiIiLTAk0cRERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQ/g/QNdsvQNw/pQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -907,7 +907,7 @@ }, { "cell_type": "markdown", - "id": "baeedcf4", + "id": "62207ca5", "metadata": {}, "source": [ "The variable `lstat` measures the percentage of individuals with\n", @@ -919,7 +919,7 @@ }, { "cell_type": "markdown", - "id": "bf4867c8", + "id": "361d7f84", "metadata": {}, "source": [ "Now we use the cross-validation function to see whether pruning\n", @@ -929,13 +929,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "9e563bf2", + "id": "33fb7786", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.498280Z", - "iopub.status.busy": "2023-08-07T00:19:16.498155Z", - "iopub.status.idle": "2023-08-07T00:19:16.543916Z", - "shell.execute_reply": "2023-08-07T00:19:16.543596Z" + "iopub.execute_input": "2023-08-21T02:29:46.706833Z", + "iopub.status.busy": "2023-08-21T02:29:46.706699Z", + "iopub.status.idle": "2023-08-21T02:29:46.756824Z", + "shell.execute_reply": "2023-08-21T02:29:46.756520Z" } }, "outputs": [], @@ -954,7 +954,7 @@ }, { "cell_type": "markdown", - "id": "de0ed389", + "id": "e7218495", "metadata": {}, "source": [ "In keeping with the cross-validation results, we use the pruned tree\n", @@ -964,13 +964,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "3a635c52", + "id": "a386755b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.545489Z", - "iopub.status.busy": "2023-08-07T00:19:16.545404Z", - "iopub.status.idle": "2023-08-07T00:19:16.548169Z", - "shell.execute_reply": "2023-08-07T00:19:16.547932Z" + "iopub.execute_input": "2023-08-21T02:29:46.758663Z", + "iopub.status.busy": "2023-08-21T02:29:46.758546Z", + "iopub.status.idle": "2023-08-21T02:29:46.761814Z", + "shell.execute_reply": "2023-08-21T02:29:46.761470Z" }, "lines_to_next_cell": 2 }, @@ -978,7 +978,7 @@ { "data": { "text/plain": [ - "28.069857549754044" + "28.06985754975404" ] }, "execution_count": 22, @@ -993,7 +993,7 @@ }, { "cell_type": "markdown", - "id": "41a34a36", + "id": "7fe01e33", "metadata": {}, "source": [ "In other words, the test set MSE associated with the regression tree\n", @@ -1010,20 +1010,20 @@ { "cell_type": "code", "execution_count": 23, - "id": "5542ece6", + "id": "3d646928", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.549690Z", - "iopub.status.busy": "2023-08-07T00:19:16.549586Z", - "iopub.status.idle": "2023-08-07T00:19:16.832898Z", - "shell.execute_reply": "2023-08-07T00:19:16.832568Z" + "iopub.execute_input": "2023-08-21T02:29:46.763419Z", + "iopub.status.busy": "2023-08-21T02:29:46.763331Z", + "iopub.status.idle": "2023-08-21T02:29:47.049615Z", + "shell.execute_reply": "2023-08-21T02:29:47.049265Z" }, "lines_to_next_cell": 0 }, "outputs": [ { "data": { - "image/png": "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T82aNUtQBgAAHAnFFgDgVP79e7Vxu63//vhpvL29dfz4cf3888+aPHmyjh49qipVqqhjx47KmjVrgnds/fz8rC/8dObMGWXOnPmpj7du3TpVrFhRadKksV4W9yJRt2/fVoMGDVSyZEnrdUFBQVqyZMlzPwcAABwRxRYAgBdgMpnk7e0tb29vxcTEaP369fr777+VNWvWBO/Y+vn5aePGjTKbzYqOjra+4vGGDRt05coV66nHc+fOVceOHeMd27dvX+3du1cpUqTQqFGjlDJlSknS4cOH5eHhobx58ybiZwsAgH0wWSwWi9EhAADO58CBAypevLj279/P+9g6AL6fAAAj8arIAAAAAAC7RrEFAAAAANg1ii0AAAAAwK5RbAEA+JfAwEAFBQUZHSNBIiMjVaVKFVWqVEnlypXTr7/+Gu/6oUOHytPT84njoqOjra+wbDab5e7ursOHD0uSfvvtN1WtWlW+vr768MMPJT16/99MmTJZb79q1aqk/+QAAEggXhUZAOA0Hj58+MTb/ST148S9RuN/vZXQy2abN2+eypcvr2HDhmnHjh0aMWKEli5dKkm6cOGCTp48+dTjUqVKpbCwMEnS+fPnVbVqVb333nuKjo5W7969tWTJknjv9ys9es/fzZs3v3BGAACSGju2AACbEBERofLly8vHx0dms1mRkZH6+++/5efnpypVqqhz587y9/eXJLVt21Y7duyQJIWFhal9+/aSpO+++06+vr4qUaKEBg8ebL3vnDlzqkuXLqpSpYpu3rypxo0by9fXVz4+Pjpx4oQkafny5SpatKhq166t/fv3PzNnTEyMOnToIF9fX3l7e2vXrl3WTJ06dVKtWrUUHBwsT09PDRo0SH5+fjp//ryaNm2qSpUqqXz58tb7//cxL6NgwYK6deuWJOn69et67bXXrNcFBgbG+zo8S1BQkFq0aCFJ2r17t9KlS6fWrVvLbDbHew/e3377TRUqVFDLli115cqVl8oLAEBSYMcWAGATQkJCVLlyZQUGBkp6tNPZs2dPtWvXTi1atNCMGTOsJfRZ2rdvr08//VQWi0XlypVThw4dlDNnTl28eFF9+vRRrly51L9/f9WvX19NmzbVkSNH1LdvXy1btkz9+/fXnj17lC5dOvn6+j7zMaZPn668efPqxx9/1JUrV1S7dm1ruc2ePbsmT54sSercubOq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V65cypIli1KnTq1y5cpp7969kh6V2H/z8PBQpkyZXiojACBpMUNfboYWLFhQt27dkiRdv35dr732mvW6581Q6f/m7+3bt1W4cGFJUt68eXX//n1ZLBZFRkZa769w4cK6cePGUx8HcAa8jy2cSkhIiCpXrqzAwEBJj1Zpe/bsqXbt2qlFixaaMWOGdYA+S/v27fXpp5/KYrGoXLly6tChg3LmzKmLFy+qT58+ypUrl/r376/69euradOmOnLkiPr27atly5apf//+2rNnj9KlSydfX99nPsb06dOVN29e/fjjj7py5Ypq165tHczZs2fX5MmTJT16D93q1avriy++0HfffacCBQpo4cKFCg8PV5s2bbR79+4njnnci7xR/fLly/XFF1/o5s2bWr9+vSSpW7duGjZsmO7fv686deqoaNGi8vHxsR5z7dq1eEU1U6ZMunbt2nO/vgAA28QMjS+hM9TLy0tDhgxRkSJFdOPGDW3btk3Sf89QSbp3754CAgJ05MgRjRo1SpKUJ08e3b17VwUKFNCNGze0cuVKSZKfn58CAgI0ffp0RUVFac+ePc/9XgCOhmILp9K4cWONHDlSLVq0UM6cORUYGKjw8HB169ZN0qPfZZk/f74kxXtD9sdPUVq6dKmmTZsmk8mks2fP6vz588qZM6eyZ8+uXLlySZIOHz6srVu36ocffrDe15UrV/Taa68pQ4YMkqQyZco8M+fhw4e1c+dObdiwQZKsK7CS5O3tbf3Y1dVV5cqVkyQdP35cDRo0kCTlz58/XoF8/JjHvcgb1derV0/16tXTwoULNXDgQC1atEhZsmSRJLm7u6tBgwbat29fvKGcJUsWRUZGWv9848YN6zEAAPvCDI0voTN0zJgxql+/vnr37q3du3erS5cuWr9+/X/OUElKnTq1tm3bpqtXr6pkyZJq3LixFi5cqOzZs2vFihWKiIhQvXr19Ouvv6pfv3763//+p4YNG2rhwoUaMGDAUws54KgotnAqLi4uGjlypCSpXbt2Cg4OVr58+fTLL78ob9681tVZScqcObPOnTsnSdbTZyVpyJAhOn78uNzc3FS+fHnrwHZ1dbXepnDhwipbtqzq1asn6dELPbi6uurvv//WrVu3lC5dOu3Zs0dFihR5as7ChQvL09NTPXv2tB4f5/HHMZlM1h8eChQooO3bt8vf31/h4eHx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LbQeii4ZMaZknRFjyflZOiPGlEpm9HhyvhZn9JjSP4weS87P4oweU3vgyaOIiIiIiIjI0LgV2eAURdF6CERUAs5PIuPgfCXSL85PKgt2bImIiIiIiMjQWNjqVGpqKmJiYhz2fnPmzEGfPn0QGhqKJ598Uj0L3ZQpUxAUFISgoCAsWLDA6nMXLlyIPn36IDw8XF1Ry8nJwciRIxEeHo7evXvjt99+AwDExcWhS5cu8PDwwOnTpx3y2YjswdFz9IcffkCHDh3g4eFh9f6IiAir194TQmDGjBkIDg5Gr169sGLFCvX2Z599FuHh4YiJiVHn44kTJxAREaFez++vv/6y34cishNHz8833ngDERERCA0Nxfjx45GbmwsASEpKQlhYGEJCQvDuu+9afe7s2bMREhICSZJw4MABAMCaNWvQp08fREZGYuDAgbhy5QoA5lByDo6en2avvfYa/P39i90+fvx4q+M5deqUxfVtq1evjrS0NADA22+/jdDQUISHhyM5ORkAkJmZieHDh0OSJAwbNgzXrl2z7weiYljYEoDCs7vt2rUL27dvx/nz57FlyxYAwMyZMxEfH48dO3ZgzZo1OH78uMXzLl68iIULFyIuLg7r1q3DzJkzUVBQgE2bNqFWrVrYtm0bfvzxR7z44osAgC5dumDnzp0ICgpy+GckMjJJkvDHH39YPXHGqlWrUL9+favPO3jwIA4ePIidO3dCURS89tprAIDffvsNly9fxrZt2/D8889j1qxZAIBPPvkEjz76KBRFwaRJk/DBBx/Y7TMROYvnnnsOW7duxfbt2wEAmzZtAgBMnz4dX3zxBeLi4qzm0H379mH37t3YsWMHli5diqeeegoAcPfddyMuLg6xsbEYOHAg/vOf/wBgDiWqqDNnzuDPP/8sdntiYiKuX79u9TmtWrWCoihQFAXz589H37594eXlhaNHj2L9+vWIi4vD559/rp4pedGiRQgMDISiKBg6dCjee+89u34mKo6FrQPNnDkTP/74I4DCy9507doVubm5ePnllxEVFYUePXrg008/Lfa8CRMmIC4uDgDUL5sAcODAAcTExCAqKgojRoxAZmZmhcdW9Dqz7u7ucHNzs7jd1dUV1apVU283S01NRceOHVG9enXUq1cP1apVQ2pqKvz8/JCdnQ0hBNLS0tC4cWMAQL169VC7du0Kj5PInvQ8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ERERERGRobGwJSIiIiIiIkNjYUtERERERESGZtPL/aSkpNjy5aiCyhoHxss5mOPIeDoHxtP5nDx5EgBj6iysxZGxNZ7bY8YYOgfmUOdU1nja5KzIp06dQocOHZCZmVnZlyIb8fT0REpKClq1alXsPsbL+bi6uqKgoEDrYZCNMJ7Ox83NTb1WMhmfOccCYD41ME9PT2zevBkxMTGMoRNhDnVOpdU2ZjYpbIHCYuny5cu2eCmygYYNG5YaeMbLuZw7dw4A1At6k7Exns4nOzsb7u7uWg+DbKRojmU+NS5zHBlD58Ic6pzuVNsANixsiYiIiIiIiLTAk0cRERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQ/g/QNdsvQNw/pQAAAABJRU5ErkJggg==", + "image/png": "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T82aNUtQBgAAHAnFFgDgVP79e7Vxu63//vhpvL29dfz4cf3888+aPHmyjh49qipVqqhjx47KmjVrgnds/fz8rC/8dObMGWXOnPmpj7du3TpVrFhRadKksV4W9yJRt2/fVoMGDVSyZEnrdUFBQVqyZMlzPwcAABwRxRYAgBdgMpnk7e0tb29vxcTEaP369fr777+VNWvWBO/Y+vn5aePGjTKbzYqOjra+4vGGDRt05coV66nHc+fOVceOHeMd27dvX+3du1cpUqTQqFGjlDJlSknS4cOH5eHhobx58ybiZwsAgH0wWSwWi9EhAADO58CBAypevLj279/P+9g6AL6fAAAj8arIAAAAAAC7RrEFAAAAANg1ii0AAAAAwK5RbAEA+JfAwEAFBQUZHSNBIiMjVaVKFVWqVEnlypXTr7/+Gu/6oUOHytPT84njoqOjra+wbDab5e7ursOHD0uSfvvtN1WtWlW+vr768MMPJT16/99MmTJZb79q1aqk/+QAAEggXhUZAOA0Hj58+MTb/ST148S9RuN/vZXQy2abN2+eypcvr2HDhmnHjh0aMWKEli5dKkm6cOGCTp48+dTjUqVKpbCwMEnS+fPnVbVqVb333nuKjo5W7969tWTJknjv9ys9es/fzZs3v3BGAACSGju2AACbEBERofLly8vHx0dms1mRkZH6+++/5efnpypVqqhz587y9/eXJLVt21Y7duyQJIWFhal9+/aSpO+++06+vr4qUaKEBg8ebL3vnDlzqkuXLqpSpYpu3rypxo0by9fXVz4+Pjpx4oQkafny5SpatKhq166t/fv3PzNnTEyMOnToIF9fX3l7e2vXrl3WTJ06dVKtWrUUHBwsT09PDRo0SH5+fjp//ryaNm2qSpUqqXz58tb7//cxL6NgwYK6deuWJOn69et67bXXrNcFBgbG+zo8S1BQkFq0aCFJ2r17t9KlS6fWrVvLbDbHew/e3377TRUqVFDLli115cqVl8oLAEBSYMcWAGATQkJCVLlyZQUGBkp6tNPZs2dPtWvXTi1atNCMGTOsJfRZ2rdvr08//VQWi0XlypVThw4dlDNnTl28eFF9+vRRrly51L9/f9WvX19NmzbVkSNH1LdvXy1btkz9+/fXnj17lC5dOvn6+j7zMaZPn668efPqxx9/1JUrV1S7dm1ruc2ePbsmT54sSercubOq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V65cypIli1KnTq1y5cpp7969kh6V2H/z8PBQpkyZXiojACBpMUNfboYWLFhQt27dkiRdv35dr732mvW6581Q6f/m7+3bt1W4cGFJUt68eXX//n1ZLBZFRkZa769w4cK6cePGUx8HcAa8jy2cSkhIiCpXrqzAwEBJj1Zpe/bsqXbt2qlFixaaMWOGdYA+S/v27fXpp5/KYrGoXLly6tChg3LmzKmLFy+qT58+ypUrl/r376/69euradOmOnLkiPr27atly5apf//+2rNnj9KlSydfX99nPsb06dOVN29e/fjjj7py5Ypq165tHczZs2fX5MmTJT16D93q1avriy++0HfffacCBQpo4cKFCg8PV5s2bbR79+4njnnci7xR/fLly/XFF1/o5s2bWr9+vSSpW7duGjZsmO7fv686deqoaNGi8vHxsR5z7dq1eEU1U6ZMunbt2nO/vgAA28QMjS+hM9TLy0tDhgxRkSJFdOPGDW3btk3Sf89QSbp3754CAgJ05MgRjRo1SpKUJ08e3b17VwUKFNCNGze0cuVKSZKfn58CAgI0ffp0RUVFac+ePc/9XgCOhmILp9K4cWONHDlSLVq0UM6cORUYGKjw8HB169ZN0qPfZZk/f74kxXtD9sdPUVq6dKmmTZsmk8mks2fP6vz588qZM6eyZ8+uXLlySZIOHz6srVu36ocffrDe15UrV/Taa68pQ4YMkqQyZco8M+fhw4e1c+dObdiwQZKsK7CS5O3tbf3Y1dVV5cqVkyQdP35cDRo0kCTlz58/XoF8/JjHvcgb1derV0/16tXTwoULNXDgQC1atEhZsmSRJLm7u6tBgwbat29fvKGcJUsWRUZGWv9848YN6zEAAPvCDI0voTN0zJgxql+/vnr37q3du3erS5cuWr9+/X/OUElKnTq1tm3bpqtXr6pkyZJq3LixFi5cqOzZs2vFihWKiIhQvXr19Ouvv6pfv3763//+p4YNG2rhwoUaMGDAUws54KgotnAqLi4uGjlypCSpXbt2Cg4OVr58+fTLL78ob9681tVZScqcObPOnTsnSdbTZyVpyJAhOn78uNzc3FS+fHnrwHZ1dbXepnDhwipbtqzq1asn6dELPbi6uurvv//WrVu3lC5dOu3Zs0dFihR5as7ChQvL09NTPXv2tB4f5/HHMZlM1h8eChQooO3bt8vf31/h4eHx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lcfCloiIiIiIiAyNhS0REREREREZGgtbIiIiIiIiMjSbXu4nJSXFli9HFVTWODBezsEcR8bTOTCezufkyZMAGFNnYS2OjK3x3B4zxtA5MIc6n/LE0iZnRT516hQ6dOiAzMzMyr4U2YinpydSUlLQqlWrYvcxXs7H1dUVBQUFWg+DbITxdD5ubm7qtZLJ+Mw5FgDzqYF5enpi8+bNiImJYQydCHOo8ymtrinKJoUtUFgsXb582RYvRTbQsGHDUoPPeDmXc+fOAYB6QW8yNsbT+WRnZ8Pd3V3rYZCNFM2xzKfGZY4jY+hcmEOdz53qGjObFbZEREREREREWuDJo4iIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGgsbImIiIiIiMjQWNgSERERERGRobGwJSIiIiIiIkNjYUtERERERESGxsKWiIiIiIiIDI2FLRERERERERkaC1siIiIiIiIyNBa2REREREREZGj/BxWf2d82Buy4AAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -1041,7 +1041,7 @@ }, { "cell_type": "markdown", - "id": "817eff2c", + "id": "074e230c", "metadata": {}, "source": [ " \n", @@ -1050,7 +1050,7 @@ }, { "cell_type": "markdown", - "id": "3e4b98e4", + "id": "aa0e4849", "metadata": {}, "source": [ "## Bagging and Random Forests" @@ -1058,7 +1058,7 @@ }, { "cell_type": "markdown", - "id": "878b4a89", + "id": "b17ca840", "metadata": {}, "source": [ "Here we apply bagging and random forests to the `Boston` data, using\n", @@ -1071,13 +1071,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "c82eb98b", + "id": "275feef7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.834792Z", - "iopub.status.busy": "2023-08-07T00:19:16.834681Z", - "iopub.status.idle": "2023-08-07T00:19:16.995212Z", - "shell.execute_reply": "2023-08-07T00:19:16.994915Z" + "iopub.execute_input": "2023-08-21T02:29:47.051447Z", + "iopub.status.busy": "2023-08-21T02:29:47.051323Z", + "iopub.status.idle": "2023-08-21T02:29:47.211049Z", + "shell.execute_reply": "2023-08-21T02:29:47.210740Z" }, "lines_to_next_cell": 2 }, @@ -1103,7 +1103,7 @@ }, { "cell_type": "markdown", - "id": "06cf548a", + "id": "06e84da6", "metadata": {}, "source": [ "The argument `max_features` indicates that all 12 predictors should\n", @@ -1115,13 +1115,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "7d592004", + "id": "01dbbef3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:16.996857Z", - "iopub.status.busy": "2023-08-07T00:19:16.996747Z", - "iopub.status.idle": "2023-08-07T00:19:17.088613Z", - "shell.execute_reply": "2023-08-07T00:19:17.088204Z" + "iopub.execute_input": "2023-08-21T02:29:47.212716Z", + "iopub.status.busy": "2023-08-21T02:29:47.212598Z", + "iopub.status.idle": "2023-08-21T02:29:47.305563Z", + "shell.execute_reply": "2023-08-21T02:29:47.305155Z" } }, "outputs": [ @@ -1155,7 +1155,7 @@ }, { "cell_type": "markdown", - "id": "f38f7522", + "id": "885a3843", "metadata": {}, "source": [ "The test set MSE associated with the bagged regression tree is\n", @@ -1168,13 +1168,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "892aa556", + "id": "b75cc90e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:17.090496Z", - "iopub.status.busy": "2023-08-07T00:19:17.090359Z", - "iopub.status.idle": "2023-08-07T00:19:17.888986Z", - "shell.execute_reply": "2023-08-07T00:19:17.888683Z" + "iopub.execute_input": "2023-08-21T02:29:47.307949Z", + "iopub.status.busy": "2023-08-21T02:29:47.307809Z", + "iopub.status.idle": "2023-08-21T02:29:48.296516Z", + "shell.execute_reply": "2023-08-21T02:29:48.296211Z" }, "lines_to_next_cell": 0 }, @@ -1200,7 +1200,7 @@ }, { "cell_type": "markdown", - "id": "6c2a8868", + "id": "37d5fe61", "metadata": {}, "source": [ "There is not much change. Bagging and random forests cannot overfit by\n", @@ -1217,13 +1217,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "35636d87", + "id": "bf9a5ed4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:17.890621Z", - "iopub.status.busy": "2023-08-07T00:19:17.890501Z", - "iopub.status.idle": "2023-08-07T00:19:17.998521Z", - "shell.execute_reply": "2023-08-07T00:19:17.998227Z" + "iopub.execute_input": "2023-08-21T02:29:48.298333Z", + "iopub.status.busy": "2023-08-21T02:29:48.298184Z", + "iopub.status.idle": "2023-08-21T02:29:48.412949Z", + "shell.execute_reply": "2023-08-21T02:29:48.412594Z" }, "lines_to_next_cell": 2 }, @@ -1248,7 +1248,7 @@ }, { "cell_type": "markdown", - "id": "a6edace1", + "id": "eb2c3917", "metadata": {}, "source": [ "The test set MSE is 20.04;\n", @@ -1260,13 +1260,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "b5a0869f", + "id": "71316e9a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:18.000185Z", - "iopub.status.busy": "2023-08-07T00:19:18.000073Z", - "iopub.status.idle": "2023-08-07T00:19:18.006477Z", - "shell.execute_reply": "2023-08-07T00:19:18.006110Z" + "iopub.execute_input": "2023-08-21T02:29:48.414933Z", + "iopub.status.busy": "2023-08-21T02:29:48.414785Z", + "iopub.status.idle": "2023-08-21T02:29:48.422251Z", + "shell.execute_reply": "2023-08-21T02:29:48.421922Z" }, "lines_to_next_cell": 0 }, @@ -1378,7 +1378,7 @@ }, { "cell_type": "markdown", - "id": "4acf5bdc", + "id": "b3cd6a28", "metadata": {}, "source": [ " This\n", @@ -1394,7 +1394,7 @@ }, { "cell_type": "markdown", - "id": "9a07b01d", + "id": "270fc0fb", "metadata": {}, "source": [ "## Boosting" @@ -1402,7 +1402,7 @@ }, { "cell_type": "markdown", - "id": "f2b3dde2", + "id": "5bd28754", "metadata": {}, "source": [ "Here we use `GradientBoostingRegressor()` from `sklearn.ensemble`\n", @@ -1418,13 +1418,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "844fce26", + "id": "0bcc5ff1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:18.008149Z", - "iopub.status.busy": "2023-08-07T00:19:18.008037Z", - "iopub.status.idle": "2023-08-07T00:19:21.749934Z", - "shell.execute_reply": "2023-08-07T00:19:21.749526Z" + "iopub.execute_input": "2023-08-21T02:29:48.424109Z", + "iopub.status.busy": "2023-08-21T02:29:48.423996Z", + "iopub.status.idle": "2023-08-21T02:29:52.311829Z", + "shell.execute_reply": "2023-08-21T02:29:52.311492Z" } }, "outputs": [ @@ -1455,7 +1455,7 @@ }, { "cell_type": "markdown", - "id": "15f35667", + "id": "4e8553ec", "metadata": {}, "source": [ "We can see how the training error decreases with the `train_score_` attribute.\n", @@ -1466,13 +1466,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "eae8687c", + "id": "060f47eb", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:21.751640Z", - "iopub.status.busy": "2023-08-07T00:19:21.751529Z", - "iopub.status.idle": "2023-08-07T00:19:22.217916Z", - "shell.execute_reply": "2023-08-07T00:19:22.217584Z" + "iopub.execute_input": "2023-08-21T02:29:52.313643Z", + "iopub.status.busy": "2023-08-21T02:29:52.313522Z", + "iopub.status.idle": "2023-08-21T02:29:52.788145Z", + "shell.execute_reply": "2023-08-21T02:29:52.787823Z" } }, "outputs": [ @@ -1507,7 +1507,7 @@ }, { "cell_type": "markdown", - "id": "e0499e04", + "id": "3ebd0944", "metadata": {}, "source": [ "We now use the boosted model to predict `medv` on the test set:" @@ -1516,13 +1516,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "46947fc6", + "id": "43505dad", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:22.219939Z", - "iopub.status.busy": "2023-08-07T00:19:22.219785Z", - "iopub.status.idle": "2023-08-07T00:19:22.232084Z", - "shell.execute_reply": "2023-08-07T00:19:22.231779Z" + "iopub.execute_input": "2023-08-21T02:29:52.789753Z", + "iopub.status.busy": "2023-08-21T02:29:52.789632Z", + "iopub.status.idle": "2023-08-21T02:29:52.801529Z", + "shell.execute_reply": "2023-08-21T02:29:52.801234Z" } }, "outputs": [ @@ -1544,7 +1544,7 @@ }, { "cell_type": "markdown", - "id": "07d3ccd4", + "id": "7f76bb89", "metadata": {}, "source": [ " The test MSE obtained is 14.48,\n", @@ -1557,13 +1557,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "f67fdfec", + "id": "c0a03126", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:22.233692Z", - "iopub.status.busy": "2023-08-07T00:19:22.233584Z", - "iopub.status.idle": "2023-08-07T00:19:24.675084Z", - "shell.execute_reply": "2023-08-07T00:19:24.674626Z" + "iopub.execute_input": "2023-08-21T02:29:52.803315Z", + "iopub.status.busy": "2023-08-21T02:29:52.803174Z", + "iopub.status.idle": "2023-08-21T02:29:55.330726Z", + "shell.execute_reply": "2023-08-21T02:29:55.330425Z" }, "lines_to_next_cell": 2 }, @@ -1592,7 +1592,7 @@ }, { "cell_type": "markdown", - "id": "f767c57a", + "id": "cbcad91c", "metadata": {}, "source": [ "In this case, using $\\lambda=0.2$ leads to a almost the same test MSE\n", @@ -1603,7 +1603,7 @@ }, { "cell_type": "markdown", - "id": "37cf0481", + "id": "8d561719", "metadata": {}, "source": [ "## Bayesian Additive Regression Trees" @@ -1611,7 +1611,7 @@ }, { "cell_type": "markdown", - "id": "c3a3419a", + "id": "f68c0d8f", "metadata": {}, "source": [ "In this section we demonstrate a `Python` implementation of BART found in the\n", @@ -1624,13 +1624,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "06b92877", + "id": "58f6e11f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:24.676878Z", - "iopub.status.busy": "2023-08-07T00:19:24.676742Z", - "iopub.status.idle": "2023-08-07T00:19:26.416295Z", - "shell.execute_reply": "2023-08-07T00:19:26.415996Z" + "iopub.execute_input": "2023-08-21T02:29:55.332677Z", + "iopub.status.busy": "2023-08-21T02:29:55.332550Z", + "iopub.status.idle": "2023-08-21T02:29:56.797204Z", + "shell.execute_reply": "2023-08-21T02:29:56.796899Z" }, "lines_to_next_cell": 2 }, @@ -1656,7 +1656,7 @@ }, { "cell_type": "markdown", - "id": "d6d7ad70", + "id": "26e4d574", "metadata": {}, "source": [ "On this data set, with this split into test and training, we see that the test error of BART is similar to that of random forest." @@ -1665,13 +1665,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "c09cb099", + "id": "a5b1296f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:26.418098Z", - "iopub.status.busy": "2023-08-07T00:19:26.417976Z", - "iopub.status.idle": "2023-08-07T00:19:26.718709Z", - "shell.execute_reply": "2023-08-07T00:19:26.718412Z" + "iopub.execute_input": "2023-08-21T02:29:56.798892Z", + "iopub.status.busy": "2023-08-21T02:29:56.798779Z", + "iopub.status.idle": "2023-08-21T02:29:57.098494Z", + "shell.execute_reply": "2023-08-21T02:29:57.098140Z" }, "lines_to_next_cell": 2 }, @@ -1694,7 +1694,7 @@ }, { "cell_type": "markdown", - "id": "bb48211a", + "id": "92a60f97", "metadata": {}, "source": [ "We can check how many times each variable appeared in the collection of trees.\n", @@ -1704,13 +1704,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "f9d6b394", + "id": "36c52755", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:26.720402Z", - "iopub.status.busy": "2023-08-07T00:19:26.720254Z", - "iopub.status.idle": "2023-08-07T00:19:26.723384Z", - "shell.execute_reply": "2023-08-07T00:19:26.723106Z" + "iopub.execute_input": "2023-08-21T02:29:57.100444Z", + "iopub.status.busy": "2023-08-21T02:29:57.100310Z", + "iopub.status.idle": "2023-08-21T02:29:57.103577Z", + "shell.execute_reply": "2023-08-21T02:29:57.103213Z" }, "lines_to_next_cell": 0 }, @@ -1746,7 +1746,7 @@ }, { "cell_type": "markdown", - "id": "0aac2d50", + "id": "ab69e5b5", "metadata": {}, "source": [ " \n", @@ -1759,8 +1759,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "language_info": { "codemirror_mode": { diff --git a/Ch09-svm-lab.Rmd b/Ch09-svm-lab.Rmd index 0b653ef..a080775 100644 --- a/Ch09-svm-lab.Rmd +++ b/Ch09-svm-lab.Rmd @@ -1,21 +1,8 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - main_language: python - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 ---- - # Chapter 9 - + # Lab: Support Vector Machines In this lab, we use the `sklearn.svm` library to demonstrate the support @@ -39,7 +26,7 @@ from ISLP.svm import plot as plot_svm from sklearn.metrics import RocCurveDisplay ``` - + We will use the function `RocCurveDisplay.from_estimator()` to produce several ROC plots, using a shorthand `roc_curve`. @@ -84,8 +71,8 @@ svm_linear = SVC(C=10, kernel='linear') svm_linear.fit(X, y) ``` - - + + The support vector classifier with two features can be visualized by plotting values of its *decision function*. We have included a function for this in the `ISLP` package (inspired by a similar @@ -99,7 +86,7 @@ plot_svm(X, ax=ax) ``` - + The decision boundary between the two classes is linear (because we used the argument `kernel='linear'`). The support vectors are marked with `+` @@ -126,8 +113,8 @@ coefficients of the linear decision boundary as follows: svm_linear.coef_ ``` - - + + Since the support vector machine is an estimator in `sklearn`, we can use the usual machinery to tune it. @@ -144,8 +131,8 @@ grid.fit(X, y) grid.best_params_ ``` - - + + We can easily access the cross-validation errors for each of these models in `grid.cv_results_`. This prints out a lot of detail, so we extract the accuracy results only. @@ -166,7 +153,7 @@ y_test = np.array([-1]*10+[1]*10) X_test[y_test==1] += 1 ``` - + Now we predict the class labels of these test observations. Here we use the best model selected by cross-validation in order to make the predictions. @@ -177,7 +164,7 @@ y_test_hat = best_.predict(X_test) confusion_table(y_test_hat, y_test) ``` - + Thus, with this value of `C`, 70% of the test observations are correctly classified. What if we had instead used @@ -190,7 +177,7 @@ y_test_hat = svm_.predict(X_test) confusion_table(y_test_hat, y_test) ``` - + In this case 60% of test observations are correctly classified. We now consider a situation in which the two classes are linearly @@ -205,7 +192,7 @@ fig, ax = subplots(figsize=(8,8)) ax.scatter(X[:,0], X[:,1], c=y, cmap=cm.coolwarm); ``` - + Now the observations are just barely linearly separable. ```{python} @@ -214,7 +201,7 @@ y_hat = svm_.predict(X) confusion_table(y_hat, y) ``` - + We fit the support vector classifier and plot the resulting hyperplane, using a very large value of `C` so that no observations are @@ -240,7 +227,7 @@ y_hat = svm_.predict(X) confusion_table(y_hat, y) ``` - + Using `C=0.1`, we again do not misclassify any training observations, but we also obtain a much wider margin and make use of twelve support vectors. These jointly define the orientation of the decision boundary, and since there are more of them, it is more stable. It seems possible that this model will perform better on test @@ -254,7 +241,7 @@ plot_svm(X, ax=ax) ``` - + ## Support Vector Machine In order to fit an SVM using a non-linear kernel, we once again use @@ -277,7 +264,7 @@ X[100:150] -= 2 y = np.array([1]*150+[2]*50) ``` - + Plotting the data makes it clear that the class boundary is indeed non-linear. ```{python} @@ -288,8 +275,8 @@ ax.scatter(X[:,0], cmap=cm.coolwarm) ``` - - + + The data is randomly split into training and testing groups. We then fit the training data using the `SVC()` estimator with a radial kernel and $\gamma=1$: @@ -306,7 +293,7 @@ svm_rbf = SVC(kernel="rbf", gamma=1, C=1) svm_rbf.fit(X_train, y_train) ``` - + The plot shows that the resulting SVM has a decidedly non-linear boundary. @@ -318,7 +305,7 @@ plot_svm(X_train, ax=ax) ``` - + We can see from the figure that there are a fair number of training errors in this SVM fit. If we increase the value of `C`, we can reduce the number of training errors. However, this comes at the @@ -335,7 +322,7 @@ plot_svm(X_train, ax=ax) ``` - + We can perform cross-validation using `skm.GridSearchCV()` to select the best choice of $\gamma$ and `C` for an SVM with a radial kernel: @@ -354,7 +341,7 @@ grid.fit(X_train, y_train) grid.best_params_ ``` - + The best choice of parameters under five-fold CV is achieved at `C=1` and `gamma=0.5`, though several other values also achieve the same value. @@ -371,7 +358,7 @@ y_hat_test = best_svm.predict(X_test) confusion_table(y_hat_test, y_test) ``` - + With these parameters, 12% of test observations are misclassified by this SVM. @@ -431,7 +418,7 @@ roc_curve(svm_flex, ax=ax); ``` - + However, these ROC curves are all on the training data. We are really more interested in the level of prediction accuracy on the test data. When we compute the ROC curves on the test data, the model with @@ -447,7 +434,7 @@ roc_curve(svm_flex, fig; ``` - + Let’s look at our tuned SVM. ```{python} @@ -466,7 +453,7 @@ for (X_, y_, c, name) in zip( color=c) ``` - + ## SVM with Multiple Classes If the response is a factor containing more than two levels, then the @@ -485,7 +472,7 @@ fig, ax = subplots(figsize=(8,8)) ax.scatter(X[:,0], X[:,1], c=y, cmap=cm.coolwarm); ``` - + We now fit an SVM to the data: ```{python} @@ -521,7 +508,7 @@ Khan = load_data('Khan') Khan['xtrain'].shape, Khan['xtest'].shape ``` - + This data set consists of expression measurements for 2,308 genes. The training and test sets consist of 63 and 20 observations, respectively. @@ -540,7 +527,7 @@ confusion_table(khan_linear.predict(Khan['xtrain']), Khan['ytrain']) ``` - + We see that there are *no* training errors. In fact, this is not surprising, because the large number of variables relative to the number of observations implies that it is @@ -553,7 +540,7 @@ confusion_table(khan_linear.predict(Khan['xtest']), Khan['ytest']) ``` - + We see that using `C=10` yields two test set errors on these data. diff --git a/Ch09-svm-lab.ipynb b/Ch09-svm-lab.ipynb index c6863a2..5e0676e 100644 --- a/Ch09-svm-lab.ipynb +++ b/Ch09-svm-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "d45c6d2b", + "id": "30b873f3", "metadata": {}, "source": [ "\n", @@ -12,7 +12,7 @@ }, { "cell_type": "markdown", - "id": "94d1e03c", + "id": "3e06bca8", "metadata": {}, "source": [ "# Lab: Support Vector Machines\n", @@ -25,13 +25,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "eeaa5be0", + "id": "3973b95f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:27.947789Z", - "iopub.status.busy": "2023-08-07T00:19:27.947634Z", - "iopub.status.idle": "2023-08-07T00:19:28.991210Z", - "shell.execute_reply": "2023-08-07T00:19:28.990616Z" + "iopub.execute_input": "2023-08-21T02:29:58.477582Z", + "iopub.status.busy": "2023-08-21T02:29:58.477467Z", + "iopub.status.idle": "2023-08-21T02:29:59.432527Z", + "shell.execute_reply": "2023-08-21T02:29:59.432225Z" }, "lines_to_next_cell": 0 }, @@ -45,7 +45,7 @@ }, { "cell_type": "markdown", - "id": "26ebd377", + "id": "631b7d3d", "metadata": {}, "source": [ "We also collect the new imports\n", @@ -55,13 +55,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "41a59634", + "id": "0161e55e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:28.993557Z", - "iopub.status.busy": "2023-08-07T00:19:28.993245Z", - "iopub.status.idle": "2023-08-07T00:19:29.028199Z", - "shell.execute_reply": "2023-08-07T00:19:29.027857Z" + "iopub.execute_input": "2023-08-21T02:29:59.434432Z", + "iopub.status.busy": "2023-08-21T02:29:59.434258Z", + "iopub.status.idle": "2023-08-21T02:29:59.466972Z", + "shell.execute_reply": "2023-08-21T02:29:59.466647Z" } }, "outputs": [], @@ -73,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "f197b846", + "id": "b397af05", "metadata": {}, "source": [ "We will use the function `RocCurveDisplay.from_estimator()` to\n", @@ -83,13 +83,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "c9a175d7", + "id": "7661b056", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.030225Z", - "iopub.status.busy": "2023-08-07T00:19:29.030097Z", - "iopub.status.idle": "2023-08-07T00:19:29.032026Z", - "shell.execute_reply": "2023-08-07T00:19:29.031756Z" + "iopub.execute_input": "2023-08-21T02:29:59.469128Z", + "iopub.status.busy": "2023-08-21T02:29:59.468999Z", + "iopub.status.idle": "2023-08-21T02:29:59.470961Z", + "shell.execute_reply": "2023-08-21T02:29:59.470667Z" } }, "outputs": [], @@ -99,7 +99,7 @@ }, { "cell_type": "markdown", - "id": "f666c212", + "id": "38115984", "metadata": {}, "source": [ "## Support Vector Classifier\n", @@ -123,13 +123,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "a7216b47", + "id": "46e9ab84", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.033695Z", - "iopub.status.busy": "2023-08-07T00:19:29.033581Z", - "iopub.status.idle": "2023-08-07T00:19:29.207161Z", - "shell.execute_reply": "2023-08-07T00:19:29.205980Z" + "iopub.execute_input": "2023-08-21T02:29:59.472867Z", + "iopub.status.busy": "2023-08-21T02:29:59.472726Z", + "iopub.status.idle": "2023-08-21T02:29:59.583508Z", + "shell.execute_reply": "2023-08-21T02:29:59.583126Z" }, "lines_to_next_cell": 0 }, @@ -159,7 +159,7 @@ }, { "cell_type": "markdown", - "id": "7b4aff06", + "id": "a9766d18", "metadata": {}, "source": [ "They are not. We now fit the classifier." @@ -168,13 +168,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "ed329198", + "id": "605ffdc0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.211951Z", - "iopub.status.busy": "2023-08-07T00:19:29.211403Z", - "iopub.status.idle": "2023-08-07T00:19:29.220643Z", - "shell.execute_reply": "2023-08-07T00:19:29.219858Z" + "iopub.execute_input": "2023-08-21T02:29:59.585485Z", + "iopub.status.busy": "2023-08-21T02:29:59.585317Z", + "iopub.status.idle": "2023-08-21T02:29:59.590274Z", + "shell.execute_reply": "2023-08-21T02:29:59.589979Z" }, "lines_to_next_cell": 2 }, @@ -200,7 +200,7 @@ }, { "cell_type": "markdown", - "id": "5e6b4c79", + "id": "16215b77", "metadata": {}, "source": [ "The support vector classifier with two features can\n", @@ -212,13 +212,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "95494b8b", + "id": "302a49a1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.224179Z", - "iopub.status.busy": "2023-08-07T00:19:29.223775Z", - "iopub.status.idle": "2023-08-07T00:19:29.400927Z", - "shell.execute_reply": "2023-08-07T00:19:29.400620Z" + "iopub.execute_input": "2023-08-21T02:29:59.591976Z", + "iopub.status.busy": "2023-08-21T02:29:59.591865Z", + "iopub.status.idle": "2023-08-21T02:29:59.734225Z", + "shell.execute_reply": "2023-08-21T02:29:59.733936Z" } }, "outputs": [ @@ -243,7 +243,7 @@ }, { "cell_type": "markdown", - "id": "f6ce1246", + "id": "6010e865", "metadata": {}, "source": [ "The decision\n", @@ -257,13 +257,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "98c2236f", + "id": "cc1d6a13", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.402894Z", - "iopub.status.busy": "2023-08-07T00:19:29.402744Z", - "iopub.status.idle": "2023-08-07T00:19:29.544636Z", - "shell.execute_reply": "2023-08-07T00:19:29.544249Z" + "iopub.execute_input": "2023-08-21T02:29:59.735943Z", + "iopub.status.busy": "2023-08-21T02:29:59.735816Z", + "iopub.status.idle": "2023-08-21T02:29:59.878335Z", + "shell.execute_reply": "2023-08-21T02:29:59.878032Z" }, "lines_to_next_cell": 0 }, @@ -291,7 +291,7 @@ }, { "cell_type": "markdown", - "id": "906f4bb8", + "id": "301d764d", "metadata": {}, "source": [ "With a smaller value of the cost parameter, we\n", @@ -303,13 +303,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "b498f594", + "id": "6133c846", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.546722Z", - "iopub.status.busy": "2023-08-07T00:19:29.546549Z", - "iopub.status.idle": "2023-08-07T00:19:29.549088Z", - "shell.execute_reply": "2023-08-07T00:19:29.548814Z" + "iopub.execute_input": "2023-08-21T02:29:59.880078Z", + "iopub.status.busy": "2023-08-21T02:29:59.879965Z", + "iopub.status.idle": "2023-08-21T02:29:59.882347Z", + "shell.execute_reply": "2023-08-21T02:29:59.882070Z" }, "lines_to_next_cell": 2 }, @@ -331,7 +331,7 @@ }, { "cell_type": "markdown", - "id": "90a0ee53", + "id": "0693b3eb", "metadata": {}, "source": [ "Since the support vector machine is an estimator in `sklearn`, we\n", @@ -341,13 +341,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "b65e80d6", + "id": "9adb3793", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.550593Z", - "iopub.status.busy": "2023-08-07T00:19:29.550485Z", - "iopub.status.idle": "2023-08-07T00:19:29.578952Z", - "shell.execute_reply": "2023-08-07T00:19:29.578657Z" + "iopub.execute_input": "2023-08-21T02:29:59.883852Z", + "iopub.status.busy": "2023-08-21T02:29:59.883749Z", + "iopub.status.idle": "2023-08-21T02:29:59.910535Z", + "shell.execute_reply": "2023-08-21T02:29:59.910272Z" }, "lines_to_next_cell": 2 }, @@ -378,7 +378,7 @@ }, { "cell_type": "markdown", - "id": "d390528c", + "id": "611e76a6", "metadata": {}, "source": [ "We can easily access the cross-validation errors for each of these models\n", @@ -389,13 +389,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "bba8fad7", + "id": "d3ab343e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.580977Z", - "iopub.status.busy": "2023-08-07T00:19:29.580845Z", - "iopub.status.idle": "2023-08-07T00:19:29.583558Z", - "shell.execute_reply": "2023-08-07T00:19:29.583239Z" + "iopub.execute_input": "2023-08-21T02:29:59.912005Z", + "iopub.status.busy": "2023-08-21T02:29:59.911925Z", + "iopub.status.idle": "2023-08-21T02:29:59.914189Z", + "shell.execute_reply": "2023-08-21T02:29:59.913943Z" }, "lines_to_next_cell": 0 }, @@ -417,7 +417,7 @@ }, { "cell_type": "markdown", - "id": "703e2d43", + "id": "41d85a2a", "metadata": {}, "source": [ "We see that `C=1` results in the highest cross-validation\n", @@ -430,13 +430,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "ad64269d", + "id": "6aba117e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.585087Z", - "iopub.status.busy": "2023-08-07T00:19:29.584981Z", - "iopub.status.idle": "2023-08-07T00:19:29.586995Z", - "shell.execute_reply": "2023-08-07T00:19:29.586714Z" + "iopub.execute_input": "2023-08-21T02:29:59.915563Z", + "iopub.status.busy": "2023-08-21T02:29:59.915487Z", + "iopub.status.idle": "2023-08-21T02:29:59.917323Z", + "shell.execute_reply": "2023-08-21T02:29:59.917078Z" } }, "outputs": [], @@ -448,7 +448,7 @@ }, { "cell_type": "markdown", - "id": "db41f5e2", + "id": "ddbda9de", "metadata": {}, "source": [ "Now we predict the class labels of these test observations. Here we\n", @@ -459,13 +459,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "5107fca1", + "id": "dbe7d737", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.588685Z", - "iopub.status.busy": "2023-08-07T00:19:29.588519Z", - "iopub.status.idle": "2023-08-07T00:19:29.595768Z", - "shell.execute_reply": "2023-08-07T00:19:29.595341Z" + "iopub.execute_input": "2023-08-21T02:29:59.918744Z", + "iopub.status.busy": "2023-08-21T02:29:59.918666Z", + "iopub.status.idle": "2023-08-21T02:29:59.925361Z", + "shell.execute_reply": "2023-08-21T02:29:59.925039Z" } }, "outputs": [ @@ -534,7 +534,7 @@ }, { "cell_type": "markdown", - "id": "bbfc8005", + "id": "7f002ea6", "metadata": {}, "source": [ "Thus, with this value of `C`,\n", @@ -546,13 +546,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "0320d9e0", + "id": "ab1697c2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.597509Z", - "iopub.status.busy": "2023-08-07T00:19:29.597387Z", - "iopub.status.idle": "2023-08-07T00:19:29.602346Z", - "shell.execute_reply": "2023-08-07T00:19:29.601964Z" + "iopub.execute_input": "2023-08-21T02:29:59.927158Z", + "iopub.status.busy": "2023-08-21T02:29:59.927027Z", + "iopub.status.idle": "2023-08-21T02:29:59.931558Z", + "shell.execute_reply": "2023-08-21T02:29:59.931228Z" } }, "outputs": [ @@ -622,7 +622,7 @@ }, { "cell_type": "markdown", - "id": "427d775f", + "id": "7574703a", "metadata": {}, "source": [ "In this case 60% of test observations are correctly classified.\n", @@ -637,13 +637,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "84d7e778", + "id": "0fd42b1e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.604018Z", - "iopub.status.busy": "2023-08-07T00:19:29.603879Z", - "iopub.status.idle": "2023-08-07T00:19:29.734586Z", - "shell.execute_reply": "2023-08-07T00:19:29.734264Z" + "iopub.execute_input": "2023-08-21T02:29:59.933100Z", + "iopub.status.busy": "2023-08-21T02:29:59.933001Z", + "iopub.status.idle": "2023-08-21T02:30:00.054738Z", + "shell.execute_reply": "2023-08-21T02:30:00.054338Z" } }, "outputs": [ @@ -666,7 +666,7 @@ }, { "cell_type": "markdown", - "id": "ff7bdad1", + "id": "4bdaf415", "metadata": {}, "source": [ "Now the observations are just barely linearly separable." @@ -675,13 +675,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "abb1f8be", + "id": "09c15299", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.736388Z", - "iopub.status.busy": "2023-08-07T00:19:29.736251Z", - "iopub.status.idle": "2023-08-07T00:19:29.741179Z", - "shell.execute_reply": "2023-08-07T00:19:29.740886Z" + "iopub.execute_input": "2023-08-21T02:30:00.056655Z", + "iopub.status.busy": "2023-08-21T02:30:00.056526Z", + "iopub.status.idle": "2023-08-21T02:30:00.061096Z", + "shell.execute_reply": "2023-08-21T02:30:00.060792Z" } }, "outputs": [ @@ -750,7 +750,7 @@ }, { "cell_type": "markdown", - "id": "c44297cc", + "id": "d987eecc", "metadata": {}, "source": [ "We fit the\n", @@ -762,13 +762,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "2e4ed2f5", + "id": "d5fd2ff9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.742864Z", - "iopub.status.busy": "2023-08-07T00:19:29.742750Z", - "iopub.status.idle": "2023-08-07T00:19:29.860686Z", - "shell.execute_reply": "2023-08-07T00:19:29.860305Z" + "iopub.execute_input": "2023-08-21T02:30:00.062673Z", + "iopub.status.busy": "2023-08-21T02:30:00.062585Z", + "iopub.status.idle": "2023-08-21T02:30:00.199860Z", + "shell.execute_reply": "2023-08-21T02:30:00.199129Z" }, "lines_to_next_cell": 0 }, @@ -794,7 +794,7 @@ }, { "cell_type": "markdown", - "id": "2836d70d", + "id": "0834d471", "metadata": {}, "source": [ "Indeed no training errors were made and only three support vectors were used.\n", @@ -807,13 +807,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "164a611c", + "id": "39aff1b1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.862647Z", - "iopub.status.busy": "2023-08-07T00:19:29.862496Z", - "iopub.status.idle": "2023-08-07T00:19:29.867261Z", - "shell.execute_reply": "2023-08-07T00:19:29.866916Z" + "iopub.execute_input": "2023-08-21T02:30:00.202380Z", + "iopub.status.busy": "2023-08-21T02:30:00.202233Z", + "iopub.status.idle": "2023-08-21T02:30:00.207886Z", + "shell.execute_reply": "2023-08-21T02:30:00.207493Z" } }, "outputs": [ @@ -882,7 +882,7 @@ }, { "cell_type": "markdown", - "id": "39a432d1", + "id": "d0684844", "metadata": {}, "source": [ "Using `C=0.1`, we again do not misclassify any training observations, but we\n", @@ -894,13 +894,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "c67591a1", + "id": "63a9d752", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.868821Z", - "iopub.status.busy": "2023-08-07T00:19:29.868723Z", - "iopub.status.idle": "2023-08-07T00:19:29.990207Z", - "shell.execute_reply": "2023-08-07T00:19:29.989921Z" + "iopub.execute_input": "2023-08-21T02:30:00.209907Z", + "iopub.status.busy": "2023-08-21T02:30:00.209781Z", + "iopub.status.idle": "2023-08-21T02:30:00.340803Z", + "shell.execute_reply": "2023-08-21T02:30:00.340433Z" }, "lines_to_next_cell": 2 }, @@ -926,7 +926,7 @@ }, { "cell_type": "markdown", - "id": "25e61f65", + "id": "a70d84f4", "metadata": {}, "source": [ "## Support Vector Machine\n", @@ -947,13 +947,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "322be574", + "id": "2fee8df5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.991910Z", - "iopub.status.busy": "2023-08-07T00:19:29.991799Z", - "iopub.status.idle": "2023-08-07T00:19:29.993907Z", - "shell.execute_reply": "2023-08-07T00:19:29.993635Z" + "iopub.execute_input": "2023-08-21T02:30:00.342773Z", + "iopub.status.busy": "2023-08-21T02:30:00.342626Z", + "iopub.status.idle": "2023-08-21T02:30:00.345094Z", + "shell.execute_reply": "2023-08-21T02:30:00.344774Z" } }, "outputs": [], @@ -966,7 +966,7 @@ }, { "cell_type": "markdown", - "id": "22fe2182", + "id": "d5c7545e", "metadata": {}, "source": [ "Plotting the data makes it clear that the class boundary is indeed non-linear." @@ -975,13 +975,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "04fda182", + "id": "48f01abe", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:29.995558Z", - "iopub.status.busy": "2023-08-07T00:19:29.995406Z", - "iopub.status.idle": "2023-08-07T00:19:30.089596Z", - "shell.execute_reply": "2023-08-07T00:19:30.089130Z" + "iopub.execute_input": "2023-08-21T02:30:00.347053Z", + "iopub.status.busy": "2023-08-21T02:30:00.346902Z", + "iopub.status.idle": "2023-08-21T02:30:00.440453Z", + "shell.execute_reply": "2023-08-21T02:30:00.440153Z" }, "lines_to_next_cell": 2 }, @@ -989,7 +989,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -1017,7 +1017,7 @@ }, { "cell_type": "markdown", - "id": "64913fe3", + "id": "7c0bc32b", "metadata": {}, "source": [ "The data is randomly split into training and testing groups. We then\n", @@ -1028,13 +1028,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "0c2690d1", + "id": "4acc3246", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.091605Z", - "iopub.status.busy": "2023-08-07T00:19:30.091498Z", - "iopub.status.idle": "2023-08-07T00:19:30.095614Z", - "shell.execute_reply": "2023-08-07T00:19:30.095347Z" + "iopub.execute_input": "2023-08-21T02:30:00.442257Z", + "iopub.status.busy": "2023-08-21T02:30:00.442156Z", + "iopub.status.idle": "2023-08-21T02:30:00.446674Z", + "shell.execute_reply": "2023-08-21T02:30:00.446369Z" } }, "outputs": [ @@ -1066,7 +1066,7 @@ }, { "cell_type": "markdown", - "id": "5da9efdb", + "id": "b2c7e95e", "metadata": {}, "source": [ "The plot shows that the resulting SVM has a decidedly non-linear\n", @@ -1076,13 +1076,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "3eb171e8", + "id": "e9852a28", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.097178Z", - "iopub.status.busy": "2023-08-07T00:19:30.097088Z", - "iopub.status.idle": "2023-08-07T00:19:30.357131Z", - "shell.execute_reply": "2023-08-07T00:19:30.356847Z" + "iopub.execute_input": "2023-08-21T02:30:00.448268Z", + "iopub.status.busy": "2023-08-21T02:30:00.448160Z", + "iopub.status.idle": "2023-08-21T02:30:00.828511Z", + "shell.execute_reply": "2023-08-21T02:30:00.828128Z" } }, "outputs": [ @@ -1107,7 +1107,7 @@ }, { "cell_type": "markdown", - "id": "ab5b1446", + "id": "acfa4bed", "metadata": {}, "source": [ "We can see from the figure that there are a fair number of training\n", @@ -1120,13 +1120,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "9a6b905b", + "id": "01232fc9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.358811Z", - "iopub.status.busy": "2023-08-07T00:19:30.358698Z", - "iopub.status.idle": "2023-08-07T00:19:30.513702Z", - "shell.execute_reply": "2023-08-07T00:19:30.513395Z" + "iopub.execute_input": "2023-08-21T02:30:00.830365Z", + "iopub.status.busy": "2023-08-21T02:30:00.830226Z", + "iopub.status.idle": "2023-08-21T02:30:01.132677Z", + "shell.execute_reply": "2023-08-21T02:30:01.132224Z" } }, "outputs": [ @@ -1153,7 +1153,7 @@ }, { "cell_type": "markdown", - "id": "300c1b8b", + "id": "5bc77e3f", "metadata": {}, "source": [ "We can perform cross-validation using `skm.GridSearchCV()` to select the\n", @@ -1164,13 +1164,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "5ab01d6c", + "id": "bcbd15a4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.515803Z", - "iopub.status.busy": "2023-08-07T00:19:30.515668Z", - "iopub.status.idle": "2023-08-07T00:19:30.612245Z", - "shell.execute_reply": "2023-08-07T00:19:30.611940Z" + "iopub.execute_input": "2023-08-21T02:30:01.134616Z", + "iopub.status.busy": "2023-08-21T02:30:01.134486Z", + "iopub.status.idle": "2023-08-21T02:30:01.243519Z", + "shell.execute_reply": "2023-08-21T02:30:01.243203Z" } }, "outputs": [ @@ -1201,7 +1201,7 @@ }, { "cell_type": "markdown", - "id": "1bb987ae", + "id": "997bbfbd", "metadata": {}, "source": [ "The best choice of parameters under five-fold CV is achieved at `C=1`\n", @@ -1212,13 +1212,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "166a6acb", + "id": "28ca551e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.614152Z", - "iopub.status.busy": "2023-08-07T00:19:30.614029Z", - "iopub.status.idle": "2023-08-07T00:19:30.850984Z", - "shell.execute_reply": "2023-08-07T00:19:30.850653Z" + "iopub.execute_input": "2023-08-21T02:30:01.245550Z", + "iopub.status.busy": "2023-08-21T02:30:01.245377Z", + "iopub.status.idle": "2023-08-21T02:30:01.600896Z", + "shell.execute_reply": "2023-08-21T02:30:01.600574Z" } }, "outputs": [ @@ -1303,7 +1303,7 @@ }, { "cell_type": "markdown", - "id": "39ee6f32", + "id": "48e671f4", "metadata": {}, "source": [ "With these parameters, 12% of test\n", @@ -1312,7 +1312,7 @@ }, { "cell_type": "markdown", - "id": "f0ea699d", + "id": "eaed0a87", "metadata": {}, "source": [ "## ROC Curves\n", @@ -1346,13 +1346,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "0607fc41", + "id": "68ac9421", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.853079Z", - "iopub.status.busy": "2023-08-07T00:19:30.852934Z", - "iopub.status.idle": "2023-08-07T00:19:30.948570Z", - "shell.execute_reply": "2023-08-07T00:19:30.948252Z" + "iopub.execute_input": "2023-08-21T02:30:01.602740Z", + "iopub.status.busy": "2023-08-21T02:30:01.602614Z", + "iopub.status.idle": "2023-08-21T02:30:01.698620Z", + "shell.execute_reply": "2023-08-21T02:30:01.698322Z" }, "lines_to_next_cell": 0 }, @@ -1380,7 +1380,7 @@ }, { "cell_type": "markdown", - "id": "54446e71", + "id": "0c35d32a", "metadata": {}, "source": [ " In this example, the SVM appears to provide accurate predictions. By increasing\n", @@ -1391,13 +1391,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "5211a882", + "id": "f79a9e0a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:30.950213Z", - "iopub.status.busy": "2023-08-07T00:19:30.950106Z", - "iopub.status.idle": "2023-08-07T00:19:31.095103Z", - "shell.execute_reply": "2023-08-07T00:19:31.094737Z" + "iopub.execute_input": "2023-08-21T02:30:01.700479Z", + "iopub.status.busy": "2023-08-21T02:30:01.700347Z", + "iopub.status.idle": "2023-08-21T02:30:01.837479Z", + "shell.execute_reply": "2023-08-21T02:30:01.837102Z" } }, "outputs": [ @@ -1428,7 +1428,7 @@ }, { "cell_type": "markdown", - "id": "de7e4be8", + "id": "7bd1a22b", "metadata": {}, "source": [ "However, these ROC curves are all on the training data. We are really\n", @@ -1440,13 +1440,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "12acc4ff", + "id": "bdb9e503", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.096951Z", - "iopub.status.busy": "2023-08-07T00:19:31.096805Z", - "iopub.status.idle": "2023-08-07T00:19:31.101372Z", - "shell.execute_reply": "2023-08-07T00:19:31.101097Z" + "iopub.execute_input": "2023-08-21T02:30:01.839390Z", + "iopub.status.busy": "2023-08-21T02:30:01.839243Z", + "iopub.status.idle": "2023-08-21T02:30:01.843595Z", + "shell.execute_reply": "2023-08-21T02:30:01.843287Z" } }, "outputs": [], @@ -1462,7 +1462,7 @@ }, { "cell_type": "markdown", - "id": "eb5c8aeb", + "id": "8a42e924", "metadata": {}, "source": [ "Let’s look at our tuned SVM." @@ -1471,13 +1471,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "21c81913", + "id": "329f5d2c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.103089Z", - "iopub.status.busy": "2023-08-07T00:19:31.102993Z", - "iopub.status.idle": "2023-08-07T00:19:31.204133Z", - "shell.execute_reply": "2023-08-07T00:19:31.203835Z" + "iopub.execute_input": "2023-08-21T02:30:01.845300Z", + "iopub.status.busy": "2023-08-21T02:30:01.845201Z", + "iopub.status.idle": "2023-08-21T02:30:01.944073Z", + "shell.execute_reply": "2023-08-21T02:30:01.943763Z" } }, "outputs": [ @@ -1510,7 +1510,7 @@ }, { "cell_type": "markdown", - "id": "b9fefe9f", + "id": "bac19279", "metadata": {}, "source": [ "## SVM with Multiple Classes\n", @@ -1526,13 +1526,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "2fff4fa8", + "id": "267e113d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.205816Z", - "iopub.status.busy": "2023-08-07T00:19:31.205709Z", - "iopub.status.idle": "2023-08-07T00:19:31.294925Z", - "shell.execute_reply": "2023-08-07T00:19:31.294593Z" + "iopub.execute_input": "2023-08-21T02:30:01.945725Z", + "iopub.status.busy": "2023-08-21T02:30:01.945611Z", + "iopub.status.idle": "2023-08-21T02:30:02.034378Z", + "shell.execute_reply": "2023-08-21T02:30:02.034069Z" } }, "outputs": [ @@ -1558,7 +1558,7 @@ }, { "cell_type": "markdown", - "id": "b7adc87d", + "id": "a9f4297c", "metadata": {}, "source": [ "We now fit an SVM to the data:" @@ -1567,13 +1567,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "5396f2df", + "id": "64cbebd0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.296594Z", - "iopub.status.busy": "2023-08-07T00:19:31.296472Z", - "iopub.status.idle": "2023-08-07T00:19:31.880175Z", - "shell.execute_reply": "2023-08-07T00:19:31.879674Z" + "iopub.execute_input": "2023-08-21T02:30:02.036083Z", + "iopub.status.busy": "2023-08-21T02:30:02.035963Z", + "iopub.status.idle": "2023-08-21T02:30:03.015535Z", + "shell.execute_reply": "2023-08-21T02:30:03.014798Z" }, "lines_to_next_cell": 0 }, @@ -1605,7 +1605,7 @@ }, { "cell_type": "markdown", - "id": "837644f5", + "id": "62c5d16e", "metadata": {}, "source": [ "The `sklearn.svm` library can also be used to perform support vector\n", @@ -1614,7 +1614,7 @@ }, { "cell_type": "markdown", - "id": "a6bc0cbc", + "id": "5c0824b6", "metadata": {}, "source": [ "## Application to Gene Expression Data\n", @@ -1631,13 +1631,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "f63c575e", + "id": "b6e6f12b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.882095Z", - "iopub.status.busy": "2023-08-07T00:19:31.881962Z", - "iopub.status.idle": "2023-08-07T00:19:31.959079Z", - "shell.execute_reply": "2023-08-07T00:19:31.958769Z" + "iopub.execute_input": "2023-08-21T02:30:03.017430Z", + "iopub.status.busy": "2023-08-21T02:30:03.017293Z", + "iopub.status.idle": "2023-08-21T02:30:03.099156Z", + "shell.execute_reply": "2023-08-21T02:30:03.098760Z" } }, "outputs": [ @@ -1659,7 +1659,7 @@ }, { "cell_type": "markdown", - "id": "bfd6492c", + "id": "e3fbaa58", "metadata": {}, "source": [ "This data set consists of expression measurements for 2,308\n", @@ -1677,13 +1677,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "32091338", + "id": "273a10b2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.960641Z", - "iopub.status.busy": "2023-08-07T00:19:31.960528Z", - "iopub.status.idle": "2023-08-07T00:19:31.990176Z", - "shell.execute_reply": "2023-08-07T00:19:31.989868Z" + "iopub.execute_input": "2023-08-21T02:30:03.101069Z", + "iopub.status.busy": "2023-08-21T02:30:03.100881Z", + "iopub.status.idle": "2023-08-21T02:30:03.130224Z", + "shell.execute_reply": "2023-08-21T02:30:03.129845Z" } }, "outputs": [ @@ -1777,7 +1777,7 @@ }, { "cell_type": "markdown", - "id": "23043ab0", + "id": "31cad43a", "metadata": {}, "source": [ "We see that there are *no* training\n", @@ -1791,13 +1791,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "d9058023", + "id": "bc3079a7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:31.991754Z", - "iopub.status.busy": "2023-08-07T00:19:31.991636Z", - "iopub.status.idle": "2023-08-07T00:19:32.002452Z", - "shell.execute_reply": "2023-08-07T00:19:32.002189Z" + "iopub.execute_input": "2023-08-21T02:30:03.132111Z", + "iopub.status.busy": "2023-08-21T02:30:03.131975Z", + "iopub.status.idle": "2023-08-21T02:30:03.143298Z", + "shell.execute_reply": "2023-08-21T02:30:03.142948Z" } }, "outputs": [ @@ -1889,7 +1889,7 @@ }, { "cell_type": "markdown", - "id": "d0d5aba4", + "id": "0d059312", "metadata": {}, "source": [ "We see that using `C=10` yields two test set errors on these data.\n", @@ -1900,8 +1900,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "language_info": { "codemirror_mode": { diff --git a/Ch11-surv-lab.Rmd b/Ch11-surv-lab.Rmd index 37c258b..6fe7020 100644 --- a/Ch11-surv-lab.Rmd +++ b/Ch11-surv-lab.Rmd @@ -1,16 +1,3 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - main_language: python - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 ---- - # Chapter 11 @@ -37,7 +24,7 @@ from ISLP.models import ModelSpec as MS from ISLP import load_data ``` - + We also collect the new imports needed for this lab. @@ -61,7 +48,7 @@ BrainCancer = load_data('BrainCancer') BrainCancer.columns ``` - + The rows index the 88 patients, while the 8 columns contain the predictors and outcome variables. We first briefly examine the data. @@ -69,20 +56,20 @@ We first briefly examine the data. BrainCancer['sex'].value_counts() ``` - + ```{python} BrainCancer['diagnosis'].value_counts() ``` - + ```{python} BrainCancer['status'].value_counts() ``` - - + + Before beginning an analysis, it is important to know how the `status` variable has been coded. Most software uses the convention that a `status` of 1 indicates an @@ -109,7 +96,7 @@ km_brain = km.fit(BrainCancer['time'], BrainCancer['status']) km_brain.plot(label='Kaplan Meier estimate', ax=ax) ``` - + Next we create Kaplan-Meier survival curves that are stratified by `sex`, in order to reproduce Figure 11.3. We do this using the `groupby()` method of a dataframe. @@ -138,7 +125,7 @@ for sex, df in BrainCancer.groupby('sex'): km_sex.plot(label='Sex=%s' % sex, ax=ax) ``` - + As discussed in Section 11.4, we can perform a log-rank test to compare the survival of males to females. We use the `logrank_test()` function from the `lifelines.statistics` module. @@ -152,8 +139,8 @@ logrank_test(by_sex['Male']['time'], by_sex['Female']['status']) ``` - - + + The resulting $p$-value is $0.23$, indicating no evidence of a difference in survival between the two sexes. @@ -172,7 +159,7 @@ cox_fit = coxph().fit(model_df, cox_fit.summary[['coef', 'se(coef)', 'p']] ``` - + The first argument to `fit` should be a data frame containing at least the event time (the second argument `time` in this case), as well as an optional censoring variable (the argument `status` in this case). @@ -186,7 +173,7 @@ with no features as follows: cox_fit.log_likelihood_ratio_test() ``` - + Regardless of which test we use, we see that there is no clear evidence for a difference in survival between males and females. As we learned in this chapter, the score test from the Cox model is @@ -206,7 +193,7 @@ fit_all = coxph().fit(all_df, fit_all.summary[['coef', 'se(coef)', 'p']] ``` - + The `diagnosis` variable has been coded so that the baseline corresponds to HG glioma. The results indicate that the risk associated with HG glioma is more than eight times (i.e. $e^{2.15}=8.62$) the risk associated @@ -233,7 +220,7 @@ def representative(series): modal_data = cleaned.apply(representative, axis=0) ``` - + We make four copies of the column means and assign the `diagnosis` column to be the four different diagnoses. @@ -245,7 +232,7 @@ modal_df['diagnosis'] = levels modal_df ``` - + We then construct the model matrix based on the model specification `all_MS` used to fit the model, and name the rows according to the levels of `diagnosis`. @@ -272,7 +259,7 @@ fig, ax = subplots(figsize=(8, 8)) predicted_survival.plot(ax=ax); ``` - + ## Publication Data The `Publication` data presented in Section 11.5.4 can be @@ -291,7 +278,7 @@ for result, df in Publication.groupby('posres'): km_result.plot(label='Result=%d' % result, ax=ax) ``` - + As discussed previously, the $p$-values from fitting Cox’s proportional hazards model to the `posres` variable are quite large, providing no evidence of a difference in time-to-publication @@ -308,8 +295,8 @@ posres_fit = coxph().fit(posres_df, posres_fit.summary[['coef', 'se(coef)', 'p']] ``` - - + + However, the results change dramatically when we include other predictors in the model. Here we exclude the funding mechanism variable. @@ -322,7 +309,7 @@ coxph().fit(model.fit_transform(Publication), 'status').summary[['coef', 'se(coef)', 'p']] ``` - + We see that there are a number of statistically significant variables, including whether the trial focused on a clinical endpoint, the impact of the study, and whether the study had positive or negative results. @@ -372,7 +359,7 @@ model = MS(['Operators', intercept=False) X = model.fit_transform(D) ``` - + It is worthwhile to take a peek at the model matrix `X`, so that we can be sure that we understand how the variables have been coded. By default, the levels of categorical variables are sorted and, as usual, the first column of the one-hot encoding @@ -382,7 +369,7 @@ of the variable is dropped. X[:5] ``` - + Next, we specify the coefficients and the hazard function. ```{python} @@ -431,7 +418,7 @@ W = np.array([sim_time(l, cum_hazard, rng) D['Wait time'] = np.clip(W, 0, 1000) ``` - + We now simulate our censoring variable, for which we assume 90% of calls were answered (`Failed==1`) before the customer hung up (`Failed==0`). @@ -443,13 +430,13 @@ D['Failed'] = rng.choice([1, 0], D[:5] ``` - + ```{python} D['Failed'].mean() ``` - + We now plot Kaplan-Meier survival curves. First, we stratify by `Center`. ```{python} @@ -462,7 +449,7 @@ for center, df in D.groupby('Center'): ax.set_title("Probability of Still Being on Hold") ``` - + Next, we stratify by `Time`. ```{python} @@ -475,7 +462,7 @@ for time, df in D.groupby('Time'): ax.set_title("Probability of Still Being on Hold") ``` - + It seems that calls at Call Center B take longer to be answered than calls at Centers A and C. Similarly, it appears that wait times are longest in the morning and shortest in the evening hours. We can use a @@ -488,8 +475,8 @@ multivariate_logrank_test(D['Wait time'], D['Failed']) ``` - - + + Next, we consider the effect of `Time`. ```{python} @@ -498,8 +485,8 @@ multivariate_logrank_test(D['Wait time'], D['Failed']) ``` - - + + As in the case of a categorical variable with 2 levels, these results are similar to the likelihood ratio test from the Cox proportional hazards model. First, we @@ -514,8 +501,8 @@ F = coxph().fit(X, 'Wait time', 'Failed') F.log_likelihood_ratio_test() ``` - - + + Next, we look at the results for `Time`. ```{python} @@ -527,8 +514,8 @@ F = coxph().fit(X, 'Wait time', 'Failed') F.log_likelihood_ratio_test() ``` - - + + We find that differences between centers are highly significant, as are differences between times of day. @@ -544,8 +531,8 @@ fit_queuing = coxph().fit( fit_queuing.summary[['coef', 'se(coef)', 'p']] ``` - - + + The $p$-values for Center B and evening time are very small. It is also clear that the hazard --- that is, the instantaneous risk that a call will be diff --git a/Ch11-surv-lab.ipynb b/Ch11-surv-lab.ipynb index 55d07b3..b152b25 100644 --- a/Ch11-surv-lab.ipynb +++ b/Ch11-surv-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "c7f4eb5a", + "id": "62a1a218", "metadata": {}, "source": [ "\n", @@ -12,7 +12,7 @@ }, { "cell_type": "markdown", - "id": "0ae03bc9", + "id": "9da89fbb", "metadata": {}, "source": [ "# Lab: Survival Analysis\n", @@ -31,13 +31,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "91ac40fd", + "id": "d2d71add", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:33.224953Z", - "iopub.status.busy": "2023-08-07T00:19:33.224846Z", - "iopub.status.idle": "2023-08-07T00:19:34.446999Z", - "shell.execute_reply": "2023-08-07T00:19:34.446629Z" + "iopub.execute_input": "2023-08-21T02:30:04.373618Z", + "iopub.status.busy": "2023-08-21T02:30:04.373522Z", + "iopub.status.idle": "2023-08-21T02:30:05.528375Z", + "shell.execute_reply": "2023-08-21T02:30:05.528065Z" } }, "outputs": [], @@ -51,7 +51,7 @@ }, { "cell_type": "markdown", - "id": "a3dbcbbf", + "id": "70fe80b5", "metadata": {}, "source": [ "We also collect the new imports\n", @@ -61,13 +61,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "99782418", + "id": "994efc94", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.448996Z", - "iopub.status.busy": "2023-08-07T00:19:34.448819Z", - "iopub.status.idle": "2023-08-07T00:19:34.539258Z", - "shell.execute_reply": "2023-08-07T00:19:34.538955Z" + "iopub.execute_input": "2023-08-21T02:30:05.530453Z", + "iopub.status.busy": "2023-08-21T02:30:05.530271Z", + "iopub.status.idle": "2023-08-21T02:30:05.593786Z", + "shell.execute_reply": "2023-08-21T02:30:05.593483Z" } }, "outputs": [], @@ -83,7 +83,7 @@ }, { "cell_type": "markdown", - "id": "2c538d28", + "id": "e65a4796", "metadata": {}, "source": [ "## Brain Cancer Data\n", @@ -94,13 +94,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "3137149a", + "id": "9d41ddea", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.541177Z", - "iopub.status.busy": "2023-08-07T00:19:34.541057Z", - "iopub.status.idle": "2023-08-07T00:19:34.547991Z", - "shell.execute_reply": "2023-08-07T00:19:34.547753Z" + "iopub.execute_input": "2023-08-21T02:30:05.595762Z", + "iopub.status.busy": "2023-08-21T02:30:05.595642Z", + "iopub.status.idle": "2023-08-21T02:30:05.602243Z", + "shell.execute_reply": "2023-08-21T02:30:05.601969Z" } }, "outputs": [ @@ -122,7 +122,7 @@ }, { "cell_type": "markdown", - "id": "e798f172", + "id": "4ac65a33", "metadata": {}, "source": [ "The rows index the 88 patients, while the 8 columns contain the predictors and outcome variables.\n", @@ -132,13 +132,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "45963c92", + "id": "2bece782", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.549558Z", - "iopub.status.busy": "2023-08-07T00:19:34.549453Z", - "iopub.status.idle": "2023-08-07T00:19:34.552571Z", - "shell.execute_reply": "2023-08-07T00:19:34.552293Z" + "iopub.execute_input": "2023-08-21T02:30:05.603954Z", + "iopub.status.busy": "2023-08-21T02:30:05.603852Z", + "iopub.status.idle": "2023-08-21T02:30:05.607075Z", + "shell.execute_reply": "2023-08-21T02:30:05.606729Z" }, "lines_to_next_cell": 2 }, @@ -163,13 +163,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "73be61f6", + "id": "9ca465e5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.553962Z", - "iopub.status.busy": "2023-08-07T00:19:34.553866Z", - "iopub.status.idle": "2023-08-07T00:19:34.556544Z", - "shell.execute_reply": "2023-08-07T00:19:34.556286Z" + "iopub.execute_input": "2023-08-21T02:30:05.608553Z", + "iopub.status.busy": "2023-08-21T02:30:05.608445Z", + "iopub.status.idle": "2023-08-21T02:30:05.611386Z", + "shell.execute_reply": "2023-08-21T02:30:05.611134Z" }, "lines_to_next_cell": 2 }, @@ -196,13 +196,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "572f0b9e", + "id": "33bc4d3c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.557984Z", - "iopub.status.busy": "2023-08-07T00:19:34.557901Z", - "iopub.status.idle": "2023-08-07T00:19:34.560759Z", - "shell.execute_reply": "2023-08-07T00:19:34.560490Z" + "iopub.execute_input": "2023-08-21T02:30:05.612735Z", + "iopub.status.busy": "2023-08-21T02:30:05.612639Z", + "iopub.status.idle": "2023-08-21T02:30:05.615164Z", + "shell.execute_reply": "2023-08-21T02:30:05.614915Z" }, "lines_to_next_cell": 2 }, @@ -226,7 +226,7 @@ }, { "cell_type": "markdown", - "id": "fbd132de", + "id": "eb9c6d4f", "metadata": {}, "source": [ "Before beginning an analysis, it is important to know how the\n", @@ -252,13 +252,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "92c39707", + "id": "0b6dba70", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.562264Z", - "iopub.status.busy": "2023-08-07T00:19:34.562173Z", - "iopub.status.idle": "2023-08-07T00:19:34.764386Z", - "shell.execute_reply": "2023-08-07T00:19:34.763084Z" + "iopub.execute_input": "2023-08-21T02:30:05.616714Z", + "iopub.status.busy": "2023-08-21T02:30:05.616622Z", + "iopub.status.idle": "2023-08-21T02:30:05.728265Z", + "shell.execute_reply": "2023-08-21T02:30:05.727903Z" } }, "outputs": [ @@ -292,7 +292,7 @@ }, { "cell_type": "markdown", - "id": "f037665b", + "id": "2cc511cd", "metadata": {}, "source": [ "Next we create Kaplan-Meier survival curves that are stratified by\n", @@ -318,13 +318,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "3fc7848c", + "id": "9e6f2e70", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.770269Z", - "iopub.status.busy": "2023-08-07T00:19:34.769500Z", - "iopub.status.idle": "2023-08-07T00:19:34.900514Z", - "shell.execute_reply": "2023-08-07T00:19:34.900203Z" + "iopub.execute_input": "2023-08-21T02:30:05.730200Z", + "iopub.status.busy": "2023-08-21T02:30:05.730056Z", + "iopub.status.idle": "2023-08-21T02:30:05.845830Z", + "shell.execute_reply": "2023-08-21T02:30:05.845506Z" } }, "outputs": [ @@ -350,7 +350,7 @@ }, { "cell_type": "markdown", - "id": "c0c1a16a", + "id": "4d7efefb", "metadata": {}, "source": [ "As discussed in Section 11.4, we can perform a\n", @@ -363,13 +363,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "bf30d26f", + "id": "c135f7aa", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.902462Z", - "iopub.status.busy": "2023-08-07T00:19:34.902313Z", - "iopub.status.idle": "2023-08-07T00:19:34.956077Z", - "shell.execute_reply": "2023-08-07T00:19:34.955714Z" + "iopub.execute_input": "2023-08-21T02:30:05.847658Z", + "iopub.status.busy": "2023-08-21T02:30:05.847519Z", + "iopub.status.idle": "2023-08-21T02:30:05.901295Z", + "shell.execute_reply": "2023-08-21T02:30:05.900935Z" }, "lines_to_next_cell": 2 }, @@ -462,7 +462,7 @@ }, { "cell_type": "markdown", - "id": "e270649c", + "id": "bd14317d", "metadata": {}, "source": [ "The resulting $p$-value is $0.23$, indicating no evidence of a\n", @@ -476,13 +476,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "2ab78e07", + "id": "5f9303dd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.957966Z", - "iopub.status.busy": "2023-08-07T00:19:34.957792Z", - "iopub.status.idle": "2023-08-07T00:19:34.984567Z", - "shell.execute_reply": "2023-08-07T00:19:34.984261Z" + "iopub.execute_input": "2023-08-21T02:30:05.903263Z", + "iopub.status.busy": "2023-08-21T02:30:05.903017Z", + "iopub.status.idle": "2023-08-21T02:30:05.930691Z", + "shell.execute_reply": "2023-08-21T02:30:05.930331Z" } }, "outputs": [ @@ -553,7 +553,7 @@ }, { "cell_type": "markdown", - "id": "b58b93ae", + "id": "7e56e83e", "metadata": {}, "source": [ "The first argument to `fit` should be a data frame containing\n", @@ -569,13 +569,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "4716b7b0", + "id": "bcc8470c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.986336Z", - "iopub.status.busy": "2023-08-07T00:19:34.986193Z", - "iopub.status.idle": "2023-08-07T00:19:34.991518Z", - "shell.execute_reply": "2023-08-07T00:19:34.991252Z" + "iopub.execute_input": "2023-08-21T02:30:05.932434Z", + "iopub.status.busy": "2023-08-21T02:30:05.932285Z", + "iopub.status.idle": "2023-08-21T02:30:05.937796Z", + "shell.execute_reply": "2023-08-21T02:30:05.937549Z" } }, "outputs": [ @@ -659,7 +659,7 @@ }, { "cell_type": "markdown", - "id": "2820f486", + "id": "2e6163ca", "metadata": {}, "source": [ "Regardless of which test we use, we see that there is no clear\n", @@ -675,13 +675,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "c2767d88", + "id": "c26a3499", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:34.993223Z", - "iopub.status.busy": "2023-08-07T00:19:34.993093Z", - "iopub.status.idle": "2023-08-07T00:19:35.028673Z", - "shell.execute_reply": "2023-08-07T00:19:35.028408Z" + "iopub.execute_input": "2023-08-21T02:30:05.939300Z", + "iopub.status.busy": "2023-08-21T02:30:05.939184Z", + "iopub.status.idle": "2023-08-21T02:30:05.979585Z", + "shell.execute_reply": "2023-08-21T02:30:05.979250Z" } }, "outputs": [ @@ -800,7 +800,7 @@ }, { "cell_type": "markdown", - "id": "eee4ab1f", + "id": "a96e311c", "metadata": {}, "source": [ " The `diagnosis` variable has been coded so that the baseline\n", @@ -823,13 +823,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "ede1d219", + "id": "8d999f26", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.030313Z", - "iopub.status.busy": "2023-08-07T00:19:35.030211Z", - "iopub.status.idle": "2023-08-07T00:19:35.034142Z", - "shell.execute_reply": "2023-08-07T00:19:35.033836Z" + "iopub.execute_input": "2023-08-21T02:30:05.981441Z", + "iopub.status.busy": "2023-08-21T02:30:05.981315Z", + "iopub.status.idle": "2023-08-21T02:30:05.986317Z", + "shell.execute_reply": "2023-08-21T02:30:05.985949Z" } }, "outputs": [], @@ -845,7 +845,7 @@ }, { "cell_type": "markdown", - "id": "e1c307ae", + "id": "bf628fd8", "metadata": {}, "source": [ "We make four\n", @@ -856,13 +856,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "dc032a71", + "id": "a1f6b355", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.035583Z", - "iopub.status.busy": "2023-08-07T00:19:35.035483Z", - "iopub.status.idle": "2023-08-07T00:19:35.041790Z", - "shell.execute_reply": "2023-08-07T00:19:35.041394Z" + "iopub.execute_input": "2023-08-21T02:30:05.988012Z", + "iopub.status.busy": "2023-08-21T02:30:05.987898Z", + "iopub.status.idle": "2023-08-21T02:30:05.993889Z", + "shell.execute_reply": "2023-08-21T02:30:05.993534Z" } }, "outputs": [ @@ -974,7 +974,7 @@ }, { "cell_type": "markdown", - "id": "84da2586", + "id": "3f6334e4", "metadata": {}, "source": [ "We then construct the model matrix based on the model specification `all_MS` used to fit\n", @@ -984,13 +984,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "e7c1fe43", + "id": "a1a9d5b3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.043454Z", - "iopub.status.busy": "2023-08-07T00:19:35.043346Z", - "iopub.status.idle": "2023-08-07T00:19:35.050931Z", - "shell.execute_reply": "2023-08-07T00:19:35.050643Z" + "iopub.execute_input": "2023-08-21T02:30:05.995682Z", + "iopub.status.busy": "2023-08-21T02:30:05.995549Z", + "iopub.status.idle": "2023-08-21T02:30:06.005479Z", + "shell.execute_reply": "2023-08-21T02:30:06.005089Z" } }, "outputs": [ @@ -1117,7 +1117,7 @@ }, { "cell_type": "markdown", - "id": "3cfe1ec4", + "id": "3eaec7e6", "metadata": {}, "source": [ "We can use the `predict_survival_function()` method to obtain the estimated survival function." @@ -1126,13 +1126,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "f89fbed7", + "id": "1a18b56a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.052472Z", - "iopub.status.busy": "2023-08-07T00:19:35.052367Z", - "iopub.status.idle": "2023-08-07T00:19:35.059232Z", - "shell.execute_reply": "2023-08-07T00:19:35.058922Z" + "iopub.execute_input": "2023-08-21T02:30:06.007172Z", + "iopub.status.busy": "2023-08-21T02:30:06.007049Z", + "iopub.status.idle": "2023-08-21T02:30:06.014185Z", + "shell.execute_reply": "2023-08-21T02:30:06.013870Z" }, "lines_to_next_cell": 0 }, @@ -1276,7 +1276,7 @@ }, { "cell_type": "markdown", - "id": "29afd641", + "id": "7d533f90", "metadata": {}, "source": [ "This returns a data frame,\n", @@ -1287,13 +1287,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "8f0329b4", + "id": "ff3de29c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.061046Z", - "iopub.status.busy": "2023-08-07T00:19:35.060930Z", - "iopub.status.idle": "2023-08-07T00:19:35.167601Z", - "shell.execute_reply": "2023-08-07T00:19:35.167288Z" + "iopub.execute_input": "2023-08-21T02:30:06.015778Z", + "iopub.status.busy": "2023-08-21T02:30:06.015664Z", + "iopub.status.idle": "2023-08-21T02:30:06.124035Z", + "shell.execute_reply": "2023-08-21T02:30:06.123732Z" }, "lines_to_next_cell": 2 }, @@ -1316,7 +1316,7 @@ }, { "cell_type": "markdown", - "id": "12723ce5", + "id": "e660793e", "metadata": {}, "source": [ "## Publication Data\n", @@ -1330,13 +1330,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "3045bfc0", + "id": "cd9060c1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.169251Z", - "iopub.status.busy": "2023-08-07T00:19:35.169133Z", - "iopub.status.idle": "2023-08-07T00:19:35.287186Z", - "shell.execute_reply": "2023-08-07T00:19:35.286859Z" + "iopub.execute_input": "2023-08-21T02:30:06.125714Z", + "iopub.status.busy": "2023-08-21T02:30:06.125592Z", + "iopub.status.idle": "2023-08-21T02:30:06.243701Z", + "shell.execute_reply": "2023-08-21T02:30:06.243300Z" } }, "outputs": [ @@ -1363,7 +1363,7 @@ }, { "cell_type": "markdown", - "id": "6fcb22f7", + "id": "d8f0f687", "metadata": {}, "source": [ "As discussed previously, the $p$-values from fitting Cox’s\n", @@ -1375,13 +1375,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "d070f716", + "id": "6af7106e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.288887Z", - "iopub.status.busy": "2023-08-07T00:19:35.288769Z", - "iopub.status.idle": "2023-08-07T00:19:35.321428Z", - "shell.execute_reply": "2023-08-07T00:19:35.321128Z" + "iopub.execute_input": "2023-08-21T02:30:06.245493Z", + "iopub.status.busy": "2023-08-21T02:30:06.245357Z", + "iopub.status.idle": "2023-08-21T02:30:06.281521Z", + "shell.execute_reply": "2023-08-21T02:30:06.281138Z" }, "lines_to_next_cell": 2 }, @@ -1453,7 +1453,7 @@ }, { "cell_type": "markdown", - "id": "513a55b1", + "id": "8ef28b8b", "metadata": {}, "source": [ "However, the results change dramatically when we include other\n", @@ -1464,13 +1464,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "2bbcdd0c", + "id": "b6ebefa7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.323119Z", - "iopub.status.busy": "2023-08-07T00:19:35.323003Z", - "iopub.status.idle": "2023-08-07T00:19:35.362910Z", - "shell.execute_reply": "2023-08-07T00:19:35.362438Z" + "iopub.execute_input": "2023-08-21T02:30:06.283282Z", + "iopub.status.busy": "2023-08-21T02:30:06.283123Z", + "iopub.status.idle": "2023-08-21T02:30:06.327003Z", + "shell.execute_reply": "2023-08-21T02:30:06.326646Z" } }, "outputs": [ @@ -1573,7 +1573,7 @@ }, { "cell_type": "markdown", - "id": "75bb8aa6", + "id": "d463e623", "metadata": {}, "source": [ "We see that there are a number of statistically significant variables,\n", @@ -1583,7 +1583,7 @@ }, { "cell_type": "markdown", - "id": "bfe236e5", + "id": "a23c38e0", "metadata": {}, "source": [ "## Call Center Data\n", @@ -1608,13 +1608,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "b8ece43a", + "id": "098f42ea", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.364905Z", - "iopub.status.busy": "2023-08-07T00:19:35.364772Z", - "iopub.status.idle": "2023-08-07T00:19:35.368589Z", - "shell.execute_reply": "2023-08-07T00:19:35.368291Z" + "iopub.execute_input": "2023-08-21T02:30:06.329058Z", + "iopub.status.busy": "2023-08-21T02:30:06.328927Z", + "iopub.status.idle": "2023-08-21T02:30:06.332782Z", + "shell.execute_reply": "2023-08-21T02:30:06.332425Z" } }, "outputs": [], @@ -1637,7 +1637,7 @@ }, { "cell_type": "markdown", - "id": "c93e44f3", + "id": "2f54ed03", "metadata": {}, "source": [ "We then build a model matrix (omitting the intercept)" @@ -1646,13 +1646,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "3e4f766f", + "id": "26d5d0d0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.370485Z", - "iopub.status.busy": "2023-08-07T00:19:35.370371Z", - "iopub.status.idle": "2023-08-07T00:19:35.377790Z", - "shell.execute_reply": "2023-08-07T00:19:35.377469Z" + "iopub.execute_input": "2023-08-21T02:30:06.334692Z", + "iopub.status.busy": "2023-08-21T02:30:06.334589Z", + "iopub.status.idle": "2023-08-21T02:30:06.344047Z", + "shell.execute_reply": "2023-08-21T02:30:06.343708Z" } }, "outputs": [], @@ -1666,7 +1666,7 @@ }, { "cell_type": "markdown", - "id": "cad1ed19", + "id": "a1a8f65d", "metadata": {}, "source": [ "It is worthwhile to take a peek at the model matrix `X`, so\n", @@ -1678,13 +1678,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "72f42d14", + "id": "77500663", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.380244Z", - "iopub.status.busy": "2023-08-07T00:19:35.380068Z", - "iopub.status.idle": "2023-08-07T00:19:35.384542Z", - "shell.execute_reply": "2023-08-07T00:19:35.384259Z" + "iopub.execute_input": "2023-08-21T02:30:06.345660Z", + "iopub.status.busy": "2023-08-21T02:30:06.345575Z", + "iopub.status.idle": "2023-08-21T02:30:06.350086Z", + "shell.execute_reply": "2023-08-21T02:30:06.349797Z" } }, "outputs": [ @@ -1781,7 +1781,7 @@ }, { "cell_type": "markdown", - "id": "38c40ae1", + "id": "fd7bd61c", "metadata": {}, "source": [ "Next, we specify the coefficients and the hazard function." @@ -1790,13 +1790,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "8b921536", + "id": "74324a56", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.386034Z", - "iopub.status.busy": "2023-08-07T00:19:35.385942Z", - "iopub.status.idle": "2023-08-07T00:19:35.420461Z", - "shell.execute_reply": "2023-08-07T00:19:35.405608Z" + "iopub.execute_input": "2023-08-21T02:30:06.351738Z", + "iopub.status.busy": "2023-08-21T02:30:06.351549Z", + "iopub.status.idle": "2023-08-21T02:30:06.444268Z", + "shell.execute_reply": "2023-08-21T02:30:06.441484Z" } }, "outputs": [], @@ -1808,7 +1808,7 @@ }, { "cell_type": "markdown", - "id": "a0698ffd", + "id": "cfe879e6", "metadata": {}, "source": [ "Here, we have set the coefficient associated with `Operators` to\n", @@ -1837,13 +1837,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "96ce0f99", + "id": "d4be10c2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.484657Z", - "iopub.status.busy": "2023-08-07T00:19:35.484150Z", - "iopub.status.idle": "2023-08-07T00:19:35.509286Z", - "shell.execute_reply": "2023-08-07T00:19:35.508169Z" + "iopub.execute_input": "2023-08-21T02:30:06.449822Z", + "iopub.status.busy": "2023-08-21T02:30:06.449515Z", + "iopub.status.idle": "2023-08-21T02:30:06.458388Z", + "shell.execute_reply": "2023-08-21T02:30:06.457673Z" }, "lines_to_next_cell": 0 }, @@ -1854,7 +1854,7 @@ }, { "cell_type": "markdown", - "id": "1956e4c2", + "id": "6095cfc1", "metadata": {}, "source": [ "We are now ready to generate data under the Cox proportional hazards\n", @@ -1868,13 +1868,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "63d78ff9", + "id": "c98d396f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.522637Z", - "iopub.status.busy": "2023-08-07T00:19:35.522260Z", - "iopub.status.idle": "2023-08-07T00:19:35.630452Z", - "shell.execute_reply": "2023-08-07T00:19:35.627960Z" + "iopub.execute_input": "2023-08-21T02:30:06.461931Z", + "iopub.status.busy": "2023-08-21T02:30:06.461787Z", + "iopub.status.idle": "2023-08-21T02:30:06.624349Z", + "shell.execute_reply": "2023-08-21T02:30:06.624026Z" } }, "outputs": [], @@ -1886,7 +1886,7 @@ }, { "cell_type": "markdown", - "id": "035e4ecf", + "id": "ed2e23ea", "metadata": {}, "source": [ "We now simulate our censoring variable, for which we assume\n", @@ -1897,13 +1897,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "fe008dbf", + "id": "caf627bc", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.635844Z", - "iopub.status.busy": "2023-08-07T00:19:35.635469Z", - "iopub.status.idle": "2023-08-07T00:19:35.649527Z", - "shell.execute_reply": "2023-08-07T00:19:35.646191Z" + "iopub.execute_input": "2023-08-21T02:30:06.626165Z", + "iopub.status.busy": "2023-08-21T02:30:06.626054Z", + "iopub.status.idle": "2023-08-21T02:30:06.630808Z", + "shell.execute_reply": "2023-08-21T02:30:06.630542Z" }, "lines_to_next_cell": 2 }, @@ -2005,13 +2005,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "c3a2bec7", + "id": "e63242f9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.653001Z", - "iopub.status.busy": "2023-08-07T00:19:35.652338Z", - "iopub.status.idle": "2023-08-07T00:19:35.656830Z", - "shell.execute_reply": "2023-08-07T00:19:35.656500Z" + "iopub.execute_input": "2023-08-21T02:30:06.632357Z", + "iopub.status.busy": "2023-08-21T02:30:06.632261Z", + "iopub.status.idle": "2023-08-21T02:30:06.634630Z", + "shell.execute_reply": "2023-08-21T02:30:06.634305Z" } }, "outputs": [ @@ -2032,7 +2032,7 @@ }, { "cell_type": "markdown", - "id": "207937e5", + "id": "5f345011", "metadata": {}, "source": [ "We now plot Kaplan-Meier survival curves. First, we stratify by `Center`." @@ -2041,13 +2041,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "2b27af56", + "id": "338db71d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.658421Z", - "iopub.status.busy": "2023-08-07T00:19:35.658328Z", - "iopub.status.idle": "2023-08-07T00:19:35.811796Z", - "shell.execute_reply": "2023-08-07T00:19:35.811449Z" + "iopub.execute_input": "2023-08-21T02:30:06.636188Z", + "iopub.status.busy": "2023-08-21T02:30:06.636081Z", + "iopub.status.idle": "2023-08-21T02:30:06.791856Z", + "shell.execute_reply": "2023-08-21T02:30:06.791521Z" } }, "outputs": [ @@ -2084,7 +2084,7 @@ }, { "cell_type": "markdown", - "id": "be6d37f7", + "id": "1b5a1230", "metadata": {}, "source": [ "Next, we stratify by `Time`." @@ -2093,13 +2093,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "9625598d", + "id": "c1db6e15", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:35.813696Z", - "iopub.status.busy": "2023-08-07T00:19:35.813601Z", - "iopub.status.idle": "2023-08-07T00:19:36.041021Z", - "shell.execute_reply": "2023-08-07T00:19:36.040708Z" + "iopub.execute_input": "2023-08-21T02:30:06.793629Z", + "iopub.status.busy": "2023-08-21T02:30:06.793538Z", + "iopub.status.idle": "2023-08-21T02:30:06.992155Z", + "shell.execute_reply": "2023-08-21T02:30:06.991803Z" } }, "outputs": [ @@ -2136,7 +2136,7 @@ }, { "cell_type": "markdown", - "id": "1408ebc0", + "id": "deb73d38", "metadata": {}, "source": [ "It seems that calls at Call Center B take longer to be answered than\n", @@ -2149,13 +2149,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "75a744ef", + "id": "02ea4212", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:36.043079Z", - "iopub.status.busy": "2023-08-07T00:19:36.042900Z", - "iopub.status.idle": "2023-08-07T00:19:36.061936Z", - "shell.execute_reply": "2023-08-07T00:19:36.061630Z" + "iopub.execute_input": "2023-08-21T02:30:06.993929Z", + "iopub.status.busy": "2023-08-21T02:30:06.993819Z", + "iopub.status.idle": "2023-08-21T02:30:07.011557Z", + "shell.execute_reply": "2023-08-21T02:30:07.011276Z" }, "lines_to_next_cell": 2 }, @@ -2247,7 +2247,7 @@ }, { "cell_type": "markdown", - "id": "be5055e4", + "id": "db9cc6ee", "metadata": {}, "source": [ "Next, we consider the effect of `Time`." @@ -2256,13 +2256,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "9badb3e3", + "id": "0ac610d5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:36.063627Z", - "iopub.status.busy": "2023-08-07T00:19:36.063519Z", - "iopub.status.idle": "2023-08-07T00:19:36.082451Z", - "shell.execute_reply": "2023-08-07T00:19:36.082161Z" + "iopub.execute_input": "2023-08-21T02:30:07.013331Z", + "iopub.status.busy": "2023-08-21T02:30:07.013187Z", + "iopub.status.idle": "2023-08-21T02:30:07.030401Z", + "shell.execute_reply": "2023-08-21T02:30:07.030073Z" }, "lines_to_next_cell": 2 }, @@ -2354,7 +2354,7 @@ }, { "cell_type": "markdown", - "id": "64b2bc33", + "id": "0946d3ef", "metadata": {}, "source": [ "As in the case of a categorical variable with 2 levels, these\n", @@ -2366,13 +2366,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "026e9ff8", + "id": "107cedad", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:36.084076Z", - "iopub.status.busy": "2023-08-07T00:19:36.083964Z", - "iopub.status.idle": "2023-08-07T00:19:36.208409Z", - "shell.execute_reply": "2023-08-07T00:19:36.208076Z" + "iopub.execute_input": "2023-08-21T02:30:07.032008Z", + "iopub.status.busy": "2023-08-21T02:30:07.031887Z", + "iopub.status.idle": "2023-08-21T02:30:07.160931Z", + "shell.execute_reply": "2023-08-21T02:30:07.160639Z" }, "lines_to_next_cell": 2 }, @@ -2462,7 +2462,7 @@ }, { "cell_type": "markdown", - "id": "4ed54fe0", + "id": "10f2a0c1", "metadata": {}, "source": [ "Next, we look at the results for `Time`." @@ -2471,13 +2471,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "7cab3789", + "id": "334eb331", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:36.210101Z", - "iopub.status.busy": "2023-08-07T00:19:36.209985Z", - "iopub.status.idle": "2023-08-07T00:19:36.334146Z", - "shell.execute_reply": "2023-08-07T00:19:36.333801Z" + "iopub.execute_input": "2023-08-21T02:30:07.162793Z", + "iopub.status.busy": "2023-08-21T02:30:07.162651Z", + "iopub.status.idle": "2023-08-21T02:30:07.291875Z", + "shell.execute_reply": "2023-08-21T02:30:07.291550Z" }, "lines_to_next_cell": 2 }, @@ -2567,7 +2567,7 @@ }, { "cell_type": "markdown", - "id": "2d250dc9", + "id": "774963d4", "metadata": {}, "source": [ "We find that differences between centers are highly significant, as\n", @@ -2579,13 +2579,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "5cc4b898", + "id": "421811c5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:36.336025Z", - "iopub.status.busy": "2023-08-07T00:19:36.335898Z", - "iopub.status.idle": "2023-08-07T00:19:36.561174Z", - "shell.execute_reply": "2023-08-07T00:19:36.559597Z" + "iopub.execute_input": "2023-08-21T02:30:07.293545Z", + "iopub.status.busy": "2023-08-21T02:30:07.293433Z", + "iopub.status.idle": "2023-08-21T02:30:07.532213Z", + "shell.execute_reply": "2023-08-21T02:30:07.531293Z" }, "lines_to_next_cell": 2 }, @@ -2684,7 +2684,7 @@ }, { "cell_type": "markdown", - "id": "bec9d61d", + "id": "3c65063f", "metadata": {}, "source": [ "The $p$-values for Center B and evening time\n", @@ -2703,8 +2703,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "language_info": { "codemirror_mode": { diff --git a/Ch12-unsup-lab.Rmd b/Ch12-unsup-lab.Rmd index 5af8e75..4e6df84 100644 --- a/Ch12-unsup-lab.Rmd +++ b/Ch12-unsup-lab.Rmd @@ -1,20 +1,7 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - main_language: python - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 ---- - # Chapter 12 - # Lab: Unsupervised Learning +# Lab: Unsupervised Learning In this lab we demonstrate PCA and clustering on several datasets. As in other labs, we import some of our libraries at this top level. This makes the code more readable, as scanning the first few @@ -44,7 +31,7 @@ from scipy.cluster.hierarchy import \ from ISLP.cluster import compute_linkage ``` - + ## Principal Components Analysis In this lab, we perform PCA on `USArrests`, a data set in the `R` computing environment. @@ -58,22 +45,22 @@ USArrests = get_rdataset('USArrests').data USArrests ``` - + The columns of the data set contain the four variables. ```{python} USArrests.columns ``` - + We first briefly examine the data. We notice that the variables have vastly different means. ```{python} USArrests.mean() ``` - - + + Dataframes have several useful methods for computing column-wise summaries. We can also examine the variance of the four variables using the `var()` method. @@ -82,7 +69,7 @@ variance of the four variables using the `var()` method. USArrests.var() ``` - + Not surprisingly, the variables also have vastly different variances. The `UrbanPop` variable measures the percentage of the population in each state living in an urban area, which is not a comparable @@ -132,7 +119,7 @@ of the variables. In this case, since we centered and scaled the data with pcaUS.mean_ ``` - + The scores can be computed using the `transform()` method of `pcaUS` after it has been fit. @@ -150,7 +137,7 @@ principal component loading vector. pcaUS.components_ ``` - + The `biplot` is a common visualization method used with PCA. It is not built in as a standard part of `sklearn`, though there are python @@ -191,14 +178,14 @@ for k in range(pcaUS.components_.shape[1]): USArrests.columns[k]) ``` - + The standard deviations of the principal component scores are as follows: ```{python} scores.std(0, ddof=1) ``` - + The variance of each score can be extracted directly from the `pcaUS` object via the `explained_variance_` attribute. @@ -220,7 +207,7 @@ We can plot the PVE explained by each component, as well as the cumulative PVE. plot the proportion of variance explained. ```{python} -# %%capture +%%capture fig, axes = plt.subplots(1, 2, figsize=(15, 6)) ticks = np.arange(pcaUS.n_components_)+1 ax = axes[0] @@ -320,7 +307,7 @@ Xna = X.copy() Xna[r_idx, c_idx] = np.nan ``` - + Here the array `r_idx` contains 20 integers from 0 to 49; this represents the states (rows of `X`) that are selected to contain missing values. And `c_idx` contains 20 integers from 0 to 3, representing the features (columns in `X`) that contain the missing values for each of the selected states. @@ -348,7 +335,7 @@ Xbar = np.nanmean(Xhat, axis=0) Xhat[r_idx, c_idx] = Xbar[c_idx] ``` - + Before we begin Step 2, we set ourselves up to measure the progress of our iterations: @@ -387,7 +374,7 @@ while rel_err > thresh: .format(count, mss, rel_err)) ``` - + We see that after eight iterations, the relative error has fallen below `thresh = 1e-7`, and so the algorithm terminates. When this happens, the mean squared error of the non-missing elements equals 0.381. Finally, we compute the correlation between the 20 imputed values @@ -397,8 +384,8 @@ and the actual values: np.corrcoef(Xapp[ismiss], X[ismiss])[0,1] ``` - - + + In this lab, we implemented Algorithm 12.1 ourselves for didactic purposes. However, a reader who wishes to apply matrix completion to their data might look to more specialized `Python` implementations. @@ -444,7 +431,7 @@ ax.scatter(X[:,0], X[:,1], c=kmeans.labels_) ax.set_title("K-Means Clustering Results with K=2"); ``` - + Here the observations can be easily plotted because they are two-dimensional. If there were more than two variables then we could instead perform PCA and plot the first two principal component score @@ -519,7 +506,7 @@ hc_comp = HClust(distance_threshold=0, hc_comp.fit(X) ``` - + This computes the entire dendrogram. We could just as easily perform hierarchical clustering with average or single linkage instead: @@ -534,7 +521,7 @@ hc_sing = HClust(distance_threshold=0, hc_sing.fit(X); ``` - + To use a precomputed distance matrix, we provide an additional argument `metric="precomputed"`. In the code below, the first four lines computes the $50\times 50$ pairwise-distance matrix. @@ -550,7 +537,7 @@ hc_sing_pre = HClust(distance_threshold=0, hc_sing_pre.fit(D) ``` - + We use `dendrogram()` from `scipy.cluster.hierarchy` to plot the dendrogram. However, `dendrogram()` expects a so-called *linkage-matrix representation* @@ -573,7 +560,7 @@ dendrogram(linkage_comp, **cargs); ``` - + We may want to color branches of the tree above and below a cut-threshold differently. This can be achieved by changing the `color_threshold`. Let’s cut the tree at a height of 4, @@ -587,7 +574,7 @@ dendrogram(linkage_comp, above_threshold_color='black'); ``` - + To determine the cluster labels for each observation associated with a given cut of the dendrogram, we can use the `cut_tree()` function from `scipy.cluster.hierarchy`: @@ -607,7 +594,7 @@ or `height` to `cut_tree()`. cut_tree(linkage_comp, height=5) ``` - + To scale the variables before performing hierarchical clustering of the observations, we use `StandardScaler()` as in our PCA example: @@ -651,7 +638,7 @@ dendrogram(linkage_cor, ax=ax, **cargs) ax.set_title("Complete Linkage with Correlation-Based Dissimilarity"); ``` - + ## NCI60 Data Example Unsupervised techniques are often used in the analysis of genomic @@ -666,7 +653,7 @@ nci_labs = NCI60['labels'] nci_data = NCI60['data'] ``` - + Each cell line is labeled with a cancer type. We do not make use of the cancer types in performing PCA and clustering, as these are unsupervised techniques. But after performing PCA and clustering, we @@ -679,8 +666,8 @@ The data has 64 rows and 6830 columns. nci_data.shape ``` - - + + We begin by examining the cancer types for the cell lines. @@ -688,7 +675,7 @@ We begin by examining the cancer types for the cell lines. nci_labs.value_counts() ``` - + ### PCA on the NCI60 Data @@ -703,7 +690,7 @@ nci_pca = PCA() nci_scores = nci_pca.fit_transform(nci_scaled) ``` - + We now plot the first few principal component score vectors, in order to visualize the data. The observations (cell lines) corresponding to a given cancer type will be plotted in the same color, so that we can @@ -739,7 +726,7 @@ to have pretty similar gene expression levels. - + We can also plot the percent variance explained by the principal components as well as the cumulative percent variance explained. This is similar to the plots we made earlier for the `USArrests` data. @@ -798,7 +785,7 @@ def plot_nci(linkage, ax, cut=-np.inf): return hc ``` - + Let’s plot our results. ```{python} @@ -819,7 +806,7 @@ linkage. Clearly cell lines within a single cancer type do tend to cluster together, although the clustering is not perfect. We will use complete linkage hierarchical clustering for the analysis that follows. - + We can cut the dendrogram at the height that will yield a particular number of clusters, say four: @@ -830,7 +817,7 @@ pd.crosstab(nci_labs['label'], pd.Series(comp_cut.reshape(-1), name='Complete')) ``` - + There are some clear patterns. All the leukemia cell lines fall in one cluster, while the breast cancer cell lines are spread out over @@ -844,7 +831,7 @@ plot_nci('Complete', ax, cut=140) ax.axhline(140, c='r', linewidth=4); ``` - + The `axhline()` function draws a horizontal line line on top of any existing set of axes. The argument `140` plots a horizontal line at height 140 on the dendrogram; this is a height that @@ -866,7 +853,7 @@ pd.crosstab(pd.Series(comp_cut, name='HClust'), pd.Series(nci_kmeans.labels_, name='K-means')) ``` - + We see that the four clusters obtained using hierarchical clustering and $K$-means clustering are somewhat different. First we note that the labels in the two clusterings are arbitrary. That is, swapping diff --git a/Ch12-unsup-lab.ipynb b/Ch12-unsup-lab.ipynb index 6fb862b..11b907c 100644 --- a/Ch12-unsup-lab.ipynb +++ b/Ch12-unsup-lab.ipynb @@ -2,13 +2,13 @@ "cells": [ { "cell_type": "markdown", - "id": "80f16ff6", + "id": "b1c6a137", "metadata": {}, "source": [ "\n", "# Chapter 12\n", "\n", - " # Lab: Unsupervised Learning\n", + "# Lab: Unsupervised Learning\n", "In this lab we demonstrate PCA and clustering on several datasets.\n", "As in other labs, we import some of our libraries at this top\n", "level. This makes the code more readable, as scanning the first few\n", @@ -19,13 +19,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "24559be0", + "id": "6d5ba583", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:37.853212Z", - "iopub.status.busy": "2023-08-07T00:19:37.853110Z", - "iopub.status.idle": "2023-08-07T00:19:38.840274Z", - "shell.execute_reply": "2023-08-07T00:19:38.839771Z" + "iopub.execute_input": "2023-08-21T02:30:08.846762Z", + "iopub.status.busy": "2023-08-21T02:30:08.846653Z", + "iopub.status.idle": "2023-08-21T02:30:09.939364Z", + "shell.execute_reply": "2023-08-21T02:30:09.939004Z" }, "lines_to_next_cell": 0 }, @@ -42,7 +42,7 @@ }, { "cell_type": "markdown", - "id": "59b24a4b", + "id": "d01ab033", "metadata": {}, "source": [ "We also collect the new imports\n", @@ -52,13 +52,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "06fff57d", + "id": "64c83257", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:38.842722Z", - "iopub.status.busy": "2023-08-07T00:19:38.842335Z", - "iopub.status.idle": "2023-08-07T00:19:39.050690Z", - "shell.execute_reply": "2023-08-07T00:19:39.050367Z" + "iopub.execute_input": "2023-08-21T02:30:09.941473Z", + "iopub.status.busy": "2023-08-21T02:30:09.941296Z", + "iopub.status.idle": "2023-08-21T02:30:10.036632Z", + "shell.execute_reply": "2023-08-21T02:30:10.036163Z" } }, "outputs": [], @@ -74,7 +74,7 @@ }, { "cell_type": "markdown", - "id": "f091de06", + "id": "da4201dc", "metadata": {}, "source": [ "## Principal Components Analysis\n", @@ -89,13 +89,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "f425e07e", + "id": "04ec4481", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:39.052503Z", - "iopub.status.busy": "2023-08-07T00:19:39.052392Z", - "iopub.status.idle": "2023-08-07T00:19:40.034559Z", - "shell.execute_reply": "2023-08-07T00:19:40.034237Z" + "iopub.execute_input": "2023-08-21T02:30:10.038974Z", + "iopub.status.busy": "2023-08-21T02:30:10.038734Z", + "iopub.status.idle": "2023-08-21T02:30:11.214222Z", + "shell.execute_reply": "2023-08-21T02:30:11.213910Z" } }, "outputs": [ @@ -547,7 +547,7 @@ }, { "cell_type": "markdown", - "id": "e2942890", + "id": "02805a1a", "metadata": {}, "source": [ "The columns of the data set contain the four variables." @@ -556,13 +556,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "b127d014", + "id": "1b66036a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.036610Z", - "iopub.status.busy": "2023-08-07T00:19:40.036476Z", - "iopub.status.idle": "2023-08-07T00:19:40.039012Z", - "shell.execute_reply": "2023-08-07T00:19:40.038760Z" + "iopub.execute_input": "2023-08-21T02:30:11.216028Z", + "iopub.status.busy": "2023-08-21T02:30:11.215902Z", + "iopub.status.idle": "2023-08-21T02:30:11.218553Z", + "shell.execute_reply": "2023-08-21T02:30:11.218232Z" } }, "outputs": [ @@ -583,7 +583,7 @@ }, { "cell_type": "markdown", - "id": "68718331", + "id": "3decadf1", "metadata": {}, "source": [ "We first briefly examine the data. We notice that the variables have vastly different means." @@ -592,13 +592,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "c7343f72", + "id": "52e900fd", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.040518Z", - "iopub.status.busy": "2023-08-07T00:19:40.040415Z", - "iopub.status.idle": "2023-08-07T00:19:40.043628Z", - "shell.execute_reply": "2023-08-07T00:19:40.043271Z" + "iopub.execute_input": "2023-08-21T02:30:11.220090Z", + "iopub.status.busy": "2023-08-21T02:30:11.219971Z", + "iopub.status.idle": "2023-08-21T02:30:11.223332Z", + "shell.execute_reply": "2023-08-21T02:30:11.223004Z" }, "lines_to_next_cell": 2 }, @@ -624,7 +624,7 @@ }, { "cell_type": "markdown", - "id": "171a1ee0", + "id": "27d011da", "metadata": {}, "source": [ "Dataframes have several useful methods for computing\n", @@ -635,13 +635,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "34501140", + "id": "68684f78", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.045538Z", - "iopub.status.busy": "2023-08-07T00:19:40.045415Z", - "iopub.status.idle": "2023-08-07T00:19:40.048692Z", - "shell.execute_reply": "2023-08-07T00:19:40.048363Z" + "iopub.execute_input": "2023-08-21T02:30:11.225020Z", + "iopub.status.busy": "2023-08-21T02:30:11.224913Z", + "iopub.status.idle": "2023-08-21T02:30:11.228160Z", + "shell.execute_reply": "2023-08-21T02:30:11.227843Z" } }, "outputs": [ @@ -666,7 +666,7 @@ }, { "cell_type": "markdown", - "id": "5634db88", + "id": "ef3003e0", "metadata": {}, "source": [ "Not surprisingly, the variables also have vastly different variances.\n", @@ -689,13 +689,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "daf119e8", + "id": "d2b7caf9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.050181Z", - "iopub.status.busy": "2023-08-07T00:19:40.050071Z", - "iopub.status.idle": "2023-08-07T00:19:40.053916Z", - "shell.execute_reply": "2023-08-07T00:19:40.053514Z" + "iopub.execute_input": "2023-08-21T02:30:11.229847Z", + "iopub.status.busy": "2023-08-21T02:30:11.229717Z", + "iopub.status.idle": "2023-08-21T02:30:11.233108Z", + "shell.execute_reply": "2023-08-21T02:30:11.232828Z" }, "lines_to_next_cell": 0 }, @@ -708,7 +708,7 @@ }, { "cell_type": "markdown", - "id": "dd6e5f5b", + "id": "54c90b5c", "metadata": {}, "source": [ "Having scaled the data, we can then\n", @@ -719,13 +719,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "a0eda7c9", + "id": "de8f57fa", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.055993Z", - "iopub.status.busy": "2023-08-07T00:19:40.055896Z", - "iopub.status.idle": "2023-08-07T00:19:40.057688Z", - "shell.execute_reply": "2023-08-07T00:19:40.057406Z" + "iopub.execute_input": "2023-08-21T02:30:11.234711Z", + "iopub.status.busy": "2023-08-21T02:30:11.234595Z", + "iopub.status.idle": "2023-08-21T02:30:11.241074Z", + "shell.execute_reply": "2023-08-21T02:30:11.239548Z" }, "lines_to_next_cell": 0 }, @@ -736,7 +736,7 @@ }, { "cell_type": "markdown", - "id": "e5758ee5", + "id": "42bd0a96", "metadata": {}, "source": [ "(By default, the `PCA()` transform centers the variables to have\n", @@ -748,13 +748,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "1430fb3c", + "id": "26c45f1e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.059093Z", - "iopub.status.busy": "2023-08-07T00:19:40.059009Z", - "iopub.status.idle": "2023-08-07T00:19:40.062720Z", - "shell.execute_reply": "2023-08-07T00:19:40.062341Z" + "iopub.execute_input": "2023-08-21T02:30:11.242595Z", + "iopub.status.busy": "2023-08-21T02:30:11.242489Z", + "iopub.status.idle": "2023-08-21T02:30:11.246323Z", + "shell.execute_reply": "2023-08-21T02:30:11.246064Z" } }, "outputs": [ @@ -778,7 +778,7 @@ }, { "cell_type": "markdown", - "id": "56890b11", + "id": "a68b81f5", "metadata": {}, "source": [ "After fitting, the `mean_` attribute corresponds to the means\n", @@ -789,13 +789,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "6131d8d1", + "id": "3097e99d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.064409Z", - "iopub.status.busy": "2023-08-07T00:19:40.064295Z", - "iopub.status.idle": "2023-08-07T00:19:40.066520Z", - "shell.execute_reply": "2023-08-07T00:19:40.066266Z" + "iopub.execute_input": "2023-08-21T02:30:11.247882Z", + "iopub.status.busy": "2023-08-21T02:30:11.247777Z", + "iopub.status.idle": "2023-08-21T02:30:11.250076Z", + "shell.execute_reply": "2023-08-21T02:30:11.249792Z" } }, "outputs": [ @@ -816,7 +816,7 @@ }, { "cell_type": "markdown", - "id": "3c1c34e7", + "id": "0c81e463", "metadata": {}, "source": [ "The scores can be computed using the `transform()` method\n", @@ -826,13 +826,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "08246aad", + "id": "c071a242", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.067963Z", - "iopub.status.busy": "2023-08-07T00:19:40.067854Z", - "iopub.status.idle": "2023-08-07T00:19:40.069743Z", - "shell.execute_reply": "2023-08-07T00:19:40.069498Z" + "iopub.execute_input": "2023-08-21T02:30:11.251690Z", + "iopub.status.busy": "2023-08-21T02:30:11.251589Z", + "iopub.status.idle": "2023-08-21T02:30:11.253710Z", + "shell.execute_reply": "2023-08-21T02:30:11.253213Z" }, "lines_to_next_cell": 0 }, @@ -843,7 +843,7 @@ }, { "cell_type": "markdown", - "id": "574ed47f", + "id": "84581683", "metadata": {}, "source": [ "We will plot these scores a bit further down.\n", @@ -855,13 +855,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "b682b632", + "id": "c9bcab06", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.071367Z", - "iopub.status.busy": "2023-08-07T00:19:40.071220Z", - "iopub.status.idle": "2023-08-07T00:19:40.073516Z", - "shell.execute_reply": "2023-08-07T00:19:40.073257Z" + "iopub.execute_input": "2023-08-21T02:30:11.255475Z", + "iopub.status.busy": "2023-08-21T02:30:11.255331Z", + "iopub.status.idle": "2023-08-21T02:30:11.257666Z", + "shell.execute_reply": "2023-08-21T02:30:11.257404Z" } }, "outputs": [ @@ -885,7 +885,7 @@ }, { "cell_type": "markdown", - "id": "fc8bfc99", + "id": "9dec4ca1", "metadata": {}, "source": [ "The `biplot` is a common visualization method used with\n", @@ -898,13 +898,13 @@ { "cell_type": "code", "execution_count": 13, - "id": "c165e990", + "id": "7375ab13", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.075045Z", - "iopub.status.busy": "2023-08-07T00:19:40.074930Z", - "iopub.status.idle": "2023-08-07T00:19:40.260577Z", - "shell.execute_reply": "2023-08-07T00:19:40.259910Z" + "iopub.execute_input": "2023-08-21T02:30:11.259208Z", + "iopub.status.busy": "2023-08-21T02:30:11.259106Z", + "iopub.status.idle": "2023-08-21T02:30:11.411821Z", + "shell.execute_reply": "2023-08-21T02:30:11.411424Z" }, "lines_to_next_cell": 0 }, @@ -935,7 +935,7 @@ }, { "cell_type": "markdown", - "id": "eaef3e98", + "id": "4dacec4b", "metadata": {}, "source": [ "Notice that this figure is a reflection of Figure 12.1 through the $y$-axis. Recall that the\n", @@ -948,13 +948,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "848c9f35", + "id": "4c1988de", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.266938Z", - "iopub.status.busy": "2023-08-07T00:19:40.266653Z", - "iopub.status.idle": "2023-08-07T00:19:40.403287Z", - "shell.execute_reply": "2023-08-07T00:19:40.402947Z" + "iopub.execute_input": "2023-08-21T02:30:11.413868Z", + "iopub.status.busy": "2023-08-21T02:30:11.413708Z", + "iopub.status.idle": "2023-08-21T02:30:11.510731Z", + "shell.execute_reply": "2023-08-21T02:30:11.510392Z" } }, "outputs": [ @@ -986,7 +986,7 @@ }, { "cell_type": "markdown", - "id": "e380e98d", + "id": "f96f4f26", "metadata": {}, "source": [ "The standard deviations of the principal component scores are as follows:" @@ -995,13 +995,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "34fdfe21", + "id": "965c6320", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.404992Z", - "iopub.status.busy": "2023-08-07T00:19:40.404880Z", - "iopub.status.idle": "2023-08-07T00:19:40.407457Z", - "shell.execute_reply": "2023-08-07T00:19:40.407174Z" + "iopub.execute_input": "2023-08-21T02:30:11.512534Z", + "iopub.status.busy": "2023-08-21T02:30:11.512382Z", + "iopub.status.idle": "2023-08-21T02:30:11.515359Z", + "shell.execute_reply": "2023-08-21T02:30:11.514710Z" }, "lines_to_next_cell": 2 }, @@ -1023,7 +1023,7 @@ }, { "cell_type": "markdown", - "id": "c24b8ca2", + "id": "0aa2cebf", "metadata": {}, "source": [ "The variance of each score can be extracted directly from the `pcaUS` object via\n", @@ -1033,13 +1033,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "31b43c57", + "id": "cd5e1663", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.409206Z", - "iopub.status.busy": "2023-08-07T00:19:40.409061Z", - "iopub.status.idle": "2023-08-07T00:19:40.411699Z", - "shell.execute_reply": "2023-08-07T00:19:40.411382Z" + "iopub.execute_input": "2023-08-21T02:30:11.517105Z", + "iopub.status.busy": "2023-08-21T02:30:11.516982Z", + "iopub.status.idle": "2023-08-21T02:30:11.519375Z", + "shell.execute_reply": "2023-08-21T02:30:11.519076Z" }, "lines_to_next_cell": 0 }, @@ -1061,7 +1061,7 @@ }, { "cell_type": "markdown", - "id": "d2dcf543", + "id": "ef559fde", "metadata": {}, "source": [ "The proportion of variance explained by each principal \n", @@ -1071,13 +1071,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "68e47d3a", + "id": "e711d1be", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.413200Z", - "iopub.status.busy": "2023-08-07T00:19:40.413101Z", - "iopub.status.idle": "2023-08-07T00:19:40.415302Z", - "shell.execute_reply": "2023-08-07T00:19:40.415021Z" + "iopub.execute_input": "2023-08-21T02:30:11.520951Z", + "iopub.status.busy": "2023-08-21T02:30:11.520847Z", + "iopub.status.idle": "2023-08-21T02:30:11.523283Z", + "shell.execute_reply": "2023-08-21T02:30:11.523005Z" }, "lines_to_next_cell": 0 }, @@ -1099,7 +1099,7 @@ }, { "cell_type": "markdown", - "id": "831b19b7", + "id": "567f5027", "metadata": {}, "source": [ "We see that the first principal component explains 62.0% of the\n", @@ -1112,13 +1112,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "e87fe198", + "id": "e122eb41", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.416840Z", - "iopub.status.busy": "2023-08-07T00:19:40.416734Z", - "iopub.status.idle": "2023-08-07T00:19:40.552815Z", - "shell.execute_reply": "2023-08-07T00:19:40.552349Z" + "iopub.execute_input": "2023-08-21T02:30:11.524835Z", + "iopub.status.busy": "2023-08-21T02:30:11.524733Z", + "iopub.status.idle": "2023-08-21T02:30:11.658787Z", + "shell.execute_reply": "2023-08-21T02:30:11.658413Z" }, "lines_to_next_cell": 0 }, @@ -1139,7 +1139,7 @@ }, { "cell_type": "markdown", - "id": "2ed96395", + "id": "5de6bff0", "metadata": {}, "source": [ "Notice the use of `%%capture`, which suppresses the displaying of the partially completed figure." @@ -1148,13 +1148,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "409fb0c6", + "id": "bef47d90", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.554888Z", - "iopub.status.busy": "2023-08-07T00:19:40.554718Z", - "iopub.status.idle": "2023-08-07T00:19:40.664487Z", - "shell.execute_reply": "2023-08-07T00:19:40.664052Z" + "iopub.execute_input": "2023-08-21T02:30:11.661199Z", + "iopub.status.busy": "2023-08-21T02:30:11.661017Z", + "iopub.status.idle": "2023-08-21T02:30:11.782427Z", + "shell.execute_reply": "2023-08-21T02:30:11.781635Z" }, "lines_to_next_cell": 0 }, @@ -1185,7 +1185,7 @@ }, { "cell_type": "markdown", - "id": "496fb6be", + "id": "5815db80", "metadata": {}, "source": [ "The result is similar to that shown in Figure 12.3. Note\n", @@ -1196,13 +1196,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "e563e41b", + "id": "f3300d9e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.666198Z", - "iopub.status.busy": "2023-08-07T00:19:40.666084Z", - "iopub.status.idle": "2023-08-07T00:19:40.668537Z", - "shell.execute_reply": "2023-08-07T00:19:40.668242Z" + "iopub.execute_input": "2023-08-21T02:30:11.785513Z", + "iopub.status.busy": "2023-08-21T02:30:11.785329Z", + "iopub.status.idle": "2023-08-21T02:30:11.789028Z", + "shell.execute_reply": "2023-08-21T02:30:11.788419Z" }, "lines_to_next_cell": 0 }, @@ -1225,7 +1225,7 @@ }, { "cell_type": "markdown", - "id": "6794b1a3", + "id": "954cd9f7", "metadata": {}, "source": [ "## Matrix Completion\n", @@ -1245,13 +1245,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "f83ad0bc", + "id": "20e6009f", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.670153Z", - "iopub.status.busy": "2023-08-07T00:19:40.670010Z", - "iopub.status.idle": "2023-08-07T00:19:40.672783Z", - "shell.execute_reply": "2023-08-07T00:19:40.672475Z" + "iopub.execute_input": "2023-08-21T02:30:11.791569Z", + "iopub.status.busy": "2023-08-21T02:30:11.791444Z", + "iopub.status.idle": "2023-08-21T02:30:11.795478Z", + "shell.execute_reply": "2023-08-21T02:30:11.794972Z" }, "lines_to_next_cell": 0 }, @@ -1275,7 +1275,7 @@ }, { "cell_type": "markdown", - "id": "f9c71e57", + "id": "53e9a370", "metadata": {}, "source": [ "The `np.linalg.svd()` function returns three components, `U`, `D` and `V`. The matrix `V` is equivalent to the\n", @@ -1286,13 +1286,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "cb9bdc46", + "id": "7d9937cf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.674352Z", - "iopub.status.busy": "2023-08-07T00:19:40.674236Z", - "iopub.status.idle": "2023-08-07T00:19:40.676540Z", - "shell.execute_reply": "2023-08-07T00:19:40.676276Z" + "iopub.execute_input": "2023-08-21T02:30:11.797640Z", + "iopub.status.busy": "2023-08-21T02:30:11.797509Z", + "iopub.status.idle": "2023-08-21T02:30:11.800846Z", + "shell.execute_reply": "2023-08-21T02:30:11.800294Z" } }, "outputs": [ @@ -1317,13 +1317,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "f23c101e", + "id": "e58f83a3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.677938Z", - "iopub.status.busy": "2023-08-07T00:19:40.677820Z", - "iopub.status.idle": "2023-08-07T00:19:40.680147Z", - "shell.execute_reply": "2023-08-07T00:19:40.679807Z" + "iopub.execute_input": "2023-08-21T02:30:11.808398Z", + "iopub.status.busy": "2023-08-21T02:30:11.808136Z", + "iopub.status.idle": "2023-08-21T02:30:11.811679Z", + "shell.execute_reply": "2023-08-21T02:30:11.811074Z" }, "lines_to_next_cell": 0 }, @@ -1348,7 +1348,7 @@ }, { "cell_type": "markdown", - "id": "a5d9e0ae", + "id": "22f7625f", "metadata": {}, "source": [ "The matrix `U` corresponds to a *standardized* version of the PCA score matrix (each column standardized to have sum-of-squares one). If we multiply each column of `U` by the corresponding element of `D`, we recover the PCA scores exactly (up to a meaningless sign flip)." @@ -1357,13 +1357,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "4cc49622", + "id": "5c4f9b34", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.681817Z", - "iopub.status.busy": "2023-08-07T00:19:40.681713Z", - "iopub.status.idle": "2023-08-07T00:19:40.684186Z", - "shell.execute_reply": "2023-08-07T00:19:40.683881Z" + "iopub.execute_input": "2023-08-21T02:30:11.813485Z", + "iopub.status.busy": "2023-08-21T02:30:11.813382Z", + "iopub.status.idle": "2023-08-21T02:30:11.816392Z", + "shell.execute_reply": "2023-08-21T02:30:11.815967Z" } }, "outputs": [ @@ -1387,13 +1387,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "c96c9fe1", + "id": "0ce84f1b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.685613Z", - "iopub.status.busy": "2023-08-07T00:19:40.685513Z", - "iopub.status.idle": "2023-08-07T00:19:40.687604Z", - "shell.execute_reply": "2023-08-07T00:19:40.687323Z" + "iopub.execute_input": "2023-08-21T02:30:11.818183Z", + "iopub.status.busy": "2023-08-21T02:30:11.818037Z", + "iopub.status.idle": "2023-08-21T02:30:11.820586Z", + "shell.execute_reply": "2023-08-21T02:30:11.820295Z" }, "lines_to_next_cell": 0 }, @@ -1417,7 +1417,7 @@ }, { "cell_type": "markdown", - "id": "6b7002cb", + "id": "ccc66247", "metadata": {}, "source": [ "While it would be possible to carry out this lab using the `PCA()` estimator,\n", @@ -1432,13 +1432,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "574409d6", + "id": "cd8b4bed", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.689075Z", - "iopub.status.busy": "2023-08-07T00:19:40.688979Z", - "iopub.status.idle": "2023-08-07T00:19:40.691538Z", - "shell.execute_reply": "2023-08-07T00:19:40.691269Z" + "iopub.execute_input": "2023-08-21T02:30:11.822223Z", + "iopub.status.busy": "2023-08-21T02:30:11.822124Z", + "iopub.status.idle": "2023-08-21T02:30:11.824710Z", + "shell.execute_reply": "2023-08-21T02:30:11.824451Z" } }, "outputs": [], @@ -1457,7 +1457,7 @@ }, { "cell_type": "markdown", - "id": "fd4a5fdf", + "id": "ff75324d", "metadata": {}, "source": [ "Here the array `r_idx`\n", @@ -1472,13 +1472,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "89f190ae", + "id": "7f3bc8f9", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.693076Z", - "iopub.status.busy": "2023-08-07T00:19:40.692974Z", - "iopub.status.idle": "2023-08-07T00:19:40.694962Z", - "shell.execute_reply": "2023-08-07T00:19:40.694708Z" + "iopub.execute_input": "2023-08-21T02:30:11.826294Z", + "iopub.status.busy": "2023-08-21T02:30:11.826188Z", + "iopub.status.idle": "2023-08-21T02:30:11.828326Z", + "shell.execute_reply": "2023-08-21T02:30:11.827946Z" }, "lines_to_next_cell": 0 }, @@ -1492,7 +1492,7 @@ }, { "cell_type": "markdown", - "id": "a04129d0", + "id": "ff7e6ca1", "metadata": {}, "source": [ "To conduct Step 1 of the algorithm, we initialize `Xhat` --- this is $\\tilde{\\bf X}$ in Algorithm 12.1 --- by replacing\n", @@ -1505,13 +1505,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "322f339c", + "id": "771a46a7", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.696660Z", - "iopub.status.busy": "2023-08-07T00:19:40.696543Z", - "iopub.status.idle": "2023-08-07T00:19:40.698585Z", - "shell.execute_reply": "2023-08-07T00:19:40.698324Z" + "iopub.execute_input": "2023-08-21T02:30:11.830112Z", + "iopub.status.busy": "2023-08-21T02:30:11.829990Z", + "iopub.status.idle": "2023-08-21T02:30:11.832019Z", + "shell.execute_reply": "2023-08-21T02:30:11.831653Z" } }, "outputs": [], @@ -1523,7 +1523,7 @@ }, { "cell_type": "markdown", - "id": "357041e8", + "id": "30a6e972", "metadata": {}, "source": [ "Before we begin Step 2, we set ourselves up to measure the progress of our\n", @@ -1533,13 +1533,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "7e106d1a", + "id": "1416f048", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.700112Z", - "iopub.status.busy": "2023-08-07T00:19:40.700007Z", - "iopub.status.idle": "2023-08-07T00:19:40.702027Z", - "shell.execute_reply": "2023-08-07T00:19:40.701767Z" + "iopub.execute_input": "2023-08-21T02:30:11.834018Z", + "iopub.status.busy": "2023-08-21T02:30:11.833888Z", + "iopub.status.idle": "2023-08-21T02:30:11.836065Z", + "shell.execute_reply": "2023-08-21T02:30:11.835740Z" }, "lines_to_next_cell": 0 }, @@ -1555,7 +1555,7 @@ }, { "cell_type": "markdown", - "id": "105ac73f", + "id": "40dbfa78", "metadata": {}, "source": [ "Here `ismiss` is a logical matrix with the same dimensions as `Xna`;\n", @@ -1573,13 +1573,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "7cb05ce4", + "id": "9eff34aa", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.703581Z", - "iopub.status.busy": "2023-08-07T00:19:40.703476Z", - "iopub.status.idle": "2023-08-07T00:19:40.706441Z", - "shell.execute_reply": "2023-08-07T00:19:40.706179Z" + "iopub.execute_input": "2023-08-21T02:30:11.838230Z", + "iopub.status.busy": "2023-08-21T02:30:11.838081Z", + "iopub.status.idle": "2023-08-21T02:30:11.841552Z", + "shell.execute_reply": "2023-08-21T02:30:11.841240Z" } }, "outputs": [ @@ -1616,7 +1616,7 @@ }, { "cell_type": "markdown", - "id": "5cd8edf2", + "id": "b005a639", "metadata": {}, "source": [ "We see that after eight iterations, the relative error has fallen below `thresh = 1e-7`, and so the algorithm terminates. When this happens, the mean squared error of the non-missing elements equals 0.381.\n", @@ -1628,13 +1628,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "6f245188", + "id": "7815b948", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.708006Z", - "iopub.status.busy": "2023-08-07T00:19:40.707901Z", - "iopub.status.idle": "2023-08-07T00:19:40.710450Z", - "shell.execute_reply": "2023-08-07T00:19:40.710194Z" + "iopub.execute_input": "2023-08-21T02:30:11.843245Z", + "iopub.status.busy": "2023-08-21T02:30:11.843118Z", + "iopub.status.idle": "2023-08-21T02:30:11.846592Z", + "shell.execute_reply": "2023-08-21T02:30:11.846200Z" }, "lines_to_next_cell": 2 }, @@ -1656,7 +1656,7 @@ }, { "cell_type": "markdown", - "id": "f22444ff", + "id": "9091b3ad", "metadata": {}, "source": [ "In this lab, we implemented Algorithm 12.1 ourselves for didactic purposes. However, a reader who wishes to apply matrix completion to their data might look to more specialized `Python` implementations." @@ -1664,7 +1664,7 @@ }, { "cell_type": "markdown", - "id": "7da441a1", + "id": "e528e2a6", "metadata": {}, "source": [ "## Clustering" @@ -1672,7 +1672,7 @@ }, { "cell_type": "markdown", - "id": "ef4903d6", + "id": "8ba3f642", "metadata": {}, "source": [ "### $K$-Means Clustering\n", @@ -1686,13 +1686,13 @@ { "cell_type": "code", "execution_count": 32, - "id": "345fb41e", + "id": "f63cf4b8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.712093Z", - "iopub.status.busy": "2023-08-07T00:19:40.711979Z", - "iopub.status.idle": "2023-08-07T00:19:40.713935Z", - "shell.execute_reply": "2023-08-07T00:19:40.713674Z" + "iopub.execute_input": "2023-08-21T02:30:11.848430Z", + "iopub.status.busy": "2023-08-21T02:30:11.848311Z", + "iopub.status.idle": "2023-08-21T02:30:11.850755Z", + "shell.execute_reply": "2023-08-21T02:30:11.850430Z" }, "lines_to_next_cell": 0 }, @@ -1706,7 +1706,7 @@ }, { "cell_type": "markdown", - "id": "6ed3587f", + "id": "4bb54e06", "metadata": {}, "source": [ "We now perform $K$-means clustering with $K=2$." @@ -1715,13 +1715,13 @@ { "cell_type": "code", "execution_count": 33, - "id": "3a8c21a2", + "id": "f973c2d4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:40.715319Z", - "iopub.status.busy": "2023-08-07T00:19:40.715219Z", - "iopub.status.idle": "2023-08-07T00:19:41.035873Z", - "shell.execute_reply": "2023-08-07T00:19:41.035293Z" + "iopub.execute_input": "2023-08-21T02:30:11.852603Z", + "iopub.status.busy": "2023-08-21T02:30:11.852463Z", + "iopub.status.idle": "2023-08-21T02:30:12.419856Z", + "shell.execute_reply": "2023-08-21T02:30:12.416814Z" }, "lines_to_next_cell": 0 }, @@ -1734,7 +1734,7 @@ }, { "cell_type": "markdown", - "id": "df4fb0eb", + "id": "eeca2ae3", "metadata": {}, "source": [ "We specify `random_state` to make the results reproducible. The cluster assignments of the 50 observations are contained in `kmeans.labels_`." @@ -1743,13 +1743,13 @@ { "cell_type": "code", "execution_count": 34, - "id": "e3e35b5d", + "id": "e980954b", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.038578Z", - "iopub.status.busy": "2023-08-07T00:19:41.038393Z", - "iopub.status.idle": "2023-08-07T00:19:41.041820Z", - "shell.execute_reply": "2023-08-07T00:19:41.041365Z" + "iopub.execute_input": "2023-08-21T02:30:12.436151Z", + "iopub.status.busy": "2023-08-21T02:30:12.434738Z", + "iopub.status.idle": "2023-08-21T02:30:12.484691Z", + "shell.execute_reply": "2023-08-21T02:30:12.459324Z" }, "lines_to_next_cell": 0 }, @@ -1773,7 +1773,7 @@ }, { "cell_type": "markdown", - "id": "6632fa4c", + "id": "d796ee94", "metadata": {}, "source": [ "The $K$-means clustering perfectly separated the observations into two\n", @@ -1785,13 +1785,13 @@ { "cell_type": "code", "execution_count": 35, - "id": "d928650a", + "id": "a94d452c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.043940Z", - "iopub.status.busy": "2023-08-07T00:19:41.043807Z", - "iopub.status.idle": "2023-08-07T00:19:41.152788Z", - "shell.execute_reply": "2023-08-07T00:19:41.152394Z" + "iopub.execute_input": "2023-08-21T02:30:12.510741Z", + "iopub.status.busy": "2023-08-21T02:30:12.510582Z", + "iopub.status.idle": "2023-08-21T02:30:12.636062Z", + "shell.execute_reply": "2023-08-21T02:30:12.635730Z" } }, "outputs": [ @@ -1814,7 +1814,7 @@ }, { "cell_type": "markdown", - "id": "1f6a6d01", + "id": "6463d546", "metadata": {}, "source": [ "Here the observations can be easily plotted because they are\n", @@ -1832,13 +1832,13 @@ { "cell_type": "code", "execution_count": 36, - "id": "92e5175c", + "id": "94ff654c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.154810Z", - "iopub.status.busy": "2023-08-07T00:19:41.154695Z", - "iopub.status.idle": "2023-08-07T00:19:41.278338Z", - "shell.execute_reply": "2023-08-07T00:19:41.277867Z" + "iopub.execute_input": "2023-08-21T02:30:12.638065Z", + "iopub.status.busy": "2023-08-21T02:30:12.637921Z", + "iopub.status.idle": "2023-08-21T02:30:12.806481Z", + "shell.execute_reply": "2023-08-21T02:30:12.805717Z" }, "lines_to_next_cell": 0 }, @@ -1865,7 +1865,7 @@ }, { "cell_type": "markdown", - "id": "82317a30", + "id": "52dceb84", "metadata": {}, "source": [ "When $K=3$, $K$-means clustering splits up the two clusters.\n", @@ -1881,13 +1881,13 @@ { "cell_type": "code", "execution_count": 37, - "id": "4911ecc7", + "id": "b3561317", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.280637Z", - "iopub.status.busy": "2023-08-07T00:19:41.280494Z", - "iopub.status.idle": "2023-08-07T00:19:41.296485Z", - "shell.execute_reply": "2023-08-07T00:19:41.296101Z" + "iopub.execute_input": "2023-08-21T02:30:12.808756Z", + "iopub.status.busy": "2023-08-21T02:30:12.808647Z", + "iopub.status.idle": "2023-08-21T02:30:12.868305Z", + "shell.execute_reply": "2023-08-21T02:30:12.867287Z" }, "lines_to_next_cell": 0 }, @@ -1915,7 +1915,7 @@ }, { "cell_type": "markdown", - "id": "96e6df1f", + "id": "e32af47d", "metadata": {}, "source": [ "Note that `kmeans.inertia_` is the total within-cluster sum\n", @@ -1935,7 +1935,7 @@ }, { "cell_type": "markdown", - "id": "904ea858", + "id": "a34ddf89", "metadata": {}, "source": [ "### Hierarchical Clustering\n", @@ -1954,13 +1954,13 @@ { "cell_type": "code", "execution_count": 38, - "id": "1b42a700", + "id": "be9e4f9c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.298559Z", - "iopub.status.busy": "2023-08-07T00:19:41.298421Z", - "iopub.status.idle": "2023-08-07T00:19:41.304986Z", - "shell.execute_reply": "2023-08-07T00:19:41.304678Z" + "iopub.execute_input": "2023-08-21T02:30:12.871403Z", + "iopub.status.busy": "2023-08-21T02:30:12.871255Z", + "iopub.status.idle": "2023-08-21T02:30:12.877754Z", + "shell.execute_reply": "2023-08-21T02:30:12.877453Z" } }, "outputs": [ @@ -1991,7 +1991,7 @@ }, { "cell_type": "markdown", - "id": "22199f4d", + "id": "efa0aecd", "metadata": {}, "source": [ "This computes the entire dendrogram.\n", @@ -2001,13 +2001,13 @@ { "cell_type": "code", "execution_count": 39, - "id": "50ef7eea", + "id": "f80d8563", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.306962Z", - "iopub.status.busy": "2023-08-07T00:19:41.306831Z", - "iopub.status.idle": "2023-08-07T00:19:41.310423Z", - "shell.execute_reply": "2023-08-07T00:19:41.310047Z" + "iopub.execute_input": "2023-08-21T02:30:12.879743Z", + "iopub.status.busy": "2023-08-21T02:30:12.879627Z", + "iopub.status.idle": "2023-08-21T02:30:12.883455Z", + "shell.execute_reply": "2023-08-21T02:30:12.883063Z" } }, "outputs": [], @@ -2024,7 +2024,7 @@ }, { "cell_type": "markdown", - "id": "7e8db256", + "id": "d51b36f5", "metadata": {}, "source": [ "To use a precomputed distance matrix, we provide an additional\n", @@ -2034,13 +2034,13 @@ { "cell_type": "code", "execution_count": 40, - "id": "bf7a2408", + "id": "83e7ccf8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.312244Z", - "iopub.status.busy": "2023-08-07T00:19:41.312117Z", - "iopub.status.idle": "2023-08-07T00:19:41.317488Z", - "shell.execute_reply": "2023-08-07T00:19:41.317168Z" + "iopub.execute_input": "2023-08-21T02:30:12.885091Z", + "iopub.status.busy": "2023-08-21T02:30:12.884985Z", + "iopub.status.idle": "2023-08-21T02:30:12.890499Z", + "shell.execute_reply": "2023-08-21T02:30:12.890138Z" } }, "outputs": [ @@ -2075,7 +2075,7 @@ }, { "cell_type": "markdown", - "id": "8cd7fb7c", + "id": "d2bfc639", "metadata": {}, "source": [ "We use\n", @@ -2094,13 +2094,13 @@ { "cell_type": "code", "execution_count": 41, - "id": "a118c0ab", + "id": "56ee8cbf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.319281Z", - "iopub.status.busy": "2023-08-07T00:19:41.319164Z", - "iopub.status.idle": "2023-08-07T00:19:41.547955Z", - "shell.execute_reply": "2023-08-07T00:19:41.547603Z" + "iopub.execute_input": "2023-08-21T02:30:12.892483Z", + "iopub.status.busy": "2023-08-21T02:30:12.892271Z", + "iopub.status.idle": "2023-08-21T02:30:13.132407Z", + "shell.execute_reply": "2023-08-21T02:30:13.132103Z" } }, "outputs": [ @@ -2127,7 +2127,7 @@ }, { "cell_type": "markdown", - "id": "a325a001", + "id": "03438b18", "metadata": {}, "source": [ "We may want to color branches of the tree above\n", @@ -2139,13 +2139,13 @@ { "cell_type": "code", "execution_count": 42, - "id": "b1ff41c0", + "id": "10f4fc97", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.549650Z", - "iopub.status.busy": "2023-08-07T00:19:41.549522Z", - "iopub.status.idle": "2023-08-07T00:19:41.777366Z", - "shell.execute_reply": "2023-08-07T00:19:41.776967Z" + "iopub.execute_input": "2023-08-21T02:30:13.134084Z", + "iopub.status.busy": "2023-08-21T02:30:13.133962Z", + "iopub.status.idle": "2023-08-21T02:30:13.363909Z", + "shell.execute_reply": "2023-08-21T02:30:13.363594Z" } }, "outputs": [ @@ -2170,7 +2170,7 @@ }, { "cell_type": "markdown", - "id": "e774708c", + "id": "9b64a78f", "metadata": {}, "source": [ "To determine the cluster labels for each observation associated with a\n", @@ -2181,13 +2181,13 @@ { "cell_type": "code", "execution_count": 43, - "id": "c2752a96", + "id": "3aed342a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.779450Z", - "iopub.status.busy": "2023-08-07T00:19:41.779300Z", - "iopub.status.idle": "2023-08-07T00:19:41.783422Z", - "shell.execute_reply": "2023-08-07T00:19:41.783033Z" + "iopub.execute_input": "2023-08-21T02:30:13.365591Z", + "iopub.status.busy": "2023-08-21T02:30:13.365487Z", + "iopub.status.idle": "2023-08-21T02:30:13.368978Z", + "shell.execute_reply": "2023-08-21T02:30:13.368698Z" } }, "outputs": [ @@ -2210,7 +2210,7 @@ }, { "cell_type": "markdown", - "id": "d501d220", + "id": "0b986d91", "metadata": {}, "source": [ "This can also be achieved by providing an argument `n_clusters`\n", @@ -2223,13 +2223,13 @@ { "cell_type": "code", "execution_count": 44, - "id": "1407f7a4", + "id": "49c6db0c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.785112Z", - "iopub.status.busy": "2023-08-07T00:19:41.785008Z", - "iopub.status.idle": "2023-08-07T00:19:41.788913Z", - "shell.execute_reply": "2023-08-07T00:19:41.788641Z" + "iopub.execute_input": "2023-08-21T02:30:13.370508Z", + "iopub.status.busy": "2023-08-21T02:30:13.370414Z", + "iopub.status.idle": "2023-08-21T02:30:13.373767Z", + "shell.execute_reply": "2023-08-21T02:30:13.373373Z" } }, "outputs": [ @@ -2299,7 +2299,7 @@ }, { "cell_type": "markdown", - "id": "469bbad6", + "id": "8ff90643", "metadata": {}, "source": [ "To scale the variables before performing hierarchical clustering of\n", @@ -2309,13 +2309,13 @@ { "cell_type": "code", "execution_count": 45, - "id": "2d74f224", + "id": "0ef4b7ec", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:41.790458Z", - "iopub.status.busy": "2023-08-07T00:19:41.790357Z", - "iopub.status.idle": "2023-08-07T00:19:42.031301Z", - "shell.execute_reply": "2023-08-07T00:19:42.030904Z" + "iopub.execute_input": "2023-08-21T02:30:13.375598Z", + "iopub.status.busy": "2023-08-21T02:30:13.375476Z", + "iopub.status.idle": "2023-08-21T02:30:13.613632Z", + "shell.execute_reply": "2023-08-21T02:30:13.613228Z" } }, "outputs": [ @@ -2344,7 +2344,7 @@ }, { "cell_type": "markdown", - "id": "3caaa1a5", + "id": "671f8aaf", "metadata": {}, "source": [ "Correlation-based distances between observations can be used for\n", @@ -2364,13 +2364,13 @@ { "cell_type": "code", "execution_count": 46, - "id": "b7f7da12", + "id": "51761ef3", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.033202Z", - "iopub.status.busy": "2023-08-07T00:19:42.033063Z", - "iopub.status.idle": "2023-08-07T00:19:42.217388Z", - "shell.execute_reply": "2023-08-07T00:19:42.217021Z" + "iopub.execute_input": "2023-08-21T02:30:13.616266Z", + "iopub.status.busy": "2023-08-21T02:30:13.616114Z", + "iopub.status.idle": "2023-08-21T02:30:13.807244Z", + "shell.execute_reply": "2023-08-21T02:30:13.806904Z" }, "lines_to_next_cell": 2 }, @@ -2402,7 +2402,7 @@ }, { "cell_type": "markdown", - "id": "5b00804e", + "id": "f2f77cb2", "metadata": {}, "source": [ "## NCI60 Data Example\n", @@ -2416,13 +2416,13 @@ { "cell_type": "code", "execution_count": 47, - "id": "b94424fc", + "id": "3dbe7baf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.219256Z", - "iopub.status.busy": "2023-08-07T00:19:42.219115Z", - "iopub.status.idle": "2023-08-07T00:19:42.227039Z", - "shell.execute_reply": "2023-08-07T00:19:42.226704Z" + "iopub.execute_input": "2023-08-21T02:30:13.808881Z", + "iopub.status.busy": "2023-08-21T02:30:13.808757Z", + "iopub.status.idle": "2023-08-21T02:30:13.815572Z", + "shell.execute_reply": "2023-08-21T02:30:13.815234Z" } }, "outputs": [], @@ -2434,7 +2434,7 @@ }, { "cell_type": "markdown", - "id": "7313fea6", + "id": "6f03fcd9", "metadata": {}, "source": [ "Each cell line is labeled with a cancer type. We do not make use of\n", @@ -2449,13 +2449,13 @@ { "cell_type": "code", "execution_count": 48, - "id": "cea54566", + "id": "8f4e9db0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.228793Z", - "iopub.status.busy": "2023-08-07T00:19:42.228704Z", - "iopub.status.idle": "2023-08-07T00:19:42.231034Z", - "shell.execute_reply": "2023-08-07T00:19:42.230727Z" + "iopub.execute_input": "2023-08-21T02:30:13.817455Z", + "iopub.status.busy": "2023-08-21T02:30:13.817327Z", + "iopub.status.idle": "2023-08-21T02:30:13.819934Z", + "shell.execute_reply": "2023-08-21T02:30:13.819588Z" }, "lines_to_next_cell": 2 }, @@ -2477,7 +2477,7 @@ }, { "cell_type": "markdown", - "id": "6ebf27f1", + "id": "7fad9a75", "metadata": {}, "source": [ "We begin by examining the cancer types for the cell lines.\n" @@ -2486,13 +2486,13 @@ { "cell_type": "code", "execution_count": 49, - "id": "4dac41bb", + "id": "6373db4d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.232626Z", - "iopub.status.busy": "2023-08-07T00:19:42.232514Z", - "iopub.status.idle": "2023-08-07T00:19:42.236205Z", - "shell.execute_reply": "2023-08-07T00:19:42.235893Z" + "iopub.execute_input": "2023-08-21T02:30:13.821622Z", + "iopub.status.busy": "2023-08-21T02:30:13.821498Z", + "iopub.status.idle": "2023-08-21T02:30:13.825550Z", + "shell.execute_reply": "2023-08-21T02:30:13.825258Z" }, "lines_to_next_cell": 2 }, @@ -2529,7 +2529,7 @@ }, { "cell_type": "markdown", - "id": "8f16f96a", + "id": "c75ae01f", "metadata": {}, "source": [ "### PCA on the NCI60 Data\n", @@ -2542,13 +2542,13 @@ { "cell_type": "code", "execution_count": 50, - "id": "d8ebadd6", + "id": "9f185f83", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.237776Z", - "iopub.status.busy": "2023-08-07T00:19:42.237686Z", - "iopub.status.idle": "2023-08-07T00:19:42.764811Z", - "shell.execute_reply": "2023-08-07T00:19:42.760096Z" + "iopub.execute_input": "2023-08-21T02:30:13.827046Z", + "iopub.status.busy": "2023-08-21T02:30:13.826963Z", + "iopub.status.idle": "2023-08-21T02:30:15.128422Z", + "shell.execute_reply": "2023-08-21T02:30:15.127267Z" } }, "outputs": [], @@ -2561,7 +2561,7 @@ }, { "cell_type": "markdown", - "id": "8a8c9932", + "id": "e859fa7c", "metadata": {}, "source": [ "We now plot the first few principal component score vectors, in order\n", @@ -2574,13 +2574,13 @@ { "cell_type": "code", "execution_count": 51, - "id": "63b5efe3", + "id": "b044b197", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.771948Z", - "iopub.status.busy": "2023-08-07T00:19:42.771506Z", - "iopub.status.idle": "2023-08-07T00:19:42.971788Z", - "shell.execute_reply": "2023-08-07T00:19:42.971058Z" + "iopub.execute_input": "2023-08-21T02:30:15.132319Z", + "iopub.status.busy": "2023-08-21T02:30:15.130836Z", + "iopub.status.idle": "2023-08-21T02:30:15.450531Z", + "shell.execute_reply": "2023-08-21T02:30:15.450148Z" }, "lines_to_next_cell": 0 }, @@ -2619,7 +2619,7 @@ }, { "cell_type": "markdown", - "id": "87b33a9c", + "id": "01debda9", "metadata": {}, "source": [ "On the whole, cell lines corresponding to a single cancer type do tend to\n", @@ -2633,7 +2633,7 @@ }, { "cell_type": "markdown", - "id": "890fdb54", + "id": "8695f122", "metadata": {}, "source": [ "We can also plot the percent variance\n", @@ -2644,13 +2644,13 @@ { "cell_type": "code", "execution_count": 52, - "id": "e20c3cc1", + "id": "b2450bb2", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:42.976556Z", - "iopub.status.busy": "2023-08-07T00:19:42.975788Z", - "iopub.status.idle": "2023-08-07T00:19:43.134142Z", - "shell.execute_reply": "2023-08-07T00:19:43.133869Z" + "iopub.execute_input": "2023-08-21T02:30:15.453108Z", + "iopub.status.busy": "2023-08-21T02:30:15.452934Z", + "iopub.status.idle": "2023-08-21T02:30:15.641832Z", + "shell.execute_reply": "2023-08-21T02:30:15.641441Z" }, "lines_to_next_cell": 0 }, @@ -2685,7 +2685,7 @@ }, { "cell_type": "markdown", - "id": "cb6eb4f8", + "id": "6c9d8235", "metadata": {}, "source": [ "We see that together, the first seven principal components explain\n", @@ -2702,7 +2702,7 @@ }, { "cell_type": "markdown", - "id": "8962791f", + "id": "a4de7a0d", "metadata": {}, "source": [ "### Clustering the Observations of the NCI60 Data\n", @@ -2717,13 +2717,13 @@ { "cell_type": "code", "execution_count": 53, - "id": "622de805", + "id": "f3f85512", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:43.135947Z", - "iopub.status.busy": "2023-08-07T00:19:43.135742Z", - "iopub.status.idle": "2023-08-07T00:19:43.138541Z", - "shell.execute_reply": "2023-08-07T00:19:43.138181Z" + "iopub.execute_input": "2023-08-21T02:30:15.645761Z", + "iopub.status.busy": "2023-08-21T02:30:15.645577Z", + "iopub.status.idle": "2023-08-21T02:30:15.648982Z", + "shell.execute_reply": "2023-08-21T02:30:15.648549Z" } }, "outputs": [], @@ -2746,7 +2746,7 @@ }, { "cell_type": "markdown", - "id": "9cf5f836", + "id": "3f24eed8", "metadata": {}, "source": [ "Let’s plot our results." @@ -2755,13 +2755,13 @@ { "cell_type": "code", "execution_count": 54, - "id": "54d40449", + "id": "5cbeeb19", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:43.140415Z", - "iopub.status.busy": "2023-08-07T00:19:43.140161Z", - "iopub.status.idle": "2023-08-07T00:19:44.449125Z", - "shell.execute_reply": "2023-08-07T00:19:44.448816Z" + "iopub.execute_input": "2023-08-21T02:30:15.651172Z", + "iopub.status.busy": "2023-08-21T02:30:15.651062Z", + "iopub.status.idle": "2023-08-21T02:30:17.138064Z", + "shell.execute_reply": "2023-08-21T02:30:17.137456Z" }, "lines_to_next_cell": 0 }, @@ -2786,7 +2786,7 @@ }, { "cell_type": "markdown", - "id": "1703afbb", + "id": "91af9aad", "metadata": {}, "source": [ "We see that the\n", @@ -2800,7 +2800,7 @@ "cluster together, although the clustering is not perfect. We will use\n", "complete linkage hierarchical clustering for the analysis that\n", "follows.\n", - "\n", + " \n", "We can cut the dendrogram at the height that will yield a particular\n", "number of clusters, say four:" ] @@ -2808,13 +2808,13 @@ { "cell_type": "code", "execution_count": 55, - "id": "dc80afc8", + "id": "1eb3c92e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:44.450952Z", - "iopub.status.busy": "2023-08-07T00:19:44.450828Z", - "iopub.status.idle": "2023-08-07T00:19:44.462134Z", - "shell.execute_reply": "2023-08-07T00:19:44.461872Z" + "iopub.execute_input": "2023-08-21T02:30:17.141105Z", + "iopub.status.busy": "2023-08-21T02:30:17.140950Z", + "iopub.status.idle": "2023-08-21T02:30:17.153308Z", + "shell.execute_reply": "2023-08-21T02:30:17.152985Z" }, "lines_to_next_cell": 2 }, @@ -2989,7 +2989,7 @@ }, { "cell_type": "markdown", - "id": "d8ecae69", + "id": "194d0034", "metadata": {}, "source": [ "There are some clear patterns. All the leukemia cell lines fall in\n", @@ -3002,13 +3002,13 @@ { "cell_type": "code", "execution_count": 56, - "id": "40ff59f9", + "id": "e3c2841c", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:44.463951Z", - "iopub.status.busy": "2023-08-07T00:19:44.463834Z", - "iopub.status.idle": "2023-08-07T00:19:44.884205Z", - "shell.execute_reply": "2023-08-07T00:19:44.883879Z" + "iopub.execute_input": "2023-08-21T02:30:17.155262Z", + "iopub.status.busy": "2023-08-21T02:30:17.155100Z", + "iopub.status.idle": "2023-08-21T02:30:17.595981Z", + "shell.execute_reply": "2023-08-21T02:30:17.595541Z" } }, "outputs": [ @@ -3031,7 +3031,7 @@ }, { "cell_type": "markdown", - "id": "1c03368c", + "id": "f0154576", "metadata": {}, "source": [ "The `axhline()` function draws a horizontal line line on top of any\n", @@ -3051,13 +3051,13 @@ { "cell_type": "code", "execution_count": 57, - "id": "1587e83b", + "id": "94dfe5a0", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:44.886050Z", - "iopub.status.busy": "2023-08-07T00:19:44.885932Z", - "iopub.status.idle": "2023-08-07T00:19:46.259058Z", - "shell.execute_reply": "2023-08-07T00:19:46.257441Z" + "iopub.execute_input": "2023-08-21T02:30:17.598183Z", + "iopub.status.busy": "2023-08-21T02:30:17.598049Z", + "iopub.status.idle": "2023-08-21T02:30:46.877046Z", + "shell.execute_reply": "2023-08-21T02:30:46.874804Z" } }, "outputs": [ @@ -3152,7 +3152,7 @@ }, { "cell_type": "markdown", - "id": "b49c4a73", + "id": "54c529ff", "metadata": {}, "source": [ "We see that the four clusters obtained using hierarchical clustering\n", @@ -3176,13 +3176,13 @@ { "cell_type": "code", "execution_count": 58, - "id": "b09ceeab", + "id": "abd51940", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:46.265164Z", - "iopub.status.busy": "2023-08-07T00:19:46.264638Z", - "iopub.status.idle": "2023-08-07T00:19:46.685470Z", - "shell.execute_reply": "2023-08-07T00:19:46.685151Z" + "iopub.execute_input": "2023-08-21T02:30:46.888673Z", + "iopub.status.busy": "2023-08-21T02:30:46.888240Z", + "iopub.status.idle": "2023-08-21T02:30:47.344737Z", + "shell.execute_reply": "2023-08-21T02:30:47.344286Z" }, "lines_to_next_cell": 0 }, @@ -3379,7 +3379,7 @@ }, { "cell_type": "markdown", - "id": "5e1733b5", + "id": "2e388ef2", "metadata": {}, "source": [ "\n", @@ -3392,8 +3392,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "language_info": { "codemirror_mode": { From c82e9d506767ba36c453f0cfc9bf880d37785823 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 19:37:25 -0700 Subject: [PATCH 06/19] v2.1 of Ch13 --- Ch13-multiple-lab.Rmd | 82 ++++----- Ch13-multiple-lab.ipynb | 392 ++++++++++++++++++++-------------------- 2 files changed, 232 insertions(+), 242 deletions(-) diff --git a/Ch13-multiple-lab.Rmd b/Ch13-multiple-lab.Rmd index ef5db15..d5123f1 100644 --- a/Ch13-multiple-lab.Rmd +++ b/Ch13-multiple-lab.Rmd @@ -1,22 +1,9 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - main_language: python - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 ---- - # Chapter 13 # Lab: Multiple Testing - + We include our usual imports seen in earlier labs. @@ -28,7 +15,7 @@ import statsmodels.api as sm from ISLP import load_data ``` - + We also collect the new imports needed for this lab. @@ -60,7 +47,7 @@ true_mean = np.array([0.5]*50 + [0]*50) X += true_mean[None,:] ``` - + To begin, we use `ttest_1samp()` from the `scipy.stats` module to test $H_{0}: \mu_1=0$, the null hypothesis that the first variable has mean zero. @@ -70,7 +57,7 @@ result = ttest_1samp(X[:,0], 0) result.pvalue ``` - + The $p$-value comes out to 0.931, which is not low enough to reject the null hypothesis at level $\alpha=0.05$. In this case, $\mu_1=0.5$, so the null hypothesis is false. Therefore, we have made @@ -121,7 +108,7 @@ amounts to quite a weak signal, and it resulted in a high number of Type II errors. Let’s instead simulate data with a stronger signal, so that the ratio of the mean to the standard deviation for the false null hypotheses equals $1$. We make only 10 Type II errors. - + ```{python} true_mean = np.array([1]*50 + [0]*50) @@ -167,7 +154,7 @@ ax.legend() ax.axhline(0.05, c='k', ls='--'); ``` - + As discussed previously, even for moderate values of $m$ such as $50$, the FWER exceeds $0.05$ unless $\alpha$ is set to a very low value, such as $0.001$. Of course, the problem with setting $\alpha$ to such @@ -189,7 +176,7 @@ for i in range(5): fund_mini_pvals ``` - + The $p$-values are low for Managers One and Three, and high for the other three managers. However, we cannot simply reject $H_{0,1}$ and $H_{0,3}$, since this would fail to account for the multiple testing @@ -219,8 +206,8 @@ reject, bonf = mult_test(fund_mini_pvals, method = "bonferroni")[:2] reject ``` - - + + The $p$-values `bonf` are simply the `fund_mini_pvalues` multiplied by 5 and truncated to be less than or equal to 1. @@ -228,7 +215,7 @@ or equal to 1. bonf, np.minimum(fund_mini_pvals * 5, 1) ``` - + Therefore, using Bonferroni’s method, we are able to reject the null hypothesis only for Manager One while controlling FWER at $0.05$. @@ -240,17 +227,18 @@ hypotheses for Managers One and Three at a FWER of $0.05$. mult_test(fund_mini_pvals, method = "holm", alpha=0.05)[:2] ``` - - + + As discussed previously, Manager One seems to perform particularly well, whereas Manager Two has poor performance. + ```{python} fund_mini.mean() ``` - - + + Is there evidence of a meaningful difference in performance between these two managers? We can check this by performing a paired $t$-test using the `ttest_rel()` function from `scipy.stats`: @@ -260,7 +248,7 @@ ttest_rel(fund_mini['Manager1'], fund_mini['Manager2']).pvalue ``` - + The test results in a $p$-value of 0.038, suggesting a statistically significant difference. @@ -285,8 +273,8 @@ tukey = pairwise_tukeyhsd(returns, managers) print(tukey.summary()) ``` - - + + The `pairwise_tukeyhsd()` function provides confidence intervals for the difference between each pair of managers (`lower` and `upper`), as well as a $p$-value. All of these quantities have @@ -316,7 +304,7 @@ for i, manager in enumerate(Fund.columns): fund_pvalues[i] = ttest_1samp(Fund[manager], 0).pvalue ``` - + There are far too many managers to consider trying to control the FWER. Instead, we focus on controlling the FDR: that is, the expected fraction of rejected null hypotheses that are actually false positives. The `multipletests()` function (abbreviated `mult_test()`) can be used to carry out the Benjamini--Hochberg procedure. @@ -326,7 +314,7 @@ fund_qvalues = mult_test(fund_pvalues, method = "fdr_bh")[1] fund_qvalues[:10] ``` - + The *q-values* output by the Benjamini--Hochberg procedure can be interpreted as the smallest FDR threshold at which we would reject a particular null hypothesis. For @@ -353,8 +341,8 @@ null hypotheses! (fund_pvalues <= 0.1 / 2000).sum() ``` - - + + Figure 13.6 displays the ordered $p$-values, $p_{(1)} \leq p_{(2)} \leq \cdots \leq p_{(2000)}$, for the `Fund` dataset, as well as the threshold for rejection by the @@ -383,7 +371,7 @@ else: sorted_set_ = [] ``` - + We now reproduce the middle panel of Figure 13.6. ```{python} @@ -398,7 +386,7 @@ ax.scatter(sorted_set_+1, sorted_[sorted_set_], c='r', s=20) ax.axline((0, 0), (1,q/m), c='k', ls='--', linewidth=3); ``` - + ## A Re-Sampling Approach Here, we implement the re-sampling approach to hypothesis testing @@ -414,8 +402,8 @@ D['Y'] = pd.concat([Khan['ytrain'], Khan['ytest']]) D['Y'].value_counts() ``` - - + + There are four classes of cancer. For each gene, we compare the mean expression in the second class (rhabdomyosarcoma) to the mean expression in the fourth class (Burkitt’s lymphoma). Performing a @@ -435,8 +423,8 @@ observedT, pvalue = ttest_ind(D2[gene_11], observedT, pvalue ``` - - + + However, this $p$-value relies on the assumption that under the null hypothesis of no difference between the two groups, the test statistic follows a $t$-distribution with $29+25-2=52$ degrees of freedom. @@ -464,8 +452,8 @@ for b in range(B): (np.abs(Tnull) > np.abs(observedT)).mean() ``` - - + + This fraction, 0.0398, is our re-sampling-based $p$-value. It is almost identical to the $p$-value of 0.0412 obtained using the theoretical null distribution. @@ -521,7 +509,7 @@ for j in range(m): Tnull_vals[j,b] = ttest_.statistic ``` - + Next, we compute the number of rejected null hypotheses $R$, the estimated number of false positives $\widehat{V}$, and the estimated FDR, for a range of threshold values $c$ in @@ -539,7 +527,7 @@ for j in range(m): FDRs[j] = V / R ``` - + Now, for any given FDR, we can find the genes that will be rejected. For example, with FDR controlled at 0.1, we reject 15 of the 100 null hypotheses. On average, we would expect about one or two of @@ -555,7 +543,7 @@ the genes whose estimated FDR is less than 0.1. sorted(idx[np.abs(T_vals) >= cutoffs[FDRs < 0.1].min()]) ``` - + At an FDR threshold of 0.2, more genes are selected, at the cost of having a higher expected proportion of false discoveries. @@ -563,7 +551,7 @@ proportion of false discoveries. sorted(idx[np.abs(T_vals) >= cutoffs[FDRs < 0.2].min()]) ``` - + The next line generates Figure 13.11, which is similar to Figure 13.9, except that it is based on only a subset of the genes. @@ -575,5 +563,5 @@ ax.set_xlabel("Number of Rejections") ax.set_ylabel("False Discovery Rate"); ``` - + diff --git a/Ch13-multiple-lab.ipynb b/Ch13-multiple-lab.ipynb index 65c7fd0..cd40464 100644 --- a/Ch13-multiple-lab.ipynb +++ b/Ch13-multiple-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "75b2d75c", + "id": "687e9b80", "metadata": {}, "source": [ "\n", @@ -14,7 +14,7 @@ }, { "cell_type": "markdown", - "id": "34e410a6", + "id": "9f594a41", "metadata": {}, "source": [ "We include our usual imports seen in earlier labs." @@ -23,13 +23,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "1f928b2d", + "id": "7cc4fbeb", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:48.489971Z", - "iopub.status.busy": "2023-08-07T00:19:48.489727Z", - "iopub.status.idle": "2023-08-07T00:19:50.216508Z", - "shell.execute_reply": "2023-08-07T00:19:50.215573Z" + "iopub.execute_input": "2023-08-21T02:29:16.417394Z", + "iopub.status.busy": "2023-08-21T02:29:16.417287Z", + "iopub.status.idle": "2023-08-21T02:29:17.613483Z", + "shell.execute_reply": "2023-08-21T02:29:17.613156Z" } }, "outputs": [], @@ -43,7 +43,7 @@ }, { "cell_type": "markdown", - "id": "12319e0a", + "id": "08ba7bed", "metadata": {}, "source": [ "We also collect the new imports\n", @@ -53,13 +53,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "eb4b32aa", + "id": "595efc18", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.219989Z", - "iopub.status.busy": "2023-08-07T00:19:50.219429Z", - "iopub.status.idle": "2023-08-07T00:19:50.223239Z", - "shell.execute_reply": "2023-08-07T00:19:50.222392Z" + "iopub.execute_input": "2023-08-21T02:29:17.615551Z", + "iopub.status.busy": "2023-08-21T02:29:17.615375Z", + "iopub.status.idle": "2023-08-21T02:29:17.617379Z", + "shell.execute_reply": "2023-08-21T02:29:17.617087Z" }, "lines_to_next_cell": 2 }, @@ -78,7 +78,7 @@ }, { "cell_type": "markdown", - "id": "a2747e58", + "id": "69e5023e", "metadata": {}, "source": [ "## Review of Hypothesis Tests\n", @@ -92,13 +92,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "e12ac0cd", + "id": "985d1d6e", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.225454Z", - "iopub.status.busy": "2023-08-07T00:19:50.225335Z", - "iopub.status.idle": "2023-08-07T00:19:50.228651Z", - "shell.execute_reply": "2023-08-07T00:19:50.228301Z" + "iopub.execute_input": "2023-08-21T02:29:17.618995Z", + "iopub.status.busy": "2023-08-21T02:29:17.618887Z", + "iopub.status.idle": "2023-08-21T02:29:17.620921Z", + "shell.execute_reply": "2023-08-21T02:29:17.620629Z" } }, "outputs": [], @@ -111,7 +111,7 @@ }, { "cell_type": "markdown", - "id": "70d37233", + "id": "9ae561c4", "metadata": {}, "source": [ "To begin, we use `ttest_1samp()` from the\n", @@ -122,13 +122,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "04d0f49e", + "id": "753d612a", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.230854Z", - "iopub.status.busy": "2023-08-07T00:19:50.230727Z", - "iopub.status.idle": "2023-08-07T00:19:50.236745Z", - "shell.execute_reply": "2023-08-07T00:19:50.236388Z" + "iopub.execute_input": "2023-08-21T02:29:17.622537Z", + "iopub.status.busy": "2023-08-21T02:29:17.622429Z", + "iopub.status.idle": "2023-08-21T02:29:17.626063Z", + "shell.execute_reply": "2023-08-21T02:29:17.625801Z" } }, "outputs": [ @@ -150,7 +150,7 @@ }, { "cell_type": "markdown", - "id": "cf83426f", + "id": "5d9dc17f", "metadata": {}, "source": [ "The $p$-value comes out to 0.931, which is not low enough to\n", @@ -169,13 +169,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "d1f0c695", + "id": "facd6569", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.238822Z", - "iopub.status.busy": "2023-08-07T00:19:50.238685Z", - "iopub.status.idle": "2023-08-07T00:19:50.263876Z", - "shell.execute_reply": "2023-08-07T00:19:50.263508Z" + "iopub.execute_input": "2023-08-21T02:29:17.627714Z", + "iopub.status.busy": "2023-08-21T02:29:17.627617Z", + "iopub.status.idle": "2023-08-21T02:29:17.651726Z", + "shell.execute_reply": "2023-08-21T02:29:17.651448Z" }, "lines_to_next_cell": 0 }, @@ -195,7 +195,7 @@ }, { "cell_type": "markdown", - "id": "3d8e0d96", + "id": "4094daa7", "metadata": {}, "source": [ "Since this is a simulated data set, we can create a $2 \\times 2$ table\n", @@ -205,13 +205,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "7a9594a0", + "id": "e89ef3eb", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.266708Z", - "iopub.status.busy": "2023-08-07T00:19:50.266387Z", - "iopub.status.idle": "2023-08-07T00:19:50.280831Z", - "shell.execute_reply": "2023-08-07T00:19:50.280194Z" + "iopub.execute_input": "2023-08-21T02:29:17.653344Z", + "iopub.status.busy": "2023-08-21T02:29:17.653256Z", + "iopub.status.idle": "2023-08-21T02:29:17.662644Z", + "shell.execute_reply": "2023-08-21T02:29:17.662346Z" }, "lines_to_next_cell": 0 }, @@ -282,7 +282,7 @@ }, { "cell_type": "markdown", - "id": "9610c817", + "id": "a10ba423", "metadata": {}, "source": [ "Therefore, at level $\\alpha=0.05$, we reject 15 of the 50 false\n", @@ -299,19 +299,20 @@ "amounts to quite a weak signal, and it resulted in a high number of\n", "Type II errors. Let’s instead simulate data with a stronger signal,\n", "so that the ratio of the mean to the standard deviation for the false\n", - "null hypotheses equals $1$. We make only 10 Type II errors.\n" + "null hypotheses equals $1$. We make only 10 Type II errors.\n", + " " ] }, { "cell_type": "code", "execution_count": 7, - "id": "25f7fc5d", + "id": "ae184aaf", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.283336Z", - "iopub.status.busy": "2023-08-07T00:19:50.283198Z", - "iopub.status.idle": "2023-08-07T00:19:50.317664Z", - "shell.execute_reply": "2023-08-07T00:19:50.317356Z" + "iopub.execute_input": "2023-08-21T02:29:17.664327Z", + "iopub.status.busy": "2023-08-21T02:29:17.664213Z", + "iopub.status.idle": "2023-08-21T02:29:17.690928Z", + "shell.execute_reply": "2023-08-21T02:29:17.690657Z" }, "lines_to_next_cell": 0 }, @@ -394,7 +395,7 @@ }, { "cell_type": "markdown", - "id": "bb70c597", + "id": "7ca15d3f", "metadata": {}, "source": [ " " @@ -402,7 +403,7 @@ }, { "cell_type": "markdown", - "id": "f6953d33", + "id": "9e9f5977", "metadata": {}, "source": [ "## Family-Wise Error Rate\n", @@ -417,13 +418,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "369b5bd3", + "id": "0295fe68", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.319399Z", - "iopub.status.busy": "2023-08-07T00:19:50.319268Z", - "iopub.status.idle": "2023-08-07T00:19:50.674219Z", - "shell.execute_reply": "2023-08-07T00:19:50.673887Z" + "iopub.execute_input": "2023-08-21T02:29:17.692568Z", + "iopub.status.busy": "2023-08-21T02:29:17.692459Z", + "iopub.status.idle": "2023-08-21T02:29:17.899403Z", + "shell.execute_reply": "2023-08-21T02:29:17.899081Z" } }, "outputs": [ @@ -454,7 +455,7 @@ }, { "cell_type": "markdown", - "id": "3a81479e", + "id": "fecaca9e", "metadata": {}, "source": [ "As discussed previously, even for moderate values of $m$ such as $50$,\n", @@ -473,13 +474,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "9ce7a19f", + "id": "406e59a8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.676029Z", - "iopub.status.busy": "2023-08-07T00:19:50.675909Z", - "iopub.status.idle": "2023-08-07T00:19:50.715451Z", - "shell.execute_reply": "2023-08-07T00:19:50.715145Z" + "iopub.execute_input": "2023-08-21T02:29:17.901146Z", + "iopub.status.busy": "2023-08-21T02:29:17.901041Z", + "iopub.status.idle": "2023-08-21T02:29:17.939312Z", + "shell.execute_reply": "2023-08-21T02:29:17.939019Z" } }, "outputs": [ @@ -505,7 +506,7 @@ }, { "cell_type": "markdown", - "id": "7561e3a3", + "id": "87bab88b", "metadata": {}, "source": [ "The $p$-values are low for Managers One and Three, and high for the\n", @@ -530,7 +531,7 @@ }, { "cell_type": "markdown", - "id": "5b608e46", + "id": "d0c7a2a0", "metadata": {}, "source": [ "The `mult_test()` function takes $p$-values and a `method` argument, as well as an optional\n", @@ -541,13 +542,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "de6cffed", + "id": "d4f6a247", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.717476Z", - "iopub.status.busy": "2023-08-07T00:19:50.717258Z", - "iopub.status.idle": "2023-08-07T00:19:50.719841Z", - "shell.execute_reply": "2023-08-07T00:19:50.719577Z" + "iopub.execute_input": "2023-08-21T02:29:17.941032Z", + "iopub.status.busy": "2023-08-21T02:29:17.940919Z", + "iopub.status.idle": "2023-08-21T02:29:17.943369Z", + "shell.execute_reply": "2023-08-21T02:29:17.943081Z" }, "lines_to_next_cell": 2 }, @@ -570,7 +571,7 @@ }, { "cell_type": "markdown", - "id": "5135c6b9", + "id": "4d5bc7e7", "metadata": {}, "source": [ "The $p$-values `bonf` are simply the `fund_mini_pvalues` multiplied by 5 and truncated to be less than\n", @@ -580,13 +581,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "0de71500", + "id": "01a29d71", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.721450Z", - "iopub.status.busy": "2023-08-07T00:19:50.721342Z", - "iopub.status.idle": "2023-08-07T00:19:50.723962Z", - "shell.execute_reply": "2023-08-07T00:19:50.723691Z" + "iopub.execute_input": "2023-08-21T02:29:17.944859Z", + "iopub.status.busy": "2023-08-21T02:29:17.944760Z", + "iopub.status.idle": "2023-08-21T02:29:17.946888Z", + "shell.execute_reply": "2023-08-21T02:29:17.946639Z" } }, "outputs": [ @@ -608,7 +609,7 @@ }, { "cell_type": "markdown", - "id": "1f0bc112", + "id": "e68c9051", "metadata": {}, "source": [ "Therefore, using Bonferroni’s method, we are able to reject the null hypothesis only for Manager\n", @@ -622,13 +623,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "f7e87bdb", + "id": "95454eb4", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.725450Z", - "iopub.status.busy": "2023-08-07T00:19:50.725349Z", - "iopub.status.idle": "2023-08-07T00:19:50.777055Z", - "shell.execute_reply": "2023-08-07T00:19:50.776612Z" + "iopub.execute_input": "2023-08-21T02:29:17.948474Z", + "iopub.status.busy": "2023-08-21T02:29:17.948372Z", + "iopub.status.idle": "2023-08-21T02:29:17.990740Z", + "shell.execute_reply": "2023-08-21T02:29:17.990464Z" }, "lines_to_next_cell": 2 }, @@ -651,23 +652,24 @@ }, { "cell_type": "markdown", - "id": "f762fecd", + "id": "587b5b48", "metadata": {}, "source": [ "As discussed previously, Manager One seems to perform particularly\n", - "well, whereas Manager Two has poor performance." + "well, whereas Manager Two has poor performance.\n", + " " ] }, { "cell_type": "code", "execution_count": 13, - "id": "e88be376", + "id": "1f1ac764", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.779763Z", - "iopub.status.busy": "2023-08-07T00:19:50.779554Z", - "iopub.status.idle": "2023-08-07T00:19:50.783798Z", - "shell.execute_reply": "2023-08-07T00:19:50.783418Z" + "iopub.execute_input": "2023-08-21T02:29:17.992261Z", + "iopub.status.busy": "2023-08-21T02:29:17.992149Z", + "iopub.status.idle": "2023-08-21T02:29:17.995141Z", + "shell.execute_reply": "2023-08-21T02:29:17.994894Z" }, "lines_to_next_cell": 2 }, @@ -694,7 +696,7 @@ }, { "cell_type": "markdown", - "id": "88dbf0a6", + "id": "e3c4b716", "metadata": {}, "source": [ "Is there evidence of a meaningful difference in performance between\n", @@ -705,13 +707,13 @@ { "cell_type": "code", "execution_count": 14, - "id": "41149af6", + "id": "298d975d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.786752Z", - "iopub.status.busy": "2023-08-07T00:19:50.786580Z", - "iopub.status.idle": "2023-08-07T00:19:50.791095Z", - "shell.execute_reply": "2023-08-07T00:19:50.790607Z" + "iopub.execute_input": "2023-08-21T02:29:17.996686Z", + "iopub.status.busy": "2023-08-21T02:29:17.996590Z", + "iopub.status.idle": "2023-08-21T02:29:17.999332Z", + "shell.execute_reply": "2023-08-21T02:29:17.999076Z" } }, "outputs": [ @@ -733,7 +735,7 @@ }, { "cell_type": "markdown", - "id": "1aca6122", + "id": "3908d7d2", "metadata": {}, "source": [ "The test results in a $p$-value of 0.038,\n", @@ -757,13 +759,13 @@ { "cell_type": "code", "execution_count": 15, - "id": "61aabda7", + "id": "be117713", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:50.793577Z", - "iopub.status.busy": "2023-08-07T00:19:50.793394Z", - "iopub.status.idle": "2023-08-07T00:19:51.318999Z", - "shell.execute_reply": "2023-08-07T00:19:51.318071Z" + "iopub.execute_input": "2023-08-21T02:29:18.000853Z", + "iopub.status.busy": "2023-08-21T02:29:18.000747Z", + "iopub.status.idle": "2023-08-21T02:29:18.487357Z", + "shell.execute_reply": "2023-08-21T02:29:18.487078Z" }, "lines_to_next_cell": 2 }, @@ -799,7 +801,7 @@ }, { "cell_type": "markdown", - "id": "e0084fc5", + "id": "0fdf963f", "metadata": {}, "source": [ "The `pairwise_tukeyhsd()` function provides confidence intervals\n", @@ -817,13 +819,13 @@ { "cell_type": "code", "execution_count": 16, - "id": "cbcad4de", + "id": "537c4ea8", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.321200Z", - "iopub.status.busy": "2023-08-07T00:19:51.321046Z", - "iopub.status.idle": "2023-08-07T00:19:51.411142Z", - "shell.execute_reply": "2023-08-07T00:19:51.410682Z" + "iopub.execute_input": "2023-08-21T02:29:18.489069Z", + "iopub.status.busy": "2023-08-21T02:29:18.488949Z", + "iopub.status.idle": "2023-08-21T02:29:18.570869Z", + "shell.execute_reply": "2023-08-21T02:29:18.570427Z" } }, "outputs": [ @@ -845,7 +847,7 @@ }, { "cell_type": "markdown", - "id": "6278d13c", + "id": "8590f246", "metadata": {}, "source": [ "## False Discovery Rate\n", @@ -858,13 +860,13 @@ { "cell_type": "code", "execution_count": 17, - "id": "b5842190", + "id": "2c88ec87", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.413331Z", - "iopub.status.busy": "2023-08-07T00:19:51.413176Z", - "iopub.status.idle": "2023-08-07T00:19:51.848427Z", - "shell.execute_reply": "2023-08-07T00:19:51.847956Z" + "iopub.execute_input": "2023-08-21T02:29:18.572454Z", + "iopub.status.busy": "2023-08-21T02:29:18.572341Z", + "iopub.status.idle": "2023-08-21T02:29:19.005707Z", + "shell.execute_reply": "2023-08-21T02:29:19.005387Z" } }, "outputs": [], @@ -876,7 +878,7 @@ }, { "cell_type": "markdown", - "id": "80fc2fcc", + "id": "80e77fab", "metadata": {}, "source": [ "There are far too many managers to consider trying to control the FWER.\n", @@ -887,13 +889,13 @@ { "cell_type": "code", "execution_count": 18, - "id": "7c9d8bed", + "id": "b6d56819", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.850663Z", - "iopub.status.busy": "2023-08-07T00:19:51.850523Z", - "iopub.status.idle": "2023-08-07T00:19:51.854777Z", - "shell.execute_reply": "2023-08-07T00:19:51.854196Z" + "iopub.execute_input": "2023-08-21T02:29:19.007847Z", + "iopub.status.busy": "2023-08-21T02:29:19.007564Z", + "iopub.status.idle": "2023-08-21T02:29:19.010742Z", + "shell.execute_reply": "2023-08-21T02:29:19.010371Z" } }, "outputs": [ @@ -916,7 +918,7 @@ }, { "cell_type": "markdown", - "id": "4f73096d", + "id": "b4662444", "metadata": {}, "source": [ "The *q-values* output by the\n", @@ -932,13 +934,13 @@ { "cell_type": "code", "execution_count": 19, - "id": "bfa39f7c", + "id": "b00da3a1", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.856795Z", - "iopub.status.busy": "2023-08-07T00:19:51.856678Z", - "iopub.status.idle": "2023-08-07T00:19:51.859719Z", - "shell.execute_reply": "2023-08-07T00:19:51.859327Z" + "iopub.execute_input": "2023-08-21T02:29:19.012400Z", + "iopub.status.busy": "2023-08-21T02:29:19.012298Z", + "iopub.status.idle": "2023-08-21T02:29:19.015314Z", + "shell.execute_reply": "2023-08-21T02:29:19.014978Z" }, "lines_to_next_cell": 0 }, @@ -960,7 +962,7 @@ }, { "cell_type": "markdown", - "id": "ccb44c8d", + "id": "fdccb808", "metadata": {}, "source": [ "We find that 146 of the 2,000 fund managers have a $q$-value below\n", @@ -976,13 +978,13 @@ { "cell_type": "code", "execution_count": 20, - "id": "70b69b47", + "id": "1c230117", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.861924Z", - "iopub.status.busy": "2023-08-07T00:19:51.861522Z", - "iopub.status.idle": "2023-08-07T00:19:51.864394Z", - "shell.execute_reply": "2023-08-07T00:19:51.863987Z" + "iopub.execute_input": "2023-08-21T02:29:19.016857Z", + "iopub.status.busy": "2023-08-21T02:29:19.016769Z", + "iopub.status.idle": "2023-08-21T02:29:19.019332Z", + "shell.execute_reply": "2023-08-21T02:29:19.019032Z" }, "lines_to_next_cell": 2 }, @@ -1004,7 +1006,7 @@ }, { "cell_type": "markdown", - "id": "c8a969f4", + "id": "6112239d", "metadata": {}, "source": [ "Figure 13.6 displays the ordered\n", @@ -1026,13 +1028,13 @@ { "cell_type": "code", "execution_count": 21, - "id": "4c0ddea1", + "id": "62289650", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.865978Z", - "iopub.status.busy": "2023-08-07T00:19:51.865869Z", - "iopub.status.idle": "2023-08-07T00:19:51.868792Z", - "shell.execute_reply": "2023-08-07T00:19:51.868357Z" + "iopub.execute_input": "2023-08-21T02:29:19.021112Z", + "iopub.status.busy": "2023-08-21T02:29:19.020904Z", + "iopub.status.idle": "2023-08-21T02:29:19.023622Z", + "shell.execute_reply": "2023-08-21T02:29:19.023338Z" } }, "outputs": [], @@ -1051,7 +1053,7 @@ }, { "cell_type": "markdown", - "id": "ddeb3900", + "id": "c36b13b7", "metadata": {}, "source": [ "We now reproduce the middle panel of Figure 13.6." @@ -1060,13 +1062,13 @@ { "cell_type": "code", "execution_count": 22, - "id": "0314eac9", + "id": "18b3c0ed", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:51.871473Z", - "iopub.status.busy": "2023-08-07T00:19:51.871214Z", - "iopub.status.idle": "2023-08-07T00:19:52.126671Z", - "shell.execute_reply": "2023-08-07T00:19:52.126261Z" + "iopub.execute_input": "2023-08-21T02:29:19.025191Z", + "iopub.status.busy": "2023-08-21T02:29:19.025074Z", + "iopub.status.idle": "2023-08-21T02:29:19.262207Z", + "shell.execute_reply": "2023-08-21T02:29:19.261823Z" }, "lines_to_next_cell": 2 }, @@ -1096,7 +1098,7 @@ }, { "cell_type": "markdown", - "id": "83416f4a", + "id": "d87198e4", "metadata": {}, "source": [ "## A Re-Sampling Approach\n", @@ -1110,13 +1112,13 @@ { "cell_type": "code", "execution_count": 23, - "id": "b59b8137", + "id": "eb79e606", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:52.129167Z", - "iopub.status.busy": "2023-08-07T00:19:52.128842Z", - "iopub.status.idle": "2023-08-07T00:19:52.208320Z", - "shell.execute_reply": "2023-08-07T00:19:52.207936Z" + "iopub.execute_input": "2023-08-21T02:29:19.264174Z", + "iopub.status.busy": "2023-08-21T02:29:19.264030Z", + "iopub.status.idle": "2023-08-21T02:29:19.339232Z", + "shell.execute_reply": "2023-08-21T02:29:19.338912Z" }, "lines_to_next_cell": 2 }, @@ -1145,7 +1147,7 @@ }, { "cell_type": "markdown", - "id": "5534c8d4", + "id": "659ee2b8", "metadata": {}, "source": [ "There are four classes of cancer. For each gene, we compare the mean\n", @@ -1161,13 +1163,13 @@ { "cell_type": "code", "execution_count": 24, - "id": "96fb2f61", + "id": "1afbcf47", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:52.210235Z", - "iopub.status.busy": "2023-08-07T00:19:52.210101Z", - "iopub.status.idle": "2023-08-07T00:19:52.215004Z", - "shell.execute_reply": "2023-08-07T00:19:52.214604Z" + "iopub.execute_input": "2023-08-21T02:29:19.341009Z", + "iopub.status.busy": "2023-08-21T02:29:19.340889Z", + "iopub.status.idle": "2023-08-21T02:29:19.344670Z", + "shell.execute_reply": "2023-08-21T02:29:19.344391Z" }, "lines_to_next_cell": 2 }, @@ -1195,7 +1197,7 @@ }, { "cell_type": "markdown", - "id": "3131124e", + "id": "61f24919", "metadata": {}, "source": [ "However, this $p$-value relies on the assumption that under the null\n", @@ -1214,13 +1216,13 @@ { "cell_type": "code", "execution_count": 25, - "id": "fdc229fa", + "id": "f73f4c6d", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:52.217206Z", - "iopub.status.busy": "2023-08-07T00:19:52.217085Z", - "iopub.status.idle": "2023-08-07T00:19:54.776066Z", - "shell.execute_reply": "2023-08-07T00:19:54.775642Z" + "iopub.execute_input": "2023-08-21T02:29:19.346368Z", + "iopub.status.busy": "2023-08-21T02:29:19.346227Z", + "iopub.status.idle": "2023-08-21T02:29:21.776569Z", + "shell.execute_reply": "2023-08-21T02:29:21.776267Z" }, "lines_to_next_cell": 2 }, @@ -1253,7 +1255,7 @@ }, { "cell_type": "markdown", - "id": "c7fc4557", + "id": "a97f74af", "metadata": {}, "source": [ "This fraction, 0.0398,\n", @@ -1265,13 +1267,13 @@ { "cell_type": "code", "execution_count": 26, - "id": "e3894695", + "id": "062daf19", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:54.778563Z", - "iopub.status.busy": "2023-08-07T00:19:54.778388Z", - "iopub.status.idle": "2023-08-07T00:19:55.017161Z", - "shell.execute_reply": "2023-08-07T00:19:55.016821Z" + "iopub.execute_input": "2023-08-21T02:29:21.778366Z", + "iopub.status.busy": "2023-08-21T02:29:21.778242Z", + "iopub.status.idle": "2023-08-21T02:29:21.990476Z", + "shell.execute_reply": "2023-08-21T02:29:21.989965Z" }, "lines_to_next_cell": 0 }, @@ -1307,7 +1309,7 @@ }, { "cell_type": "markdown", - "id": "3bd21158", + "id": "e81b939b", "metadata": {}, "source": [ "The re-sampling-based null distribution is almost identical to the theoretical null distribution, which is displayed in red.\n", @@ -1325,13 +1327,13 @@ { "cell_type": "code", "execution_count": 27, - "id": "3b7392cb", + "id": "6d14fcad", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:19:55.019036Z", - "iopub.status.busy": "2023-08-07T00:19:55.018920Z", - "iopub.status.idle": "2023-08-07T00:39:19.291005Z", - "shell.execute_reply": "2023-08-07T00:39:19.287314Z" + "iopub.execute_input": "2023-08-21T02:29:21.992665Z", + "iopub.status.busy": "2023-08-21T02:29:21.992515Z", + "iopub.status.idle": "2023-08-21T02:34:05.930300Z", + "shell.execute_reply": "2023-08-21T02:34:05.929181Z" } }, "outputs": [], @@ -1358,7 +1360,7 @@ }, { "cell_type": "markdown", - "id": "1b92df1b", + "id": "06286699", "metadata": {}, "source": [ "Next, we compute the number of rejected null hypotheses $R$, the\n", @@ -1371,13 +1373,13 @@ { "cell_type": "code", "execution_count": 28, - "id": "cac15616", + "id": "8f0ec909", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:39:19.314420Z", - "iopub.status.busy": "2023-08-07T00:39:19.313452Z", - "iopub.status.idle": "2023-08-07T00:39:19.544251Z", - "shell.execute_reply": "2023-08-07T00:39:19.543932Z" + "iopub.execute_input": "2023-08-21T02:34:05.935513Z", + "iopub.status.busy": "2023-08-21T02:34:05.935323Z", + "iopub.status.idle": "2023-08-21T02:34:06.118079Z", + "shell.execute_reply": "2023-08-21T02:34:06.117633Z" } }, "outputs": [], @@ -1394,7 +1396,7 @@ }, { "cell_type": "markdown", - "id": "f6779ea0", + "id": "e26b64c6", "metadata": {}, "source": [ "Now, for any given FDR, we can find the genes that will be\n", @@ -1412,13 +1414,13 @@ { "cell_type": "code", "execution_count": 29, - "id": "9661eb10", + "id": "f11339e5", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:39:19.546693Z", - "iopub.status.busy": "2023-08-07T00:39:19.546543Z", - "iopub.status.idle": "2023-08-07T00:39:19.549970Z", - "shell.execute_reply": "2023-08-07T00:39:19.549697Z" + "iopub.execute_input": "2023-08-21T02:34:06.120138Z", + "iopub.status.busy": "2023-08-21T02:34:06.119994Z", + "iopub.status.idle": "2023-08-21T02:34:06.123846Z", + "shell.execute_reply": "2023-08-21T02:34:06.123478Z" } }, "outputs": [ @@ -1457,7 +1459,7 @@ }, { "cell_type": "markdown", - "id": "001e3fc1", + "id": "e145621b", "metadata": {}, "source": [ "At an FDR threshold of 0.2, more genes are selected, at the cost of having a higher expected\n", @@ -1467,13 +1469,13 @@ { "cell_type": "code", "execution_count": 30, - "id": "18ad4900", + "id": "d2600773", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:39:19.552090Z", - "iopub.status.busy": "2023-08-07T00:39:19.552004Z", - "iopub.status.idle": "2023-08-07T00:39:19.554743Z", - "shell.execute_reply": "2023-08-07T00:39:19.554473Z" + "iopub.execute_input": "2023-08-21T02:34:06.126460Z", + "iopub.status.busy": "2023-08-21T02:34:06.126346Z", + "iopub.status.idle": "2023-08-21T02:34:06.129561Z", + "shell.execute_reply": "2023-08-21T02:34:06.129124Z" } }, "outputs": [ @@ -1524,7 +1526,7 @@ }, { "cell_type": "markdown", - "id": "8767f70c", + "id": "32e600ff", "metadata": {}, "source": [ "The next line generates Figure 13.11, which is similar\n", @@ -1535,13 +1537,13 @@ { "cell_type": "code", "execution_count": 31, - "id": "28c276b6", + "id": "924b7705", "metadata": { "execution": { - "iopub.execute_input": "2023-08-07T00:39:19.556715Z", - "iopub.status.busy": "2023-08-07T00:39:19.556515Z", - "iopub.status.idle": "2023-08-07T00:39:19.650514Z", - "shell.execute_reply": "2023-08-07T00:39:19.650181Z" + "iopub.execute_input": "2023-08-21T02:34:06.131323Z", + "iopub.status.busy": "2023-08-21T02:34:06.131207Z", + "iopub.status.idle": "2023-08-21T02:34:06.216626Z", + "shell.execute_reply": "2023-08-21T02:34:06.216270Z" }, "lines_to_next_cell": 0 }, @@ -1566,18 +1568,18 @@ }, { "cell_type": "markdown", - "id": "e4b5d621", + "id": "b9f54695", "metadata": {}, "source": [ - "\n" + " \n" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "language_info": { "codemirror_mode": { From 058e89ef1cc464357be70e39cac1eaa94edb69a4 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 19:41:01 -0700 Subject: [PATCH 07/19] pairing notebooks --- Ch02-statlearn-lab.Rmd | 157 ++++++++++++++++++---------------- Ch02-statlearn-lab.ipynb | 4 +- Ch03-linreg-lab.Rmd | 35 +++++--- Ch03-linreg-lab.ipynb | 4 +- Ch04-classification-lab.Rmd | 13 +++ Ch04-classification-lab.ipynb | 4 +- Ch05-resample-lab.Rmd | 13 +++ Ch05-resample-lab.ipynb | 4 +- Ch06-varselect-lab.Rmd | 91 +++++++++++--------- Ch06-varselect-lab.ipynb | 4 +- Ch07-nonlin-lab.Rmd | 81 ++++++++++-------- Ch07-nonlin-lab.ipynb | 4 +- Ch08-baggboost-lab.Rmd | 81 ++++++++++-------- Ch08-baggboost-lab.ipynb | 4 +- Ch09-svm-lab.Rmd | 75 +++++++++------- Ch09-svm-lab.ipynb | 4 +- Ch11-surv-lab.Rmd | 87 +++++++++++-------- Ch11-surv-lab.ipynb | 4 +- Ch12-unsup-lab.Rmd | 81 ++++++++++-------- Ch12-unsup-lab.ipynb | 4 +- Ch13-multiple-lab.Rmd | 77 ++++++++++------- Ch13-multiple-lab.ipynb | 4 +- 22 files changed, 489 insertions(+), 346 deletions(-) diff --git a/Ch02-statlearn-lab.Rmd b/Ch02-statlearn-lab.Rmd index 93ae70a..556bbbf 100644 --- a/Ch02-statlearn-lab.Rmd +++ b/Ch02-statlearn-lab.Rmd @@ -1,11 +1,24 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 2 # Lab: Introduction to Python - - + + ## Getting Started @@ -61,21 +74,21 @@ inputs. For example, the print('fit a model with', 11, 'variables') ``` - + The following command will provide information about the `print()` function. ```{python} -print? +# print? ``` - + Adding two integers in `Python` is pretty intuitive. ```{python} 3 + 5 ``` - + In `Python`, textual data is handled using *strings*. For instance, `"hello"` and `'hello'` @@ -86,7 +99,7 @@ We can concatenate them using the addition `+` symbol. "hello" + " " + "world" ``` - + A string is actually a type of *sequence*: this is a generic term for an ordered list. The three most important types of sequences are lists, tuples, and strings. We introduce lists now. @@ -102,7 +115,7 @@ x = [3, 4, 5] x ``` - + Note that we used the brackets `[]` to construct this list. @@ -114,14 +127,14 @@ y = [4, 9, 7] x + y ``` - + The result may appear slightly counterintuitive: why did `Python` not add the entries of the lists element-by-element? In `Python`, lists hold *arbitrary* objects, and are added using *concatenation*. In fact, concatenation is the behavior that we saw earlier when we entered `"hello" + " " + "world"`. - - + + This example reflects the fact that `Python` is a general-purpose programming language. Much of `Python`'s data-specific functionality comes from other packages, notably `numpy` @@ -136,8 +149,8 @@ See [docs.scipy.org/doc/numpy/user/quickstart.html](https://docs.scipy.org/doc/n As mentioned earlier, this book makes use of functionality that is contained in the `numpy` *library*, or *package*. A package is a collection of modules that are not necessarily included in the base `Python` distribution. The name `numpy` is an abbreviation for *numerical Python*. - - + + To access `numpy`, we must first `import` it. ```{python} @@ -181,7 +194,7 @@ x - + The object `x` has several *attributes*, or associated objects. To access an attribute of `x`, we type `x.attribute`, where we replace `attribute` @@ -191,7 +204,7 @@ For instance, we can access the `ndim` attribute of `x` as follows. ```{python} x.ndim ``` - + The output indicates that `x` is a two-dimensional array. Similarly, `x.dtype` is the *data type* attribute of the object `x`. This indicates that `x` is comprised of 64-bit integers: @@ -215,7 +228,7 @@ documentation associated with the function `fun`, if it exists. We can try this for `np.array()`. ```{python} -np.array? +# np.array? ``` This documentation indicates that we could create a floating point array by passing a `dtype` argument into `np.array()`. @@ -233,7 +246,7 @@ at its `shape` attribute. x.shape ``` - + A *method* is a function that is associated with an object. @@ -270,10 +283,10 @@ x_reshape = x.reshape((2, 3)) print('reshaped x:\n', x_reshape) ``` - + The previous output reveals that `numpy` arrays are specified as a sequence of *rows*. This is called *row-major ordering*, as opposed to *column-major ordering*. - + `Python` (and hence `numpy`) uses 0-based indexing. This means that to access the top left element of `x_reshape`, @@ -303,13 +316,13 @@ print('x_reshape after we modify its top left element:\n', x_reshape) print('x after we modify top left element of x_reshape:\n', x) ``` - + Modifying `x_reshape` also modified `x` because the two objects occupy the same space in memory. - + We just saw that we can modify an element of an array. Can we also modify a tuple? It turns out that we cannot --- and trying to do so introduces an *exception*, or error. @@ -318,8 +331,8 @@ my_tuple = (3, 4, 5) my_tuple[0] = 2 ``` - - + + We now briefly mention some attributes of arrays that will come in handy. An array's `shape` attribute contains its dimension; this is always a tuple. The `ndim` attribute yields the number of dimensions, and `T` provides its transpose. @@ -327,7 +340,7 @@ The `ndim` attribute yields the number of dimensions, and `T` provides its tran x_reshape.shape, x_reshape.ndim, x_reshape.T ``` - + Notice that the three individual outputs `(2,3)`, `2`, and `array([[5, 4],[2, 5], [3,6]])` are themselves output as a tuple. We will often want to apply functions to arrays. @@ -338,22 +351,22 @@ square root of the entries using the `np.sqrt()` function: np.sqrt(x) ``` - + We can also square the elements: ```{python} x**2 ``` - + We can compute the square roots using the same notation, raising to the power of $1/2$ instead of 2. ```{python} x**0.5 ``` - - + + Throughout this book, we will often want to generate random data. The `np.random.normal()` function generates a vector of random normal variables. We can learn more about this function by looking at the help page, via a call to `np.random.normal?`. @@ -370,7 +383,7 @@ x = np.random.normal(size=50) x ``` - + We create an array `y` by adding an independent $N(50,1)$ random variable to each element of `x`. ```{python} @@ -382,7 +395,7 @@ correlation between `x` and `y`. ```{python} np.corrcoef(x, y) ``` - + If you're following along in your own `Jupyter` notebook, then you probably noticed that you got a different set of results when you ran the past few commands. In particular, each @@ -395,7 +408,7 @@ print(np.random.normal(scale=5, size=2)) ``` - + In order to ensure that our code provides exactly the same results each time it is run, we can set a *random seed* using the @@ -411,7 +424,7 @@ print(rng.normal(scale=5, size=2)) rng2 = np.random.default_rng(1303) print(rng2.normal(scale=5, size=2)) ``` - + Throughout the labs in this book, we use `np.random.default_rng()` whenever we perform calculations involving random quantities within `numpy`. In principle, this should enable the reader to exactly reproduce the stated results. However, as new versions of `numpy` become available, it is possible @@ -434,7 +447,7 @@ np.mean(y), y.mean() ```{python} np.var(y), y.var(), np.mean((y - y.mean())**2) ``` - + Notice that by default `np.var()` divides by the sample size $n$ rather than $n-1$; see the `ddof` argument in `np.var?`. @@ -443,7 +456,7 @@ than $n-1$; see the `ddof` argument in `np.var?`. ```{python} np.sqrt(np.var(y)), np.std(y) ``` - + The `np.mean()`, `np.var()`, and `np.std()` functions can also be applied to the rows and columns of a matrix. To see this, we construct a $10 \times 3$ matrix of $N(0,1)$ random variables, and consider computing its row sums. @@ -457,14 +470,14 @@ Since arrays are row-major ordered, the first axis, i.e. `axis=0`, refers to its ```{python} X.mean(axis=0) ``` - + The following yields the same result. ```{python} X.mean(0) ``` - + ## Graphics In `Python`, common practice is to use the library @@ -530,7 +543,7 @@ As an alternative, we could use the `ax.scatter()` function to create a scatter fig, ax = subplots(figsize=(8, 8)) ax.scatter(x, y, marker='o'); ``` - + Notice that in the code blocks above, we have ended the last line with a semicolon. This prevents `ax.plot(x, y)` from printing text to the notebook. However, it does not prevent a plot from being produced. @@ -571,7 +584,7 @@ fig.set_size_inches(12,3) fig ``` - + Occasionally we will want to create several plots within a figure. This can be achieved by passing additional arguments to `subplots()`. @@ -600,8 +613,8 @@ Type `subplots?` to learn more about - - + + To save the output of `fig`, we call its `savefig()` method. The argument `dpi` is the dots per inch, used to determine how large the figure will be in pixels. @@ -611,7 +624,7 @@ fig.savefig("Figure.png", dpi=400) fig.savefig("Figure.pdf", dpi=200); ``` - + We can continue to modify `fig` using step-by-step updates; for example, we can modify the range of the $x$-axis, re-save the figure, and even re-display it. @@ -663,7 +676,7 @@ fig, ax = subplots(figsize=(8, 8)) ax.imshow(f); ``` - + ## Sequences and Slice Notation @@ -677,8 +690,8 @@ seq1 = np.linspace(0, 10, 11) seq1 ``` - - + + The function `np.arange()` returns a sequence of numbers spaced out by `step`. If `step` is not specified, then a default value of $1$ is used. Let's create a sequence that starts at $0$ and ends at $10$. @@ -688,7 +701,7 @@ seq2 = np.arange(0, 10) seq2 ``` - + Why isn't $10$ output above? This has to do with *slice* notation in `Python`. Slice notation is used to index sequences such as lists, tuples and arrays. @@ -730,7 +743,7 @@ See the documentation `slice?` for useful options in creating slices. - + ## Indexing Data To begin, we create a two-dimensional `numpy` array. @@ -740,7 +753,7 @@ A = np.array(np.arange(16)).reshape((4, 4)) A ``` - + Typing `A[1,2]` retrieves the element corresponding to the second row and third column. (As usual, `Python` indexes from $0.$) @@ -748,7 +761,7 @@ column. (As usual, `Python` indexes from $0.$) A[1,2] ``` - + The first number after the open-bracket symbol `[` refers to the row, and the second number refers to the column. @@ -760,7 +773,7 @@ The first number after the open-bracket symbol `[` A[[1,3]] ``` - + To select the first and third columns, we pass in `[0,2]` as the second argument in the square brackets. In this case we need to supply the first argument `:` which selects all rows. @@ -769,7 +782,7 @@ which selects all rows. A[:,[0,2]] ``` - + Now, suppose that we want to select the submatrix made up of the second and fourth rows as well as the first and third columns. This is where indexing gets slightly tricky. It is natural to try to use lists to retrieve the rows and columns: @@ -778,21 +791,21 @@ indexing gets slightly tricky. It is natural to try to use lists to retrieve th A[[1,3],[0,2]] ``` - + Oops --- what happened? We got a one-dimensional array of length two identical to ```{python} np.array([A[1,0],A[3,2]]) ``` - + Similarly, the following code fails to extract the submatrix comprised of the second and fourth rows and the first, third, and fourth columns: ```{python} A[[1,3],[0,2,3]] ``` - + We can see what has gone wrong here. When supplied with two indexing lists, the `numpy` interpretation is that these provide pairs of $i,j$ indices for a series of entries. That is why the pair of lists must have the same length. However, that was not our intent, since we are looking for a submatrix. One easy way to do this is as follows. We first create a submatrix by subsetting the rows of `A`, and then on the fly we make a further submatrix by subsetting its columns. @@ -803,7 +816,7 @@ A[[1,3]][:,[0,2]] ``` - + There are more efficient ways of achieving the same result. @@ -815,7 +828,7 @@ idx = np.ix_([1,3],[0,2,3]) A[idx] ``` - + Alternatively, we can subset matrices efficiently using slices. @@ -829,7 +842,7 @@ A[1:4:2,0:3:2] ``` - + Why are we able to retrieve a submatrix directly using slices but not using lists? Its because they are different `Python` types, and are treated differently by `numpy`. @@ -845,7 +858,7 @@ Slices can be used to extract objects from arbitrary sequences, such as strings, - + ### Boolean Indexing In `numpy`, a *Boolean* is a type that equals either `True` or `False` (also represented as $1$ and $0$, respectively). @@ -862,7 +875,7 @@ keep_rows[[1,3]] = True keep_rows ``` - + Note that the elements of `keep_rows`, when viewed as integers, are the same as the values of `np.array([0,1,0,1])`. Below, we use `==` to verify their equality. When applied to two arrays, the `==` operation is applied elementwise. @@ -871,7 +884,7 @@ applied to two arrays, the `==` operation is applied elementwise. np.all(keep_rows == np.array([0,1,0,1])) ``` - + (Here, the function `np.all()` has checked whether all entries of an array are `True`. A similar function, `np.any()`, can be used to check whether any entries of an array are `True`.) @@ -883,14 +896,14 @@ The former retrieves the first, second, first, and second rows of `A`. A[np.array([0,1,0,1])] ``` - + By contrast, `keep_rows` retrieves only the second and fourth rows of `A` --- i.e. the rows for which the Boolean equals `TRUE`. ```{python} A[keep_rows] ``` - + This example shows that Booleans and integers are treated differently by `numpy`. @@ -914,7 +927,7 @@ A[idx_mixed] ``` - + For more details on indexing in `numpy`, readers are referred to the `numpy` tutorial mentioned earlier. @@ -967,7 +980,7 @@ files. Before loading data into `Python`, it is a good idea to view it using a text editor or other software, such as Microsoft Excel. - + We now take a look at the column of `Auto` corresponding to the variable `horsepower`: @@ -988,7 +1001,7 @@ We see the culprit is the value `?`, which is being used to encode missing value - + To fix the problem, we must provide `pd.read_csv()` with an argument called `na_values`. Now, each instance of `?` in the file is replaced with the value `np.nan`, which means *not a number*: @@ -1000,8 +1013,8 @@ Auto = pd.read_csv('Auto.data', Auto['horsepower'].sum() ``` - - + + The `Auto.shape` attribute tells us that the data has 397 observations, or rows, and nine variables, or columns. @@ -1009,7 +1022,7 @@ observations, or rows, and nine variables, or columns. Auto.shape ``` - + There are various ways to deal with missing data. In this case, since only five of the rows contain missing @@ -1020,7 +1033,7 @@ Auto_new = Auto.dropna() Auto_new.shape ``` - + ### Basics of Selecting Rows and Columns @@ -1031,7 +1044,7 @@ Auto = Auto_new # overwrite the previous value Auto.columns ``` - + Accessing the rows and columns of a data frame is similar, but not identical, to accessing the rows and columns of an array. Recall that the first argument to the `[]` method @@ -1316,8 +1329,8 @@ Auto.plot.scatter('horsepower', 'mpg', ax=axes[1]); ``` Note also that the columns of a data frame can be accessed as attributes: try typing in `Auto.horsepower`. - - + + We now consider the `cylinders` variable. Typing in `Auto.cylinders.dtype` reveals that it is being treated as a quantitative variable. However, since there is only a small number of possible values for this variable, we may wish to treat it as qualitative. Below, we replace @@ -1336,7 +1349,7 @@ fig, ax = subplots(figsize=(8, 8)) Auto.boxplot('mpg', by='cylinders', ax=ax); ``` - + The `hist()` method can be used to plot a *histogram*. ```{python} diff --git a/Ch02-statlearn-lab.ipynb b/Ch02-statlearn-lab.ipynb index d84ec4b..0a99b26 100644 --- a/Ch02-statlearn-lab.ipynb +++ b/Ch02-statlearn-lab.ipynb @@ -8278,8 +8278,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { diff --git a/Ch03-linreg-lab.Rmd b/Ch03-linreg-lab.Rmd index 5d00ee4..930176c 100644 --- a/Ch03-linreg-lab.Rmd +++ b/Ch03-linreg-lab.Rmd @@ -1,3 +1,16 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 3 @@ -14,7 +27,7 @@ import pandas as pd from matplotlib.pyplot import subplots ``` - + ### New imports Throughout this lab we will introduce new functions and libraries. However, @@ -90,7 +103,7 @@ A.sum() ``` - + ## Simple Linear Regression In this section we will construct model @@ -112,7 +125,7 @@ Boston = load_data("Boston") Boston.columns ``` - + Type `Boston?` to find out more about these data. We start by using the `sm.OLS()` function to fit a @@ -127,7 +140,7 @@ X = pd.DataFrame({'intercept': np.ones(Boston.shape[0]), X[:4] ``` - + We extract the response, and fit the model. ```{python} @@ -149,7 +162,7 @@ method, and returns such a summary. summarize(results) ``` - + Before we describe other methods for working with fitted models, we outline a more useful and general framework for constructing a model matrix~`X`. ### Using Transformations: Fit and Transform @@ -220,8 +233,8 @@ The fitted coefficients can also be retrieved as the results.params ``` - - + + The `get_prediction()` method can be used to obtain predictions, and produce confidence intervals and prediction intervals for the prediction of `medv` for given values of `lstat`. @@ -391,7 +404,7 @@ terms = Boston.columns.drop('medv') terms ``` - + We can now fit the model with all the variables in `terms` using the same model matrix builder. @@ -402,7 +415,7 @@ results = model.fit() summarize(results) ``` - + What if we would like to perform a regression using all of the variables but one? For example, in the above regression output, `age` has a high $p$-value. So we may wish to run a regression excluding this predictor. @@ -477,7 +490,7 @@ model2 = sm.OLS(y, X) summarize(model2.fit()) ``` - + ## Non-linear Transformations of the Predictors The model matrix builder can include terms beyond @@ -552,7 +565,7 @@ there is little discernible pattern in the residuals. In order to create a cubic or higher-degree polynomial fit, we can simply change the degree argument to `poly()`. - + ## Qualitative Predictors Here we use the `Carseats` data, which is included in the diff --git a/Ch03-linreg-lab.ipynb b/Ch03-linreg-lab.ipynb index 84f4720..f039622 100644 --- a/Ch03-linreg-lab.ipynb +++ b/Ch03-linreg-lab.ipynb @@ -2967,8 +2967,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { diff --git a/Ch04-classification-lab.Rmd b/Ch04-classification-lab.Rmd index baa6b16..d3d8eec 100644 --- a/Ch04-classification-lab.Rmd +++ b/Ch04-classification-lab.Rmd @@ -1,3 +1,16 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 4 diff --git a/Ch04-classification-lab.ipynb b/Ch04-classification-lab.ipynb index da425fa..0ab61a0 100644 --- a/Ch04-classification-lab.ipynb +++ b/Ch04-classification-lab.ipynb @@ -5031,8 +5031,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { diff --git a/Ch05-resample-lab.Rmd b/Ch05-resample-lab.Rmd index 03ba45c..34e2d1d 100644 --- a/Ch05-resample-lab.Rmd +++ b/Ch05-resample-lab.Rmd @@ -1,3 +1,16 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 5 diff --git a/Ch05-resample-lab.ipynb b/Ch05-resample-lab.ipynb index 57a41a8..85c1f65 100644 --- a/Ch05-resample-lab.ipynb +++ b/Ch05-resample-lab.ipynb @@ -1279,8 +1279,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { diff --git a/Ch06-varselect-lab.Rmd b/Ch06-varselect-lab.Rmd index 61548a4..9396072 100644 --- a/Ch06-varselect-lab.Rmd +++ b/Ch06-varselect-lab.Rmd @@ -1,3 +1,16 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 6 @@ -32,7 +45,7 @@ from ISLP.models import \ (Stepwise, sklearn_selected, sklearn_selection_path) -!pip install l0bnb +# !pip install l0bnb from l0bnb import fit_path ``` @@ -61,7 +74,7 @@ Hitters = load_data('Hitters') np.isnan(Hitters['Salary']).sum() ``` - + We see that `Salary` is missing for 59 players. The `dropna()` method of data frames removes all of the rows that have missing values in any variable (by default --- see `Hitters.dropna?`). @@ -71,8 +84,8 @@ Hitters = Hitters.dropna(); Hitters.shape ``` - - + + We first choose the best model using forward selection based on $C_p$ (6.2). This score is not built in as a metric to `sklearn`. We therefore define a function to compute it ourselves, and use it as a scorer. By default, `sklearn` tries to maximize a score, hence @@ -106,7 +119,7 @@ neg_Cp = partial(nCp, sigma2) ``` We can now use `neg_Cp()` as a scorer for model selection. - + Along with a score we need to specify the search strategy. This is done through the object `Stepwise()` in the `ISLP.models` package. The method `Stepwise.first_peak()` @@ -120,7 +133,7 @@ strategy = Stepwise.first_peak(design, max_terms=len(design.terms)) ``` - + We now fit a linear regression model with `Salary` as outcome using forward selection. To do so, we use the function `sklearn_selected()` from the `ISLP.models` package. This takes a model from `statsmodels` along with a search strategy and selects a model with its @@ -134,7 +147,7 @@ hitters_MSE.fit(Hitters, Y) hitters_MSE.selected_state_ ``` - + Using `neg_Cp` results in a smaller model, as expected, with just 10 variables selected. ```{python} @@ -145,7 +158,7 @@ hitters_Cp.fit(Hitters, Y) hitters_Cp.selected_state_ ``` - + ### Choosing Among Models Using the Validation Set Approach and Cross-Validation As an alternative to using $C_p$, we might try cross-validation to select a model in forward selection. For this, we need a @@ -167,7 +180,7 @@ strategy = Stepwise.fixed_steps(design, full_path = sklearn_selection_path(OLS, strategy) ``` - + We now fit the full forward-selection path on the `Hitters` data and compute the fitted values. ```{python} @@ -176,8 +189,8 @@ Yhat_in = full_path.predict(Hitters) Yhat_in.shape ``` - - + + This gives us an array of fitted values --- 20 steps in all, including the fitted mean for the null model --- which we can use to evaluate in-sample MSE. As expected, the in-sample MSE improves each step we take, indicating we must use either the validation or cross-validation @@ -266,7 +279,7 @@ ax.legend() mse_fig ``` - + To repeat the above using the validation set approach, we simply change our `cv` argument to a validation set: one random split of the data into a test and training. We choose a test size of 20%, similar to the size of each test set in 5-fold cross-validation.`skm.ShuffleSplit()` @@ -296,7 +309,7 @@ ax.legend() mse_fig ``` - + ### Best Subset Selection Forward stepwise is a *greedy* selection procedure; at each step it augments the current set by including one additional variable. We now apply best subset selection to the `Hitters` @@ -324,7 +337,7 @@ path = fit_path(X, max_nonzeros=X.shape[1]) ``` - + The function `fit_path()` returns a list whose values include the fitted coefficients as `B`, an intercept as `B0`, as well as a few other attributes related to the particular path algorithm used. Such details are beyond the scope of this book. ```{python} @@ -392,7 +405,7 @@ soln_path.index.name = 'negative log(lambda)' soln_path ``` - + We plot the paths to get a sense of how the coefficients vary with $\lambda$. To control the location of the legend we first set `legend` to `False` in the plot method, adding it afterward with the `legend()` method of `ax`. @@ -416,14 +429,14 @@ beta_hat = soln_path.loc[soln_path.index[39]] lambdas[39], beta_hat ``` - + Let’s compute the $\ell_2$ norm of the standardized coefficients. ```{python} np.linalg.norm(beta_hat) ``` - + In contrast, here is the $\ell_2$ norm when $\lambda$ is 2.44e-01. Note the much larger $\ell_2$ norm of the coefficients associated with this smaller value of $\lambda$. @@ -477,7 +490,7 @@ results = skm.cross_validate(ridge, -results['test_score'] ``` - + The test MSE is 1.342e+05. Note that if we had instead simply fit a model with just an intercept, we would have predicted each test observation using the mean of the @@ -514,7 +527,7 @@ grid.best_params_['ridge__alpha'] grid.best_estimator_ ``` - + Alternatively, we can use 5-fold cross-validation. ```{python} @@ -540,7 +553,7 @@ ax.set_xlabel('$-\log(\lambda)$', fontsize=20) ax.set_ylabel('Cross-validated MSE', fontsize=20); ``` - + One can cross-validate different metrics to choose a parameter. The default metric for `skl.ElasticNet()` is test $R^2$. Let’s compare $R^2$ to MSE for cross-validation here. @@ -552,7 +565,7 @@ grid_r2 = skm.GridSearchCV(pipe, grid_r2.fit(X, Y) ``` - + Finally, let’s plot the results for cross-validated $R^2$. ```{python} @@ -564,7 +577,7 @@ ax.set_xlabel('$-\log(\lambda)$', fontsize=20) ax.set_ylabel('Cross-validated $R^2$', fontsize=20); ``` - + ### Fast Cross-Validation for Solution Paths The ridge, lasso, and elastic net can be efficiently fit along a sequence of $\lambda$ values, creating what is known as a *solution path* or *regularization path*. Hence there is specialized code to fit @@ -584,7 +597,7 @@ pipeCV = Pipeline(steps=[('scaler', scaler), pipeCV.fit(X, Y) ``` - + Let’s produce a plot again of the cross-validation error to see that it is similar to using `skm.GridSearchCV`. @@ -600,7 +613,7 @@ ax.set_xlabel('$-\log(\lambda)$', fontsize=20) ax.set_ylabel('Cross-validated MSE', fontsize=20); ``` - + We see that the value of $\lambda$ that results in the smallest cross-validation error is 1.19e-02, available as the value `tuned_ridge.alpha_`. What is the test MSE @@ -610,7 +623,7 @@ associated with this value of $\lambda$? np.min(tuned_ridge.mse_path_.mean(1)) ``` - + This represents a further improvement over the test MSE that we got using $\lambda=4$. Finally, `tuned_ridge.coef_` has the coefficients fit on the entire data set @@ -666,7 +679,7 @@ results = skm.cross_validate(pipeCV, ``` - + ### The Lasso We saw that ridge regression with a wise choice of $\lambda$ can @@ -721,7 +734,7 @@ regression (page 305) with $\lambda$ chosen by cross-validation. np.min(tuned_lasso.mse_path_.mean(1)) ``` - + Let’s again produce a plot of the cross-validation error. @@ -746,7 +759,7 @@ variables. tuned_lasso.coef_ ``` - + As in ridge regression, we could evaluate the test error of cross-validated lasso by first splitting into test and training sets and internally running @@ -757,7 +770,7 @@ this as an exercise. ## PCR and PLS Regression ### Principal Components Regression - + Principal components regression (PCR) can be performed using `PCA()` from the `sklearn.decomposition` @@ -778,7 +791,7 @@ pipe.fit(X, Y) pipe.named_steps['linreg'].coef_ ``` - + When performing PCA, the results vary depending on whether the data has been *standardized* or not. As in the earlier examples, this can be accomplished @@ -792,7 +805,7 @@ pipe.fit(X, Y) pipe.named_steps['linreg'].coef_ ``` - + We can of course use CV to choose the number of components, by using `skm.GridSearchCV`, in this case fixing the parameters to vary the @@ -807,7 +820,7 @@ grid = skm.GridSearchCV(pipe, grid.fit(X, Y) ``` - + Let’s plot the results as we have for other methods. ```{python} @@ -822,7 +835,7 @@ ax.set_xticks(n_comp[::2]) ax.set_ylim([50000,250000]); ``` - + We see that the smallest cross-validation error occurs when 17 components are used. However, from the plot we also see that the @@ -846,8 +859,8 @@ cv_null = skm.cross_validate(linreg, -cv_null['test_score'].mean() ``` - - + + The `explained_variance_ratio_` attribute of our `PCA` object provides the *percentage of variance explained* in the predictors and in the response using different numbers of components. This concept is discussed in greater @@ -857,7 +870,7 @@ detail in Section 12.2. pipe.named_steps['pca'].explained_variance_ratio_ ``` - + Briefly, we can think of this as the amount of information about the predictors that is captured using $M$ principal components. For example, setting @@ -880,7 +893,7 @@ pls = PLSRegression(n_components=2, pls.fit(X, Y) ``` - + As was the case in PCR, we will want to use CV to choose the number of components. @@ -893,7 +906,7 @@ grid = skm.GridSearchCV(pls, grid.fit(X, Y) ``` - + As for our other methods, we plot the MSE. ```{python} @@ -908,7 +921,7 @@ ax.set_xticks(n_comp[::2]) ax.set_ylim([50000,250000]); ``` - + CV error is minimized at 12, though there is little noticable difference between this point and a much lower number like 2 or 3 components. diff --git a/Ch06-varselect-lab.ipynb b/Ch06-varselect-lab.ipynb index c90899c..f3342ea 100644 --- a/Ch06-varselect-lab.ipynb +++ b/Ch06-varselect-lab.ipynb @@ -9815,8 +9815,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { diff --git a/Ch07-nonlin-lab.Rmd b/Ch07-nonlin-lab.Rmd index c928262..c2abf72 100644 --- a/Ch07-nonlin-lab.Rmd +++ b/Ch07-nonlin-lab.Rmd @@ -1,3 +1,16 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 7 @@ -17,7 +30,7 @@ from ISLP.models import (summarize, ModelSpec as MS) from statsmodels.stats.anova import anova_lm ``` - + We again collect the new imports needed for this lab. Many of these are developed specifically for the `ISLP` package. @@ -38,7 +51,7 @@ from ISLP.pygam import (approx_lam, anova as anova_gam) ``` - + ## Polynomial Regression and Step Functions We start by demonstrating how Figure 7.1 can be reproduced. Let's begin by loading the data. @@ -49,7 +62,7 @@ y = Wage['wage'] age = Wage['age'] ``` - + Throughout most of this lab, our response is `Wage['wage']`, which we have stored as `y` above. As in Section 3.6.6, we will use the `poly()` function to create a model matrix @@ -61,8 +74,8 @@ M = sm.OLS(y, poly_age.transform(Wage)).fit() summarize(M) ``` - - + + This polynomial is constructed using the function `poly()`, which creates a special *transformer* `Poly()` (using `sklearn` terminology @@ -83,7 +96,7 @@ on the second line, as well as in the plotting function developed below. - + We now create a grid of values for `age` at which we want predictions. @@ -151,7 +164,7 @@ plot_wage_fit(age_df, - + With polynomial regression we must decide on the degree of the polynomial to use. Sometimes we just wing it, and decide to use second or third degree polynomials, simply to obtain a nonlinear fit. But we can @@ -182,7 +195,7 @@ anova_lm(*[sm.OLS(y, X_).fit() for X_ in Xs]) ``` - + Notice the `*` in the `anova_lm()` line above. This function takes a variable number of non-keyword arguments, in this case fitted models. When these models are provided as a list (as is done here), it must be @@ -207,8 +220,8 @@ that `poly()` creates orthogonal polynomials. summarize(M) ``` - - + + Notice that the p-values are the same, and in fact the square of the t-statistics are equal to the F-statistics from the `anova_lm()` function; for example: @@ -217,8 +230,8 @@ the t-statistics are equal to the F-statistics from the (-11.983)**2 ``` - - + + However, the ANOVA method works whether or not we used orthogonal polynomials, provided the models are nested. For example, we can use `anova_lm()` to compare the following three @@ -233,8 +246,8 @@ XEs = [model.fit_transform(Wage) anova_lm(*[sm.OLS(y, X_).fit() for X_ in XEs]) ``` - - + + As an alternative to using hypothesis tests and ANOVA, we could choose the polynomial degree using cross-validation, as discussed in Chapter 5. @@ -254,8 +267,8 @@ B = glm.fit() summarize(B) ``` - - + + Once again, we make predictions using the `get_prediction()` method. ```{python} @@ -264,7 +277,7 @@ preds = B.get_prediction(newX) bands = preds.conf_int(alpha=0.05) ``` - + We now plot the estimated relationship. ```{python} @@ -306,8 +319,8 @@ cut_age = pd.qcut(age, 4) summarize(sm.OLS(y, pd.get_dummies(cut_age)).fit()) ``` - - + + Here `pd.qcut()` automatically picked the cutpoints based on the quantiles 25%, 50% and 75%, which results in four regions. We could also have specified our own quantiles directly instead of the argument `4`. For cuts not based on quantiles we would use the `pd.cut()` function. @@ -364,7 +377,7 @@ M = sm.OLS(y, Xbs).fit() summarize(M) ``` - + Notice that there are 6 spline coefficients rather than 7. This is because, by default, `bs()` assumes `intercept=False`, since we typically have an overall intercept in the model. So it generates the spline basis with the given knots, and then discards one of the basis functions to account for the intercept. @@ -422,7 +435,7 @@ deciding bin membership. - + In order to fit a natural spline, we use the `NaturalSpline()` transform with the corresponding helper `ns()`. Here we fit a natural spline with five degrees of freedom (excluding the intercept) and plot the results. @@ -440,7 +453,7 @@ plot_wage_fit(age_df, 'Natural spline, df=5'); ``` - + ## Smoothing Splines and GAMs A smoothing spline is a special case of a GAM with squared-error loss and a single feature. To fit GAMs in `Python` we will use the @@ -459,7 +472,7 @@ gam = LinearGAM(s_gam(0, lam=0.6)) gam.fit(X_age, y) ``` - + The `pygam` library generally expects a matrix of features so we reshape `age` to be a matrix (a two-dimensional array) instead of a vector (i.e. a one-dimensional array). The `-1` in the call to the `reshape()` method tells `numpy` to impute the size of that dimension based on the remaining entries of the shape tuple. @@ -482,7 +495,7 @@ ax.set_ylabel('Wage', fontsize=20); ax.legend(title='$\lambda$'); ``` - + The `pygam` package can perform a search for an optimal smoothing parameter. ```{python} @@ -495,7 +508,7 @@ ax.legend() fig ``` - + Alternatively, we can fix the degrees of freedom of the smoothing spline using a function included in the `ISLP.pygam` package. Below we find a value of $\lambda$ that gives us roughly four degrees of @@ -510,8 +523,8 @@ age_term.lam = lam_4 degrees_of_freedom(X_age, age_term) ``` - - + + Let’s vary the degrees of freedom in a similar plot to above. We choose the degrees of freedom as the desired degrees of freedom plus one to account for the fact that these smoothing splines always have an intercept term. Hence, a value of one for `df` is just a linear fit. @@ -623,7 +636,7 @@ ax.set_ylabel('Effect on wage') ax.set_title('Partial dependence of year on wage', fontsize=20); ``` - + We now fit the model (7.16) using smoothing splines rather than natural splines. All of the terms in (7.16) are fit simultaneously, taking each other @@ -715,7 +728,7 @@ gam_linear = LinearGAM(age_term + gam_linear.fit(Xgam, y) ``` - + Notice our use of `age_term` in the expressions above. We do this because earlier we set the value for `lam` in this term to achieve four degrees of freedom. @@ -762,7 +775,7 @@ We can make predictions from `gam` objects, just like from Yhat = gam_full.predict(Xgam) ``` - + In order to fit a logistic regression GAM, we use `LogisticGAM()` from `pygam`. @@ -773,7 +786,7 @@ gam_logit = LogisticGAM(age_term + gam_logit.fit(Xgam, high_earn) ``` - + ```{python} fig, ax = subplots(figsize=(8, 8)) @@ -825,8 +838,8 @@ gam_logit_ = LogisticGAM(age_term + gam_logit_.fit(Xgam_, high_earn_) ``` - - + + Let’s look at the effect of `education`, `year` and `age` on high earner status now that we’ve removed those observations. @@ -859,7 +872,7 @@ ax.set_ylabel('Effect on wage') ax.set_title('Partial dependence of high earner status on age', fontsize=20); ``` - + ## Local Regression We illustrate the use of local regression using the `lowess()` diff --git a/Ch07-nonlin-lab.ipynb b/Ch07-nonlin-lab.ipynb index 743debd..b56a2db 100644 --- a/Ch07-nonlin-lab.ipynb +++ b/Ch07-nonlin-lab.ipynb @@ -3222,8 +3222,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { diff --git a/Ch08-baggboost-lab.Rmd b/Ch08-baggboost-lab.Rmd index 9a5c90b..50e480c 100644 --- a/Ch08-baggboost-lab.Rmd +++ b/Ch08-baggboost-lab.Rmd @@ -1,3 +1,16 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 8 @@ -33,10 +46,10 @@ from sklearn.ensemble import \ from ISLP.bart import BART ``` - + ## Fitting Classification Trees - + We first use classification trees to analyze the `Carseats` data set. In these data, `Sales` is a continuous variable, and so we begin @@ -52,7 +65,7 @@ High = np.where(Carseats.Sales > 8, "No") ``` - + We now use `DecisionTreeClassifier()` to fit a classification tree in order to predict `High` using all variables but `Sales`. To do so, we must form a model matrix as we did when fitting regression @@ -80,8 +93,8 @@ clf = DTC(criterion='entropy', clf.fit(X, High) ``` - - + + In our discussion of qualitative features in Section 3.3, we noted that for a linear regression model such a feature could be represented by including a matrix of dummy variables (one-hot-encoding) in the model @@ -97,8 +110,8 @@ advantage of this approach; instead it simply treats the one-hot-encoded levels accuracy_score(High, clf.predict(X)) ``` - - + + With only the default arguments, the training error rate is 21%. For classification trees, we can @@ -116,7 +129,7 @@ resid_dev = np.sum(log_loss(High, clf.predict_proba(X))) resid_dev ``` - + This is closely related to the *entropy*, defined in (8.7). A small deviance indicates a tree that provides a good fit to the (training) data. @@ -148,7 +161,7 @@ print(export_text(clf, show_weights=True)) ``` - + In order to properly evaluate the performance of a classification tree on these data, we must estimate the test error rather than simply computing the training error. We split the observations into a @@ -251,8 +264,8 @@ confusion = confusion_table(best_.predict(X_test), confusion ``` - - + + Now 72.0% of the test observations are correctly classified, which is slightly worse than the error for the full tree (with 35 leaves). So cross-validation has not helped us much here; it only pruned off 5 leaves, at a cost of a slightly worse error. These results would change if we were to change the random number seeds above; even though cross-validation gives an unbiased approach to model selection, it does have variance. @@ -270,7 +283,7 @@ feature_names = list(D.columns) X = np.asarray(D) ``` - + First, we split the data into training and test sets, and fit the tree to the training data. Here we use 30% of the data for the test set. @@ -285,7 +298,7 @@ to the training data. Here we use 30% of the data for the test set. random_state=0) ``` - + Having formed our training and test data sets, we fit the regression tree. ```{python} @@ -297,7 +310,7 @@ plot_tree(reg, ax=ax); ``` - + The variable `lstat` measures the percentage of individuals with lower socioeconomic status. The tree indicates that lower values of `lstat` correspond to more expensive houses. @@ -321,7 +334,7 @@ grid = skm.GridSearchCV(reg, G = grid.fit(X_train, y_train) ``` - + In keeping with the cross-validation results, we use the pruned tree to make predictions on the test set. @@ -330,8 +343,8 @@ best_ = grid.best_estimator_ np.mean((y_test - best_.predict(X_test))**2) ``` - - + + In other words, the test set MSE associated with the regression tree is 28.07. The square root of the MSE is therefore around @@ -354,7 +367,7 @@ plot_tree(G.best_estimator_, ## Bagging and Random Forests - + Here we apply bagging and random forests to the `Boston` data, using the `RandomForestRegressor()` from the `sklearn.ensemble` package. Recall @@ -367,8 +380,8 @@ bag_boston = RF(max_features=X_train.shape[1], random_state=0) bag_boston.fit(X_train, y_train) ``` - - + + The argument `max_features` indicates that all 12 predictors should be considered for each split of the tree --- in other words, that bagging should be done. How well does this bagged model perform on @@ -381,7 +394,7 @@ ax.scatter(y_hat_bag, y_test) np.mean((y_test - y_hat_bag)**2) ``` - + The test set MSE associated with the bagged regression tree is 14.63, about half that obtained using an optimally-pruned single tree. We could change the number of trees grown from the default of @@ -412,8 +425,8 @@ y_hat_RF = RF_boston.predict(X_test) np.mean((y_test - y_hat_RF)**2) ``` - - + + The test set MSE is 20.04; this indicates that random forests did somewhat worse than bagging in this case. Extracting the `feature_importances_` values from the fitted model, we can view the @@ -437,7 +450,7 @@ house size (`rm`) are by far the two most important variables. ## Boosting - + Here we use `GradientBoostingRegressor()` from `sklearn.ensemble` to fit boosted regression trees to the `Boston` data @@ -456,7 +469,7 @@ boost_boston = GBR(n_estimators=5000, boost_boston.fit(X_train, y_train) ``` - + We can see how the training error decreases with the `train_score_` attribute. To get an idea of how the test error decreases we can use the `staged_predict()` method to get the predicted values along the path. @@ -479,7 +492,7 @@ ax.plot(plot_idx, ax.legend(); ``` - + We now use the boosted model to predict `medv` on the test set: ```{python} @@ -487,7 +500,7 @@ y_hat_boost = boost_boston.predict(X_test); np.mean((y_test - y_hat_boost)**2) ``` - + The test MSE obtained is 14.48, similar to the test MSE for bagging. If we want to, we can perform boosting with a different value of the shrinkage parameter @@ -505,8 +518,8 @@ y_hat_boost = boost_boston.predict(X_test); np.mean((y_test - y_hat_boost)**2) ``` - - + + In this case, using $\lambda=0.2$ leads to a almost the same test MSE as when using $\lambda=0.001$. @@ -514,7 +527,7 @@ as when using $\lambda=0.001$. ## Bayesian Additive Regression Trees - + In this section we demonstrate a `Python` implementation of BART found in the `ISLP.bart` package. We fit a model @@ -527,8 +540,8 @@ bart_boston = BART(random_state=0, burnin=5, ndraw=15) bart_boston.fit(X_train, y_train) ``` - - + + On this data set, with this split into test and training, we see that the test error of BART is similar to that of random forest. ```{python} @@ -536,8 +549,8 @@ yhat_test = bart_boston.predict(X_test.astype(np.float32)) np.mean((y_test - yhat_test)**2) ``` - - + + We can check how many times each variable appeared in the collection of trees. This gives a summary similar to the variable importance plot for boosting and random forests. diff --git a/Ch08-baggboost-lab.ipynb b/Ch08-baggboost-lab.ipynb index 5c79fcf..0aaa6ac 100644 --- a/Ch08-baggboost-lab.ipynb +++ b/Ch08-baggboost-lab.ipynb @@ -1759,8 +1759,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { diff --git a/Ch09-svm-lab.Rmd b/Ch09-svm-lab.Rmd index a080775..0b653ef 100644 --- a/Ch09-svm-lab.Rmd +++ b/Ch09-svm-lab.Rmd @@ -1,8 +1,21 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 9 - + # Lab: Support Vector Machines In this lab, we use the `sklearn.svm` library to demonstrate the support @@ -26,7 +39,7 @@ from ISLP.svm import plot as plot_svm from sklearn.metrics import RocCurveDisplay ``` - + We will use the function `RocCurveDisplay.from_estimator()` to produce several ROC plots, using a shorthand `roc_curve`. @@ -71,8 +84,8 @@ svm_linear = SVC(C=10, kernel='linear') svm_linear.fit(X, y) ``` - - + + The support vector classifier with two features can be visualized by plotting values of its *decision function*. We have included a function for this in the `ISLP` package (inspired by a similar @@ -86,7 +99,7 @@ plot_svm(X, ax=ax) ``` - + The decision boundary between the two classes is linear (because we used the argument `kernel='linear'`). The support vectors are marked with `+` @@ -113,8 +126,8 @@ coefficients of the linear decision boundary as follows: svm_linear.coef_ ``` - - + + Since the support vector machine is an estimator in `sklearn`, we can use the usual machinery to tune it. @@ -131,8 +144,8 @@ grid.fit(X, y) grid.best_params_ ``` - - + + We can easily access the cross-validation errors for each of these models in `grid.cv_results_`. This prints out a lot of detail, so we extract the accuracy results only. @@ -153,7 +166,7 @@ y_test = np.array([-1]*10+[1]*10) X_test[y_test==1] += 1 ``` - + Now we predict the class labels of these test observations. Here we use the best model selected by cross-validation in order to make the predictions. @@ -164,7 +177,7 @@ y_test_hat = best_.predict(X_test) confusion_table(y_test_hat, y_test) ``` - + Thus, with this value of `C`, 70% of the test observations are correctly classified. What if we had instead used @@ -177,7 +190,7 @@ y_test_hat = svm_.predict(X_test) confusion_table(y_test_hat, y_test) ``` - + In this case 60% of test observations are correctly classified. We now consider a situation in which the two classes are linearly @@ -192,7 +205,7 @@ fig, ax = subplots(figsize=(8,8)) ax.scatter(X[:,0], X[:,1], c=y, cmap=cm.coolwarm); ``` - + Now the observations are just barely linearly separable. ```{python} @@ -201,7 +214,7 @@ y_hat = svm_.predict(X) confusion_table(y_hat, y) ``` - + We fit the support vector classifier and plot the resulting hyperplane, using a very large value of `C` so that no observations are @@ -227,7 +240,7 @@ y_hat = svm_.predict(X) confusion_table(y_hat, y) ``` - + Using `C=0.1`, we again do not misclassify any training observations, but we also obtain a much wider margin and make use of twelve support vectors. These jointly define the orientation of the decision boundary, and since there are more of them, it is more stable. It seems possible that this model will perform better on test @@ -241,7 +254,7 @@ plot_svm(X, ax=ax) ``` - + ## Support Vector Machine In order to fit an SVM using a non-linear kernel, we once again use @@ -264,7 +277,7 @@ X[100:150] -= 2 y = np.array([1]*150+[2]*50) ``` - + Plotting the data makes it clear that the class boundary is indeed non-linear. ```{python} @@ -275,8 +288,8 @@ ax.scatter(X[:,0], cmap=cm.coolwarm) ``` - - + + The data is randomly split into training and testing groups. We then fit the training data using the `SVC()` estimator with a radial kernel and $\gamma=1$: @@ -293,7 +306,7 @@ svm_rbf = SVC(kernel="rbf", gamma=1, C=1) svm_rbf.fit(X_train, y_train) ``` - + The plot shows that the resulting SVM has a decidedly non-linear boundary. @@ -305,7 +318,7 @@ plot_svm(X_train, ax=ax) ``` - + We can see from the figure that there are a fair number of training errors in this SVM fit. If we increase the value of `C`, we can reduce the number of training errors. However, this comes at the @@ -322,7 +335,7 @@ plot_svm(X_train, ax=ax) ``` - + We can perform cross-validation using `skm.GridSearchCV()` to select the best choice of $\gamma$ and `C` for an SVM with a radial kernel: @@ -341,7 +354,7 @@ grid.fit(X_train, y_train) grid.best_params_ ``` - + The best choice of parameters under five-fold CV is achieved at `C=1` and `gamma=0.5`, though several other values also achieve the same value. @@ -358,7 +371,7 @@ y_hat_test = best_svm.predict(X_test) confusion_table(y_hat_test, y_test) ``` - + With these parameters, 12% of test observations are misclassified by this SVM. @@ -418,7 +431,7 @@ roc_curve(svm_flex, ax=ax); ``` - + However, these ROC curves are all on the training data. We are really more interested in the level of prediction accuracy on the test data. When we compute the ROC curves on the test data, the model with @@ -434,7 +447,7 @@ roc_curve(svm_flex, fig; ``` - + Let’s look at our tuned SVM. ```{python} @@ -453,7 +466,7 @@ for (X_, y_, c, name) in zip( color=c) ``` - + ## SVM with Multiple Classes If the response is a factor containing more than two levels, then the @@ -472,7 +485,7 @@ fig, ax = subplots(figsize=(8,8)) ax.scatter(X[:,0], X[:,1], c=y, cmap=cm.coolwarm); ``` - + We now fit an SVM to the data: ```{python} @@ -508,7 +521,7 @@ Khan = load_data('Khan') Khan['xtrain'].shape, Khan['xtest'].shape ``` - + This data set consists of expression measurements for 2,308 genes. The training and test sets consist of 63 and 20 observations, respectively. @@ -527,7 +540,7 @@ confusion_table(khan_linear.predict(Khan['xtrain']), Khan['ytrain']) ``` - + We see that there are *no* training errors. In fact, this is not surprising, because the large number of variables relative to the number of observations implies that it is @@ -540,7 +553,7 @@ confusion_table(khan_linear.predict(Khan['xtest']), Khan['ytest']) ``` - + We see that using `C=10` yields two test set errors on these data. diff --git a/Ch09-svm-lab.ipynb b/Ch09-svm-lab.ipynb index 5e0676e..bf1cc7c 100644 --- a/Ch09-svm-lab.ipynb +++ b/Ch09-svm-lab.ipynb @@ -1900,8 +1900,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { diff --git a/Ch11-surv-lab.Rmd b/Ch11-surv-lab.Rmd index 6fe7020..37c258b 100644 --- a/Ch11-surv-lab.Rmd +++ b/Ch11-surv-lab.Rmd @@ -1,3 +1,16 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 11 @@ -24,7 +37,7 @@ from ISLP.models import ModelSpec as MS from ISLP import load_data ``` - + We also collect the new imports needed for this lab. @@ -48,7 +61,7 @@ BrainCancer = load_data('BrainCancer') BrainCancer.columns ``` - + The rows index the 88 patients, while the 8 columns contain the predictors and outcome variables. We first briefly examine the data. @@ -56,20 +69,20 @@ We first briefly examine the data. BrainCancer['sex'].value_counts() ``` - + ```{python} BrainCancer['diagnosis'].value_counts() ``` - + ```{python} BrainCancer['status'].value_counts() ``` - - + + Before beginning an analysis, it is important to know how the `status` variable has been coded. Most software uses the convention that a `status` of 1 indicates an @@ -96,7 +109,7 @@ km_brain = km.fit(BrainCancer['time'], BrainCancer['status']) km_brain.plot(label='Kaplan Meier estimate', ax=ax) ``` - + Next we create Kaplan-Meier survival curves that are stratified by `sex`, in order to reproduce Figure 11.3. We do this using the `groupby()` method of a dataframe. @@ -125,7 +138,7 @@ for sex, df in BrainCancer.groupby('sex'): km_sex.plot(label='Sex=%s' % sex, ax=ax) ``` - + As discussed in Section 11.4, we can perform a log-rank test to compare the survival of males to females. We use the `logrank_test()` function from the `lifelines.statistics` module. @@ -139,8 +152,8 @@ logrank_test(by_sex['Male']['time'], by_sex['Female']['status']) ``` - - + + The resulting $p$-value is $0.23$, indicating no evidence of a difference in survival between the two sexes. @@ -159,7 +172,7 @@ cox_fit = coxph().fit(model_df, cox_fit.summary[['coef', 'se(coef)', 'p']] ``` - + The first argument to `fit` should be a data frame containing at least the event time (the second argument `time` in this case), as well as an optional censoring variable (the argument `status` in this case). @@ -173,7 +186,7 @@ with no features as follows: cox_fit.log_likelihood_ratio_test() ``` - + Regardless of which test we use, we see that there is no clear evidence for a difference in survival between males and females. As we learned in this chapter, the score test from the Cox model is @@ -193,7 +206,7 @@ fit_all = coxph().fit(all_df, fit_all.summary[['coef', 'se(coef)', 'p']] ``` - + The `diagnosis` variable has been coded so that the baseline corresponds to HG glioma. The results indicate that the risk associated with HG glioma is more than eight times (i.e. $e^{2.15}=8.62$) the risk associated @@ -220,7 +233,7 @@ def representative(series): modal_data = cleaned.apply(representative, axis=0) ``` - + We make four copies of the column means and assign the `diagnosis` column to be the four different diagnoses. @@ -232,7 +245,7 @@ modal_df['diagnosis'] = levels modal_df ``` - + We then construct the model matrix based on the model specification `all_MS` used to fit the model, and name the rows according to the levels of `diagnosis`. @@ -259,7 +272,7 @@ fig, ax = subplots(figsize=(8, 8)) predicted_survival.plot(ax=ax); ``` - + ## Publication Data The `Publication` data presented in Section 11.5.4 can be @@ -278,7 +291,7 @@ for result, df in Publication.groupby('posres'): km_result.plot(label='Result=%d' % result, ax=ax) ``` - + As discussed previously, the $p$-values from fitting Cox’s proportional hazards model to the `posres` variable are quite large, providing no evidence of a difference in time-to-publication @@ -295,8 +308,8 @@ posres_fit = coxph().fit(posres_df, posres_fit.summary[['coef', 'se(coef)', 'p']] ``` - - + + However, the results change dramatically when we include other predictors in the model. Here we exclude the funding mechanism variable. @@ -309,7 +322,7 @@ coxph().fit(model.fit_transform(Publication), 'status').summary[['coef', 'se(coef)', 'p']] ``` - + We see that there are a number of statistically significant variables, including whether the trial focused on a clinical endpoint, the impact of the study, and whether the study had positive or negative results. @@ -359,7 +372,7 @@ model = MS(['Operators', intercept=False) X = model.fit_transform(D) ``` - + It is worthwhile to take a peek at the model matrix `X`, so that we can be sure that we understand how the variables have been coded. By default, the levels of categorical variables are sorted and, as usual, the first column of the one-hot encoding @@ -369,7 +382,7 @@ of the variable is dropped. X[:5] ``` - + Next, we specify the coefficients and the hazard function. ```{python} @@ -418,7 +431,7 @@ W = np.array([sim_time(l, cum_hazard, rng) D['Wait time'] = np.clip(W, 0, 1000) ``` - + We now simulate our censoring variable, for which we assume 90% of calls were answered (`Failed==1`) before the customer hung up (`Failed==0`). @@ -430,13 +443,13 @@ D['Failed'] = rng.choice([1, 0], D[:5] ``` - + ```{python} D['Failed'].mean() ``` - + We now plot Kaplan-Meier survival curves. First, we stratify by `Center`. ```{python} @@ -449,7 +462,7 @@ for center, df in D.groupby('Center'): ax.set_title("Probability of Still Being on Hold") ``` - + Next, we stratify by `Time`. ```{python} @@ -462,7 +475,7 @@ for time, df in D.groupby('Time'): ax.set_title("Probability of Still Being on Hold") ``` - + It seems that calls at Call Center B take longer to be answered than calls at Centers A and C. Similarly, it appears that wait times are longest in the morning and shortest in the evening hours. We can use a @@ -475,8 +488,8 @@ multivariate_logrank_test(D['Wait time'], D['Failed']) ``` - - + + Next, we consider the effect of `Time`. ```{python} @@ -485,8 +498,8 @@ multivariate_logrank_test(D['Wait time'], D['Failed']) ``` - - + + As in the case of a categorical variable with 2 levels, these results are similar to the likelihood ratio test from the Cox proportional hazards model. First, we @@ -501,8 +514,8 @@ F = coxph().fit(X, 'Wait time', 'Failed') F.log_likelihood_ratio_test() ``` - - + + Next, we look at the results for `Time`. ```{python} @@ -514,8 +527,8 @@ F = coxph().fit(X, 'Wait time', 'Failed') F.log_likelihood_ratio_test() ``` - - + + We find that differences between centers are highly significant, as are differences between times of day. @@ -531,8 +544,8 @@ fit_queuing = coxph().fit( fit_queuing.summary[['coef', 'se(coef)', 'p']] ``` - - + + The $p$-values for Center B and evening time are very small. It is also clear that the hazard --- that is, the instantaneous risk that a call will be diff --git a/Ch11-surv-lab.ipynb b/Ch11-surv-lab.ipynb index b152b25..d4c812c 100644 --- a/Ch11-surv-lab.ipynb +++ b/Ch11-surv-lab.ipynb @@ -2703,8 +2703,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { diff --git a/Ch12-unsup-lab.Rmd b/Ch12-unsup-lab.Rmd index 4e6df84..8f885f4 100644 --- a/Ch12-unsup-lab.Rmd +++ b/Ch12-unsup-lab.Rmd @@ -1,3 +1,16 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 12 @@ -31,7 +44,7 @@ from scipy.cluster.hierarchy import \ from ISLP.cluster import compute_linkage ``` - + ## Principal Components Analysis In this lab, we perform PCA on `USArrests`, a data set in the `R` computing environment. @@ -45,22 +58,22 @@ USArrests = get_rdataset('USArrests').data USArrests ``` - + The columns of the data set contain the four variables. ```{python} USArrests.columns ``` - + We first briefly examine the data. We notice that the variables have vastly different means. ```{python} USArrests.mean() ``` - - + + Dataframes have several useful methods for computing column-wise summaries. We can also examine the variance of the four variables using the `var()` method. @@ -69,7 +82,7 @@ variance of the four variables using the `var()` method. USArrests.var() ``` - + Not surprisingly, the variables also have vastly different variances. The `UrbanPop` variable measures the percentage of the population in each state living in an urban area, which is not a comparable @@ -119,7 +132,7 @@ of the variables. In this case, since we centered and scaled the data with pcaUS.mean_ ``` - + The scores can be computed using the `transform()` method of `pcaUS` after it has been fit. @@ -137,7 +150,7 @@ principal component loading vector. pcaUS.components_ ``` - + The `biplot` is a common visualization method used with PCA. It is not built in as a standard part of `sklearn`, though there are python @@ -178,14 +191,14 @@ for k in range(pcaUS.components_.shape[1]): USArrests.columns[k]) ``` - + The standard deviations of the principal component scores are as follows: ```{python} scores.std(0, ddof=1) ``` - + The variance of each score can be extracted directly from the `pcaUS` object via the `explained_variance_` attribute. @@ -207,7 +220,7 @@ We can plot the PVE explained by each component, as well as the cumulative PVE. plot the proportion of variance explained. ```{python} -%%capture +# %%capture fig, axes = plt.subplots(1, 2, figsize=(15, 6)) ticks = np.arange(pcaUS.n_components_)+1 ax = axes[0] @@ -307,7 +320,7 @@ Xna = X.copy() Xna[r_idx, c_idx] = np.nan ``` - + Here the array `r_idx` contains 20 integers from 0 to 49; this represents the states (rows of `X`) that are selected to contain missing values. And `c_idx` contains 20 integers from 0 to 3, representing the features (columns in `X`) that contain the missing values for each of the selected states. @@ -335,7 +348,7 @@ Xbar = np.nanmean(Xhat, axis=0) Xhat[r_idx, c_idx] = Xbar[c_idx] ``` - + Before we begin Step 2, we set ourselves up to measure the progress of our iterations: @@ -374,7 +387,7 @@ while rel_err > thresh: .format(count, mss, rel_err)) ``` - + We see that after eight iterations, the relative error has fallen below `thresh = 1e-7`, and so the algorithm terminates. When this happens, the mean squared error of the non-missing elements equals 0.381. Finally, we compute the correlation between the 20 imputed values @@ -384,8 +397,8 @@ and the actual values: np.corrcoef(Xapp[ismiss], X[ismiss])[0,1] ``` - - + + In this lab, we implemented Algorithm 12.1 ourselves for didactic purposes. However, a reader who wishes to apply matrix completion to their data might look to more specialized `Python` implementations. @@ -431,7 +444,7 @@ ax.scatter(X[:,0], X[:,1], c=kmeans.labels_) ax.set_title("K-Means Clustering Results with K=2"); ``` - + Here the observations can be easily plotted because they are two-dimensional. If there were more than two variables then we could instead perform PCA and plot the first two principal component score @@ -506,7 +519,7 @@ hc_comp = HClust(distance_threshold=0, hc_comp.fit(X) ``` - + This computes the entire dendrogram. We could just as easily perform hierarchical clustering with average or single linkage instead: @@ -521,7 +534,7 @@ hc_sing = HClust(distance_threshold=0, hc_sing.fit(X); ``` - + To use a precomputed distance matrix, we provide an additional argument `metric="precomputed"`. In the code below, the first four lines computes the $50\times 50$ pairwise-distance matrix. @@ -537,7 +550,7 @@ hc_sing_pre = HClust(distance_threshold=0, hc_sing_pre.fit(D) ``` - + We use `dendrogram()` from `scipy.cluster.hierarchy` to plot the dendrogram. However, `dendrogram()` expects a so-called *linkage-matrix representation* @@ -560,7 +573,7 @@ dendrogram(linkage_comp, **cargs); ``` - + We may want to color branches of the tree above and below a cut-threshold differently. This can be achieved by changing the `color_threshold`. Let’s cut the tree at a height of 4, @@ -574,7 +587,7 @@ dendrogram(linkage_comp, above_threshold_color='black'); ``` - + To determine the cluster labels for each observation associated with a given cut of the dendrogram, we can use the `cut_tree()` function from `scipy.cluster.hierarchy`: @@ -594,7 +607,7 @@ or `height` to `cut_tree()`. cut_tree(linkage_comp, height=5) ``` - + To scale the variables before performing hierarchical clustering of the observations, we use `StandardScaler()` as in our PCA example: @@ -638,7 +651,7 @@ dendrogram(linkage_cor, ax=ax, **cargs) ax.set_title("Complete Linkage with Correlation-Based Dissimilarity"); ``` - + ## NCI60 Data Example Unsupervised techniques are often used in the analysis of genomic @@ -653,7 +666,7 @@ nci_labs = NCI60['labels'] nci_data = NCI60['data'] ``` - + Each cell line is labeled with a cancer type. We do not make use of the cancer types in performing PCA and clustering, as these are unsupervised techniques. But after performing PCA and clustering, we @@ -666,8 +679,8 @@ The data has 64 rows and 6830 columns. nci_data.shape ``` - - + + We begin by examining the cancer types for the cell lines. @@ -675,7 +688,7 @@ We begin by examining the cancer types for the cell lines. nci_labs.value_counts() ``` - + ### PCA on the NCI60 Data @@ -690,7 +703,7 @@ nci_pca = PCA() nci_scores = nci_pca.fit_transform(nci_scaled) ``` - + We now plot the first few principal component score vectors, in order to visualize the data. The observations (cell lines) corresponding to a given cancer type will be plotted in the same color, so that we can @@ -726,7 +739,7 @@ to have pretty similar gene expression levels. - + We can also plot the percent variance explained by the principal components as well as the cumulative percent variance explained. This is similar to the plots we made earlier for the `USArrests` data. @@ -785,7 +798,7 @@ def plot_nci(linkage, ax, cut=-np.inf): return hc ``` - + Let’s plot our results. ```{python} @@ -817,7 +830,7 @@ pd.crosstab(nci_labs['label'], pd.Series(comp_cut.reshape(-1), name='Complete')) ``` - + There are some clear patterns. All the leukemia cell lines fall in one cluster, while the breast cancer cell lines are spread out over @@ -831,7 +844,7 @@ plot_nci('Complete', ax, cut=140) ax.axhline(140, c='r', linewidth=4); ``` - + The `axhline()` function draws a horizontal line line on top of any existing set of axes. The argument `140` plots a horizontal line at height 140 on the dendrogram; this is a height that @@ -853,7 +866,7 @@ pd.crosstab(pd.Series(comp_cut, name='HClust'), pd.Series(nci_kmeans.labels_, name='K-means')) ``` - + We see that the four clusters obtained using hierarchical clustering and $K$-means clustering are somewhat different. First we note that the labels in the two clusterings are arbitrary. That is, swapping diff --git a/Ch12-unsup-lab.ipynb b/Ch12-unsup-lab.ipynb index 11b907c..54b3379 100644 --- a/Ch12-unsup-lab.ipynb +++ b/Ch12-unsup-lab.ipynb @@ -3392,8 +3392,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { diff --git a/Ch13-multiple-lab.Rmd b/Ch13-multiple-lab.Rmd index d5123f1..bee30c3 100644 --- a/Ch13-multiple-lab.Rmd +++ b/Ch13-multiple-lab.Rmd @@ -1,9 +1,22 @@ +--- +jupyter: + jupytext: + cell_metadata_filter: -all + formats: ipynb,Rmd + main_language: python + text_representation: + extension: .Rmd + format_name: rmarkdown + format_version: '1.2' + jupytext_version: 1.14.7 +--- + # Chapter 13 # Lab: Multiple Testing - + We include our usual imports seen in earlier labs. @@ -15,7 +28,7 @@ import statsmodels.api as sm from ISLP import load_data ``` - + We also collect the new imports needed for this lab. @@ -47,7 +60,7 @@ true_mean = np.array([0.5]*50 + [0]*50) X += true_mean[None,:] ``` - + To begin, we use `ttest_1samp()` from the `scipy.stats` module to test $H_{0}: \mu_1=0$, the null hypothesis that the first variable has mean zero. @@ -57,7 +70,7 @@ result = ttest_1samp(X[:,0], 0) result.pvalue ``` - + The $p$-value comes out to 0.931, which is not low enough to reject the null hypothesis at level $\alpha=0.05$. In this case, $\mu_1=0.5$, so the null hypothesis is false. Therefore, we have made @@ -154,7 +167,7 @@ ax.legend() ax.axhline(0.05, c='k', ls='--'); ``` - + As discussed previously, even for moderate values of $m$ such as $50$, the FWER exceeds $0.05$ unless $\alpha$ is set to a very low value, such as $0.001$. Of course, the problem with setting $\alpha$ to such @@ -176,7 +189,7 @@ for i in range(5): fund_mini_pvals ``` - + The $p$-values are low for Managers One and Three, and high for the other three managers. However, we cannot simply reject $H_{0,1}$ and $H_{0,3}$, since this would fail to account for the multiple testing @@ -206,8 +219,8 @@ reject, bonf = mult_test(fund_mini_pvals, method = "bonferroni")[:2] reject ``` - - + + The $p$-values `bonf` are simply the `fund_mini_pvalues` multiplied by 5 and truncated to be less than or equal to 1. @@ -215,7 +228,7 @@ or equal to 1. bonf, np.minimum(fund_mini_pvals * 5, 1) ``` - + Therefore, using Bonferroni’s method, we are able to reject the null hypothesis only for Manager One while controlling FWER at $0.05$. @@ -227,8 +240,8 @@ hypotheses for Managers One and Three at a FWER of $0.05$. mult_test(fund_mini_pvals, method = "holm", alpha=0.05)[:2] ``` - - + + As discussed previously, Manager One seems to perform particularly well, whereas Manager Two has poor performance. @@ -237,8 +250,8 @@ well, whereas Manager Two has poor performance. fund_mini.mean() ``` - - + + Is there evidence of a meaningful difference in performance between these two managers? We can check this by performing a paired $t$-test using the `ttest_rel()` function from `scipy.stats`: @@ -248,7 +261,7 @@ ttest_rel(fund_mini['Manager1'], fund_mini['Manager2']).pvalue ``` - + The test results in a $p$-value of 0.038, suggesting a statistically significant difference. @@ -273,8 +286,8 @@ tukey = pairwise_tukeyhsd(returns, managers) print(tukey.summary()) ``` - - + + The `pairwise_tukeyhsd()` function provides confidence intervals for the difference between each pair of managers (`lower` and `upper`), as well as a $p$-value. All of these quantities have @@ -304,7 +317,7 @@ for i, manager in enumerate(Fund.columns): fund_pvalues[i] = ttest_1samp(Fund[manager], 0).pvalue ``` - + There are far too many managers to consider trying to control the FWER. Instead, we focus on controlling the FDR: that is, the expected fraction of rejected null hypotheses that are actually false positives. The `multipletests()` function (abbreviated `mult_test()`) can be used to carry out the Benjamini--Hochberg procedure. @@ -314,7 +327,7 @@ fund_qvalues = mult_test(fund_pvalues, method = "fdr_bh")[1] fund_qvalues[:10] ``` - + The *q-values* output by the Benjamini--Hochberg procedure can be interpreted as the smallest FDR threshold at which we would reject a particular null hypothesis. For @@ -341,8 +354,8 @@ null hypotheses! (fund_pvalues <= 0.1 / 2000).sum() ``` - - + + Figure 13.6 displays the ordered $p$-values, $p_{(1)} \leq p_{(2)} \leq \cdots \leq p_{(2000)}$, for the `Fund` dataset, as well as the threshold for rejection by the @@ -371,7 +384,7 @@ else: sorted_set_ = [] ``` - + We now reproduce the middle panel of Figure 13.6. ```{python} @@ -386,7 +399,7 @@ ax.scatter(sorted_set_+1, sorted_[sorted_set_], c='r', s=20) ax.axline((0, 0), (1,q/m), c='k', ls='--', linewidth=3); ``` - + ## A Re-Sampling Approach Here, we implement the re-sampling approach to hypothesis testing @@ -402,8 +415,8 @@ D['Y'] = pd.concat([Khan['ytrain'], Khan['ytest']]) D['Y'].value_counts() ``` - - + + There are four classes of cancer. For each gene, we compare the mean expression in the second class (rhabdomyosarcoma) to the mean expression in the fourth class (Burkitt’s lymphoma). Performing a @@ -423,8 +436,8 @@ observedT, pvalue = ttest_ind(D2[gene_11], observedT, pvalue ``` - - + + However, this $p$-value relies on the assumption that under the null hypothesis of no difference between the two groups, the test statistic follows a $t$-distribution with $29+25-2=52$ degrees of freedom. @@ -452,8 +465,8 @@ for b in range(B): (np.abs(Tnull) > np.abs(observedT)).mean() ``` - - + + This fraction, 0.0398, is our re-sampling-based $p$-value. It is almost identical to the $p$-value of 0.0412 obtained using the theoretical null distribution. @@ -509,7 +522,7 @@ for j in range(m): Tnull_vals[j,b] = ttest_.statistic ``` - + Next, we compute the number of rejected null hypotheses $R$, the estimated number of false positives $\widehat{V}$, and the estimated FDR, for a range of threshold values $c$ in @@ -527,7 +540,7 @@ for j in range(m): FDRs[j] = V / R ``` - + Now, for any given FDR, we can find the genes that will be rejected. For example, with FDR controlled at 0.1, we reject 15 of the 100 null hypotheses. On average, we would expect about one or two of @@ -543,7 +556,7 @@ the genes whose estimated FDR is less than 0.1. sorted(idx[np.abs(T_vals) >= cutoffs[FDRs < 0.1].min()]) ``` - + At an FDR threshold of 0.2, more genes are selected, at the cost of having a higher expected proportion of false discoveries. @@ -551,7 +564,7 @@ proportion of false discoveries. sorted(idx[np.abs(T_vals) >= cutoffs[FDRs < 0.2].min()]) ``` - + The next line generates Figure 13.11, which is similar to Figure 13.9, except that it is based on only a subset of the genes. diff --git a/Ch13-multiple-lab.ipynb b/Ch13-multiple-lab.ipynb index cd40464..bb9684d 100644 --- a/Ch13-multiple-lab.ipynb +++ b/Ch13-multiple-lab.ipynb @@ -1578,8 +1578,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "main_language": "python", - "notebook_metadata_filter": "-all" + "formats": "ipynb,Rmd", + "main_language": "python" }, "language_info": { "codemirror_mode": { From ddec59a839e6d47232aea0a3cb226658dec7ac83 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 19:58:59 -0700 Subject: [PATCH 08/19] v2.1 of Ch10 --- Ch10-deeplearning-lab.Rmd | 19 +- Ch10-deeplearning-lab.ipynb | 827 ++++++++++++++++++------------------ 2 files changed, 414 insertions(+), 432 deletions(-) diff --git a/Ch10-deeplearning-lab.Rmd b/Ch10-deeplearning-lab.Rmd index e6911cc..51674b6 100644 --- a/Ch10-deeplearning-lab.Rmd +++ b/Ch10-deeplearning-lab.Rmd @@ -1,19 +1,3 @@ ---- -jupyter: - jupytext: - cell_metadata_filter: -all - formats: ipynb,Rmd - text_representation: - extension: .Rmd - format_name: rmarkdown - format_version: '1.2' - jupytext_version: 1.14.7 - kernelspec: - display_name: Python 3 (ipykernel) - language: python - name: python3 ---- - # Chapter 10 @@ -872,7 +856,7 @@ for idx, (X_ ,Y_) in enumerate(cifar_dm.train_dataloader()): Before we start, we look at some of the training images; similar code produced -Figure 10.5 on page 164. The example below also illustrates +Figure 10.5 on page 447. The example below also illustrates that `TensorDataset` objects can be indexed with integers --- we are choosing random images from the training data by indexing `cifar_train`. In order to display correctly, we must reorder the dimensions by a call to `np.transpose()`. @@ -1705,7 +1689,6 @@ early stopping, since then the test performance would be biased. We form the training dataset similar to our `Hitters` example. - ```{python} datasets = [] diff --git a/Ch10-deeplearning-lab.ipynb b/Ch10-deeplearning-lab.ipynb index 835512f..2577eac 100644 --- a/Ch10-deeplearning-lab.ipynb +++ b/Ch10-deeplearning-lab.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "b672dcf6", + "id": "23016bca", "metadata": {}, "source": [ "\n", @@ -24,7 +24,7 @@ { "cell_type": "code", "execution_count": 1, - "id": "9b5b8319", + "id": "cf431f3f", "metadata": { "lines_to_next_cell": 2 }, @@ -48,7 +48,7 @@ }, { "cell_type": "markdown", - "id": "c0cb2c87", + "id": "667eff82", "metadata": {}, "source": [ "### Torch-Specific Imports\n", @@ -61,7 +61,7 @@ { "cell_type": "code", "execution_count": 2, - "id": "f66f362c", + "id": "1db00e03", "metadata": {}, "outputs": [], "source": [ @@ -73,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "5ce27a8d", + "id": "b3407495", "metadata": {}, "source": [ "There are several other helper packages for `torch`. For instance,\n", @@ -87,7 +87,7 @@ { "cell_type": "code", "execution_count": 3, - "id": "17bce9cb", + "id": "3da0a445", "metadata": {}, "outputs": [], "source": [ @@ -98,7 +98,7 @@ }, { "cell_type": "markdown", - "id": "a14990c3", + "id": "e5c55b19", "metadata": {}, "source": [ "The package `pytorch_lightning` is a somewhat higher-level\n", @@ -111,7 +111,7 @@ { "cell_type": "code", "execution_count": 4, - "id": "4c3b6e43", + "id": "bbbf32fe", "metadata": {}, "outputs": [], "source": [ @@ -121,7 +121,7 @@ }, { "cell_type": "markdown", - "id": "e5bc78bd", + "id": "cf5ec401", "metadata": {}, "source": [ "In order to reproduce results we use `seed_everything()`. We will also instruct `torch` to use deterministic algorithms\n", @@ -131,7 +131,7 @@ { "cell_type": "code", "execution_count": 5, - "id": "6839d8ad", + "id": "3810caf4", "metadata": {}, "outputs": [ { @@ -150,7 +150,7 @@ }, { "cell_type": "markdown", - "id": "1f1490e7", + "id": "c3dea945", "metadata": {}, "source": [ "We will use several datasets shipped with `torchvision` for our\n", @@ -161,7 +161,7 @@ { "cell_type": "code", "execution_count": 6, - "id": "07dba2dd", + "id": "454dc419", "metadata": { "lines_to_next_cell": 0 }, @@ -179,7 +179,7 @@ }, { "cell_type": "markdown", - "id": "36ec305c", + "id": "f7f9578a", "metadata": {}, "source": [ "We have provided a few utilities in `ISLP` specifically for this lab.\n", @@ -197,7 +197,7 @@ { "cell_type": "code", "execution_count": 7, - "id": "89763447", + "id": "cd43a4c6", "metadata": {}, "outputs": [], "source": [ @@ -209,7 +209,7 @@ }, { "cell_type": "markdown", - "id": "dfc13283", + "id": "c5231b9d", "metadata": {}, "source": [ "In addition we have included some helper\n", @@ -226,7 +226,7 @@ { "cell_type": "code", "execution_count": 8, - "id": "ac5ab1b0", + "id": "eaf84e9c", "metadata": {}, "outputs": [], "source": [ @@ -238,7 +238,7 @@ }, { "cell_type": "markdown", - "id": "04f757bd", + "id": "c42bc542", "metadata": {}, "source": [ "Finally, we introduce some utility imports not directly related to\n", @@ -255,7 +255,7 @@ { "cell_type": "code", "execution_count": 9, - "id": "5a5468e6", + "id": "d007a49b", "metadata": { "lines_to_next_cell": 2 }, @@ -267,7 +267,7 @@ }, { "cell_type": "markdown", - "id": "690a5255", + "id": "d0fe1cff", "metadata": {}, "source": [ "## Single Layer Network on Hitters Data\n", @@ -277,7 +277,7 @@ { "cell_type": "code", "execution_count": 10, - "id": "d635398b", + "id": "9da64364", "metadata": { "lines_to_next_cell": 0 }, @@ -289,7 +289,7 @@ }, { "cell_type": "markdown", - "id": "a0fd86f3", + "id": "0e80a8c0", "metadata": {}, "source": [ " We will fit two linear models (least squares and lasso) and compare their performance\n", @@ -305,7 +305,7 @@ { "cell_type": "code", "execution_count": 11, - "id": "2c621749", + "id": "a2cfe999", "metadata": { "lines_to_next_cell": 0 }, @@ -318,7 +318,7 @@ }, { "cell_type": "markdown", - "id": "f32a66d7", + "id": "5f0851bc", "metadata": {}, "source": [ "The `to_numpy()` method above converts `pandas`\n", @@ -331,7 +331,7 @@ }, { "cell_type": "markdown", - "id": "b5565350", + "id": "afe4eb28", "metadata": {}, "source": [ "We now split the data into test and training, fixing the random\n", @@ -341,7 +341,7 @@ { "cell_type": "code", "execution_count": 12, - "id": "cd19596a", + "id": "5c600069", "metadata": {}, "outputs": [], "source": [ @@ -356,7 +356,7 @@ }, { "cell_type": "markdown", - "id": "b82951aa", + "id": "e27a6313", "metadata": {}, "source": [ "### Linear Models\n", @@ -366,7 +366,7 @@ { "cell_type": "code", "execution_count": 13, - "id": "e4bfcd5a", + "id": "6ea4f551", "metadata": {}, "outputs": [ { @@ -388,7 +388,7 @@ }, { "cell_type": "markdown", - "id": "bf3523a8", + "id": "e5fe8c6b", "metadata": {}, "source": [ "Next we fit the lasso using `sklearn`. We are using\n", @@ -402,7 +402,7 @@ { "cell_type": "code", "execution_count": 14, - "id": "36f8290b", + "id": "f1b8b3f5", "metadata": {}, "outputs": [], "source": [ @@ -414,7 +414,7 @@ }, { "cell_type": "markdown", - "id": "9f1bf0ad", + "id": "39a58ed0", "metadata": {}, "source": [ "We need to create a grid of values for $\\lambda$. As is common practice, \n", @@ -425,7 +425,7 @@ { "cell_type": "code", "execution_count": 15, - "id": "5015c394", + "id": "50ce4171", "metadata": { "lines_to_next_cell": 0 }, @@ -440,7 +440,7 @@ }, { "cell_type": "markdown", - "id": "89f6b4e4", + "id": "2cdc3810", "metadata": {}, "source": [ "Note that we had to transform the data first, since the scale of the variables impacts the choice of $\\lambda$.\n", @@ -450,7 +450,7 @@ { "cell_type": "code", "execution_count": 16, - "id": "b5dc7d68", + "id": "94c4ab75", "metadata": {}, "outputs": [], "source": [ @@ -466,7 +466,7 @@ }, { "cell_type": "markdown", - "id": "0b64a882", + "id": "e5262d51", "metadata": {}, "source": [ "We extract the lasso model with best cross-validated mean absolute error, and evaluate its\n", @@ -477,7 +477,7 @@ { "cell_type": "code", "execution_count": 17, - "id": "2c49196f", + "id": "86e45999", "metadata": { "lines_to_next_cell": 0 }, @@ -501,7 +501,7 @@ }, { "cell_type": "markdown", - "id": "61f016c9", + "id": "1f905d89", "metadata": {}, "source": [ "This is similar to the results we got for the linear model fit by least squares. However, these results can vary a lot for different train/test splits; we encourage the reader to try a different seed in code block 12 and rerun the subsequent code up to this point.\n", @@ -519,7 +519,7 @@ { "cell_type": "code", "execution_count": 18, - "id": "df5864e2", + "id": "00ac7606", "metadata": {}, "outputs": [], "source": [ @@ -541,7 +541,7 @@ }, { "cell_type": "markdown", - "id": "4b05cc28", + "id": "a25aab3b", "metadata": {}, "source": [ "The `class` statement identifies the code chunk as a\n", @@ -577,7 +577,7 @@ { "cell_type": "code", "execution_count": 19, - "id": "da601fe1", + "id": "bb7ff7e9", "metadata": {}, "outputs": [], "source": [ @@ -586,7 +586,7 @@ }, { "cell_type": "markdown", - "id": "326f3b54", + "id": "ac0c6bf7", "metadata": {}, "source": [ "The object `self.sequential` is a composition of four maps. The\n", @@ -601,7 +601,7 @@ }, { "cell_type": "markdown", - "id": "a246aedb", + "id": "9e8e69ac", "metadata": {}, "source": [ "The package `torchinfo` provides a `summary()` function that neatly summarizes\n", @@ -612,7 +612,7 @@ { "cell_type": "code", "execution_count": 20, - "id": "15dd23a9", + "id": "b60d34e1", "metadata": { "lines_to_next_cell": 0 }, @@ -658,7 +658,7 @@ }, { "cell_type": "markdown", - "id": "3cb4b8bc", + "id": "aa499e3f", "metadata": {}, "source": [ "We have truncated the end of the output slightly, here and in subsequent uses.\n", @@ -680,7 +680,7 @@ { "cell_type": "code", "execution_count": 21, - "id": "dae83bc5", + "id": "42f63682", "metadata": { "lines_to_next_cell": 0 }, @@ -693,7 +693,7 @@ }, { "cell_type": "markdown", - "id": "80475fa2", + "id": "6e184dcd", "metadata": {}, "source": [ "We do the same for the test data." @@ -702,7 +702,7 @@ { "cell_type": "code", "execution_count": 22, - "id": "81e217a8", + "id": "57fbf564", "metadata": {}, "outputs": [], "source": [ @@ -713,7 +713,7 @@ }, { "cell_type": "markdown", - "id": "7f49263d", + "id": "09cabaa8", "metadata": {}, "source": [ "Finally, this dataset is passed to a `DataLoader()` which ultimately\n", @@ -737,7 +737,7 @@ { "cell_type": "code", "execution_count": 23, - "id": "e5359e31", + "id": "570bdd73", "metadata": {}, "outputs": [], "source": [ @@ -746,7 +746,7 @@ }, { "cell_type": "markdown", - "id": "105b015f", + "id": "a7bc2151", "metadata": {}, "source": [ "The general training setup in `pytorch_lightning` involves\n", @@ -769,7 +769,7 @@ { "cell_type": "code", "execution_count": 24, - "id": "7a19d6d8", + "id": "c08a4d6d", "metadata": {}, "outputs": [], "source": [ @@ -782,7 +782,7 @@ }, { "cell_type": "markdown", - "id": "8d1f2a76", + "id": "db5447fa", "metadata": {}, "source": [ "Next we must provide a `pytorch_lightning` module that controls\n", @@ -797,7 +797,7 @@ { "cell_type": "code", "execution_count": 25, - "id": "07bc10ef", + "id": "aaa1e593", "metadata": {}, "outputs": [], "source": [ @@ -807,7 +807,7 @@ }, { "cell_type": "markdown", - "id": "1ebf9835", + "id": "8500a2ba", "metadata": {}, "source": [ " By using the `SimpleModule.regression()` method, we indicate that we will use squared-error loss as in\n", @@ -824,7 +824,7 @@ { "cell_type": "code", "execution_count": 26, - "id": "08c71fb4", + "id": "1a4e9b3c", "metadata": {}, "outputs": [], "source": [ @@ -833,7 +833,7 @@ }, { "cell_type": "markdown", - "id": "511617c3", + "id": "77e3c7a5", "metadata": {}, "source": [ "Finally we are ready to train our model and log the results. We\n", @@ -855,7 +855,7 @@ { "cell_type": "code", "execution_count": 27, - "id": "81a8c626", + "id": "2f839fde", "metadata": { "lines_to_next_cell": 0 }, @@ -897,7 +897,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4cb0d8941d43434883b4142c14e198f8", + "model_id": "3f81045e13e641428a7f37ab7ceb43be", "version_major": 2, "version_minor": 0 }, @@ -1569,7 +1569,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "840b55ce195b42edbe9f3fd394dec7e5", + "model_id": "553e586e7cd54ad3bb9e01d0fc37754e", "version_major": 2, "version_minor": 0 }, @@ -1583,7 +1583,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2e3d175f2c294fac992ff04733267452", + "model_id": "05c22b9bdd4c48098756a37b57fc963b", "version_major": 2, "version_minor": 0 }, @@ -1597,7 +1597,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2d0477c9d13945bb8a6cbd38620bc93f", + "model_id": "f073bf03d90b4e318352c5de82bb9953", "version_major": 2, "version_minor": 0 }, @@ -1627,7 +1627,7 @@ }, { "cell_type": "markdown", - "id": "abe1a22c", + "id": "4018f616", "metadata": {}, "source": [ "At each step of SGD, the algorithm randomly selects 32 training observations for\n", @@ -1643,7 +1643,7 @@ { "cell_type": "code", "execution_count": 28, - "id": "083670c6", + "id": "672b4410", "metadata": { "lines_to_next_cell": 2 }, @@ -1651,7 +1651,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ddc1a0eaac9e4fcda9e91e34abdcc67d", + "model_id": "f0857a2a00a847c084831c51d7fd8dfd", "version_major": 2, "version_minor": 0 }, @@ -1704,7 +1704,7 @@ }, { "cell_type": "markdown", - "id": "c6b3317b", + "id": "0f4e3b11", "metadata": {}, "source": [ "The results of the fit have been logged into a CSV file. We can find the\n", @@ -1720,7 +1720,7 @@ { "cell_type": "code", "execution_count": 29, - "id": "02ba9edf", + "id": "8cf6ef60", "metadata": {}, "outputs": [], "source": [ @@ -1729,7 +1729,7 @@ }, { "cell_type": "markdown", - "id": "daf8ed8d", + "id": "537efe03", "metadata": {}, "source": [ "Since we will produce similar plots in later examples, we write a\n", @@ -1739,7 +1739,7 @@ { "cell_type": "code", "execution_count": 30, - "id": "4184557c", + "id": "67ce1e26", "metadata": { "lines_to_next_cell": 0 }, @@ -1773,7 +1773,7 @@ }, { "cell_type": "markdown", - "id": "026c1c4d", + "id": "53309bb0", "metadata": {}, "source": [ "We now set up our axes, and use our function to produce the MAE plot." @@ -1782,7 +1782,7 @@ { "cell_type": "code", "execution_count": 31, - "id": "3244deeb", + "id": "deb684d2", "metadata": { "lines_to_next_cell": 2 }, @@ -1811,7 +1811,7 @@ }, { "cell_type": "markdown", - "id": "670a3e8f", + "id": "eab05619", "metadata": {}, "source": [ "We can predict directly from the final model, and\n", @@ -1829,7 +1829,7 @@ { "cell_type": "code", "execution_count": 32, - "id": "36bb545e", + "id": "454033dd", "metadata": { "lines_to_next_cell": 0 }, @@ -1853,7 +1853,7 @@ }, { "cell_type": "markdown", - "id": "ae4b9ca6", + "id": "b3625ff5", "metadata": {}, "source": [ " " @@ -1861,7 +1861,7 @@ }, { "cell_type": "markdown", - "id": "b8b7fd3c", + "id": "f46e3883", "metadata": {}, "source": [ "### Cleanup\n", @@ -1875,7 +1875,7 @@ { "cell_type": "code", "execution_count": 33, - "id": "00371f48", + "id": "71b3d0d0", "metadata": { "lines_to_next_cell": 2 }, @@ -1894,7 +1894,7 @@ }, { "cell_type": "markdown", - "id": "5707d61c", + "id": "28d1c832", "metadata": {}, "source": [ "## Multilayer Network on the MNIST Digit Data\n", @@ -1908,7 +1908,7 @@ { "cell_type": "code", "execution_count": 34, - "id": "3e28d6ba", + "id": "def8605c", "metadata": {}, "outputs": [ { @@ -1939,7 +1939,7 @@ }, { "cell_type": "markdown", - "id": "eb8b7e29", + "id": "95ffc346", "metadata": {}, "source": [ "There are 60,000 images in the training data and 10,000 in the test\n", @@ -1963,7 +1963,7 @@ { "cell_type": "code", "execution_count": 35, - "id": "cb04829e", + "id": "8b9e2b8c", "metadata": {}, "outputs": [], "source": [ @@ -1976,7 +1976,7 @@ }, { "cell_type": "markdown", - "id": "1119e22a", + "id": "91256a1b", "metadata": {}, "source": [ "Let’s take a look at the data that will get fed into our network. We loop through the first few\n", @@ -1986,7 +1986,7 @@ { "cell_type": "code", "execution_count": 36, - "id": "c4a265fc", + "id": "a4b95dc6", "metadata": { "lines_to_next_cell": 2 }, @@ -2012,7 +2012,7 @@ }, { "cell_type": "markdown", - "id": "f65ada90", + "id": "12e7eddb", "metadata": {}, "source": [ "We see that the $X$ for each batch consists of 256 images of size `1x28x28`.\n", @@ -2025,7 +2025,7 @@ { "cell_type": "code", "execution_count": 37, - "id": "60339a03", + "id": "17714c25", "metadata": {}, "outputs": [], "source": [ @@ -2051,7 +2051,7 @@ }, { "cell_type": "markdown", - "id": "5b8f87da", + "id": "9893ffb2", "metadata": {}, "source": [ "We see that in the first layer, each `1x28x28` image is flattened, then mapped to\n", @@ -2065,7 +2065,7 @@ { "cell_type": "code", "execution_count": 38, - "id": "1d0f24b2", + "id": "88a4bf46", "metadata": {}, "outputs": [], "source": [ @@ -2074,7 +2074,7 @@ }, { "cell_type": "markdown", - "id": "0ee4771e", + "id": "049febff", "metadata": {}, "source": [ "We can check that the model produces output of expected size based\n", @@ -2084,7 +2084,7 @@ { "cell_type": "code", "execution_count": 39, - "id": "42a4931b", + "id": "ea0d9387", "metadata": {}, "outputs": [ { @@ -2104,7 +2104,7 @@ }, { "cell_type": "markdown", - "id": "628d56f9", + "id": "638026d1", "metadata": {}, "source": [ "Let’s take a look at the summary of the model. Instead of an `input_size` we can pass\n", @@ -2115,7 +2115,7 @@ { "cell_type": "code", "execution_count": 40, - "id": "69e62d88", + "id": "17c34a29", "metadata": {}, "outputs": [ { @@ -2164,7 +2164,7 @@ }, { "cell_type": "markdown", - "id": "f8e77337", + "id": "73e3cd00", "metadata": {}, "source": [ "Having set up both the model and the data module, fitting this model is\n", @@ -2177,7 +2177,7 @@ { "cell_type": "code", "execution_count": 41, - "id": "2027a378", + "id": "a0608bd1", "metadata": {}, "outputs": [], "source": [ @@ -2188,7 +2188,7 @@ }, { "cell_type": "markdown", - "id": "9146b9b5", + "id": "6959c893", "metadata": {}, "source": [ "Now we are ready to go. The final step is to supply training data, and fit the model." @@ -2197,7 +2197,7 @@ { "cell_type": "code", "execution_count": 42, - "id": "4a5e941d", + "id": "cf8e3d9d", "metadata": { "lines_to_next_cell": 0 }, @@ -2239,7 +2239,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "23f1384f37824cc59404e8a856f4962d", + "model_id": "2c7fc7b3fc61455b88cf7020ce62d19e", "version_major": 2, "version_minor": 0 }, @@ -2689,7 +2689,7 @@ }, { "cell_type": "markdown", - "id": "8099bdc9", + "id": "cc8724fa", "metadata": {}, "source": [ "We have suppressed the output here, which is a progress report on the\n", @@ -2707,7 +2707,7 @@ }, { "cell_type": "markdown", - "id": "d6c3bbbc", + "id": "b9dc38ac", "metadata": {}, "source": [ "`SimpleModule.classification()` includes\n", @@ -2720,7 +2720,7 @@ { "cell_type": "code", "execution_count": 43, - "id": "603a278a", + "id": "45e03385", "metadata": { "lines_to_next_cell": 0 }, @@ -2750,7 +2750,7 @@ }, { "cell_type": "markdown", - "id": "654cec05", + "id": "1679f357", "metadata": {}, "source": [ "Once again we evaluate the accuracy using the `test()` method of our trainer. This model achieves\n", @@ -2760,13 +2760,13 @@ { "cell_type": "code", "execution_count": 44, - "id": "93dc968b", + "id": "3a875b78", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3eeaa8a87a31475bb36fe8dd24e694d9", + "model_id": "759de3284ee24f5c8191c1fc922f3e1d", "version_major": 2, "version_minor": 0 }, @@ -2820,7 +2820,7 @@ }, { "cell_type": "markdown", - "id": "5f7dc344", + "id": "12ef4787", "metadata": {}, "source": [ "Table 10.1 also reports the error rates resulting from LDA (Chapter 4) and multiclass logistic\n", @@ -2834,7 +2834,7 @@ { "cell_type": "code", "execution_count": 45, - "id": "e1975a3e", + "id": "2f035d83", "metadata": {}, "outputs": [], "source": [ @@ -2855,7 +2855,7 @@ { "cell_type": "code", "execution_count": 46, - "id": "14c79199", + "id": "2cd67ad8", "metadata": { "lines_to_next_cell": 0 }, @@ -2899,7 +2899,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9ecb4b2d1cba45a9b762950d7ad365e4", + "model_id": "c932821add0e4296a5ff2122a94b6090", "version_major": 2, "version_minor": 0 }, @@ -3347,7 +3347,7 @@ }, { "cell_type": "markdown", - "id": "f84cfa36", + "id": "20a316a1", "metadata": {}, "source": [ "We fit the model just as before and compute the test results." @@ -3356,7 +3356,7 @@ { "cell_type": "code", "execution_count": 47, - "id": "acb6f88d", + "id": "3900d16e", "metadata": { "lines_to_next_cell": 0 }, @@ -3364,7 +3364,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "96180813745947aa8b3705fa737d63a0", + "model_id": "63d666ec843544bf804c3fc6fc5fd6ab", "version_major": 2, "version_minor": 0 }, @@ -3418,7 +3418,7 @@ }, { "cell_type": "markdown", - "id": "05244a5e", + "id": "ca80aa75", "metadata": {}, "source": [ "The accuracy is above 90% even for this pretty simple model.\n", @@ -3430,7 +3430,7 @@ { "cell_type": "code", "execution_count": 48, - "id": "f5b3f811", + "id": "679f2ea5", "metadata": { "lines_to_next_cell": 2 }, @@ -3450,7 +3450,7 @@ }, { "cell_type": "markdown", - "id": "b5b395bb", + "id": "dd8ba586", "metadata": {}, "source": [ "## Convolutional Neural Networks\n", @@ -3461,7 +3461,7 @@ { "cell_type": "code", "execution_count": 49, - "id": "e1caa7ac", + "id": "e4af6604", "metadata": {}, "outputs": [ { @@ -3484,7 +3484,7 @@ { "cell_type": "code", "execution_count": 50, - "id": "9e94a7b4", + "id": "2b613ecc", "metadata": {}, "outputs": [], "source": [ @@ -3501,7 +3501,7 @@ }, { "cell_type": "markdown", - "id": "219ccc6f", + "id": "af1d3cdc", "metadata": {}, "source": [ "The `CIFAR100` dataset consists of 50,000 training images, each represented by a three-dimensional tensor:\n", @@ -3515,7 +3515,7 @@ { "cell_type": "code", "execution_count": 51, - "id": "32c78c06", + "id": "4b325cb4", "metadata": { "lines_to_next_cell": 0 }, @@ -3530,7 +3530,7 @@ }, { "cell_type": "markdown", - "id": "e4570164", + "id": "f361276e", "metadata": {}, "source": [ "We again look at the shape of typical batches in our data loaders." @@ -3539,7 +3539,7 @@ { "cell_type": "code", "execution_count": 52, - "id": "b3c27322", + "id": "cb3d00cb", "metadata": { "lines_to_next_cell": 2 }, @@ -3565,11 +3565,11 @@ }, { "cell_type": "markdown", - "id": "f6152280", + "id": "08771862", "metadata": {}, "source": [ "Before we start, we look at some of the training images; similar code produced\n", - "Figure 10.5 on page 164. The example below also illustrates\n", + "Figure 10.5 on page 447. The example below also illustrates\n", "that `TensorDataset` objects can be indexed with integers --- we are choosing\n", "random images from the training data by indexing `cifar_train`. In order to display correctly,\n", "we must reorder the dimensions by a call to `np.transpose()`." @@ -3578,7 +3578,7 @@ { "cell_type": "code", "execution_count": 53, - "id": "c626e0ff", + "id": "60d09656", "metadata": { "lines_to_next_cell": 0 }, @@ -3611,7 +3611,7 @@ }, { "cell_type": "markdown", - "id": "2a1c4832", + "id": "642140af", "metadata": {}, "source": [ "Here the `imshow()` method recognizes from the shape of its argument that it is a 3-dimensional array, with the last dimension indexing the three RGB color channels.\n", @@ -3628,7 +3628,7 @@ { "cell_type": "code", "execution_count": 54, - "id": "9d5bcdf3", + "id": "f823da11", "metadata": {}, "outputs": [], "source": [ @@ -3652,7 +3652,7 @@ }, { "cell_type": "markdown", - "id": "a7204121", + "id": "00927159", "metadata": {}, "source": [ "Notice that we used the `padding = \"same\"` argument to\n", @@ -3673,7 +3673,7 @@ { "cell_type": "code", "execution_count": 55, - "id": "3e13e9bc", + "id": "1a172f7e", "metadata": {}, "outputs": [], "source": [ @@ -3700,7 +3700,7 @@ }, { "cell_type": "markdown", - "id": "1b07fb1a", + "id": "8455079f", "metadata": {}, "source": [ "We build the model and look at the summary. (We had created examples of `X_` earlier.)" @@ -3709,7 +3709,7 @@ { "cell_type": "code", "execution_count": 56, - "id": "15c4a382", + "id": "651e62b4", "metadata": { "lines_to_next_cell": 2 }, @@ -3772,7 +3772,7 @@ }, { "cell_type": "markdown", - "id": "b168c198", + "id": "7dd67ce7", "metadata": {}, "source": [ "The total number of trainable parameters is 964,516.\n", @@ -3806,7 +3806,7 @@ { "cell_type": "code", "execution_count": 57, - "id": "4a40238a", + "id": "63f2650e", "metadata": {}, "outputs": [], "source": [ @@ -3820,7 +3820,7 @@ { "cell_type": "code", "execution_count": 58, - "id": "8aab2c62", + "id": "a3e4bc28", "metadata": {}, "outputs": [ { @@ -3860,7 +3860,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8473f6db1fdc40b7909b66fc6410277d", + "model_id": "40c811fa26da4690a95838e6ab0a8a98", "version_major": 2, "version_minor": 0 }, @@ -4310,7 +4310,7 @@ }, { "cell_type": "markdown", - "id": "090f6400", + "id": "c3fc9402", "metadata": {}, "source": [ "This model can take 10 minutes or more to run and achieves about 42% accuracy on the test\n", @@ -4326,7 +4326,7 @@ { "cell_type": "code", "execution_count": 59, - "id": "12474ef6", + "id": "6b161d93", "metadata": { "lines_to_next_cell": 0 }, @@ -4357,7 +4357,7 @@ }, { "cell_type": "markdown", - "id": "f3fe0cd4", + "id": "71dea0c8", "metadata": {}, "source": [ "Finally, we evaluate our model on our test data." @@ -4366,7 +4366,7 @@ { "cell_type": "code", "execution_count": 60, - "id": "9d632437", + "id": "ab8a91dc", "metadata": { "lines_to_next_cell": 2 }, @@ -4374,7 +4374,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fc46f12820ff4ca281d8a035a53fa610", + "model_id": "6dced9ab160c4c30b094a877f330efba", "version_major": 2, "version_minor": 0 }, @@ -4428,7 +4428,7 @@ }, { "cell_type": "markdown", - "id": "4b69e259", + "id": "11d0e8b3", "metadata": {}, "source": [ "### Hardware Acceleration\n", @@ -4449,7 +4449,7 @@ { "cell_type": "code", "execution_count": 61, - "id": "52a43158", + "id": "6d9962ae", "metadata": { "lines_to_next_cell": 0 }, @@ -4491,7 +4491,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "efb32ed16b3946ebbdb7c6a1714c7347", + "model_id": "6409051044c94ad9af785a42df78d36e", "version_major": 2, "version_minor": 0 }, @@ -4940,7 +4940,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ae6af1d96e5a4d1fa048bbbf0a3f5b7b", + "model_id": "4f37d3b614314b6fbf9dfb3df1775948", "version_major": 2, "version_minor": 0 }, @@ -4969,7 +4969,7 @@ }, { "cell_type": "markdown", - "id": "b72de871", + "id": "3faab186", "metadata": {}, "source": [ "This yields approximately two- or three-fold acceleration for each epoch.\n", @@ -4979,7 +4979,7 @@ }, { "cell_type": "markdown", - "id": "b86d6ef4", + "id": "31759785", "metadata": {}, "source": [ "## Using Pretrained CNN Models\n", @@ -5001,7 +5001,7 @@ { "cell_type": "code", "execution_count": 62, - "id": "db2febe9", + "id": "a71c9acb", "metadata": { "lines_to_next_cell": 2 }, @@ -5031,7 +5031,7 @@ }, { "cell_type": "markdown", - "id": "f6696ee2", + "id": "89071e87", "metadata": {}, "source": [ "We now set up the trained network with the weights we read in code block~6. The model has 50 layers, with a fair bit of complexity." @@ -5040,7 +5040,7 @@ { "cell_type": "code", "execution_count": 63, - "id": "2aabd724", + "id": "4f890244", "metadata": { "lines_to_next_cell": 0 }, @@ -5255,7 +5255,7 @@ }, { "cell_type": "markdown", - "id": "c4ee6ebe", + "id": "185bb4b5", "metadata": {}, "source": [ "We set the mode to `eval()` to ensure that the model is ready to predict on new data." @@ -5264,7 +5264,7 @@ { "cell_type": "code", "execution_count": 64, - "id": "6d27342d", + "id": "c4be9922", "metadata": { "lines_to_next_cell": 0 }, @@ -5461,7 +5461,7 @@ }, { "cell_type": "markdown", - "id": "3c1fbc71", + "id": "f0a3c519", "metadata": {}, "source": [ "Inspecting the output above, we see that when setting up the\n", @@ -5474,7 +5474,7 @@ { "cell_type": "code", "execution_count": 65, - "id": "efdbeda1", + "id": "2dc63d85", "metadata": {}, "outputs": [], "source": [ @@ -5483,7 +5483,7 @@ }, { "cell_type": "markdown", - "id": "38620865", + "id": "15ec1321", "metadata": {}, "source": [ "Let’s look at the predicted probabilities for each of the top 3 choices. First we compute\n", @@ -5495,7 +5495,7 @@ { "cell_type": "code", "execution_count": 66, - "id": "82ceab1c", + "id": "711d5ba7", "metadata": {}, "outputs": [], "source": [ @@ -5505,7 +5505,7 @@ }, { "cell_type": "markdown", - "id": "0e3ae755", + "id": "3b514c1e", "metadata": {}, "source": [ "In order to see the class labels, we must download the index file associated with `imagenet`. {This is avalable from the book website and [s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json](https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json).}" @@ -5514,7 +5514,7 @@ { "cell_type": "code", "execution_count": 67, - "id": "921ee168", + "id": "b22f70d8", "metadata": {}, "outputs": [], "source": [ @@ -5528,7 +5528,7 @@ }, { "cell_type": "markdown", - "id": "9fdd7587", + "id": "a5812782", "metadata": {}, "source": [ "We’ll now construct a data frame for each image file\n", @@ -5539,7 +5539,7 @@ { "cell_type": "code", "execution_count": 68, - "id": "e7770017", + "id": "b19c6bd1", "metadata": { "lines_to_next_cell": 2 }, @@ -5592,7 +5592,7 @@ }, { "cell_type": "markdown", - "id": "12862208", + "id": "cd6bd40b", "metadata": {}, "source": [ "We see that the model\n", @@ -5605,7 +5605,7 @@ { "cell_type": "code", "execution_count": 69, - "id": "af2f9856", + "id": "ba80b615", "metadata": { "lines_to_next_cell": 2 }, @@ -5622,7 +5622,7 @@ }, { "cell_type": "markdown", - "id": "d9e8d59c", + "id": "2e6eafaf", "metadata": {}, "source": [ "## IMDB Document Classification\n", @@ -5649,7 +5649,7 @@ { "cell_type": "code", "execution_count": 70, - "id": "afd98123", + "id": "ba6d2d2c", "metadata": { "lines_to_next_cell": 0 }, @@ -5676,7 +5676,7 @@ }, { "cell_type": "markdown", - "id": "28a01855", + "id": "ebeeb069", "metadata": {}, "source": [ "The datasets `imdb_seq_train` and `imdb_seq_test` are\n", @@ -5694,7 +5694,7 @@ { "cell_type": "code", "execution_count": 71, - "id": "5981eb05", + "id": "93bda908", "metadata": {}, "outputs": [ { @@ -5715,7 +5715,7 @@ }, { "cell_type": "markdown", - "id": "b579cb29", + "id": "6de86e76", "metadata": {}, "source": [ "For our first model, we have created a binary feature for each\n", @@ -5728,7 +5728,7 @@ { "cell_type": "code", "execution_count": 72, - "id": "f08024ba", + "id": "40943b7d", "metadata": { "lines_to_next_cell": 0 }, @@ -5746,7 +5746,7 @@ }, { "cell_type": "markdown", - "id": "c070a319", + "id": "9328d75c", "metadata": {}, "source": [ "We’ll use a two-layer model for our first model." @@ -5755,7 +5755,7 @@ { "cell_type": "code", "execution_count": 73, - "id": "7fd34906", + "id": "2117fd9f", "metadata": { "lines_to_next_cell": 0 }, @@ -5783,7 +5783,7 @@ }, { "cell_type": "markdown", - "id": "fcc2a8af", + "id": "845b4d8e", "metadata": {}, "source": [ "We now instantiate our model and look at a summary." @@ -5792,7 +5792,7 @@ { "cell_type": "code", "execution_count": 74, - "id": "56f74fdb", + "id": "66d0b710", "metadata": {}, "outputs": [ { @@ -5836,7 +5836,7 @@ }, { "cell_type": "markdown", - "id": "a32aca43", + "id": "c8bdad40", "metadata": {}, "source": [ "We’ll again use\n", @@ -5854,7 +5854,7 @@ { "cell_type": "code", "execution_count": 75, - "id": "3da7e0bc", + "id": "9df8b4cf", "metadata": {}, "outputs": [], "source": [ @@ -5866,7 +5866,7 @@ }, { "cell_type": "markdown", - "id": "940c8342", + "id": "95cc3b4f", "metadata": {}, "source": [ "Having loaded the datasets into a data module\n", @@ -5877,7 +5877,7 @@ { "cell_type": "code", "execution_count": 76, - "id": "3b6de185", + "id": "73684c66", "metadata": {}, "outputs": [ { @@ -5925,7 +5925,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "57e25e1e102745c18849507d8fe93fe3", + "model_id": "253cf3e077d845569cdc459ef74902b6", "version_major": 2, "version_minor": 0 }, @@ -6376,7 +6376,7 @@ }, { "cell_type": "markdown", - "id": "5985c44a", + "id": "f2e03c88", "metadata": {}, "source": [ "Evaluating the test error yields roughly 86% accuracy." @@ -6385,7 +6385,7 @@ { "cell_type": "code", "execution_count": 77, - "id": "97f86a32", + "id": "01c6e5ff", "metadata": { "lines_to_next_cell": 2 }, @@ -6393,7 +6393,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "57a8b619aaf049b4b06550a47d5e3611", + "model_id": "f2b40a42021f4a9183c3d7d2d545e83b", "version_major": 2, "version_minor": 0 }, @@ -6447,7 +6447,7 @@ }, { "cell_type": "markdown", - "id": "3d677b24", + "id": "c1976042", "metadata": {}, "source": [ "### Comparison to Lasso\n", @@ -6460,7 +6460,7 @@ { "cell_type": "code", "execution_count": 78, - "id": "e36e1542", + "id": "4d5b9d1d", "metadata": {}, "outputs": [], "source": [ @@ -6473,7 +6473,7 @@ }, { "cell_type": "markdown", - "id": "8216f2e7", + "id": "b78eb64e", "metadata": {}, "source": [ "Similar to what we did in\n", @@ -6484,7 +6484,7 @@ { "cell_type": "code", "execution_count": 79, - "id": "ee6d6859", + "id": "e2a88e57", "metadata": { "lines_to_next_cell": 0 }, @@ -6497,7 +6497,7 @@ }, { "cell_type": "markdown", - "id": "cf9b703f", + "id": "81380bee", "metadata": {}, "source": [ "With `LogisticRegression()` the regularization parameter\n", @@ -6509,7 +6509,7 @@ { "cell_type": "code", "execution_count": 80, - "id": "35a6e3c2", + "id": "9a3cf7a3", "metadata": { "lines_to_next_cell": 0 }, @@ -6524,7 +6524,7 @@ }, { "cell_type": "markdown", - "id": "49cec308", + "id": "9ee15d44", "metadata": {}, "source": [ "The path of 50 values takes approximately 40 seconds to run." @@ -6533,7 +6533,7 @@ { "cell_type": "code", "execution_count": 81, - "id": "a8943a6a", + "id": "b46f02c2", "metadata": {}, "outputs": [], "source": [ @@ -6549,7 +6549,7 @@ }, { "cell_type": "markdown", - "id": "4f20738d", + "id": "eb3e3871", "metadata": {}, "source": [ "The coefficient and intercepts have an extraneous dimension which can be removed\n", @@ -6559,7 +6559,7 @@ { "cell_type": "code", "execution_count": 82, - "id": "08268ae5", + "id": "e5fb6afa", "metadata": { "lines_to_next_cell": 0 }, @@ -6571,7 +6571,7 @@ }, { "cell_type": "markdown", - "id": "94991ca8", + "id": "f66fa37c", "metadata": {}, "source": [ "We’ll now make a plot to compare our neural network results with the\n", @@ -6581,7 +6581,7 @@ { "cell_type": "code", "execution_count": 83, - "id": "e98f4506", + "id": "cad28f1a", "metadata": { "lines_to_next_cell": 0 }, @@ -6613,7 +6613,7 @@ }, { "cell_type": "markdown", - "id": "aac5c38c", + "id": "c58ff7cb", "metadata": {}, "source": [ "Notice the use of `%%capture`, which suppresses the displaying of the partially completed figure. This is useful\n", @@ -6624,7 +6624,7 @@ { "cell_type": "code", "execution_count": 84, - "id": "6925d53a", + "id": "a66ecdd8", "metadata": { "lines_to_next_cell": 0 }, @@ -6660,7 +6660,7 @@ }, { "cell_type": "markdown", - "id": "2a8b7736", + "id": "fa1e2550", "metadata": {}, "source": [ "From the graphs we see that the accuracy of the lasso logistic regression peaks at about $0.88$, as it does for the neural network.\n", @@ -6671,7 +6671,7 @@ { "cell_type": "code", "execution_count": 85, - "id": "6d1f7885", + "id": "62440c1c", "metadata": { "lines_to_next_cell": 2 }, @@ -6687,7 +6687,7 @@ }, { "cell_type": "markdown", - "id": "4f79c23a", + "id": "fe67520f", "metadata": {}, "source": [ "## Recurrent Neural Networks\n", @@ -6697,7 +6697,7 @@ }, { "cell_type": "markdown", - "id": "3d376496", + "id": "a9bcdd2a", "metadata": {}, "source": [ "### Sequential Models for Document Classification\n", @@ -6717,7 +6717,7 @@ { "cell_type": "code", "execution_count": 86, - "id": "b5c2b72c", + "id": "c73d6e28", "metadata": {}, "outputs": [], "source": [ @@ -6731,7 +6731,7 @@ }, { "cell_type": "markdown", - "id": "4d1b3ef1", + "id": "1edd3143", "metadata": {}, "source": [ "The first layer of the RNN is an embedding layer of size 32, which will be\n", @@ -6748,7 +6748,7 @@ }, { "cell_type": "markdown", - "id": "fe55c7fa", + "id": "b73e08ab", "metadata": {}, "source": [ "The second layer is an LSTM with 32 units, and the output\n", @@ -6760,7 +6760,7 @@ { "cell_type": "code", "execution_count": 87, - "id": "8985cdb1", + "id": "cc9bbd00", "metadata": { "lines_to_next_cell": 0 }, @@ -6781,7 +6781,7 @@ }, { "cell_type": "markdown", - "id": "78fc988d", + "id": "5e9f28dd", "metadata": {}, "source": [ "We instantiate and take a look at the summary of the model, using the\n", @@ -6791,7 +6791,7 @@ { "cell_type": "code", "execution_count": 88, - "id": "79184187", + "id": "5c9ffb46", "metadata": {}, "outputs": [ { @@ -6833,7 +6833,7 @@ }, { "cell_type": "markdown", - "id": "d5b2c85e", + "id": "5087ff10", "metadata": {}, "source": [ "The 10,003 is suppressed in the summary, but we see it in the\n", @@ -6843,7 +6843,7 @@ { "cell_type": "code", "execution_count": 89, - "id": "29036a47", + "id": "a2d6ddfd", "metadata": {}, "outputs": [], "source": [ @@ -6854,7 +6854,7 @@ { "cell_type": "code", "execution_count": 90, - "id": "0a31576a", + "id": "1d76f970", "metadata": { "lines_to_next_cell": 0 }, @@ -6896,7 +6896,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4abe857cc251478b8855f53164fa5b45", + "model_id": "e24a4171456b412db47d6577cb336c37", "version_major": 2, "version_minor": 0 }, @@ -7206,7 +7206,7 @@ }, { "cell_type": "markdown", - "id": "a20a2113", + "id": "1cbf1b42", "metadata": {}, "source": [ "The rest is now similar to other networks we have fit. We\n", @@ -7216,13 +7216,13 @@ { "cell_type": "code", "execution_count": 91, - "id": "b2602a79", + "id": "d8a60d35", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1648bfd17bc04050b412c36afb32e092", + "model_id": "4e512ef8a7d348eea7f423a9ed96c86e", "version_major": 2, "version_minor": 0 }, @@ -7240,8 +7240,8 @@ "┃ Runningstage.testing ┃\n", "┃ metric DataLoader 0 ┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", - "│ test_accuracy 0.8388800024986267 │\n", - "│ test_loss 0.8145671486854553 │\n", + "│ test_accuracy 0.8480799794197083 │\n", + "│ test_loss 0.7677657604217529 │\n", "└───────────────────────────┴───────────────────────────┘\n", "\n" ], @@ -7250,8 +7250,8 @@ "┃\u001b[1m \u001b[0m\u001b[1m Runningstage.testing \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m┃\n", "┃\u001b[1m \u001b[0m\u001b[1m metric \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", - "│\u001b[36m \u001b[0m\u001b[36m test_accuracy \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.8388800024986267 \u001b[0m\u001b[35m \u001b[0m│\n", - "│\u001b[36m \u001b[0m\u001b[36m test_loss \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.8145671486854553 \u001b[0m\u001b[35m \u001b[0m│\n", + "│\u001b[36m \u001b[0m\u001b[36m test_accuracy \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.8480799794197083 \u001b[0m\u001b[35m \u001b[0m│\n", + "│\u001b[36m \u001b[0m\u001b[36m test_loss \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.7677657604217529 \u001b[0m\u001b[35m \u001b[0m│\n", "└───────────────────────────┴───────────────────────────┘\n" ] }, @@ -7261,7 +7261,7 @@ { "data": { "text/plain": [ - "[{'test_loss': 0.8145671486854553, 'test_accuracy': 0.8388800024986267}]" + "[{'test_loss': 0.7677657604217529, 'test_accuracy': 0.8480799794197083}]" ] }, "execution_count": 91, @@ -7275,7 +7275,7 @@ }, { "cell_type": "markdown", - "id": "54857d49", + "id": "deca21cd", "metadata": {}, "source": [ "We once again show the learning progress, followed by cleanup." @@ -7284,7 +7284,7 @@ { "cell_type": "code", "execution_count": 92, - "id": "32c3e3da", + "id": "65d7276c", "metadata": { "lines_to_next_cell": 2 }, @@ -7301,7 +7301,7 @@ }, { "data": { - "image/png": "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CxQREaFXXnlFN910k84//3yNGjXqnMevqalRamqqoqKi9P7776u8vNyj/0idLl26aO3aterdu7f27NmjOXPmqEuXLvr1r3+tqVOn6uOPP9aWLVv0+uuvS5IiG3gfKisrlZKSoqSkJH3wwQc6dOiQbrvtNs2bN88jZOXl5SkmJkZ5eXnav3+/pk6dqmHDhmnOnDnnfD3wrYKCggavytVxuVwqKipSQUEBw2yBNo4rIa3ELbfcoi+++EJvvvmme9uaNWs0ZcoU9e3bV/fcc4+GDRum/v37684779S4ceP04osvNunYr7/+uj799FM9++yzSkhI0JVXXqlly5bV22/RokW6/PLLFR8frwkTJuiee+5xP0fHjh3VuXNntWvXTtHR0YqOjlbHjh3rHWPdunU6ceKEnn32WV1yySW66qqr9NRTT+m5555TWVmZe79u3brpqaee0kUXXaSf/vSn+slPfqLc3Fxv3zb4gC9XuwXQunAl5FzCw2uvSDTFW29J48efe79XX5WuvLJpz91EF110kS6//HI988wzGj16tPbv36+CggItXbpUTqdTy5Yt04svvqji4mJVV1erqqqqyX0+9u7dq7i4OPXu3du9LSkpqd5+GzZs0BNPPKEvvvhCx44d0w8//OD1Akd79+5VQkKCOp12BeiKK65QTU2N9u3bp6ioKEnSxRdf7DFDZkxMjPbs2ePVc8E3fLnaLYDWhSsh52Kz1TaJNOV27bWSw1H7mMaOFRdXu19TjtfYcRpx66236qWXXtLRo0e1Zs0anX/++fqv//ovPfroo8rKytKCBQuUl5enXbt2KSUlRdXV1Ra8QbW2bdumGTNmaPz48fr73/+uDz/8UPfdd5+lz3G69u3be9y32WyqqanxyXPBO8nJyXI4HO5mwTPZbDbFxcUpOTnZz5UBCDSEECvZ7VJWVu3fz/wPuO5+Zmbtfj5w/fXXKyQkROvWrdOzzz6rW265RTabTe+8844mTpyoG2+8UQkJCerfv78+++yzJh930KBBKioq8rh8/t5773ns8+6776pv37667777NGLECA0YMEAHDhzw2Cc0NPScnREHDRqk3bt3q7Ky0r3tnXfeUUhIiAYOHNjkmmFO3Wq3kuoFEatWuwXQOhBCrJaaKmVnS7GxntsdjtrtFqzy2ZjOnTtr6tSpWrhwoUpKSnTzzTdLkgYMGKCt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NpslNVVUVCguLk5FRUWKiIiw5JjwDz674MVnF7z47IJXeXm5+vTpo+7du1tyPKMhpGfPnrLb7SorK/PYXlZWpujo6CYdo3379rr00ku1f//+Bn8eFhamsLAwj21du3ZtVr3nEhERwRcqSPHZBS8+u+DFZxe8QkKs6VJqtGNqaGiohg8frtzcXPe2mpoa5ebmelztOBun06k9e/YoJibGV2UCAAAfMN4ck5GRoVmzZmnEiBEaNWqUMjMzVVlZqdmzZ0uSZs6cqdjYWC1fvlyStHTpUv3oRz/SBRdcoCNHjujRRx/VgQMHdNttt5l8GQAAwEvGQ8jUqVP17bff6v7771dpaamGDRumLVu2uDurHjx40OOyz3/+8x/NmTNHpaWl6tatm4YPH653331XgwcPNvUSFBYWpiVLltRr9kHg47MLXnx2wYvPLnhZ/dnZXFaNswEAAPCC8cnKAABA20QIAQAARhBCAACAEYQQAABgBCHEAitXrlR8fLw6dOigxMREbd++3XRJOIcHHnhANpvN43bRRReZLgsNeOuttzRhwgT17t1bNptNmzdv9vi5y+XS/fffr5iYGHXs2FFjx47V559/bqZYeDjXZ3fzzTfX+x6OGzfOTLHwsHz5co0cOVJdunRRr169NGnSJO3bt89jnxMnTmju3Lnq0aOHOnfurClTptSbfPRcCCEttGHDBmVkZGjJkiXauXOnEhISlJKSokOHDpkuDedw8cUXq6SkxH17++23TZeEBlRWViohIUErV65s8OePPPKInnjiCa1atUrvv/++OnXqpJSUFJ04ccLPleJM5/rsJGncuHEe38P169f7sUI05s0339TcuXP13nvvaevWrTp58qSuvfZaVVZWuve5++679T//8z/auHGj3nzzTX3zzTdKTU317olcaJFRo0a55s6d677vdDpdvXv3di1fvtxgVTiXJUuWuBISEkyXAS9Jcm3atMl9v6amxhUdHe169NFH3duOHDniCgsLc61fv95AhWjMmZ+dy+VyzZo1yzVx4kQj9cA7hw4dcklyvfnmmy6Xq/Z71r59e9fGjRvd++zdu9clybVt27YmH5crIS1QXV2tHTt2aOzYse5tISEhGjt2rLZt22awMjTF559/rt69e6t///6aMWOGDh48aLokeKmwsFClpaUe38HIyEglJibyHQwS+fn56tWrlwYO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", + "image/png": "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T6SFswghNmto3LP2V4QTE6VO/uCuWbNGDzzwgHbv3u1t69Spk/e/LcuSx+NRu3Znfut79uzpVx2hoaGKiYnx6z5Aa2L3D4iUlBTFx8efce5GSkpKk2u280gIf3os/HnMQJ1IC+cxHHMGlmWpoqKiUZeysjLdddddpx33zMzMVFlZWaP219g5wzExMd5LVFSUXC6X9/qnn36qzp0767XXXtOwYcMUFhamt99+W59//rkmTJig6OhoderUSSNGjNAbb7zhs99Th2NcLpf+93//V5MmTVJERIT69++vl19+2Xv7qcMxK1euVJcuXfT6669r4MCB6tSpk8aOHesTmk6cOKG77rpLXbp0Uffu3TV37lxlZGRo4sSJjXyHAHs4MQzh9NwNuznVY1EbxhrqtXW5XEpISGhWGENgIoScwdGjR9WpU6dGXaKiolRYWNjgvizL0oEDBxQVFdWo/dm5aut9992n//mf/9GuXbs0ePBglZeXa9y4ccrNzdWHH36osWPHavz48d6TBzZk8eLFuu666/TRRx9p3LhxuuGGG3T48OEGtz969Kgef/xxvfDCC9q0aZP27dune+65x3v7r371K/35z3/WihUr9M4776isrEzr16+362kjSNk958rJiZOBdAipUz0WgRbG0IJsOQNNADndyXeOHTtmffLJJ9axY8e8beXl5Y062ZATl/Lycr+f34oVK6yoqCjv9dqTJa1fv/6M973gggusp556ynu9T58+1pNPPum9LslasGBBndfmtdde83msf//7395aJFl79uzx3mfZsmVWdHS093p0dLT12GOPea+fOHHCOuuss6wJEyY09ik3Sn3vLQKTEydtc/JEaLVOnDhh5eXlWatWrbLy8vKafSIxJzh9ErT63ruEhIQ2c8K9YGD3CeyYE3IGERERKi8vb9S2mzZt0rhx48643auvvqof/vCHjXpsuwwfPtznenl5uR588EG98sorKioq0okTJ3Ts2LEz9oQMHjzY+98dO3ZUZGSkDh482OD2EREROvvss73XY2NjvduXlpaqpKREI0eO9N7udrs1bNgwVVdX+/X80DY4NeeqJSZOBsIqlk6vQOrkKqEITISQM3C5XI0+QuTqq69u1CS0q6++usU/dKc+h3vuuUcbN27U448/rnPOOUfh4eFKT09XVVXVaffTvn17n+sul+u0gaG+7et7bYAzcerIDYmJkyerHT6qb4KuHec1CYQwhpbDnBAbBdK45zvvvKObb75ZkyZN0qBBgxQTE6Mvv/yyRWuIiopSdHS0PvjgA2+bx+PRtm3bWrQOBAYn15pg4qSvtLQ0ffnll8rLy9OqVauUl5envXv3tqr5KwgOhBCbBcoktP79+ysnJ0fbt2/Xjh07NHXqVCNDILNmzdKSJUv017/+Vbt371ZmZqb+/e9/c/Zi1OHkkEkg/YBoKaxAipZACHFAIPyKeOKJJ9S1a1ddeumlGj9+vFJTU3XxxRe3eB1z587VlClTNG3aNCUnJ6tTp05KTU3l/C6ooyUW/gqEHxBAMOEEdifhJGfmVVdXa+DAgbruuuv08MMP27Zf3tvA1xInbat9HCZOAvWz+wR2TEyFUV999ZX+/ve/6/LLL1dlZaWefvpp7d27V1OnTjVdGloZp4/cOPlxmDgJtAyGY2BUSEiIVq5cqREjRuiyyy7Tzp079cYbb2jgwIGmS0MrxJAJEFzoCYFRCQkJeuedd0yXAYc4MbTBWhNA8CCEAHCEk2eTZsgECA4MxwCwnRMngwMQfAghAGzl5MngAAQXQggAWzm5simA4EIIAWCrljgZHIDgQAgBYCtOBgegsQghTvF4pPx8afXqmn9b+fj3qFGjNHv2bO/1xMREZWVlnfY+LpdL69evb/Zj27UfNJ3H41F+fr5Wr16t/Pz8Zs3X4GRwABqLEOKEnBwpMVEaPVqaOrXm38TEmnYHjB8/XmPHjq33toKCArlcLn300Ud+7fODDz7Q7bffbkd5Xg8++KCGDh1ap72oqEjXXHONrY+FxsvJyVFiYqJGjx6tqVOnavTo0UpMTGzyESycDA5AYxFC7JaTI6WnS6dOzCssrGl3IIjccsst2rhxY72TAVesWKHhw4dr8ODBfu2zZ8+eioiIsKvE04qJiVFYWFiLPBZ8OXUoLSubAmgMQsiZWJZUUdG4S1mZdNddNfepbz+SlJlZs11j9tfIcwv++Mc/Vs+ePbVy5Uqf9vLycq1du1YTJ07UlClTFBcXp4iICA0aNEirV68+7T5PHY757LPP9MMf/lAdOnTQ+eefr40bN9a5z9y5c3XuuecqIiJC/fr108KFC3X8+HFJ0sqVK7V48WLt2LFDLpdLLpfLW++pwzE7d+7UFVdcofDwcHXv3l233367ysvLvbfffPPNmjhxoh5//HHFxsaqe/fumjFjhvexgpmdwyZOH0obCGeTBmAWK6aeydGjUqdO9uzLsmp6SKKiGrd9ebnUseMZN2vXrp2mTZumlStXav78+d4u77Vr18rj8ejGG2/U2rVrNXfuXEVGRuqVV17RTTfdpLPPPlsjR4484/6rq6uVlpam6Ohovf/++yotLfWZP1Krc+fOWrlypXr37q2dO3fqtttuU+fOnXXvvfdq8uTJ+vjjj7Vhwwa98cYbkqSoel6HiooKpaamKjk5WR988IEOHjyoW2+9VTNnzvQJWXl5eYqNjVVeXp727NmjyZMna+jQobrtttvO+HwCld0rkPpzKG1TVydlZVMAp2W1MaWlpZYkq7S0tM5tx44dsz755BPr2LFj/2ksL7esmvjQ8pfy8kY/r127dlmSrLy8PG9bSkqKdeONN9a7/Y9+9CPrv//7v73XL7/8ciszM9N7vU+fPtaTTz5pWZZlvf7661a7du2swsJC7+2vvfaaJclat25dgzU99thj1rBhw7zXFy1aZA0ZMqTOdifv57nnnrO6du1qlZ/03F955RUrJCTEKi4utizLsjIyMqw+ffpYJ06c8G7z05/+1Jo8eXKDtdT73gaQl156yXK5XJYkn4vL5bJcLpf10ksv+b3PVatW1dlffZdVq1Y58IwABKLTfYc2BcMxZxIRUdMj0ZjLq682bp+vvtq4/fkxJ+O8887TpZdequeff16StGfPHhUUFOiWW26Rx+PRww8/rEGDBqlbt27q1KmTXn/9de3bt69R+961a5cSEhLUu3dvb1tycnKd7dasWaPLLrtMMTEx6tSpkxYsWNDoxzj5sYYMGaKOJ/UAXXbZZaqurtbu3bu9bRdccIHPxMbY2FgdPHjQr8cKFE4Nm3AoLQDTCCFn4nLVDIk05nL11VJ8fM19GtpXQkLNdo3ZX0P7acAtt9yil156Sd9++61WrFihs88+W5dffrkee+wxLV26VHPnzlVeXp62b9+u1NRUVVVV2fAC1di8ebNuuOEGjRs3Tn/729/04Ycfav78+bY+xsnat2/vc93lcqm6utqRxzLNqRVIOZQWgGmEEDu53dL3hybWCRC117OyarZzwHXXXaeQkBCtWrVKf/zjH/Vf//VfcrlceueddzRhwgTdeOONGjJkiPr166d//vOfjd7vwIEDtX//fp8VLt977z2fbd5991316dNH8+fP1/Dhw9W/f3999dVXPtuEhoae8df6wIEDtWPHDlVUVHjb3nnnHYWEhGjAgAGNrjmYOLUCKYfSAjCNEGK3tDQpO1s65dBExcfXtDt4ZECnTp00efJkzZs3T0VFRbr55pslSf3799fGjRv17rvvateuXfrZz36mkpKSRu93zJgxOvfcc5WRkaEdO3aooKBA8+fP99mmf//+2rdvn1588UV9/vnn+s1vfqN169b5bJOYmKi9e/dq+/btOnTokCorK+s81g033KAOHTooIyNDH3/8sfLy8jRr1izddNNNio6O9v9FCQJODptwKC0AkwghTkhLk778UsrLk1atqvl3715HA0itW265Rf/+97+VmprqncOxYMECXXzxxUpNTdWoUaMUExOjiRMnNnqfISEhWrdunY4dO6aRI0fq1ltv1S9/+UufbX7yk5/o7rvv1syZMzV06FC9++67Wrhwoc821157rcaOHavRo0erZ8+e9R4mHBERoddff12HDx/WiBEjlJ6eriuvvFJPP/20/y9GkHB62IRDaQGY4rLqm+0WxMrKyhQVFaXS0lJFRkb63Pbdd99p79696tu3rzp06GCoQjgh0N/b2kXFJPlMUK0NJvRaAGgJp/sObQp6QoAAwLAJgGDEYmVAgEhLS9OECRNUUFCgoqIixcbGKiUlhYmjAAIWIQQIIKxACiCYMBwDAACMIITUo43N1W0TeE8BoPVhOOYktatwHj16VOHh4YargZ2OHj0qqe5Kq07xeDzM3QCAMyCEnMTtdqtLly7ec5BEREQ0uDYDAoNlWTp69KgOHjyoLl26tEgQsPtstwAQrAghp4iJiZGkoD0ZWlvVpUsX73vrpNr1PE4d/iksLFR6ejqH0wLASVisrAEej0fHjx9vwcrglPbt27dID4jH41FiYmKDJ5tzuVyKj4/X3r17GZoBEJDsXqyMnpAGuN1uvijgF3/OdsthtgDA0TGAbZw62y0ABCtCCGATJ892CwDBiBAC2MTps90CQLAhhAA2cbvdWrp0qSTVCSK117OysphrBADfI4SgzfJ4PMrPz9fq1auVn58vj8fT7H1ytlsAaDwO0UWb5PSCYqyYCiAY2f0dSghBm9PQgmK1Qyb0WABA/ez+DmU4Bm2Kx+NRZmZmvSe0q22bPXu2LUMzAIDTI4SgTfFnQTEAgLMIIWhT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JJzBgw8+KJfL5XM577zzTJeFemzatEnjx49X79695XK5tH79ep/bLcvSAw88oNjYWIWHh2vMmDH67LPPzBQLH2d6726++eY6n8OxY8eaKRY+lixZohEjRqhz587q1auXJk6cqN27d/ts891332nGjBnq3r27OnXqpGuvvbbO4qNnQghppjVr1mjOnDlatGiRtm3bpiFDhig1NVUHDx40XRrO4IILLlBRUZH38vbbb5suCfWoqKjQkCFDtGzZsnpvf/TRR/Wb3/xGzz77rN5//3117NhRqamp+u6771q4UpzqTO+dJI0dO9bnc7h69eoWrBANeeuttzRjxgy999572rhxo44fP66rr75aFRUV3m3uvvtu/d///Z/Wrl2rt956S19//bXS0tL8eyALzTJy5EhrxowZ3usej8fq3bu3tWTJEoNV4UwWLVpkDRkyxHQZ8JMka926dd7r1dXVVkxMjPXYY495244cOWKFhYVZq1evNlAhGnLqe2dZlpWRkWFNmDDBSD3wz8GDBy1J1ltvvWVZVs3nrH379tbatWu92+zatcuSZG3evLnR+6UnpBmqqqq0detWjRkzxtsWEhKiMWPGaPPmzQYrQ2N89tln6t27t/r166cbbrhB+/btM10S/LR3714VFxf7fAajoqKUlJTEZzBA5Ofnq1evXhowYIDuvPNO/etf/zJdEupRWloqSd4T123dulXHjx/3+eydd955Ouuss/z67BFCmuHQoUPyeDze1V1rRUdHq7i42FBVaIykpCStXLlSGzZs0DPPPKO9e/cqJSVF3377renS4IfazxmfwcA0duxY/fGPf1Rubq5+9atf6a233tI111wjj8djujScpLq6WrNnz9Zll12mCy+8UFLNZy80NLTOCWH9/ewZX7YdMOGaa67x/vfgwYOVlJSkPn366C9/+YtuueUWg5UBbcf111/v/e9BgwZp8ODBOvvss5Wfn68rr7zSYGU42YwZM/Txxx87Mm+OnpBm6NGjh9xud53ZwCUlJYqJiTFUFZqiS5cuOvfcc7Vnzx7TpcAPtZ8zPoPBoV+/furRowefw1Zk5syZ+tvf/qa8vDzFx8d722NiYlRVVaUjR474bO/vZ48Q0gyhoaEaNmyYcnNzvW3V1dXKzc1VcnKywcrgr/Lycn3++eeKjY01XQr80LdvX8XExPh8BsvKyvT+++/zGQxABw4c0L/+9S8+h62AZVmaOXOm1q1bpzfffFN9+/b1uX3YsGFq3769z2dv9+7d2rdvn1+fPYZjmmnOnDnKyMjQ8OHDNXLkSGVlZamiokLTp083XRpO45577tH48ePVp08fff3111q0aJHcbremTJliujScory83OeX8d69e7V9+3Z169ZNZ511lmbPnq1f/OIX6t+/v/r27auFCxeqd+/emjhxormiIen07123bt20ePFiXXvttYqJidHnn3+ue++9V+ecc45SU1MNVg2pZghm1apV+utf/6rOnTt753lERUUpPDxcUVFRuuWWWzRnzhx169ZNkZGRmjVrlpKTk3XJJZc0/oHsPoynLXrqqaess846ywoNDbVGjhxpvffee6ZLwhlMnjzZio2NtUJDQ624uDhr8uTJ1p49e0yXhXrk5eVZkupcMjIyLMuqOUx34cKFVnR0tBUWFmZdeeWV1u7du80WDcuyTv/eHT161Lr66qutnj17Wu3bt7f69Olj3XbbbVZxcbHpsmFZ9b5vkqwVK1Z4tzl27Jj185//3OratasVERFhTZo0ySoqKvLrcVzfPxgAAECLYk4IAAAwghACAACMIIQAAAAjCCEAAMAIQggAADCCEAIAAIwghAAAACMIIQAAwAhCCICg4HK5tH79etNlAPADIQRAs918881yuVx1LmPHjjVdGoBWjBPYAbDF2LFjtWLFCp+2sLAwQ9UACAT0hACwRVhYmGJiYnwuXbt2lVQzVPLMM8/ommuuUXh4uPr166fs7Gyf++/cuVNXXHGFwsPD1b17d91+++0qLy/32eb555/XBRdcoLCwMMXGxmrmzJk+tx86dEiTJk1SRESE+vfvr5dfftnZJw2gWQghAFrEwoULde2112rHjh264YYbdP3112vXrl2SpIqKCqWmpqpr16764IMPtHbtWr3xxhs+IeOZZ57RjBkzdPvtt2vnzp16+eWXdc455/g8xuLFi3Xdddfpo48+0rhx43TDDTfo8OHDLfo8AfjB1nP/AmiTMjIyLLfbbXXs2NHn8stf/tKyrJrTgt9xxx0+90lKSrLuvPNOy7Is67nnnrO6du1qlZeXe29/5ZVXrJCQEO+p3Xv37m3Nnz+/wRokWQsWLPBeLy8vtyRZr732mm3PE4C9mBMCwBajR4/WM88849PWrVs3738nJyf73JacnKzt27dLknbt2qUhQ4aoY8eO3tsvu+wyVVdXa/fu3XK5XPr666915ZVXnraGwYMHe/+7Y8eOioyM1MGDB5v6lAA4jBACwBYdO3asMzxil/Dw8EZt1759e5/rLpdL1dXVTpQEwAbMCQHQIt5777061wcOHChJGjhwoHbs2KGKigrv7e+8845CQkI0YMAAde7cWYmJicrNzW3RmgE4i54QALaorKxUcXGxT1u7du3Uo0cPSdLatWs1fPhw/eAHP9Cf//xnbdmyRcuXL5ck3XDDDVq0aJEyMjL04IMP6ptvvtGsWbN00003KTo6WpL04IMP6o477lCvXr10zTXX6Ntvv9U777yjWbNmtewTBWAbQggAW2zYsEGxsbE+bQMGDNCnn34qqebIlRdffFE///nPFRsbq9WrV+v888+XJEVEROj1119XZmamRowYoYiICF177bV64oknvPvKyMjQd999pyeffFL33HOPevToofT09JZ7ggBs57IsyzJdBIDg5nK5tG7dOk2cONF0KQBaEeaEAAAAIwghAADACOaEAHAco74A6kNPCAAAMIIQAgAAjCCEAAAAIwghAADACEIIAAAwghACAACMIIQAAAAjCCEAAMCI/w+qg7/ja0Jp/AAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -7325,7 +7325,7 @@ { "cell_type": "code", "execution_count": 93, - "id": "be5a979e", + "id": "c6f2d6c4", "metadata": { "lines_to_next_cell": 2 }, @@ -7341,7 +7341,7 @@ }, { "cell_type": "markdown", - "id": "240618c9", + "id": "f920c659", "metadata": {}, "source": [ "### Time Series Prediction\n", @@ -7353,7 +7353,7 @@ { "cell_type": "code", "execution_count": 94, - "id": "cf219016", + "id": "f3e17682", "metadata": {}, "outputs": [], "source": [ @@ -7368,7 +7368,7 @@ }, { "cell_type": "markdown", - "id": "2ebf00d3", + "id": "e621c2eb", "metadata": {}, "source": [ "Next we set up the lagged versions of the data, dropping\n", @@ -7378,7 +7378,7 @@ { "cell_type": "code", "execution_count": 95, - "id": "c0d6bb22", + "id": "78707eda", "metadata": {}, "outputs": [], "source": [ @@ -7393,7 +7393,7 @@ }, { "cell_type": "markdown", - "id": "53d15ddf", + "id": "bb83e654", "metadata": {}, "source": [ "Finally, we extract the response, training indicator, and drop the current day’s `DJ_return` and\n", @@ -7403,7 +7403,7 @@ { "cell_type": "code", "execution_count": 96, - "id": "9de511d5", + "id": "4d894824", "metadata": { "lines_to_next_cell": 2 }, @@ -7431,7 +7431,7 @@ }, { "cell_type": "markdown", - "id": "9c61eaa2", + "id": "f1889769", "metadata": {}, "source": [ "We first fit a simple linear model and compute the $R^2$ on the test data using\n", @@ -7441,7 +7441,7 @@ { "cell_type": "code", "execution_count": 97, - "id": "89666a56", + "id": "4d7f5ce0", "metadata": {}, "outputs": [ { @@ -7463,7 +7463,7 @@ }, { "cell_type": "markdown", - "id": "c3997039", + "id": "02c7294f", "metadata": {}, "source": [ "We refit this model, including the factor variable `day_of_week`.\n", @@ -7474,7 +7474,7 @@ { "cell_type": "code", "execution_count": 98, - "id": "23ebf124", + "id": "a6b371bb", "metadata": { "lines_to_next_cell": 0 }, @@ -7487,7 +7487,7 @@ }, { "cell_type": "markdown", - "id": "8df4e475", + "id": "92fda2e1", "metadata": {}, "source": [ " Note that we do not have\n", @@ -7498,7 +7498,7 @@ { "cell_type": "code", "execution_count": 99, - "id": "4190a4dc", + "id": "a2a8cc85", "metadata": { "lines_to_next_cell": 0 }, @@ -7521,7 +7521,7 @@ }, { "cell_type": "markdown", - "id": "d98cc235", + "id": "68a22c64", "metadata": {}, "source": [ "This model achieves an $R^2$ of about 46%." @@ -7529,7 +7529,7 @@ }, { "cell_type": "markdown", - "id": "131bfc1c", + "id": "1cca42e4", "metadata": {}, "source": [ "To fit the RNN, we must reshape the data, as it will expect 5 lagged\n", @@ -7550,7 +7550,7 @@ { "cell_type": "code", "execution_count": 100, - "id": "a2b41f92", + "id": "8ee6e6a3", "metadata": { "lines_to_next_cell": 0 }, @@ -7581,7 +7581,7 @@ }, { "cell_type": "markdown", - "id": "7b301214", + "id": "a1f41334", "metadata": {}, "source": [ "We now reshape the data." @@ -7590,7 +7590,7 @@ { "cell_type": "code", "execution_count": 101, - "id": "dde73c9e", + "id": "d35ceb54", "metadata": { "lines_to_next_cell": 0 }, @@ -7613,7 +7613,7 @@ }, { "cell_type": "markdown", - "id": "4fa6cd7a", + "id": "11137e1d", "metadata": {}, "source": [ "By specifying the first size as -1, `numpy.reshape()` deduces its size based on the remaining arguments.\n", @@ -7628,7 +7628,7 @@ { "cell_type": "code", "execution_count": 102, - "id": "6f9d6357", + "id": "9e3dc6d5", "metadata": {}, "outputs": [], "source": [ @@ -7649,7 +7649,7 @@ }, { "cell_type": "markdown", - "id": "a5d720e7", + "id": "1fd566f7", "metadata": {}, "source": [ "We fit the model in a similar fashion to previous networks. We\n", @@ -7659,14 +7659,13 @@ "early stopping, since then the test performance would be biased.\n", "\n", "We form the training dataset similar to\n", - "our `Hitters` example.\n", - " " + "our `Hitters` example." ] }, { "cell_type": "code", "execution_count": 103, - "id": "a21ca47e", + "id": "df5e5ab6", "metadata": {}, "outputs": [], "source": [ @@ -7680,7 +7679,7 @@ }, { "cell_type": "markdown", - "id": "0d627892", + "id": "16565d83", "metadata": {}, "source": [ "Following our usual pattern, we inspect the summary." @@ -7689,7 +7688,7 @@ { "cell_type": "code", "execution_count": 104, - "id": "8fa26b87", + "id": "d7f49bec", "metadata": { "lines_to_next_cell": 0 }, @@ -7732,7 +7731,7 @@ }, { "cell_type": "markdown", - "id": "065db586", + "id": "ad57780a", "metadata": {}, "source": [ "We again put the two datasets into a data module, with a\n", @@ -7742,7 +7741,7 @@ { "cell_type": "code", "execution_count": 105, - "id": "9b871361", + "id": "ea7ce0f4", "metadata": { "lines_to_next_cell": 0 }, @@ -7757,7 +7756,7 @@ }, { "cell_type": "markdown", - "id": "8e6d61d8", + "id": "d0d60c8b", "metadata": {}, "source": [ "We run some data through our model to be sure the sizes match up correctly." @@ -7766,7 +7765,7 @@ { "cell_type": "code", "execution_count": 106, - "id": "b63d1f85", + "id": "ccd77738", "metadata": {}, "outputs": [ { @@ -7789,7 +7788,7 @@ }, { "cell_type": "markdown", - "id": "7fc69ade", + "id": "c9397b7f", "metadata": {}, "source": [ "We follow our previous example for setting up a trainer for a\n", @@ -7800,7 +7799,7 @@ { "cell_type": "code", "execution_count": 107, - "id": "c5f32a4f", + "id": "96e04e3f", "metadata": {}, "outputs": [], "source": [ @@ -7813,7 +7812,7 @@ }, { "cell_type": "markdown", - "id": "ed00be6a", + "id": "9d7ef6fc", "metadata": {}, "source": [ "Fitting the model should by now be familiar.\n", @@ -7823,7 +7822,7 @@ { "cell_type": "code", "execution_count": 108, - "id": "6bd98eb9", + "id": "fc6ba2ca", "metadata": { "lines_to_next_cell": 2 }, @@ -7865,7 +7864,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f50cb3862a6e4ddcbcb7131a9c3e6c07", + "model_id": "cd881313814b4b319883de36a456b21e", "version_major": 2, "version_minor": 0 }, @@ -8537,7 +8536,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0e613a523fb24350a02e4af53fc31c0b", + "model_id": "c0851768dd544162913f87e0e0cb118e", "version_major": 2, "version_minor": 0 }, @@ -8551,7 +8550,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c4db1eab382549f1b1beddfad3368138", + "model_id": "6cb1dc51cbad4e1f829a074e29d3a47e", "version_major": 2, "version_minor": 0 }, @@ -8565,7 +8564,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fe986a9354124fab8835d0b2d93529dd", + "model_id": "608984e04fc847d7860dfb48bbcdda9f", "version_major": 2, "version_minor": 0 }, @@ -8579,7 +8578,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b8cb7c8dcfc8407e9bcb453d75fec4fb", + "model_id": "bef4bc23212c41c497e518473db55672", "version_major": 2, "version_minor": 0 }, @@ -8593,7 +8592,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b3bb249322a440fea649e953c6f8e6f9", + "model_id": "890d82c78d59444ea97f6000b0d17fec", "version_major": 2, "version_minor": 0 }, @@ -8607,7 +8606,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fa670100f02b47cf9ec4c3e6bad634e7", + "model_id": "84f285e1262e448186175b5f6ea8a100", "version_major": 2, "version_minor": 0 }, @@ -8621,7 +8620,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a89941f764245c2ada50a90a13c2de5", + "model_id": "6bcddf29e018487ab3cbd65b9360a31c", "version_major": 2, "version_minor": 0 }, @@ -8635,7 +8634,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f1620d945db8415eb67ca9c7c9204437", + "model_id": "0f5f0bf0e3094d359222a40cfb883e67", "version_major": 2, "version_minor": 0 }, @@ -8649,7 +8648,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ccaab29c24594688aab4e276f0602911", + "model_id": "436f0a6e3a7a4457b6b54fb1c19a9fc1", "version_major": 2, "version_minor": 0 }, @@ -8663,7 +8662,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "985770bbcdc54a978e25689ec98b9ec8", + "model_id": "153517df5e244608a4df90e6d5b3f2fb", "version_major": 2, "version_minor": 0 }, @@ -8677,7 +8676,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "649a7264f6e84529ab9292bab0b77432", + "model_id": "966bf641ff264d9ba465a989337d24c8", "version_major": 2, "version_minor": 0 }, @@ -8691,7 +8690,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bbd262d3471646e38208a319c863cb75", + "model_id": "232ec0a0183e462f92422b1991162466", "version_major": 2, "version_minor": 0 }, @@ -8705,7 +8704,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "58ad0974b15546609feec97cc94b6a7a", + "model_id": "94eebdb823b9416abdb1454fa8b713a1", "version_major": 2, "version_minor": 0 }, @@ -8719,7 +8718,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d6114f44e51d4586b911578aa52ed8e5", + "model_id": "63e68c7095d74639a33c6b422dde8e6b", "version_major": 2, "version_minor": 0 }, @@ -8733,7 +8732,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d42389c558874de3932eb5bc0c4165cb", + "model_id": "858b9ede991d4db5a65f3738145661b0", "version_major": 2, "version_minor": 0 }, @@ -8747,7 +8746,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "892652c223b4426b8e809a0cc36985a2", + "model_id": "1320a563fa1141f48ec1121a4da566dd", "version_major": 2, "version_minor": 0 }, @@ -8761,7 +8760,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cc6a9c7712ac47e7be436a5e53c1d203", + "model_id": "c258eee32312493f820b0be1001b702d", "version_major": 2, "version_minor": 0 }, @@ -8775,7 +8774,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "71474f43feee42a78f5b2dd1441ebea8", + "model_id": "cfe59e5c336b483595b2c2f3e5002fe5", "version_major": 2, "version_minor": 0 }, @@ -8789,7 +8788,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d35c015e070a4066a00638dfea294e20", + "model_id": "da49b9baca8d43deb73852ac22411b59", "version_major": 2, "version_minor": 0 }, @@ -8803,7 +8802,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bbe8d6a738a2452eb96907cfd94a865e", + "model_id": "2edefd368841420799756fdeb9eb350e", "version_major": 2, "version_minor": 0 }, @@ -8817,7 +8816,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c4e37d0e56cf4433bae37ba25dd6addc", + "model_id": "fb1ab9dd650c4327b9e08083ea6f855e", "version_major": 2, "version_minor": 0 }, @@ -8831,7 +8830,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "508e2b4b875b4f3eb89460503b82a44b", + "model_id": "337548c8b3a649b3bbb2aa022d0bc33c", "version_major": 2, "version_minor": 0 }, @@ -8845,7 +8844,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fe84b5d4fff64e4e84eb3baf63f49ebb", + "model_id": "469f0f8eaf84468689dc81a6866590c6", "version_major": 2, "version_minor": 0 }, @@ -8859,7 +8858,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "234a8305cd0e4671bafd6347a508006a", + "model_id": "5a3d2d6c73104569b2431592878a0680", "version_major": 2, "version_minor": 0 }, @@ -8873,7 +8872,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9314bb524e4c4c988e0637f0b426dea3", + "model_id": "0a4f360d5a1c4e688c806475aa15e2aa", "version_major": 2, "version_minor": 0 }, @@ -8887,7 +8886,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "73bb408fb3b14067bc5a00c51f2b46ab", + "model_id": "32861129effb47cdb392fa0a20b636c3", "version_major": 2, "version_minor": 0 }, @@ -8901,7 +8900,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "80e55275d2694434ba664645a53cfdfb", + "model_id": "0713f563c1fc4d6292be6340e83f6417", "version_major": 2, "version_minor": 0 }, @@ -8915,7 +8914,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "af57619b39e141b0a849207567f12685", + "model_id": "1364d3ae21274234a26921be5a610c57", "version_major": 2, "version_minor": 0 }, @@ -8929,7 +8928,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e9d1664e7094f3a80c4c29a64c69850", + "model_id": "c5e4630ea30945fd862bce8a68c9eaff", "version_major": 2, "version_minor": 0 }, @@ -8943,7 +8942,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cbadff921ed84c079d2920fa8f108d79", + "model_id": "fb014ea654fa49c6b29fda1c42a4239b", "version_major": 2, "version_minor": 0 }, @@ -8957,7 +8956,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a4f763710f54a64a164ed4e8ade0cd4", + "model_id": "fc9065e42c5946f88aa84da055bf968e", "version_major": 2, "version_minor": 0 }, @@ -8971,7 +8970,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7ae34405e0904941bde7ac34156ef5d9", + "model_id": "b33c56819c07474596c522b66e69d8e0", "version_major": 2, "version_minor": 0 }, @@ -8985,7 +8984,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "758b295e2ebc4f818bf7634dc9e6511b", + "model_id": "e227733b97fd411fa91be941aa0826f3", "version_major": 2, "version_minor": 0 }, @@ -8999,7 +8998,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "70ed4e60b2724c27bba5e161f5d6c0e9", + "model_id": "b0de6788585a43d387ee192d3e919582", "version_major": 2, "version_minor": 0 }, @@ -9013,7 +9012,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1838ceec52264c5b9ef4bbf089932af4", + "model_id": "95f701a89b174f96a7121b1741fcb9fe", "version_major": 2, "version_minor": 0 }, @@ -9027,7 +9026,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c8ab1adbbefd432f84ccff998e3382de", + "model_id": "d138f67a0d8d44b69b94c79290ab60fa", "version_major": 2, "version_minor": 0 }, @@ -9041,7 +9040,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6e5346be07274ca9b3124ad9db4e0a6d", + "model_id": "472095f2f7de47dca63bb953593f60a9", "version_major": 2, "version_minor": 0 }, @@ -9055,7 +9054,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "626e911567f949d5bb8aa78b6b60f934", + "model_id": "d696f828b464421c95874bae379a6fa0", "version_major": 2, "version_minor": 0 }, @@ -9069,7 +9068,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f6d5ce4338784c1cbdaf100334b1407b", + "model_id": "a92efff5798b4681b9d9de929e5f6336", "version_major": 2, "version_minor": 0 }, @@ -9083,7 +9082,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c810e6fd3ceb4568ae78b53fa213914e", + "model_id": "289e5bce5f284ce99e064521ce0e05a9", "version_major": 2, "version_minor": 0 }, @@ -9097,7 +9096,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "afc2246d6e184b538ecfe056dc38f16d", + "model_id": "fdd3f827c9c34a3190aba38b1b13c21f", "version_major": 2, "version_minor": 0 }, @@ -9111,7 +9110,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "61255356db634ba984e8844968f4a5e9", + "model_id": "d99ecb21f9e54c9fb262b29adde16bd0", "version_major": 2, "version_minor": 0 }, @@ -9125,7 +9124,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "02f1a079b35a44d89dfce052a355c17a", + "model_id": "725a40f03b734c21b8b8e67b3212718f", "version_major": 2, "version_minor": 0 }, @@ -9139,7 +9138,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cb0fb5da2654482ebe196bf0f1751b7f", + "model_id": "640019ee89d047fd8725565835db0eaf", "version_major": 2, "version_minor": 0 }, @@ -9153,7 +9152,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bc33b4976a164058bceeb2cfb77eff20", + "model_id": "1580c64b5a874e6aad7a89abacd5cb60", "version_major": 2, "version_minor": 0 }, @@ -9167,7 +9166,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cba3bae12a654da39ea22a391431f2ff", + "model_id": "75eddb18a4c546b1a364977b91a38001", "version_major": 2, "version_minor": 0 }, @@ -9181,7 +9180,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "69f0c0bde038485e8c49934eb6ea819d", + "model_id": "96302a61558d40549b7802f4c44263eb", "version_major": 2, "version_minor": 0 }, @@ -9195,7 +9194,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac8fff761b724c6cb58569db5feeeaa5", + "model_id": "fb7dd989673a4223b66345ef77406828", "version_major": 2, "version_minor": 0 }, @@ -9209,7 +9208,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d0cdf39392d24750901d79aa4bef1a76", + "model_id": "6e74c6d1b7c64e4596a655a0fbaf1bfb", "version_major": 2, "version_minor": 0 }, @@ -9223,7 +9222,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a0d550efbba47d88357781f7b68e073", + "model_id": "d716d0b7820d475ca7653959b52d5450", "version_major": 2, "version_minor": 0 }, @@ -9237,7 +9236,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "286d953141b24199a4253f9fc85b6f82", + "model_id": "137da5f57ba84efdb51aff612b72db01", "version_major": 2, "version_minor": 0 }, @@ -9251,7 +9250,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "67cf98d2686948a6b3bd39efb55b3ef4", + "model_id": "bd227089abe34ebda36b2d18df87a86a", "version_major": 2, "version_minor": 0 }, @@ -9265,7 +9264,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "608086150668499e85ab742d06ea4ebd", + "model_id": "044b5721d12d4dadbc68f2e1ef6db71a", "version_major": 2, "version_minor": 0 }, @@ -9279,7 +9278,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "021bf402711e428b97a3e2e96dfcb49e", + "model_id": "cc86818b06a740479b3157b29a1cb18e", "version_major": 2, "version_minor": 0 }, @@ -9293,7 +9292,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e0a7bb5628c944b4b570907e91ee7248", + "model_id": "dd634e6fc883498cadcb00911c514371", "version_major": 2, "version_minor": 0 }, @@ -9307,7 +9306,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "46c080135dd7438ea38e749bbe0cc747", + "model_id": "3a52574849754ad5b349a2ef52a33722", "version_major": 2, "version_minor": 0 }, @@ -9321,7 +9320,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4ca53ff274f84b3a9c88ace97834f8c5", + "model_id": "35f1a57c0f6147ce81b036c866a17275", "version_major": 2, "version_minor": 0 }, @@ -9335,7 +9334,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "373a0410ec8444ad957a468cefb21b42", + "model_id": "3cb251ea1f6a4ae7a87fb959e362d392", "version_major": 2, "version_minor": 0 }, @@ -9349,7 +9348,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b67298bbb00b47d290167050e011d20c", + "model_id": "4e12dfd333064cf5a1fffa8ab56f67a6", "version_major": 2, "version_minor": 0 }, @@ -9363,7 +9362,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1dcdd15fe16d401cacf14f9a6f151a17", + "model_id": "73e3283065a94da9b0de1b38f87eb801", "version_major": 2, "version_minor": 0 }, @@ -9377,7 +9376,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "43883ea84b364edea1d9fe08e2db75d8", + "model_id": "d2755e57697a4a01b6514fdba5578bec", "version_major": 2, "version_minor": 0 }, @@ -9391,7 +9390,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0e6e2306c5e043cd98d2c5f41d6fba33", + "model_id": "f8f3787f489f46959322dac484b7ed93", "version_major": 2, "version_minor": 0 }, @@ -9405,7 +9404,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "31ac9e15ce594f32b36c8898e6500bc9", + "model_id": "f24824825bf644ae831c0e922e16a6c7", "version_major": 2, "version_minor": 0 }, @@ -9419,7 +9418,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6f20edbc41064e44a166abb5c43d4304", + "model_id": "9abde42fb6564285aef92cdc78ac08a4", "version_major": 2, "version_minor": 0 }, @@ -9433,7 +9432,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e6965e8c00a3426ba8206bd8ddbe62b3", + "model_id": "18ab584d1482478b9b7d34e90db79dd1", "version_major": 2, "version_minor": 0 }, @@ -9447,7 +9446,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6b0624ec65fc4ce1abc177b512766854", + "model_id": "7b030704b1b545fcad5ee48c27c6b90c", "version_major": 2, "version_minor": 0 }, @@ -9461,7 +9460,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c63fe05c857b4052a9aeaca8f092d047", + "model_id": "c47f07fcd58847b1b24f383546eb653c", "version_major": 2, "version_minor": 0 }, @@ -9475,7 +9474,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e949d28f416d47b59fd403bfea38687b", + "model_id": "f99c0e8c4b65436dafa5c2a9a5452e06", "version_major": 2, "version_minor": 0 }, @@ -9489,7 +9488,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "11797220658a4b4fbf505ffa9118a10a", + "model_id": "24f347e1c972488ab6d64bcb07757238", "version_major": 2, "version_minor": 0 }, @@ -9503,7 +9502,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7813aa85a7314b2e8df4b6db5580e21f", + "model_id": "cc6b7ff2a86c41cca3a9b423c0297b69", "version_major": 2, "version_minor": 0 }, @@ -9517,7 +9516,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2c6ad5889d0b4c69a5847eaab80d1a8e", + "model_id": "eeff56e6de874ca3bbacdf08fbcead78", "version_major": 2, "version_minor": 0 }, @@ -9531,7 +9530,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f7f8f3aceca14e2b9d6f172a3be239b3", + "model_id": "2253d5fd390a4ba1b32e8fd8639187bc", "version_major": 2, "version_minor": 0 }, @@ -9545,7 +9544,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d6910bf855634072b7b5e451ae13e1d5", + "model_id": "dc58353b22e14f9bb332e8a38b77a717", "version_major": 2, "version_minor": 0 }, @@ -9559,7 +9558,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2cb6739f919e40e4ab59d37b2eb4f4e3", + "model_id": "caac960a2e374b8fb4bfd726a3b20235", "version_major": 2, "version_minor": 0 }, @@ -9573,7 +9572,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2f828a85bd9846be86f63bfe87807643", + "model_id": "debee1aed4cc40d5b303d02eedbdfc41", "version_major": 2, "version_minor": 0 }, @@ -9587,7 +9586,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "91acc5ec90d542fd91e2fa1a60c2b472", + "model_id": "49af03e929d149319965f79777b874d7", "version_major": 2, "version_minor": 0 }, @@ -9601,7 +9600,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cc002d7048f34829bf0e153de53ec761", + "model_id": "518f016e8418473fa5c367ba4782ea70", "version_major": 2, "version_minor": 0 }, @@ -9615,7 +9614,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c18ba9a746364e29b913561d638c3657", + "model_id": "d5d84c78937e4e86809c6752d2ab9b34", "version_major": 2, "version_minor": 0 }, @@ -9629,7 +9628,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "592ebdfedc0c4e8fadfd0d8070088221", + "model_id": "d0e7561ad6254c608e8ccbe9419bf13d", "version_major": 2, "version_minor": 0 }, @@ -9643,7 +9642,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8660bae7cde74d19be0473f0e5ee22e3", + "model_id": "62bf8c5f5e884276b3423cb35af947cc", "version_major": 2, "version_minor": 0 }, @@ -9657,7 +9656,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0aa4a50bce0748dbbf9fb78d3caf595d", + "model_id": "09fbe3b2afb844e087c8b8131940f52f", "version_major": 2, "version_minor": 0 }, @@ -9671,7 +9670,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "78cc5764f0b44b9fb718eb88b75e175d", + "model_id": "248d1480e07844f5aae809b8d75f6f05", "version_major": 2, "version_minor": 0 }, @@ -9685,7 +9684,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "65233da35c0b4a20a9745a8f0a5da902", + "model_id": "b16a871746b7454fa6dbf640904fba60", "version_major": 2, "version_minor": 0 }, @@ -9699,7 +9698,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "64c05f6c181a44d29a51ac96098f7bf8", + "model_id": "3080997668ed41d9ab15a00e2e56022a", "version_major": 2, "version_minor": 0 }, @@ -9713,7 +9712,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8adea85b3c844d31befda6c9b8873c41", + "model_id": "4788ab535ba14e80a1f6847da6310b78", "version_major": 2, "version_minor": 0 }, @@ -9727,7 +9726,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3bdb272e874045f3ac0edcb0a987724b", + "model_id": "f8c7af5af17445b7a9af29dcf422e74f", "version_major": 2, "version_minor": 0 }, @@ -9741,7 +9740,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4bf7256b41f14f37b97415cef52309da", + "model_id": "c5e43276790a42fda94871a6b05d611a", "version_major": 2, "version_minor": 0 }, @@ -9755,7 +9754,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "74d54ca9ec124a879e927167eb24682f", + "model_id": "801b75b2e42742d6bd8680b776df8e35", "version_major": 2, "version_minor": 0 }, @@ -9769,7 +9768,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a523ab0c7c864663840a42f03089040b", + "model_id": "a00c72e3f166473a876f02fec7326ff9", "version_major": 2, "version_minor": 0 }, @@ -9783,7 +9782,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6fa0919d758b43ff9156627fab054600", + "model_id": "66c4ce98f5ba4957b673c1969ac1ec6b", "version_major": 2, "version_minor": 0 }, @@ -9797,7 +9796,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "80ecf1da2dd340a7aa6136aa43e7655d", + "model_id": "65829521a0704628ad14ef78741bbfc8", "version_major": 2, "version_minor": 0 }, @@ -9811,7 +9810,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4cc8c92b9e224ebeab44e4a14df7179b", + "model_id": "fab5d683ba714ad58a9aab8de4df7b4f", "version_major": 2, "version_minor": 0 }, @@ -9825,7 +9824,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c9fc2259c77a467fb5abc0f4422e8dc9", + "model_id": "e042dbbd1baa44fa9f73d06426c862ef", "version_major": 2, "version_minor": 0 }, @@ -9839,7 +9838,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9c0623c653894e629bb4bbab64c0fe0b", + "model_id": "9b23da050f7e4d928362df6059d09c58", "version_major": 2, "version_minor": 0 }, @@ -9853,7 +9852,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f30c449b45314a988d24ef7b456e4422", + "model_id": "b1f1ad4e73bf410497c46c1e3d4ef017", "version_major": 2, "version_minor": 0 }, @@ -9867,7 +9866,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "77ad20ffc8a240acb93bafb56edfa9da", + "model_id": "95951bcd163a48a083e71524e3c8c80f", "version_major": 2, "version_minor": 0 }, @@ -9881,7 +9880,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f26b8c97f5b74aeb837cf5550934dad2", + "model_id": "bfd23af6b76b4c66bb24b6c0af0151db", "version_major": 2, "version_minor": 0 }, @@ -9895,7 +9894,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1b14fe9c7b2640e4a732181e4891d04d", + "model_id": "a620323d378841ffa3fb4e8af6b7b677", "version_major": 2, "version_minor": 0 }, @@ -9909,7 +9908,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ebd93c6972e24dcc87f97210c9226ec5", + "model_id": "5c140c009d62482faf2bb955304ddfb5", "version_major": 2, "version_minor": 0 }, @@ -9923,7 +9922,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d2b14ad1b9704bd0bc3b958aa8d3122f", + "model_id": "eec96bca2672471fa10edafc612715f9", "version_major": 2, "version_minor": 0 }, @@ -9937,7 +9936,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "11760a605a8c4595a561f565072d3912", + "model_id": "13d227699d96405e9672968a117dd835", "version_major": 2, "version_minor": 0 }, @@ -9951,7 +9950,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "efc5f8437a284a4dbfbc1eababe72f5c", + "model_id": "bdf0d51cecf64b6b88b2189e61e2697d", "version_major": 2, "version_minor": 0 }, @@ -9965,7 +9964,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fca92dc2b3314004b806de3f0476982d", + "model_id": "3663a9cc5dd6492c838b8856ee3db172", "version_major": 2, "version_minor": 0 }, @@ -9979,7 +9978,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0c57faff8c244782b4c634632c79fd6d", + "model_id": "5b8a90932c5c43449baddb012d3f8d2f", "version_major": 2, "version_minor": 0 }, @@ -9993,7 +9992,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b1608716da04764a9e79b15ff3b9cd0", + "model_id": "acfe2fcbcbeb40b689a942d4a384e81e", "version_major": 2, "version_minor": 0 }, @@ -10007,7 +10006,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "34b6076acc7c46cd85e0580ed62051f7", + "model_id": "a41e9df7b5be41f680c2486bb036eac0", "version_major": 2, "version_minor": 0 }, @@ -10021,7 +10020,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "be9d5f1a1fc1411bac32b804ab4a55c6", + "model_id": "70cfd7e68ad546fca7b8b4fcb5fe112a", "version_major": 2, "version_minor": 0 }, @@ -10035,7 +10034,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "15ba55fa813d429d8c096aeab77dac6d", + "model_id": "cc6d28f7b6674cc78526f2a04a232f87", "version_major": 2, "version_minor": 0 }, @@ -10049,7 +10048,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "82981797edd24e66a9c7f595777993b3", + "model_id": "ae26f55dfe5d44cd9fae433fb8a3ed46", "version_major": 2, "version_minor": 0 }, @@ -10063,7 +10062,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f497013dca4544cf9027f8c57b9d3862", + "model_id": "b61738f2417244b6b7df1ebb3b3f24d7", "version_major": 2, "version_minor": 0 }, @@ -10077,7 +10076,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "18ae423604124c14ad1c546040258830", + "model_id": "fdbf1b51bbd54898b58a2de9f695d5ba", "version_major": 2, "version_minor": 0 }, @@ -10091,7 +10090,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bbcf1925befb44f68ae7c057b87d47fc", + "model_id": "d438be1b459e4f0f90e1a26704baa0f1", "version_major": 2, "version_minor": 0 }, @@ -10105,7 +10104,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3390fcad4b5a4ed7b0962a3c40c08c6c", + "model_id": "164a559d88cd48c58bb43f99cf5819fb", "version_major": 2, "version_minor": 0 }, @@ -10119,7 +10118,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b2672dda8714e74b34df403f44958fb", + "model_id": "e142ec45c48e400bbf4cf7dbc8b94e39", "version_major": 2, "version_minor": 0 }, @@ -10133,7 +10132,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8f19a36be4da4760be75497c7125b8f0", + "model_id": "b98239d615c44f9280cd53bf430b38ef", "version_major": 2, "version_minor": 0 }, @@ -10147,7 +10146,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4a2a1c7d9d20421e9e92870a6a2e9660", + "model_id": "ee3012ec548c4468ab19394fcc61dfe1", "version_major": 2, "version_minor": 0 }, @@ -10161,7 +10160,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f0286c8429b84e2ab0c163e1b4eef1d0", + "model_id": "59abff92475945148512c124b31620ae", "version_major": 2, "version_minor": 0 }, @@ -10175,7 +10174,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dd58ef8e610842f2b301171926de7182", + "model_id": "10742df4535742c8acdcdbea8d8d6a02", "version_major": 2, "version_minor": 0 }, @@ -10189,7 +10188,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "539ca6d6148543548ecd3dcf70ed7c11", + "model_id": "7e3d33d2a59f4e2c8413b43cfaee41d1", "version_major": 2, "version_minor": 0 }, @@ -10203,7 +10202,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "06e7f0d966004f43b3be4b20ccedee56", + "model_id": "1fd03ae4594b4574a55f06d248d8b61a", "version_major": 2, "version_minor": 0 }, @@ -10217,7 +10216,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fda62ae60c6c4677a6ea5636f934dc92", + "model_id": "976c6fee189c41b4b5445895fb180c8d", "version_major": 2, "version_minor": 0 }, @@ -10231,7 +10230,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3baf1bb80b444609bbfdea5378d88b16", + "model_id": "198e1fa4f5124895bc0ee188984ea726", "version_major": 2, "version_minor": 0 }, @@ -10245,7 +10244,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f668c7e605ea48fb8c8ccc3ce9942537", + "model_id": "c78ca1847595417aa71358a1c1b1a4b0", "version_major": 2, "version_minor": 0 }, @@ -10259,7 +10258,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8ab646cb72bc4395ab928bd90d12876f", + "model_id": "af7a5a5a341348f2a0be2f3e77656549", "version_major": 2, "version_minor": 0 }, @@ -10273,7 +10272,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "81a2b942d66144f394a057e50cf01f7c", + "model_id": "b5ab2cc2a47b42828c7a6780a6db2e00", "version_major": 2, "version_minor": 0 }, @@ -10287,7 +10286,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a2c733eb3a2f40e0b80254de8610baa9", + "model_id": "f972c01912c545948b56ea640af2c5b0", "version_major": 2, "version_minor": 0 }, @@ -10301,7 +10300,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d3cee07e2b804c9f84e6d1c6985f6eb6", + "model_id": "213b3d4ee66d42e1b57a82d35b720112", "version_major": 2, "version_minor": 0 }, @@ -10315,7 +10314,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e7a1d5c5a3d2447b99b09d54782e92e4", + "model_id": "ddfc7dcdd1c94636929318d51a61e048", "version_major": 2, "version_minor": 0 }, @@ -10329,7 +10328,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2d6dff1e8e8d492c8020df32915020f6", + "model_id": "3fdce7be7f074ec589421caa0319862f", "version_major": 2, "version_minor": 0 }, @@ -10343,7 +10342,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1c58bb14675c42759eb18385d3f2c364", + "model_id": "180334cb0f4c4cc6a5f2eeedc55a986b", "version_major": 2, "version_minor": 0 }, @@ -10357,7 +10356,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6e846537940449eba9b3df06d6908d2c", + "model_id": "d2e9e0572d4c48bd9dcf25960be64cde", "version_major": 2, "version_minor": 0 }, @@ -10371,7 +10370,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eaabc8c0805b4ce38620516da7b5dd2f", + "model_id": "0e26b9ff0a7642e0b8400f0a937eeb30", "version_major": 2, "version_minor": 0 }, @@ -10385,7 +10384,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0b54cea4ca634312ac62cef9554c2abd", + "model_id": "bf9537d5986b4aacad134c66a4242b0e", "version_major": 2, "version_minor": 0 }, @@ -10399,7 +10398,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7d538586b87440b89506a951ea660c85", + "model_id": "e4ab38c6e45d4628b56bbe5dac9458d7", "version_major": 2, "version_minor": 0 }, @@ -10413,7 +10412,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "06ff3bed3b2c44368623e1fe4d16c42d", + "model_id": "18e800771f6f439bb9f15de7edaf8274", "version_major": 2, "version_minor": 0 }, @@ -10427,7 +10426,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6034c4e13c63492399314dd1d0e86900", + "model_id": "ee30326da017481f94e780628f0ec74d", "version_major": 2, "version_minor": 0 }, @@ -10441,7 +10440,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1d2a3ec474f84d7dbd2b1d0811b5679a", + "model_id": "ebaaaf47fecb406facb8804280ed88e2", "version_major": 2, "version_minor": 0 }, @@ -10455,7 +10454,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eedba0809dc948c6b8338bde323e79a5", + "model_id": "ac274611a2704a2ab1468b205859dfc1", "version_major": 2, "version_minor": 0 }, @@ -10469,7 +10468,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b476ab3908ea4301a13f5cc23ff44fa2", + "model_id": "41be5520b1964125872189d604272dc4", "version_major": 2, "version_minor": 0 }, @@ -10483,7 +10482,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "aff3135a532a4ee88010da77f492cf4d", + "model_id": "666d79b38fcd49c79cac956f8b2f7677", "version_major": 2, "version_minor": 0 }, @@ -10497,7 +10496,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ffe38591306e4351a4228d7f17d91a24", + "model_id": "2253e50224c642a7a56858b1c135213e", "version_major": 2, "version_minor": 0 }, @@ -10511,7 +10510,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2a1a7c1af8fa4e98b60723cbc3766c0b", + "model_id": "f01094a315c4420e9aba161bd526a1e0", "version_major": 2, "version_minor": 0 }, @@ -10525,7 +10524,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fb73984ee683427195a75edb8a65dfd1", + "model_id": "652fb20eb89245a8ac16173eeb553633", "version_major": 2, "version_minor": 0 }, @@ -10539,7 +10538,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7fed65b24c3e4cccb75b5e190e192e99", + "model_id": "92757d397a9944e9bf89a627d34d670a", "version_major": 2, "version_minor": 0 }, @@ -10553,7 +10552,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "40c7a7a509f94bbdb99ff06868239a58", + "model_id": "d4b73d5c186347d9a05f2486c5baafee", "version_major": 2, "version_minor": 0 }, @@ -10567,7 +10566,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "043b17d4db7c4a8c92529fac3371ae87", + "model_id": "4daeb823d61246a0aa572689807c117d", "version_major": 2, "version_minor": 0 }, @@ -10581,7 +10580,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9340de6a00d54d7e8efb980fb7a63b88", + "model_id": "4da85fb13a6241efa01e2e144209cd5f", "version_major": 2, "version_minor": 0 }, @@ -10595,7 +10594,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "69596ddf1da94aed9d62d104734a11ad", + "model_id": "6f4c663a0b6449828fcacf1d77b0fad1", "version_major": 2, "version_minor": 0 }, @@ -10609,7 +10608,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "83228734f253473ab9b36daa64130a36", + "model_id": "ada51e9d1ee84f7c8d7cda87a9fed382", "version_major": 2, "version_minor": 0 }, @@ -10623,7 +10622,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9fce07d5848d49b9acbd80959f48d055", + "model_id": "035517fa34c84edb8520548a6a6f5f2f", "version_major": 2, "version_minor": 0 }, @@ -10637,7 +10636,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "23ac188be0de4418997c43a01c865381", + "model_id": "ddc0d23180304537a5d5a408daed4159", "version_major": 2, "version_minor": 0 }, @@ -10651,7 +10650,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "81a145df7fda42b08319ec1963375f71", + "model_id": "c4c0bccb88c34e5da862f7bf33948498", "version_major": 2, "version_minor": 0 }, @@ -10665,7 +10664,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a006b6be707d4cf49143c0588abefcae", + "model_id": "27c5c425ce414190aae3c840ca8df1e0", "version_major": 2, "version_minor": 0 }, @@ -10686,7 +10685,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3a233b74289744058b15d52d3362d9ef", + "model_id": "23414392e3a74a4b8dff5fe1a30f6eec", "version_major": 2, "version_minor": 0 }, @@ -10745,7 +10744,7 @@ }, { "cell_type": "markdown", - "id": "3c78b138", + "id": "fc55d4f9", "metadata": {}, "source": [ "We could also fit a model without the `nn.RNN()` layer by just\n", @@ -10762,7 +10761,7 @@ { "cell_type": "code", "execution_count": 109, - "id": "5586a609", + "id": "c60876d7", "metadata": {}, "outputs": [], "source": [ @@ -10777,7 +10776,7 @@ }, { "cell_type": "markdown", - "id": "c1c361b4", + "id": "c7fc165f", "metadata": {}, "source": [ "Creating a data module follows a familiar pattern." @@ -10786,7 +10785,7 @@ { "cell_type": "code", "execution_count": 110, - "id": "b72ecb13", + "id": "282f7e1c", "metadata": {}, "outputs": [], "source": [ @@ -10799,7 +10798,7 @@ }, { "cell_type": "markdown", - "id": "32016e95", + "id": "310271e1", "metadata": {}, "source": [ "We build a `NonLinearARModel()` that takes as input the 20 features and a hidden layer with 32 units. The remaining steps are familiar." @@ -10808,7 +10807,7 @@ { "cell_type": "code", "execution_count": 111, - "id": "595df68b", + "id": "038fea74", "metadata": {}, "outputs": [], "source": [ @@ -10827,7 +10826,7 @@ { "cell_type": "code", "execution_count": 112, - "id": "e8142533", + "id": "68d309b2", "metadata": {}, "outputs": [], "source": [ @@ -10841,7 +10840,7 @@ }, { "cell_type": "markdown", - "id": "86d4e139", + "id": "998d317c", "metadata": {}, "source": [ "We continue with the usual training steps, fit the model,\n", @@ -10851,7 +10850,7 @@ { "cell_type": "code", "execution_count": 113, - "id": "47bdb236", + "id": "9fc113a1", "metadata": { "lines_to_next_cell": 0 }, @@ -10893,7 +10892,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f7abedb50db348d49e14abb6ac8ee82a", + "model_id": "6327380ca56a49628cb311d7382fe96d", "version_major": 2, "version_minor": 0 }, @@ -11194,7 +11193,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0ae34f21f0364f47ae24e5b0a0758062", + "model_id": "e9c0c0840a4e4fe3bd9aa771a035ec2a", "version_major": 2, "version_minor": 0 }, @@ -11251,7 +11250,7 @@ }, { "cell_type": "markdown", - "id": "51f435d5", + "id": "66cd716d", "metadata": {}, "source": [ " \n", @@ -11263,8 +11262,8 @@ "metadata": { "jupytext": { "cell_metadata_filter": "-all", - "formats": "ipynb,Rmd", - "main_language": "python" + "main_language": "python", + "notebook_metadata_filter": "-all" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", From e68a22ae227318cf8c4020886723cbbeb3a10276 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 20:28:19 -0700 Subject: [PATCH 09/19] update README for v2.1 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 18439e0..42a27d3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ISLP_labs -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/intro-stat-learning/ISLP_labs/v2_devel) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2.1/gh/intro-stat-learning/ISLP_labs/v2_devel) Up-to-date version of labs for ISLP. @@ -12,7 +12,7 @@ intent is that building a conda environment with To install the current version of the requirements run ``` -pip install -r https://raw.githubusercontent.com/intro-stat-learning/ISLP_labs/v2_devel/requirements.txt; +pip install -r https://raw.githubusercontent.com/intro-stat-learning/ISLP_labs/v2.1/requirements.txt; ``` The labs can now be run from this directory: From 9ee9bf3f57fc399e78a37487b58d7415fe63f015 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 20:29:59 -0700 Subject: [PATCH 10/19] update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 42a27d3..e3d1f97 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ISLP_labs -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2.1/gh/intro-stat-learning/ISLP_labs/v2_devel) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/intro-stat-learning/ISLP_labs/v2.1) Up-to-date version of labs for ISLP. From 08566b1c4e12fb2e7684b8bf0f1728848d833742 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 20:38:18 -0700 Subject: [PATCH 11/19] remove workflows: notebooks can be tested in ISLP --- .github/workflows/test_Ch02.yml | 40 --------------------------------- .github/workflows/test_Ch03.yml | 40 --------------------------------- .github/workflows/test_Ch04.yml | 40 --------------------------------- .github/workflows/test_Ch05.yml | 40 --------------------------------- .github/workflows/test_Ch06.yml | 40 --------------------------------- .github/workflows/test_Ch07.yml | 40 --------------------------------- .github/workflows/test_Ch08.yml | 40 --------------------------------- .github/workflows/test_Ch09.yml | 40 --------------------------------- .github/workflows/test_Ch10.yml | 40 --------------------------------- .github/workflows/test_Ch11.yml | 40 --------------------------------- .github/workflows/test_Ch12.yml | 40 --------------------------------- .github/workflows/test_Ch13.yml | 40 --------------------------------- 12 files changed, 480 deletions(-) delete mode 100644 .github/workflows/test_Ch02.yml delete mode 100644 .github/workflows/test_Ch03.yml delete mode 100644 .github/workflows/test_Ch04.yml delete mode 100644 .github/workflows/test_Ch05.yml delete mode 100644 .github/workflows/test_Ch06.yml delete mode 100644 .github/workflows/test_Ch07.yml delete mode 100644 .github/workflows/test_Ch08.yml delete mode 100644 .github/workflows/test_Ch09.yml delete mode 100644 .github/workflows/test_Ch10.yml delete mode 100644 .github/workflows/test_Ch11.yml delete mode 100644 .github/workflows/test_Ch12.yml delete mode 100644 .github/workflows/test_Ch13.yml diff --git a/.github/workflows/test_Ch02.yml b/.github/workflows/test_Ch02.yml deleted file mode 100644 index dfcce44..0000000 --- a/.github/workflows/test_Ch02.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch02 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch02 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch02-statlearn-lab.ipynb --allow-errors - - diff --git a/.github/workflows/test_Ch03.yml b/.github/workflows/test_Ch03.yml deleted file mode 100644 index d4022ce..0000000 --- a/.github/workflows/test_Ch03.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch03 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch03 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch03*ipynb - - diff --git a/.github/workflows/test_Ch04.yml b/.github/workflows/test_Ch04.yml deleted file mode 100644 index b148d82..0000000 --- a/.github/workflows/test_Ch04.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch04 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch04 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch04*ipynb - - diff --git a/.github/workflows/test_Ch05.yml b/.github/workflows/test_Ch05.yml deleted file mode 100644 index 2b01551..0000000 --- a/.github/workflows/test_Ch05.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch05 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch05 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch05*ipynb - - diff --git a/.github/workflows/test_Ch06.yml b/.github/workflows/test_Ch06.yml deleted file mode 100644 index 3ed430c..0000000 --- a/.github/workflows/test_Ch06.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch06 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch06 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch06*ipynb - - diff --git a/.github/workflows/test_Ch07.yml b/.github/workflows/test_Ch07.yml deleted file mode 100644 index d87d848..0000000 --- a/.github/workflows/test_Ch07.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch07 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch07 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch07*ipynb - - diff --git a/.github/workflows/test_Ch08.yml b/.github/workflows/test_Ch08.yml deleted file mode 100644 index 2b7e77b..0000000 --- a/.github/workflows/test_Ch08.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch08 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch08 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch08*ipynb - - diff --git a/.github/workflows/test_Ch09.yml b/.github/workflows/test_Ch09.yml deleted file mode 100644 index e88a6ff..0000000 --- a/.github/workflows/test_Ch09.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch09 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch09 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch09*ipynb - - diff --git a/.github/workflows/test_Ch10.yml b/.github/workflows/test_Ch10.yml deleted file mode 100644 index ce97c12..0000000 --- a/.github/workflows/test_Ch10.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch10 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch10 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch10*ipynb - - diff --git a/.github/workflows/test_Ch11.yml b/.github/workflows/test_Ch11.yml deleted file mode 100644 index a2a4ee2..0000000 --- a/.github/workflows/test_Ch11.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch11 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch11 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch11*ipynb - - diff --git a/.github/workflows/test_Ch12.yml b/.github/workflows/test_Ch12.yml deleted file mode 100644 index f231523..0000000 --- a/.github/workflows/test_Ch12.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch12 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch12 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch12*ipynb - - diff --git a/.github/workflows/test_Ch13.yml b/.github/workflows/test_Ch13.yml deleted file mode 100644 index 77ff83d..0000000 --- a/.github/workflows/test_Ch13.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Building Ch13 notebook - -# Controls when the workflow will run -on: - workflow_dispatch: - environment: - description: 'Environment to run tests against' - type: environment - required: true - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 - with: - python-version: '3.10' - cache: 'pip' - - # Install - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install ISLP jupyter - - # Runs a set of commands using the runners shell - - name: Build notebook for Ch13 (some errors, not really a test) - run: | - jupyter nbconvert --execute --inplace Ch13*ipynb - - From f69a1a7446ec492ea5ce55c44a772b433c45ed1e Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Mon, 21 Aug 2023 13:39:49 -0700 Subject: [PATCH 12/19] update README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index e3d1f97..1e7607f 100644 --- a/README.md +++ b/README.md @@ -20,4 +20,3 @@ The labs can now be run from this directory: ``` jupyter lab Ch02-statlearning-lab.ipynb ``` - From fdaa029670a491bd4c5fe36f46de09726b4a6983 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Mon, 21 Aug 2023 13:41:12 -0700 Subject: [PATCH 13/19] small commit to test triggering a docker build --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e7607f..b6bf9a3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Up-to-date version of labs for ISLP. This repo will track labs for ISLP as their source code changes. The -intent is that building a conda environment with +intent is that building a conda environment with `requirements.txt` will reproduce the results in this repo. To install the current version of the requirements run From 30d7f7d2753c0d235b3db842f57e38ce9f9f6eb4 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Mon, 21 Aug 2023 13:46:56 -0700 Subject: [PATCH 14/19] another small change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b6bf9a3..1e7607f 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Up-to-date version of labs for ISLP. This repo will track labs for ISLP as their source code changes. The -intent is that building a conda environment with +intent is that building a conda environment with `requirements.txt` will reproduce the results in this repo. To install the current version of the requirements run From c3383cfe18f306971ebbc9f84e68276674772e8c Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Mon, 21 Aug 2023 13:57:54 -0700 Subject: [PATCH 15/19] small change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e7607f..91998ae 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Up-to-date version of labs for ISLP. This repo will track labs for ISLP as their source code changes. The intent is that building a conda environment with -`requirements.txt` will reproduce the results in this repo. +`requirements.txt` will reproduce the results in this repo. To install the current version of the requirements run From bec0492350831238078ec416e81ebe11ab854941 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Mon, 21 Aug 2023 14:10:51 -0700 Subject: [PATCH 16/19] triggering again --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 91998ae..1e7607f 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Up-to-date version of labs for ISLP. This repo will track labs for ISLP as their source code changes. The intent is that building a conda environment with -`requirements.txt` will reproduce the results in this repo. +`requirements.txt` will reproduce the results in this repo. To install the current version of the requirements run From 138a72b1a2434ac3a20939bf8c19f3e2a621a405 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Mon, 21 Aug 2023 14:11:48 -0700 Subject: [PATCH 17/19] triggering again --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e7607f..34e6dde 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/intro-stat-learning/ISLP_labs/v2.1) -Up-to-date version of labs for ISLP. +Up-to-date version of labs for ISLP. This repo will track labs for ISLP as their source code changes. The intent is that building a conda environment with From bc7b3dc997b3a59270a8dec47e454e305b7e8bff Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Tue, 22 Aug 2023 00:22:07 -0700 Subject: [PATCH 18/19] stripped output --- Ch02-statlearn-lab.ipynb | 798 +++++----------------------------- Ch03-linreg-lab.ipynb | 252 ++--------- Ch04-classification-lab.ipynb | 553 ++++------------------- Ch05-resample-lab.ipynb | 182 ++------ Ch06-varselect-lab.ipynb | 399 +++-------------- Ch07-nonlin-lab.ipynb | 343 +++------------ Ch08-baggboost-lab.ipynb | 245 ++--------- Ch09-svm-lab.ipynb | 238 ++-------- Ch10-deeplearning-lab.ipynb | 284 +++++++++--- Ch11-surv-lab.ipynb | 245 ++--------- Ch12-unsup-lab.ipynb | 406 +++-------------- Ch13-multiple-lab.ipynb | 217 ++------- 12 files changed, 781 insertions(+), 3381 deletions(-) diff --git a/Ch02-statlearn-lab.ipynb b/Ch02-statlearn-lab.ipynb index f137f1c..2cc3313 100644 --- a/Ch02-statlearn-lab.ipynb +++ b/Ch02-statlearn-lab.ipynb @@ -101,12 +101,7 @@ "execution_count": 1, "id": "9e8aa21f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.654555Z", - "iopub.status.busy": "2023-08-21T03:36:04.654242Z", - "iopub.status.idle": "2023-08-21T03:36:04.664431Z", - "shell.execute_reply": "2023-08-21T03:36:04.663990Z" - } + "execution": {} }, "outputs": [ { @@ -134,12 +129,7 @@ "execution_count": 2, "id": "d62ec119", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.666908Z", - "iopub.status.busy": "2023-08-21T03:36:04.666727Z", - "iopub.status.idle": "2023-08-21T03:36:04.693658Z", - "shell.execute_reply": "2023-08-21T03:36:04.693389Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -159,12 +149,7 @@ "execution_count": 3, "id": "c64e9f4d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.695168Z", - "iopub.status.busy": "2023-08-21T03:36:04.695071Z", - "iopub.status.idle": "2023-08-21T03:36:04.697996Z", - "shell.execute_reply": "2023-08-21T03:36:04.697736Z" - } + "execution": {} }, "outputs": [ { @@ -199,12 +184,7 @@ "execution_count": 4, "id": "9abccc1f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.699502Z", - "iopub.status.busy": "2023-08-21T03:36:04.699420Z", - "iopub.status.idle": "2023-08-21T03:36:04.701419Z", - "shell.execute_reply": "2023-08-21T03:36:04.701183Z" - } + "execution": {} }, "outputs": [ { @@ -248,12 +228,7 @@ "execution_count": 5, "id": "802ca33c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.702877Z", - "iopub.status.busy": "2023-08-21T03:36:04.702786Z", - "iopub.status.idle": "2023-08-21T03:36:04.704849Z", - "shell.execute_reply": "2023-08-21T03:36:04.704596Z" - } + "execution": {} }, "outputs": [ { @@ -289,12 +264,7 @@ "execution_count": 6, "id": "a8c72744", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.706312Z", - "iopub.status.busy": "2023-08-21T03:36:04.706207Z", - "iopub.status.idle": "2023-08-21T03:36:04.708359Z", - "shell.execute_reply": "2023-08-21T03:36:04.708116Z" - } + "execution": {} }, "outputs": [ { @@ -363,12 +333,7 @@ "execution_count": 7, "id": "f1c7d1db", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.709873Z", - "iopub.status.busy": "2023-08-21T03:36:04.709781Z", - "iopub.status.idle": "2023-08-21T03:36:04.767425Z", - "shell.execute_reply": "2023-08-21T03:36:04.766663Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -399,12 +364,7 @@ "execution_count": 8, "id": "e2ea2bfd", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.772015Z", - "iopub.status.busy": "2023-08-21T03:36:04.771631Z", - "iopub.status.idle": "2023-08-21T03:36:04.777911Z", - "shell.execute_reply": "2023-08-21T03:36:04.777302Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -438,12 +398,7 @@ "execution_count": 9, "id": "59fbf9fd", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.781791Z", - "iopub.status.busy": "2023-08-21T03:36:04.781430Z", - "iopub.status.idle": "2023-08-21T03:36:04.788256Z", - "shell.execute_reply": "2023-08-21T03:36:04.787586Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -485,12 +440,7 @@ "execution_count": 10, "id": "2279437e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.792995Z", - "iopub.status.busy": "2023-08-21T03:36:04.792549Z", - "iopub.status.idle": "2023-08-21T03:36:04.800387Z", - "shell.execute_reply": "2023-08-21T03:36:04.799738Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -536,12 +486,7 @@ "execution_count": 11, "id": "75bf1b1e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.804503Z", - "iopub.status.busy": "2023-08-21T03:36:04.804231Z", - "iopub.status.idle": "2023-08-21T03:36:04.810136Z", - "shell.execute_reply": "2023-08-21T03:36:04.809353Z" - } + "execution": {} }, "outputs": [ { @@ -574,12 +519,7 @@ "execution_count": 12, "id": "58292240", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.813981Z", - "iopub.status.busy": "2023-08-21T03:36:04.813417Z", - "iopub.status.idle": "2023-08-21T03:36:04.819511Z", - "shell.execute_reply": "2023-08-21T03:36:04.818936Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -614,12 +554,7 @@ "execution_count": 13, "id": "fc5fff57", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.823519Z", - "iopub.status.busy": "2023-08-21T03:36:04.823222Z", - "iopub.status.idle": "2023-08-21T03:36:04.829861Z", - "shell.execute_reply": "2023-08-21T03:36:04.829223Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -653,12 +588,7 @@ "execution_count": 14, "id": "762562a6", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.833747Z", - "iopub.status.busy": "2023-08-21T03:36:04.833468Z", - "iopub.status.idle": "2023-08-21T03:36:04.838421Z", - "shell.execute_reply": "2023-08-21T03:36:04.837747Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -679,12 +609,7 @@ "execution_count": 15, "id": "66d2b82a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.842127Z", - "iopub.status.busy": "2023-08-21T03:36:04.841891Z", - "iopub.status.idle": "2023-08-21T03:36:04.848885Z", - "shell.execute_reply": "2023-08-21T03:36:04.848125Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -717,12 +642,7 @@ "execution_count": 16, "id": "89881402", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.853039Z", - "iopub.status.busy": "2023-08-21T03:36:04.852643Z", - "iopub.status.idle": "2023-08-21T03:36:04.859072Z", - "shell.execute_reply": "2023-08-21T03:36:04.858149Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -760,12 +680,7 @@ "execution_count": 17, "id": "0572d3f6", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.863011Z", - "iopub.status.busy": "2023-08-21T03:36:04.862610Z", - "iopub.status.idle": "2023-08-21T03:36:04.869722Z", - "shell.execute_reply": "2023-08-21T03:36:04.869078Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -798,12 +713,7 @@ "execution_count": 18, "id": "33b10a6f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.874228Z", - "iopub.status.busy": "2023-08-21T03:36:04.873632Z", - "iopub.status.idle": "2023-08-21T03:36:04.879222Z", - "shell.execute_reply": "2023-08-21T03:36:04.878606Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -844,12 +754,7 @@ "execution_count": 19, "id": "a32716db", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.882833Z", - "iopub.status.busy": "2023-08-21T03:36:04.882354Z", - "iopub.status.idle": "2023-08-21T03:36:04.887384Z", - "shell.execute_reply": "2023-08-21T03:36:04.886127Z" - } + "execution": {} }, "outputs": [ { @@ -895,12 +800,7 @@ "execution_count": 20, "id": "3db6e1cf", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.890861Z", - "iopub.status.busy": "2023-08-21T03:36:04.890532Z", - "iopub.status.idle": "2023-08-21T03:36:04.894815Z", - "shell.execute_reply": "2023-08-21T03:36:04.894149Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -933,12 +833,7 @@ "execution_count": 21, "id": "e15c753f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.898049Z", - "iopub.status.busy": "2023-08-21T03:36:04.897796Z", - "iopub.status.idle": "2023-08-21T03:36:04.902137Z", - "shell.execute_reply": "2023-08-21T03:36:04.901538Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -974,12 +869,7 @@ "execution_count": 22, "id": "91c6e7d8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.905358Z", - "iopub.status.busy": "2023-08-21T03:36:04.905148Z", - "iopub.status.idle": "2023-08-21T03:36:04.910143Z", - "shell.execute_reply": "2023-08-21T03:36:04.909500Z" - } + "execution": {} }, "outputs": [ { @@ -1032,12 +922,7 @@ "execution_count": 23, "id": "59d95dce", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:04.913411Z", - "iopub.status.busy": "2023-08-21T03:36:04.912985Z", - "iopub.status.idle": "2023-08-21T03:36:05.037046Z", - "shell.execute_reply": "2023-08-21T03:36:05.036755Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1072,12 +957,7 @@ "execution_count": 24, "id": "a6fde9af", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.038645Z", - "iopub.status.busy": "2023-08-21T03:36:05.038536Z", - "iopub.status.idle": "2023-08-21T03:36:05.040823Z", - "shell.execute_reply": "2023-08-21T03:36:05.040589Z" - } + "execution": {} }, "outputs": [ { @@ -1116,12 +996,7 @@ "execution_count": 25, "id": "fadb6b45", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.042203Z", - "iopub.status.busy": "2023-08-21T03:36:05.042112Z", - "iopub.status.idle": "2023-08-21T03:36:05.044185Z", - "shell.execute_reply": "2023-08-21T03:36:05.043940Z" - } + "execution": {} }, "outputs": [ { @@ -1153,12 +1028,7 @@ "execution_count": 26, "id": "fda3134b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.045709Z", - "iopub.status.busy": "2023-08-21T03:36:05.045601Z", - "iopub.status.idle": "2023-08-21T03:36:05.047665Z", - "shell.execute_reply": "2023-08-21T03:36:05.047412Z" - } + "execution": {} }, "outputs": [ { @@ -1189,12 +1059,7 @@ "execution_count": 27, "id": "52eb335b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.049290Z", - "iopub.status.busy": "2023-08-21T03:36:05.049191Z", - "iopub.status.idle": "2023-08-21T03:36:05.051249Z", - "shell.execute_reply": "2023-08-21T03:36:05.051004Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1236,12 +1101,7 @@ "execution_count": 28, "id": "ac5e9d29", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.052622Z", - "iopub.status.busy": "2023-08-21T03:36:05.052529Z", - "iopub.status.idle": "2023-08-21T03:36:05.054818Z", - "shell.execute_reply": "2023-08-21T03:36:05.054569Z" - } + "execution": {} }, "outputs": [ { @@ -1282,12 +1142,7 @@ "execution_count": 29, "id": "55fa905e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.056219Z", - "iopub.status.busy": "2023-08-21T03:36:05.056124Z", - "iopub.status.idle": "2023-08-21T03:36:05.057790Z", - "shell.execute_reply": "2023-08-21T03:36:05.057543Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1309,12 +1164,7 @@ "execution_count": 30, "id": "fde0dc19", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.059163Z", - "iopub.status.busy": "2023-08-21T03:36:05.059091Z", - "iopub.status.idle": "2023-08-21T03:36:05.061351Z", - "shell.execute_reply": "2023-08-21T03:36:05.061105Z" - } + "execution": {} }, "outputs": [ { @@ -1349,12 +1199,7 @@ "execution_count": 31, "id": "5099cf54", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.062721Z", - "iopub.status.busy": "2023-08-21T03:36:05.062630Z", - "iopub.status.idle": "2023-08-21T03:36:05.064539Z", - "shell.execute_reply": "2023-08-21T03:36:05.064300Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1400,12 +1245,7 @@ "execution_count": 32, "id": "9d8074e5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.065999Z", - "iopub.status.busy": "2023-08-21T03:36:05.065912Z", - "iopub.status.idle": "2023-08-21T03:36:05.068039Z", - "shell.execute_reply": "2023-08-21T03:36:05.067820Z" - } + "execution": {} }, "outputs": [ { @@ -1446,12 +1286,7 @@ "execution_count": 33, "id": "e98472df", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.069438Z", - "iopub.status.busy": "2023-08-21T03:36:05.069347Z", - "iopub.status.idle": "2023-08-21T03:36:05.071564Z", - "shell.execute_reply": "2023-08-21T03:36:05.071324Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1485,12 +1320,7 @@ "execution_count": 34, "id": "8c2784fd", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.072967Z", - "iopub.status.busy": "2023-08-21T03:36:05.072873Z", - "iopub.status.idle": "2023-08-21T03:36:05.075053Z", - "shell.execute_reply": "2023-08-21T03:36:05.074833Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1523,12 +1353,7 @@ "execution_count": 35, "id": "7e7205f2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.076473Z", - "iopub.status.busy": "2023-08-21T03:36:05.076373Z", - "iopub.status.idle": "2023-08-21T03:36:05.078474Z", - "shell.execute_reply": "2023-08-21T03:36:05.078224Z" - } + "execution": {} }, "outputs": [ { @@ -1560,12 +1385,7 @@ "execution_count": 36, "id": "fce06849", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.079856Z", - "iopub.status.busy": "2023-08-21T03:36:05.079755Z", - "iopub.status.idle": "2023-08-21T03:36:05.081961Z", - "shell.execute_reply": "2023-08-21T03:36:05.081709Z" - } + "execution": {} }, "outputs": [ { @@ -1606,12 +1426,7 @@ "execution_count": 37, "id": "1403ff7a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.083361Z", - "iopub.status.busy": "2023-08-21T03:36:05.083273Z", - "iopub.status.idle": "2023-08-21T03:36:05.085366Z", - "shell.execute_reply": "2023-08-21T03:36:05.085112Z" - } + "execution": {} }, "outputs": [ { @@ -1642,12 +1457,7 @@ "execution_count": 38, "id": "7e9255ba", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.086730Z", - "iopub.status.busy": "2023-08-21T03:36:05.086636Z", - "iopub.status.idle": "2023-08-21T03:36:05.088698Z", - "shell.execute_reply": "2023-08-21T03:36:05.088470Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1712,12 +1522,7 @@ "execution_count": 39, "id": "8236e5f7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.090105Z", - "iopub.status.busy": "2023-08-21T03:36:05.090015Z", - "iopub.status.idle": "2023-08-21T03:36:05.390499Z", - "shell.execute_reply": "2023-08-21T03:36:05.390143Z" - } + "execution": {} }, "outputs": [ { @@ -1754,12 +1559,7 @@ "execution_count": 40, "id": "ddc9ed4f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.392242Z", - "iopub.status.busy": "2023-08-21T03:36:05.392127Z", - "iopub.status.idle": "2023-08-21T03:36:05.464507Z", - "shell.execute_reply": "2023-08-21T03:36:05.464208Z" - } + "execution": {} }, "outputs": [ { @@ -1792,12 +1592,7 @@ "execution_count": 41, "id": "c64ed600", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.466274Z", - "iopub.status.busy": "2023-08-21T03:36:05.466157Z", - "iopub.status.idle": "2023-08-21T03:36:05.540801Z", - "shell.execute_reply": "2023-08-21T03:36:05.540543Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1840,12 +1635,7 @@ "execution_count": 42, "id": "bc6245e2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.542497Z", - "iopub.status.busy": "2023-08-21T03:36:05.542378Z", - "iopub.status.idle": "2023-08-21T03:36:05.621061Z", - "shell.execute_reply": "2023-08-21T03:36:05.620765Z" - } + "execution": {} }, "outputs": [ { @@ -1880,12 +1670,7 @@ "execution_count": 43, "id": "2454807b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.622738Z", - "iopub.status.busy": "2023-08-21T03:36:05.622624Z", - "iopub.status.idle": "2023-08-21T03:36:05.700853Z", - "shell.execute_reply": "2023-08-21T03:36:05.700564Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1943,12 +1728,7 @@ "execution_count": 44, "id": "1e18a793", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.702667Z", - "iopub.status.busy": "2023-08-21T03:36:05.702545Z", - "iopub.status.idle": "2023-08-21T03:36:05.797850Z", - "shell.execute_reply": "2023-08-21T03:36:05.797545Z" - } + "execution": {} }, "outputs": [ { @@ -1984,12 +1764,7 @@ "execution_count": 45, "id": "aec3f009", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.799658Z", - "iopub.status.busy": "2023-08-21T03:36:05.799529Z", - "iopub.status.idle": "2023-08-21T03:36:05.861021Z", - "shell.execute_reply": "2023-08-21T03:36:05.860749Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2038,12 +1813,7 @@ "execution_count": 46, "id": "2cbc7fd4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:05.862740Z", - "iopub.status.busy": "2023-08-21T03:36:05.862621Z", - "iopub.status.idle": "2023-08-21T03:36:06.143924Z", - "shell.execute_reply": "2023-08-21T03:36:06.143646Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2078,12 +1848,7 @@ "execution_count": 47, "id": "702f80d9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:06.145683Z", - "iopub.status.busy": "2023-08-21T03:36:06.145574Z", - "iopub.status.idle": "2023-08-21T03:36:06.326301Z", - "shell.execute_reply": "2023-08-21T03:36:06.326007Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2131,12 +1896,7 @@ "execution_count": 48, "id": "5493d229", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:06.327958Z", - "iopub.status.busy": "2023-08-21T03:36:06.327847Z", - "iopub.status.idle": "2023-08-21T03:36:07.432805Z", - "shell.execute_reply": "2023-08-21T03:36:07.432429Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -2158,12 +1918,7 @@ "execution_count": 49, "id": "bd07af12", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:07.434785Z", - "iopub.status.busy": "2023-08-21T03:36:07.434614Z", - "iopub.status.idle": "2023-08-21T03:36:07.663475Z", - "shell.execute_reply": "2023-08-21T03:36:07.663165Z" - } + "execution": {} }, "outputs": [ { @@ -2208,12 +1963,7 @@ "execution_count": 50, "id": "01019508", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:07.665255Z", - "iopub.status.busy": "2023-08-21T03:36:07.665128Z", - "iopub.status.idle": "2023-08-21T03:36:07.766569Z", - "shell.execute_reply": "2023-08-21T03:36:07.766244Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2249,12 +1999,7 @@ "execution_count": 51, "id": "7d08992f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:07.768244Z", - "iopub.status.busy": "2023-08-21T03:36:07.768130Z", - "iopub.status.idle": "2023-08-21T03:36:07.893027Z", - "shell.execute_reply": "2023-08-21T03:36:07.892660Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2295,12 +2040,7 @@ "execution_count": 52, "id": "1f89d704", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:07.894802Z", - "iopub.status.busy": "2023-08-21T03:36:07.894695Z", - "iopub.status.idle": "2023-08-21T03:36:07.995202Z", - "shell.execute_reply": "2023-08-21T03:36:07.994863Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2343,12 +2083,7 @@ "execution_count": 53, "id": "cd971131", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:07.996961Z", - "iopub.status.busy": "2023-08-21T03:36:07.996836Z", - "iopub.status.idle": "2023-08-21T03:36:07.999447Z", - "shell.execute_reply": "2023-08-21T03:36:07.999154Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2383,12 +2118,7 @@ "execution_count": 54, "id": "aa630d16", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.001028Z", - "iopub.status.busy": "2023-08-21T03:36:08.000925Z", - "iopub.status.idle": "2023-08-21T03:36:08.003185Z", - "shell.execute_reply": "2023-08-21T03:36:08.002908Z" - } + "execution": {} }, "outputs": [ { @@ -2424,12 +2154,7 @@ "execution_count": 55, "id": "89955ee2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.004703Z", - "iopub.status.busy": "2023-08-21T03:36:08.004594Z", - "iopub.status.idle": "2023-08-21T03:36:08.006692Z", - "shell.execute_reply": "2023-08-21T03:36:08.006429Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2462,12 +2187,7 @@ "execution_count": 56, "id": "517f592d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.008158Z", - "iopub.status.busy": "2023-08-21T03:36:08.008062Z", - "iopub.status.idle": "2023-08-21T03:36:08.010083Z", - "shell.execute_reply": "2023-08-21T03:36:08.009819Z" - } + "execution": {} }, "outputs": [ { @@ -2529,12 +2249,7 @@ "execution_count": 57, "id": "35927abd", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.011518Z", - "iopub.status.busy": "2023-08-21T03:36:08.011425Z", - "iopub.status.idle": "2023-08-21T03:36:08.013558Z", - "shell.execute_reply": "2023-08-21T03:36:08.013317Z" - } + "execution": {} }, "outputs": [ { @@ -2570,12 +2285,7 @@ "execution_count": 58, "id": "78ee7f5b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.014962Z", - "iopub.status.busy": "2023-08-21T03:36:08.014871Z", - "iopub.status.idle": "2023-08-21T03:36:08.016938Z", - "shell.execute_reply": "2023-08-21T03:36:08.016689Z" - } + "execution": {} }, "outputs": [ { @@ -2611,12 +2321,7 @@ "execution_count": 59, "id": "16212696", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.018506Z", - "iopub.status.busy": "2023-08-21T03:36:08.018407Z", - "iopub.status.idle": "2023-08-21T03:36:08.020572Z", - "shell.execute_reply": "2023-08-21T03:36:08.020301Z" - } + "execution": {} }, "outputs": [ { @@ -2650,12 +2355,7 @@ "execution_count": 60, "id": "d5f473d2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.022048Z", - "iopub.status.busy": "2023-08-21T03:36:08.021947Z", - "iopub.status.idle": "2023-08-21T03:36:08.024301Z", - "shell.execute_reply": "2023-08-21T03:36:08.024006Z" - } + "execution": {} }, "outputs": [ { @@ -2691,12 +2391,7 @@ "execution_count": 61, "id": "c89646d6", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.025864Z", - "iopub.status.busy": "2023-08-21T03:36:08.025745Z", - "iopub.status.idle": "2023-08-21T03:36:08.027990Z", - "shell.execute_reply": "2023-08-21T03:36:08.027692Z" - } + "execution": {} }, "outputs": [ { @@ -2727,12 +2422,7 @@ "execution_count": 62, "id": "87f6b4f2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.029541Z", - "iopub.status.busy": "2023-08-21T03:36:08.029439Z", - "iopub.status.idle": "2023-08-21T03:36:08.031650Z", - "shell.execute_reply": "2023-08-21T03:36:08.031378Z" - } + "execution": {} }, "outputs": [ { @@ -2763,12 +2453,7 @@ "execution_count": 63, "id": "5da5bda8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.033127Z", - "iopub.status.busy": "2023-08-21T03:36:08.033016Z", - "iopub.status.idle": "2023-08-21T03:36:08.056275Z", - "shell.execute_reply": "2023-08-21T03:36:08.056014Z" - } + "execution": {} }, "outputs": [ { @@ -2802,12 +2487,7 @@ "execution_count": 64, "id": "ac48a95b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.057926Z", - "iopub.status.busy": "2023-08-21T03:36:08.057815Z", - "iopub.status.idle": "2023-08-21T03:36:08.060231Z", - "shell.execute_reply": "2023-08-21T03:36:08.059980Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2851,12 +2531,7 @@ "execution_count": 65, "id": "ee195cc4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.061798Z", - "iopub.status.busy": "2023-08-21T03:36:08.061686Z", - "iopub.status.idle": "2023-08-21T03:36:08.063979Z", - "shell.execute_reply": "2023-08-21T03:36:08.063715Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2894,12 +2569,7 @@ "execution_count": 66, "id": "48917bb5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.067067Z", - "iopub.status.busy": "2023-08-21T03:36:08.066955Z", - "iopub.status.idle": "2023-08-21T03:36:08.069279Z", - "shell.execute_reply": "2023-08-21T03:36:08.068966Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2964,12 +2634,7 @@ "execution_count": 67, "id": "5d4caf22", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.070903Z", - "iopub.status.busy": "2023-08-21T03:36:08.070799Z", - "iopub.status.idle": "2023-08-21T03:36:08.072959Z", - "shell.execute_reply": "2023-08-21T03:36:08.072701Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3002,12 +2667,7 @@ "execution_count": 68, "id": "348820e3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.074422Z", - "iopub.status.busy": "2023-08-21T03:36:08.074322Z", - "iopub.status.idle": "2023-08-21T03:36:08.076398Z", - "shell.execute_reply": "2023-08-21T03:36:08.076106Z" - } + "execution": {} }, "outputs": [ { @@ -3041,12 +2701,7 @@ "execution_count": 69, "id": "4aafe45b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.077952Z", - "iopub.status.busy": "2023-08-21T03:36:08.077853Z", - "iopub.status.idle": "2023-08-21T03:36:08.080163Z", - "shell.execute_reply": "2023-08-21T03:36:08.079901Z" - } + "execution": {} }, "outputs": [ { @@ -3087,12 +2742,7 @@ "execution_count": 70, "id": "1be6a588", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.081637Z", - "iopub.status.busy": "2023-08-21T03:36:08.081537Z", - "iopub.status.idle": "2023-08-21T03:36:08.083796Z", - "shell.execute_reply": "2023-08-21T03:36:08.083505Z" - } + "execution": {} }, "outputs": [ { @@ -3126,12 +2776,7 @@ "execution_count": 71, "id": "e83da57b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.085319Z", - "iopub.status.busy": "2023-08-21T03:36:08.085216Z", - "iopub.status.idle": "2023-08-21T03:36:08.087359Z", - "shell.execute_reply": "2023-08-21T03:36:08.087095Z" - } + "execution": {} }, "outputs": [ { @@ -3173,12 +2818,7 @@ "execution_count": 72, "id": "09675294", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.088904Z", - "iopub.status.busy": "2023-08-21T03:36:08.088804Z", - "iopub.status.idle": "2023-08-21T03:36:08.091266Z", - "shell.execute_reply": "2023-08-21T03:36:08.090985Z" - } + "execution": {} }, "outputs": [ { @@ -3213,12 +2853,7 @@ "execution_count": 73, "id": "a85614e4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.092757Z", - "iopub.status.busy": "2023-08-21T03:36:08.092664Z", - "iopub.status.idle": "2023-08-21T03:36:08.094873Z", - "shell.execute_reply": "2023-08-21T03:36:08.094581Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3305,12 +2940,7 @@ "execution_count": 74, "id": "ff81e644", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.096546Z", - "iopub.status.busy": "2023-08-21T03:36:08.096449Z", - "iopub.status.idle": "2023-08-21T03:36:08.317557Z", - "shell.execute_reply": "2023-08-21T03:36:08.317278Z" - } + "execution": {} }, "outputs": [ { @@ -3537,12 +3167,7 @@ "execution_count": 75, "id": "5b45aa7f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.319194Z", - "iopub.status.busy": "2023-08-21T03:36:08.319082Z", - "iopub.status.idle": "2023-08-21T03:36:08.322312Z", - "shell.execute_reply": "2023-08-21T03:36:08.322063Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -3574,12 +3199,7 @@ "execution_count": 76, "id": "413f626a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.323776Z", - "iopub.status.busy": "2023-08-21T03:36:08.323686Z", - "iopub.status.idle": "2023-08-21T03:36:08.326230Z", - "shell.execute_reply": "2023-08-21T03:36:08.325989Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3625,12 +3245,7 @@ "execution_count": 77, "id": "57b86346", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.327630Z", - "iopub.status.busy": "2023-08-21T03:36:08.327527Z", - "iopub.status.idle": "2023-08-21T03:36:08.329871Z", - "shell.execute_reply": "2023-08-21T03:36:08.329620Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3686,12 +3301,7 @@ "execution_count": 78, "id": "a9698b26", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.331328Z", - "iopub.status.busy": "2023-08-21T03:36:08.331230Z", - "iopub.status.idle": "2023-08-21T03:36:08.334947Z", - "shell.execute_reply": "2023-08-21T03:36:08.334715Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -3727,12 +3337,7 @@ "execution_count": 79, "id": "4877cb2c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.336400Z", - "iopub.status.busy": "2023-08-21T03:36:08.336322Z", - "iopub.status.idle": "2023-08-21T03:36:08.338340Z", - "shell.execute_reply": "2023-08-21T03:36:08.338101Z" - } + "execution": {} }, "outputs": [ { @@ -3766,12 +3371,7 @@ "execution_count": 80, "id": "2ba1d33d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.339714Z", - "iopub.status.busy": "2023-08-21T03:36:08.339640Z", - "iopub.status.idle": "2023-08-21T03:36:08.342116Z", - "shell.execute_reply": "2023-08-21T03:36:08.341883Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -3806,12 +3406,7 @@ "execution_count": 81, "id": "3d03baab", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.343548Z", - "iopub.status.busy": "2023-08-21T03:36:08.343471Z", - "iopub.status.idle": "2023-08-21T03:36:08.345627Z", - "shell.execute_reply": "2023-08-21T03:36:08.345379Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -3850,12 +3445,7 @@ "execution_count": 82, "id": "410b4dd7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.347031Z", - "iopub.status.busy": "2023-08-21T03:36:08.346955Z", - "iopub.status.idle": "2023-08-21T03:36:08.351303Z", - "shell.execute_reply": "2023-08-21T03:36:08.351081Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3966,12 +3556,7 @@ "execution_count": 83, "id": "3540804d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.352671Z", - "iopub.status.busy": "2023-08-21T03:36:08.352588Z", - "iopub.status.idle": "2023-08-21T03:36:08.365290Z", - "shell.execute_reply": "2023-08-21T03:36:08.365017Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -4853,12 +4438,7 @@ "execution_count": 84, "id": "66d174f1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.366746Z", - "iopub.status.busy": "2023-08-21T03:36:08.366648Z", - "iopub.status.idle": "2023-08-21T03:36:08.371142Z", - "shell.execute_reply": "2023-08-21T03:36:08.370889Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -4988,12 +4568,7 @@ "execution_count": 85, "id": "52789c77", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.372548Z", - "iopub.status.busy": "2023-08-21T03:36:08.372468Z", - "iopub.status.idle": "2023-08-21T03:36:08.374676Z", - "shell.execute_reply": "2023-08-21T03:36:08.374427Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5029,12 +4604,7 @@ "execution_count": 86, "id": "d83650bf", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.376096Z", - "iopub.status.busy": "2023-08-21T03:36:08.376016Z", - "iopub.status.idle": "2023-08-21T03:36:08.382023Z", - "shell.execute_reply": "2023-08-21T03:36:08.381780Z" - } + "execution": {} }, "outputs": [ { @@ -5253,12 +4823,7 @@ "execution_count": 87, "id": "880d79d9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.383342Z", - "iopub.status.busy": "2023-08-21T03:36:08.383266Z", - "iopub.status.idle": "2023-08-21T03:36:08.385348Z", - "shell.execute_reply": "2023-08-21T03:36:08.385111Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5296,12 +4861,7 @@ "execution_count": 88, "id": "c01f4095", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.386800Z", - "iopub.status.busy": "2023-08-21T03:36:08.386719Z", - "iopub.status.idle": "2023-08-21T03:36:08.390900Z", - "shell.execute_reply": "2023-08-21T03:36:08.390675Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5409,12 +4969,7 @@ "execution_count": 89, "id": "a4202eb8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.392405Z", - "iopub.status.busy": "2023-08-21T03:36:08.392322Z", - "iopub.status.idle": "2023-08-21T03:36:08.396509Z", - "shell.execute_reply": "2023-08-21T03:36:08.396244Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5521,12 +5076,7 @@ "execution_count": 90, "id": "948b2d07", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.397917Z", - "iopub.status.busy": "2023-08-21T03:36:08.397838Z", - "iopub.status.idle": "2023-08-21T03:36:08.402447Z", - "shell.execute_reply": "2023-08-21T03:36:08.402192Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5675,12 +5225,7 @@ "execution_count": 91, "id": "1cfdcc5c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.403773Z", - "iopub.status.busy": "2023-08-21T03:36:08.403692Z", - "iopub.status.idle": "2023-08-21T03:36:08.407036Z", - "shell.execute_reply": "2023-08-21T03:36:08.406794Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5762,12 +5307,7 @@ "execution_count": 92, "id": "fd9c5cda", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.408461Z", - "iopub.status.busy": "2023-08-21T03:36:08.408387Z", - "iopub.status.idle": "2023-08-21T03:36:08.411673Z", - "shell.execute_reply": "2023-08-21T03:36:08.411429Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5855,12 +5395,7 @@ "execution_count": 93, "id": "6d431cb5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.413092Z", - "iopub.status.busy": "2023-08-21T03:36:08.413016Z", - "iopub.status.idle": "2023-08-21T03:36:08.418535Z", - "shell.execute_reply": "2023-08-21T03:36:08.418303Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -6275,12 +5810,7 @@ "execution_count": 94, "id": "fac41ce1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.419882Z", - "iopub.status.busy": "2023-08-21T03:36:08.419806Z", - "iopub.status.idle": "2023-08-21T03:36:08.425319Z", - "shell.execute_reply": "2023-08-21T03:36:08.425073Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -6699,12 +6229,7 @@ "execution_count": 95, "id": "b0885654", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.426701Z", - "iopub.status.busy": "2023-08-21T03:36:08.426621Z", - "iopub.status.idle": "2023-08-21T03:36:08.431378Z", - "shell.execute_reply": "2023-08-21T03:36:08.431148Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -6979,12 +6504,7 @@ "execution_count": 96, "id": "213945a6", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.432780Z", - "iopub.status.busy": "2023-08-21T03:36:08.432696Z", - "iopub.status.idle": "2023-08-21T03:36:08.438473Z", - "shell.execute_reply": "2023-08-21T03:36:08.438250Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7370,12 +6890,7 @@ "execution_count": 97, "id": "a3c4060a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.439902Z", - "iopub.status.busy": "2023-08-21T03:36:08.439825Z", - "iopub.status.idle": "2023-08-21T03:36:08.441707Z", - "shell.execute_reply": "2023-08-21T03:36:08.441464Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7414,12 +6929,7 @@ "execution_count": 98, "id": "f2bffb69", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.443349Z", - "iopub.status.busy": "2023-08-21T03:36:08.443241Z", - "iopub.status.idle": "2023-08-21T03:36:08.445173Z", - "shell.execute_reply": "2023-08-21T03:36:08.444935Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7466,12 +6976,7 @@ "execution_count": 99, "id": "ee827a53", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.446610Z", - "iopub.status.busy": "2023-08-21T03:36:08.446520Z", - "iopub.status.idle": "2023-08-21T03:36:08.448323Z", - "shell.execute_reply": "2023-08-21T03:36:08.448070Z" - } + "execution": {} }, "outputs": [ { @@ -7521,12 +7026,7 @@ "execution_count": 100, "id": "3a097fbc", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.449714Z", - "iopub.status.busy": "2023-08-21T03:36:08.449623Z", - "iopub.status.idle": "2023-08-21T03:36:08.454097Z", - "shell.execute_reply": "2023-08-21T03:36:08.453813Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -7617,12 +7117,7 @@ "execution_count": 101, "id": "e064e170", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.455528Z", - "iopub.status.busy": "2023-08-21T03:36:08.455447Z", - "iopub.status.idle": "2023-08-21T03:36:08.457783Z", - "shell.execute_reply": "2023-08-21T03:36:08.457543Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7674,12 +7169,7 @@ "execution_count": 102, "id": "c915ca52", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.459248Z", - "iopub.status.busy": "2023-08-21T03:36:08.459155Z", - "iopub.status.idle": "2023-08-21T03:36:08.552220Z", - "shell.execute_reply": "2023-08-21T03:36:08.551914Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7723,12 +7213,7 @@ "execution_count": 103, "id": "65cd6d02", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.553877Z", - "iopub.status.busy": "2023-08-21T03:36:08.553770Z", - "iopub.status.idle": "2023-08-21T03:36:08.640715Z", - "shell.execute_reply": "2023-08-21T03:36:08.640411Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7765,12 +7250,7 @@ "execution_count": 104, "id": "76b5c0b1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.642311Z", - "iopub.status.busy": "2023-08-21T03:36:08.642208Z", - "iopub.status.idle": "2023-08-21T03:36:08.737860Z", - "shell.execute_reply": "2023-08-21T03:36:08.737565Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7805,12 +7285,7 @@ "execution_count": 105, "id": "183a2c2b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.739490Z", - "iopub.status.busy": "2023-08-21T03:36:08.739374Z", - "iopub.status.idle": "2023-08-21T03:36:08.779690Z", - "shell.execute_reply": "2023-08-21T03:36:08.779420Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -7836,12 +7311,7 @@ "execution_count": 106, "id": "75fbb981", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.781309Z", - "iopub.status.busy": "2023-08-21T03:36:08.781225Z", - "iopub.status.idle": "2023-08-21T03:36:08.949186Z", - "shell.execute_reply": "2023-08-21T03:36:08.948871Z" - } + "execution": {} }, "outputs": [ { @@ -7884,12 +7354,7 @@ "execution_count": 107, "id": "55b3a1cc", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.950967Z", - "iopub.status.busy": "2023-08-21T03:36:08.950852Z", - "iopub.status.idle": "2023-08-21T03:36:08.953871Z", - "shell.execute_reply": "2023-08-21T03:36:08.953602Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7923,12 +7388,7 @@ "execution_count": 108, "id": "f3d88794", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:08.955394Z", - "iopub.status.busy": "2023-08-21T03:36:08.955297Z", - "iopub.status.idle": "2023-08-21T03:36:09.060746Z", - "shell.execute_reply": "2023-08-21T03:36:09.060425Z" - } + "execution": {} }, "outputs": [ { @@ -7960,12 +7420,7 @@ "execution_count": 109, "id": "eea49f5b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:09.062393Z", - "iopub.status.busy": "2023-08-21T03:36:09.062272Z", - "iopub.status.idle": "2023-08-21T03:36:09.164120Z", - "shell.execute_reply": "2023-08-21T03:36:09.163816Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7998,12 +7453,7 @@ "execution_count": 110, "id": "d5bcfff8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:09.165860Z", - "iopub.status.busy": "2023-08-21T03:36:09.165745Z", - "iopub.status.idle": "2023-08-21T03:36:09.262378Z", - "shell.execute_reply": "2023-08-21T03:36:09.262095Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -8040,12 +7490,7 @@ "execution_count": 111, "id": "edb66cae", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:09.264050Z", - "iopub.status.busy": "2023-08-21T03:36:09.263936Z", - "iopub.status.idle": "2023-08-21T03:36:10.182139Z", - "shell.execute_reply": "2023-08-21T03:36:10.181842Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -8078,12 +7523,7 @@ "execution_count": 112, "id": "4f5d25d9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:10.183868Z", - "iopub.status.busy": "2023-08-21T03:36:10.183754Z", - "iopub.status.idle": "2023-08-21T03:36:10.401318Z", - "shell.execute_reply": "2023-08-21T03:36:10.401033Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -8117,12 +7557,7 @@ "execution_count": 113, "id": "ce7b23e2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:10.403067Z", - "iopub.status.busy": "2023-08-21T03:36:10.402953Z", - "iopub.status.idle": "2023-08-21T03:36:10.408957Z", - "shell.execute_reply": "2023-08-21T03:36:10.408683Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -8230,12 +7665,7 @@ "execution_count": 114, "id": "a6545d2f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T03:36:10.410500Z", - "iopub.status.busy": "2023-08-21T03:36:10.410393Z", - "iopub.status.idle": "2023-08-21T03:36:10.414627Z", - "shell.execute_reply": "2023-08-21T03:36:10.414350Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ diff --git a/Ch03-linreg-lab.ipynb b/Ch03-linreg-lab.ipynb index f039622..e807e92 100644 --- a/Ch03-linreg-lab.ipynb +++ b/Ch03-linreg-lab.ipynb @@ -26,12 +26,7 @@ "execution_count": 1, "id": "b18c1628", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:52.978537Z", - "iopub.status.busy": "2023-08-21T02:28:52.978403Z", - "iopub.status.idle": "2023-08-21T02:28:53.456488Z", - "shell.execute_reply": "2023-08-21T02:28:53.456172Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -59,12 +54,7 @@ "execution_count": 2, "id": "a10a1d7d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:53.458574Z", - "iopub.status.busy": "2023-08-21T02:28:53.458356Z", - "iopub.status.idle": "2023-08-21T02:28:54.074306Z", - "shell.execute_reply": "2023-08-21T02:28:54.073950Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -92,12 +82,7 @@ "execution_count": 3, "id": "756c0524", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.076206Z", - "iopub.status.busy": "2023-08-21T02:28:54.076055Z", - "iopub.status.idle": "2023-08-21T02:28:54.079277Z", - "shell.execute_reply": "2023-08-21T02:28:54.079022Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -123,12 +108,7 @@ "execution_count": 4, "id": "2c370a6e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.080812Z", - "iopub.status.busy": "2023-08-21T02:28:54.080717Z", - "iopub.status.idle": "2023-08-21T02:28:54.212489Z", - "shell.execute_reply": "2023-08-21T02:28:54.212195Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -155,12 +135,7 @@ "execution_count": 5, "id": "43bcb3a9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.214288Z", - "iopub.status.busy": "2023-08-21T02:28:54.214131Z", - "iopub.status.idle": "2023-08-21T02:28:54.218521Z", - "shell.execute_reply": "2023-08-21T02:28:54.217256Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -236,12 +211,7 @@ "execution_count": 6, "id": "cb81bfb0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.228152Z", - "iopub.status.busy": "2023-08-21T02:28:54.227968Z", - "iopub.status.idle": "2023-08-21T02:28:54.231888Z", - "shell.execute_reply": "2023-08-21T02:28:54.231418Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -440,12 +410,7 @@ "execution_count": 7, "id": "29e9bdab", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.233644Z", - "iopub.status.busy": "2023-08-21T02:28:54.233538Z", - "iopub.status.idle": "2023-08-21T02:28:54.236077Z", - "shell.execute_reply": "2023-08-21T02:28:54.235804Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -498,12 +463,7 @@ "execution_count": 8, "id": "72a15de5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.237580Z", - "iopub.status.busy": "2023-08-21T02:28:54.237492Z", - "iopub.status.idle": "2023-08-21T02:28:54.242855Z", - "shell.execute_reply": "2023-08-21T02:28:54.242574Z" - } + "execution": {} }, "outputs": [ { @@ -542,12 +502,7 @@ "execution_count": 9, "id": "26837cfe", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.244219Z", - "iopub.status.busy": "2023-08-21T02:28:54.244127Z", - "iopub.status.idle": "2023-08-21T02:28:54.249714Z", - "shell.execute_reply": "2023-08-21T02:28:54.249432Z" - } + "execution": {} }, "outputs": [ { @@ -632,12 +587,7 @@ "execution_count": 10, "id": "c70cbdb5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.251263Z", - "iopub.status.busy": "2023-08-21T02:28:54.251136Z", - "iopub.status.idle": "2023-08-21T02:28:54.253671Z", - "shell.execute_reply": "2023-08-21T02:28:54.253397Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -667,12 +617,7 @@ "execution_count": 11, "id": "6f2d7c78", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.255193Z", - "iopub.status.busy": "2023-08-21T02:28:54.255089Z", - "iopub.status.idle": "2023-08-21T02:28:54.314793Z", - "shell.execute_reply": "2023-08-21T02:28:54.314504Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -778,12 +723,7 @@ "execution_count": 12, "id": "cdec4294", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.316521Z", - "iopub.status.busy": "2023-08-21T02:28:54.316363Z", - "iopub.status.idle": "2023-08-21T02:28:54.323224Z", - "shell.execute_reply": "2023-08-21T02:28:54.322970Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -873,12 +813,7 @@ "execution_count": 13, "id": "edf2efcb", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.324750Z", - "iopub.status.busy": "2023-08-21T02:28:54.324644Z", - "iopub.status.idle": "2023-08-21T02:28:54.330945Z", - "shell.execute_reply": "2023-08-21T02:28:54.330680Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -977,12 +912,7 @@ "execution_count": 14, "id": "49fc8992", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.332402Z", - "iopub.status.busy": "2023-08-21T02:28:54.332319Z", - "iopub.status.idle": "2023-08-21T02:28:54.341724Z", - "shell.execute_reply": "2023-08-21T02:28:54.341409Z" - } + "execution": {} }, "outputs": [ { @@ -1133,12 +1063,7 @@ "execution_count": 15, "id": "6d0f4c3a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.343317Z", - "iopub.status.busy": "2023-08-21T02:28:54.343206Z", - "iopub.status.idle": "2023-08-21T02:28:54.345604Z", - "shell.execute_reply": "2023-08-21T02:28:54.345339Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1176,12 +1101,7 @@ "execution_count": 16, "id": "132ffded", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.347097Z", - "iopub.status.busy": "2023-08-21T02:28:54.346984Z", - "iopub.status.idle": "2023-08-21T02:28:54.350802Z", - "shell.execute_reply": "2023-08-21T02:28:54.350563Z" - } + "execution": {} }, "outputs": [ { @@ -1260,12 +1180,7 @@ "execution_count": 17, "id": "b654a050", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.352369Z", - "iopub.status.busy": "2023-08-21T02:28:54.352275Z", - "iopub.status.idle": "2023-08-21T02:28:54.354743Z", - "shell.execute_reply": "2023-08-21T02:28:54.354502Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1298,12 +1213,7 @@ "execution_count": 18, "id": "148ed59d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.356140Z", - "iopub.status.busy": "2023-08-21T02:28:54.356063Z", - "iopub.status.idle": "2023-08-21T02:28:54.358315Z", - "shell.execute_reply": "2023-08-21T02:28:54.358059Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1337,12 +1247,7 @@ "execution_count": 19, "id": "d9d7b844", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.359757Z", - "iopub.status.busy": "2023-08-21T02:28:54.359678Z", - "iopub.status.idle": "2023-08-21T02:28:54.362165Z", - "shell.execute_reply": "2023-08-21T02:28:54.361908Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1397,12 +1302,7 @@ "execution_count": 20, "id": "79de2913", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.363741Z", - "iopub.status.busy": "2023-08-21T02:28:54.363634Z", - "iopub.status.idle": "2023-08-21T02:28:54.365531Z", - "shell.execute_reply": "2023-08-21T02:28:54.365292Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1431,12 +1331,7 @@ "execution_count": 21, "id": "a9b843c7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.366874Z", - "iopub.status.busy": "2023-08-21T02:28:54.366784Z", - "iopub.status.idle": "2023-08-21T02:28:54.368713Z", - "shell.execute_reply": "2023-08-21T02:28:54.368464Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1471,12 +1366,7 @@ "execution_count": 22, "id": "7e116800", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.370163Z", - "iopub.status.busy": "2023-08-21T02:28:54.370073Z", - "iopub.status.idle": "2023-08-21T02:28:54.466696Z", - "shell.execute_reply": "2023-08-21T02:28:54.466338Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1535,12 +1425,7 @@ "execution_count": 23, "id": "b524399e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.468561Z", - "iopub.status.busy": "2023-08-21T02:28:54.468356Z", - "iopub.status.idle": "2023-08-21T02:28:54.566644Z", - "shell.execute_reply": "2023-08-21T02:28:54.566337Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1583,12 +1468,7 @@ "execution_count": 24, "id": "8c95b6b0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.568423Z", - "iopub.status.busy": "2023-08-21T02:28:54.568307Z", - "iopub.status.idle": "2023-08-21T02:28:54.658553Z", - "shell.execute_reply": "2023-08-21T02:28:54.658267Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1651,12 +1531,7 @@ "execution_count": 25, "id": "04ed8362", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.660197Z", - "iopub.status.busy": "2023-08-21T02:28:54.660075Z", - "iopub.status.idle": "2023-08-21T02:28:54.672237Z", - "shell.execute_reply": "2023-08-21T02:28:54.671994Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1749,12 +1624,7 @@ "execution_count": 26, "id": "6483e190", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.673721Z", - "iopub.status.busy": "2023-08-21T02:28:54.673628Z", - "iopub.status.idle": "2023-08-21T02:28:54.676304Z", - "shell.execute_reply": "2023-08-21T02:28:54.675993Z" - } + "execution": {} }, "outputs": [ { @@ -1789,12 +1659,7 @@ "execution_count": 27, "id": "99a6f9d0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.677828Z", - "iopub.status.busy": "2023-08-21T02:28:54.677709Z", - "iopub.status.idle": "2023-08-21T02:28:54.696704Z", - "shell.execute_reply": "2023-08-21T02:28:54.696381Z" - } + "execution": {} }, "outputs": [ { @@ -1965,12 +1830,7 @@ "execution_count": 28, "id": "78cf55d0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.698261Z", - "iopub.status.busy": "2023-08-21T02:28:54.698177Z", - "iopub.status.idle": "2023-08-21T02:28:54.716362Z", - "shell.execute_reply": "2023-08-21T02:28:54.716082Z" - } + "execution": {} }, "outputs": [ { @@ -2153,12 +2013,7 @@ "execution_count": 29, "id": "902f6474", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.718076Z", - "iopub.status.busy": "2023-08-21T02:28:54.717951Z", - "iopub.status.idle": "2023-08-21T02:28:54.725146Z", - "shell.execute_reply": "2023-08-21T02:28:54.724859Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2285,12 +2140,7 @@ "execution_count": 30, "id": "ea1c88e9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.726658Z", - "iopub.status.busy": "2023-08-21T02:28:54.726565Z", - "iopub.status.idle": "2023-08-21T02:28:54.731850Z", - "shell.execute_reply": "2023-08-21T02:28:54.731595Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -2318,12 +2168,7 @@ "execution_count": 31, "id": "e9ff159c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.733388Z", - "iopub.status.busy": "2023-08-21T02:28:54.733294Z", - "iopub.status.idle": "2023-08-21T02:28:54.747346Z", - "shell.execute_reply": "2023-08-21T02:28:54.747067Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2426,12 +2271,7 @@ "execution_count": 32, "id": "c98f54b2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.748856Z", - "iopub.status.busy": "2023-08-21T02:28:54.748774Z", - "iopub.status.idle": "2023-08-21T02:28:54.763149Z", - "shell.execute_reply": "2023-08-21T02:28:54.762853Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2544,12 +2384,7 @@ "execution_count": 33, "id": "53065cac", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.764924Z", - "iopub.status.busy": "2023-08-21T02:28:54.764796Z", - "iopub.status.idle": "2023-08-21T02:28:54.770846Z", - "shell.execute_reply": "2023-08-21T02:28:54.770578Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2654,12 +2489,7 @@ "execution_count": 34, "id": "8c654809", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.772408Z", - "iopub.status.busy": "2023-08-21T02:28:54.772296Z", - "iopub.status.idle": "2023-08-21T02:28:54.872389Z", - "shell.execute_reply": "2023-08-21T02:28:54.872086Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2720,12 +2550,7 @@ "execution_count": 35, "id": "2182f0ec", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.874000Z", - "iopub.status.busy": "2023-08-21T02:28:54.873893Z", - "iopub.status.idle": "2023-08-21T02:28:54.879085Z", - "shell.execute_reply": "2023-08-21T02:28:54.878817Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2771,12 +2596,7 @@ "execution_count": 36, "id": "d614fdcb", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:54.880583Z", - "iopub.status.busy": "2023-08-21T02:28:54.880499Z", - "iopub.status.idle": "2023-08-21T02:28:54.907341Z", - "shell.execute_reply": "2023-08-21T02:28:54.907079Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ diff --git a/Ch04-classification-lab.ipynb b/Ch04-classification-lab.ipynb index 0ab61a0..6305667 100644 --- a/Ch04-classification-lab.ipynb +++ b/Ch04-classification-lab.ipynb @@ -45,12 +45,7 @@ "execution_count": 1, "id": "95d28c33", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:56.229892Z", - "iopub.status.busy": "2023-08-21T02:28:56.229672Z", - "iopub.status.idle": "2023-08-21T02:28:57.250402Z", - "shell.execute_reply": "2023-08-21T02:28:57.249963Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -76,12 +71,7 @@ "execution_count": 2, "id": "f7fb5f2a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.252390Z", - "iopub.status.busy": "2023-08-21T02:28:57.252224Z", - "iopub.status.idle": "2023-08-21T02:28:57.272851Z", - "shell.execute_reply": "2023-08-21T02:28:57.272588Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -111,12 +101,7 @@ "execution_count": 3, "id": "7845390b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.274355Z", - "iopub.status.busy": "2023-08-21T02:28:57.274258Z", - "iopub.status.idle": "2023-08-21T02:28:57.285160Z", - "shell.execute_reply": "2023-08-21T02:28:57.284894Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -331,12 +316,7 @@ "execution_count": 4, "id": "a92e287a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.286715Z", - "iopub.status.busy": "2023-08-21T02:28:57.286616Z", - "iopub.status.idle": "2023-08-21T02:28:57.288883Z", - "shell.execute_reply": "2023-08-21T02:28:57.288648Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -375,12 +355,7 @@ "execution_count": 5, "id": "96bb1e00", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.290357Z", - "iopub.status.busy": "2023-08-21T02:28:57.290259Z", - "iopub.status.idle": "2023-08-21T02:28:57.295352Z", - "shell.execute_reply": "2023-08-21T02:28:57.295083Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -556,12 +531,7 @@ "execution_count": 6, "id": "4ddb96ba", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.296784Z", - "iopub.status.busy": "2023-08-21T02:28:57.296683Z", - "iopub.status.idle": "2023-08-21T02:28:57.392956Z", - "shell.execute_reply": "2023-08-21T02:28:57.392526Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -603,12 +573,7 @@ "execution_count": 7, "id": "df59bcac", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.394870Z", - "iopub.status.busy": "2023-08-21T02:28:57.394721Z", - "iopub.status.idle": "2023-08-21T02:28:57.461746Z", - "shell.execute_reply": "2023-08-21T02:28:57.461390Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -743,12 +708,7 @@ "execution_count": 8, "id": "f45f26de", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.463719Z", - "iopub.status.busy": "2023-08-21T02:28:57.463515Z", - "iopub.status.idle": "2023-08-21T02:28:57.466512Z", - "shell.execute_reply": "2023-08-21T02:28:57.466227Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -788,12 +748,7 @@ "execution_count": 9, "id": "e9f38895", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.468254Z", - "iopub.status.busy": "2023-08-21T02:28:57.468113Z", - "iopub.status.idle": "2023-08-21T02:28:57.470717Z", - "shell.execute_reply": "2023-08-21T02:28:57.470403Z" - } + "execution": {} }, "outputs": [ { @@ -839,12 +794,7 @@ "execution_count": 10, "id": "4f20356d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.472719Z", - "iopub.status.busy": "2023-08-21T02:28:57.472578Z", - "iopub.status.idle": "2023-08-21T02:28:57.475369Z", - "shell.execute_reply": "2023-08-21T02:28:57.475043Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -883,12 +833,7 @@ "execution_count": 11, "id": "152b3063", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.477166Z", - "iopub.status.busy": "2023-08-21T02:28:57.477052Z", - "iopub.status.idle": "2023-08-21T02:28:57.479161Z", - "shell.execute_reply": "2023-08-21T02:28:57.478803Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -916,12 +861,7 @@ "execution_count": 12, "id": "0f89f7ae", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.480867Z", - "iopub.status.busy": "2023-08-21T02:28:57.480737Z", - "iopub.status.idle": "2023-08-21T02:28:57.487133Z", - "shell.execute_reply": "2023-08-21T02:28:57.486778Z" - } + "execution": {} }, "outputs": [ { @@ -1005,12 +945,7 @@ "execution_count": 13, "id": "d55dd7ec", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.488873Z", - "iopub.status.busy": "2023-08-21T02:28:57.488756Z", - "iopub.status.idle": "2023-08-21T02:28:57.491458Z", - "shell.execute_reply": "2023-08-21T02:28:57.491162Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1068,12 +1003,7 @@ "execution_count": 14, "id": "b998a060", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.493306Z", - "iopub.status.busy": "2023-08-21T02:28:57.493174Z", - "iopub.status.idle": "2023-08-21T02:28:57.496464Z", - "shell.execute_reply": "2023-08-21T02:28:57.496107Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1134,12 +1064,7 @@ "execution_count": 15, "id": "814e34ce", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.498135Z", - "iopub.status.busy": "2023-08-21T02:28:57.498043Z", - "iopub.status.idle": "2023-08-21T02:28:57.502996Z", - "shell.execute_reply": "2023-08-21T02:28:57.502676Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1171,12 +1096,7 @@ "execution_count": 16, "id": "644823f9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.504874Z", - "iopub.status.busy": "2023-08-21T02:28:57.504743Z", - "iopub.status.idle": "2023-08-21T02:28:57.506879Z", - "shell.execute_reply": "2023-08-21T02:28:57.506558Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1200,12 +1120,7 @@ "execution_count": 17, "id": "51217c85", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.508502Z", - "iopub.status.busy": "2023-08-21T02:28:57.508403Z", - "iopub.status.idle": "2023-08-21T02:28:57.512973Z", - "shell.execute_reply": "2023-08-21T02:28:57.512720Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1285,12 +1200,7 @@ "execution_count": 18, "id": "a73446bf", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.514459Z", - "iopub.status.busy": "2023-08-21T02:28:57.514377Z", - "iopub.status.idle": "2023-08-21T02:28:57.517011Z", - "shell.execute_reply": "2023-08-21T02:28:57.516758Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1343,12 +1253,7 @@ "execution_count": 19, "id": "8174767d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.518464Z", - "iopub.status.busy": "2023-08-21T02:28:57.518363Z", - "iopub.status.idle": "2023-08-21T02:28:57.528289Z", - "shell.execute_reply": "2023-08-21T02:28:57.527983Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1437,12 +1342,7 @@ "execution_count": 20, "id": "cba7e815", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.529915Z", - "iopub.status.busy": "2023-08-21T02:28:57.529812Z", - "iopub.status.idle": "2023-08-21T02:28:57.532108Z", - "shell.execute_reply": "2023-08-21T02:28:57.531849Z" - } + "execution": {} }, "outputs": [ { @@ -1491,12 +1391,7 @@ "execution_count": 21, "id": "97993185", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.533565Z", - "iopub.status.busy": "2023-08-21T02:28:57.533462Z", - "iopub.status.idle": "2023-08-21T02:28:57.537458Z", - "shell.execute_reply": "2023-08-21T02:28:57.537180Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1543,12 +1438,7 @@ "execution_count": 22, "id": "4bc774e9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.539054Z", - "iopub.status.busy": "2023-08-21T02:28:57.538952Z", - "iopub.status.idle": "2023-08-21T02:28:57.540857Z", - "shell.execute_reply": "2023-08-21T02:28:57.540537Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1571,12 +1461,7 @@ "execution_count": 23, "id": "8c6c0723", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.542568Z", - "iopub.status.busy": "2023-08-21T02:28:57.542481Z", - "iopub.status.idle": "2023-08-21T02:28:57.548927Z", - "shell.execute_reply": "2023-08-21T02:28:57.548581Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1627,12 +1512,7 @@ "execution_count": 24, "id": "cf8fd5ac", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.550601Z", - "iopub.status.busy": "2023-08-21T02:28:57.550496Z", - "iopub.status.idle": "2023-08-21T02:28:57.552737Z", - "shell.execute_reply": "2023-08-21T02:28:57.552471Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1668,12 +1548,7 @@ "execution_count": 25, "id": "bfd6b3f8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.554217Z", - "iopub.status.busy": "2023-08-21T02:28:57.554117Z", - "iopub.status.idle": "2023-08-21T02:28:57.556249Z", - "shell.execute_reply": "2023-08-21T02:28:57.555998Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1706,12 +1581,7 @@ "execution_count": 26, "id": "a1f75de4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.557716Z", - "iopub.status.busy": "2023-08-21T02:28:57.557623Z", - "iopub.status.idle": "2023-08-21T02:28:57.559886Z", - "shell.execute_reply": "2023-08-21T02:28:57.559582Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1743,12 +1613,7 @@ "execution_count": 27, "id": "82794178", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.561606Z", - "iopub.status.busy": "2023-08-21T02:28:57.561489Z", - "iopub.status.idle": "2023-08-21T02:28:57.563996Z", - "shell.execute_reply": "2023-08-21T02:28:57.563652Z" - } + "execution": {} }, "outputs": [ { @@ -1781,12 +1646,7 @@ "execution_count": 28, "id": "9b571047", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.565689Z", - "iopub.status.busy": "2023-08-21T02:28:57.565573Z", - "iopub.status.idle": "2023-08-21T02:28:57.568080Z", - "shell.execute_reply": "2023-08-21T02:28:57.567748Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1808,12 +1668,7 @@ "execution_count": 29, "id": "60f3d13a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.569793Z", - "iopub.status.busy": "2023-08-21T02:28:57.569674Z", - "iopub.status.idle": "2023-08-21T02:28:57.574322Z", - "shell.execute_reply": "2023-08-21T02:28:57.573986Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1895,12 +1750,7 @@ "execution_count": 30, "id": "96e680d9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.576103Z", - "iopub.status.busy": "2023-08-21T02:28:57.575991Z", - "iopub.status.idle": "2023-08-21T02:28:57.579068Z", - "shell.execute_reply": "2023-08-21T02:28:57.578805Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1939,12 +1789,7 @@ "execution_count": 31, "id": "b6695125", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.580746Z", - "iopub.status.busy": "2023-08-21T02:28:57.580639Z", - "iopub.status.idle": "2023-08-21T02:28:57.583327Z", - "shell.execute_reply": "2023-08-21T02:28:57.583073Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1985,12 +1830,7 @@ "execution_count": 32, "id": "3f38a14e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.584834Z", - "iopub.status.busy": "2023-08-21T02:28:57.584748Z", - "iopub.status.idle": "2023-08-21T02:28:57.587140Z", - "shell.execute_reply": "2023-08-21T02:28:57.586884Z" - } + "execution": {} }, "outputs": [ { @@ -2050,12 +1890,7 @@ "execution_count": 33, "id": "9b645803", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.588684Z", - "iopub.status.busy": "2023-08-21T02:28:57.588575Z", - "iopub.status.idle": "2023-08-21T02:28:57.592433Z", - "shell.execute_reply": "2023-08-21T02:28:57.592165Z" - } + "execution": {} }, "outputs": [ { @@ -2090,12 +1925,7 @@ "execution_count": 34, "id": "abfae544", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.593864Z", - "iopub.status.busy": "2023-08-21T02:28:57.593784Z", - "iopub.status.idle": "2023-08-21T02:28:57.596074Z", - "shell.execute_reply": "2023-08-21T02:28:57.595807Z" - } + "execution": {} }, "outputs": [ { @@ -2129,12 +1959,7 @@ "execution_count": 35, "id": "2a3bb41e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.597540Z", - "iopub.status.busy": "2023-08-21T02:28:57.597455Z", - "iopub.status.idle": "2023-08-21T02:28:57.599658Z", - "shell.execute_reply": "2023-08-21T02:28:57.599399Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2171,12 +1996,7 @@ "execution_count": 36, "id": "1c64310b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.601097Z", - "iopub.status.busy": "2023-08-21T02:28:57.601019Z", - "iopub.status.idle": "2023-08-21T02:28:57.605729Z", - "shell.execute_reply": "2023-08-21T02:28:57.605444Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2256,12 +2076,7 @@ "execution_count": 37, "id": "0c05c5a8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.607207Z", - "iopub.status.busy": "2023-08-21T02:28:57.607093Z", - "iopub.status.idle": "2023-08-21T02:28:57.609626Z", - "shell.execute_reply": "2023-08-21T02:28:57.609348Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2312,12 +2127,7 @@ "execution_count": 38, "id": "47d85305", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.611305Z", - "iopub.status.busy": "2023-08-21T02:28:57.611177Z", - "iopub.status.idle": "2023-08-21T02:28:57.615527Z", - "shell.execute_reply": "2023-08-21T02:28:57.615221Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2353,12 +2163,7 @@ "execution_count": 39, "id": "c553aadf", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.617346Z", - "iopub.status.busy": "2023-08-21T02:28:57.617202Z", - "iopub.status.idle": "2023-08-21T02:28:57.619612Z", - "shell.execute_reply": "2023-08-21T02:28:57.619301Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2390,12 +2195,7 @@ "execution_count": 40, "id": "4604bd3d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.621294Z", - "iopub.status.busy": "2023-08-21T02:28:57.621168Z", - "iopub.status.idle": "2023-08-21T02:28:57.623355Z", - "shell.execute_reply": "2023-08-21T02:28:57.623086Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2429,12 +2229,7 @@ "execution_count": 41, "id": "5ac2cabe", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.624902Z", - "iopub.status.busy": "2023-08-21T02:28:57.624775Z", - "iopub.status.idle": "2023-08-21T02:28:57.627201Z", - "shell.execute_reply": "2023-08-21T02:28:57.626911Z" - } + "execution": {} }, "outputs": [ { @@ -2466,12 +2261,7 @@ "execution_count": 42, "id": "f8623945", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.628781Z", - "iopub.status.busy": "2023-08-21T02:28:57.628673Z", - "iopub.status.idle": "2023-08-21T02:28:57.631185Z", - "shell.execute_reply": "2023-08-21T02:28:57.630909Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2506,12 +2296,7 @@ "execution_count": 43, "id": "0790f26e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.632749Z", - "iopub.status.busy": "2023-08-21T02:28:57.632622Z", - "iopub.status.idle": "2023-08-21T02:28:57.635950Z", - "shell.execute_reply": "2023-08-21T02:28:57.635645Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2545,12 +2330,7 @@ "execution_count": 44, "id": "4a8cf0ce", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.637431Z", - "iopub.status.busy": "2023-08-21T02:28:57.637345Z", - "iopub.status.idle": "2023-08-21T02:28:57.640679Z", - "shell.execute_reply": "2023-08-21T02:28:57.640387Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2585,12 +2365,7 @@ "execution_count": 45, "id": "94e7ff1a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.642306Z", - "iopub.status.busy": "2023-08-21T02:28:57.642190Z", - "iopub.status.idle": "2023-08-21T02:28:57.646804Z", - "shell.execute_reply": "2023-08-21T02:28:57.646534Z" - } + "execution": {} }, "outputs": [ { @@ -2670,12 +2445,7 @@ "execution_count": 46, "id": "137e23aa", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.648357Z", - "iopub.status.busy": "2023-08-21T02:28:57.648246Z", - "iopub.status.idle": "2023-08-21T02:28:57.651178Z", - "shell.execute_reply": "2023-08-21T02:28:57.650935Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2720,12 +2490,7 @@ "execution_count": 47, "id": "142c5217", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.652781Z", - "iopub.status.busy": "2023-08-21T02:28:57.652676Z", - "iopub.status.idle": "2023-08-21T02:28:57.665013Z", - "shell.execute_reply": "2023-08-21T02:28:57.664742Z" - } + "execution": {} }, "outputs": [ { @@ -2808,12 +2573,7 @@ "execution_count": 48, "id": "f5a272ee", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.666910Z", - "iopub.status.busy": "2023-08-21T02:28:57.666782Z", - "iopub.status.idle": "2023-08-21T02:28:57.669498Z", - "shell.execute_reply": "2023-08-21T02:28:57.669179Z" - } + "execution": {} }, "outputs": [ { @@ -2845,12 +2605,7 @@ "execution_count": 49, "id": "95e206a8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.671045Z", - "iopub.status.busy": "2023-08-21T02:28:57.670939Z", - "iopub.status.idle": "2023-08-21T02:28:57.679000Z", - "shell.execute_reply": "2023-08-21T02:28:57.678715Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2900,12 +2655,7 @@ "execution_count": 50, "id": "422563b7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.680643Z", - "iopub.status.busy": "2023-08-21T02:28:57.680560Z", - "iopub.status.idle": "2023-08-21T02:28:57.698929Z", - "shell.execute_reply": "2023-08-21T02:28:57.698652Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2944,12 +2694,7 @@ "execution_count": 51, "id": "583c860c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.700534Z", - "iopub.status.busy": "2023-08-21T02:28:57.700406Z", - "iopub.status.idle": "2023-08-21T02:28:57.702790Z", - "shell.execute_reply": "2023-08-21T02:28:57.702539Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2981,12 +2726,7 @@ "execution_count": 52, "id": "19ee3bf2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.704427Z", - "iopub.status.busy": "2023-08-21T02:28:57.704308Z", - "iopub.status.idle": "2023-08-21T02:28:57.707107Z", - "shell.execute_reply": "2023-08-21T02:28:57.706716Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -3030,12 +2770,7 @@ "execution_count": 53, "id": "fdc0e5f1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.708836Z", - "iopub.status.busy": "2023-08-21T02:28:57.708707Z", - "iopub.status.idle": "2023-08-21T02:28:57.710507Z", - "shell.execute_reply": "2023-08-21T02:28:57.710220Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -3069,12 +2804,7 @@ "execution_count": 54, "id": "2bb9d48b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.712025Z", - "iopub.status.busy": "2023-08-21T02:28:57.711919Z", - "iopub.status.idle": "2023-08-21T02:28:57.717961Z", - "shell.execute_reply": "2023-08-21T02:28:57.717623Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -3097,12 +2827,7 @@ "execution_count": 55, "id": "649b57b3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.719733Z", - "iopub.status.busy": "2023-08-21T02:28:57.719643Z", - "iopub.status.idle": "2023-08-21T02:28:57.725788Z", - "shell.execute_reply": "2023-08-21T02:28:57.725511Z" - } + "execution": {} }, "outputs": [ { @@ -3153,12 +2878,7 @@ "execution_count": 56, "id": "d0aafd5e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.727208Z", - "iopub.status.busy": "2023-08-21T02:28:57.727114Z", - "iopub.status.idle": "2023-08-21T02:28:57.730769Z", - "shell.execute_reply": "2023-08-21T02:28:57.730507Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -3188,12 +2908,7 @@ "execution_count": 57, "id": "ad02fb42", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:57.732302Z", - "iopub.status.busy": "2023-08-21T02:28:57.732202Z", - "iopub.status.idle": "2023-08-21T02:28:58.059169Z", - "shell.execute_reply": "2023-08-21T02:28:58.058739Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -3241,12 +2956,7 @@ "execution_count": 58, "id": "901f772e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.061293Z", - "iopub.status.busy": "2023-08-21T02:28:58.061165Z", - "iopub.status.idle": "2023-08-21T02:28:58.067519Z", - "shell.execute_reply": "2023-08-21T02:28:58.067152Z" - } + "execution": {} }, "outputs": [ { @@ -3326,12 +3036,7 @@ "execution_count": 59, "id": "684f8941", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.069340Z", - "iopub.status.busy": "2023-08-21T02:28:58.069223Z", - "iopub.status.idle": "2023-08-21T02:28:58.071737Z", - "shell.execute_reply": "2023-08-21T02:28:58.071247Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -3370,12 +3075,7 @@ "execution_count": 60, "id": "4d984cf0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.073571Z", - "iopub.status.busy": "2023-08-21T02:28:58.073457Z", - "iopub.status.idle": "2023-08-21T02:28:58.146516Z", - "shell.execute_reply": "2023-08-21T02:28:58.146020Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3437,12 +3137,7 @@ "execution_count": 61, "id": "d24f4e50", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.148624Z", - "iopub.status.busy": "2023-08-21T02:28:58.148360Z", - "iopub.status.idle": "2023-08-21T02:28:58.773984Z", - "shell.execute_reply": "2023-08-21T02:28:58.773325Z" - } + "execution": {} }, "outputs": [ { @@ -3534,12 +3229,7 @@ "execution_count": 62, "id": "25152580", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.778052Z", - "iopub.status.busy": "2023-08-21T02:28:58.777754Z", - "iopub.status.idle": "2023-08-21T02:28:58.791505Z", - "shell.execute_reply": "2023-08-21T02:28:58.790362Z" - } + "execution": {} }, "outputs": [ { @@ -3609,12 +3299,7 @@ "execution_count": 63, "id": "b8ea6e08", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.798441Z", - "iopub.status.busy": "2023-08-21T02:28:58.798187Z", - "iopub.status.idle": "2023-08-21T02:28:58.805015Z", - "shell.execute_reply": "2023-08-21T02:28:58.804266Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3649,12 +3334,7 @@ "execution_count": 64, "id": "def80d79", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.808423Z", - "iopub.status.busy": "2023-08-21T02:28:58.807929Z", - "iopub.status.idle": "2023-08-21T02:28:58.826147Z", - "shell.execute_reply": "2023-08-21T02:28:58.825308Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -3675,12 +3355,7 @@ "execution_count": 65, "id": "f899d5ab", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.838005Z", - "iopub.status.busy": "2023-08-21T02:28:58.837542Z", - "iopub.status.idle": "2023-08-21T02:28:58.842697Z", - "shell.execute_reply": "2023-08-21T02:28:58.841989Z" - } + "execution": {} }, "outputs": [ { @@ -3717,12 +3392,7 @@ "execution_count": 66, "id": "76f4cea5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.846154Z", - "iopub.status.busy": "2023-08-21T02:28:58.845860Z", - "iopub.status.idle": "2023-08-21T02:28:58.936368Z", - "shell.execute_reply": "2023-08-21T02:28:58.931496Z" - } + "execution": {} }, "outputs": [ { @@ -4121,12 +3791,7 @@ "execution_count": 67, "id": "5778ada8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.941746Z", - "iopub.status.busy": "2023-08-21T02:28:58.941366Z", - "iopub.status.idle": "2023-08-21T02:28:58.948890Z", - "shell.execute_reply": "2023-08-21T02:28:58.947630Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -4148,12 +3813,7 @@ "execution_count": 68, "id": "c6da14b9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:58.953721Z", - "iopub.status.busy": "2023-08-21T02:28:58.953330Z", - "iopub.status.idle": "2023-08-21T02:28:59.054283Z", - "shell.execute_reply": "2023-08-21T02:28:59.053564Z" - } + "execution": {} }, "outputs": [ { @@ -4558,12 +4218,7 @@ "execution_count": 69, "id": "461d57c5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.063565Z", - "iopub.status.busy": "2023-08-21T02:28:59.063233Z", - "iopub.status.idle": "2023-08-21T02:28:59.071787Z", - "shell.execute_reply": "2023-08-21T02:28:59.070620Z" - } + "execution": {} }, "outputs": [ { @@ -4595,12 +4250,7 @@ "execution_count": 70, "id": "05d33247", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.077767Z", - "iopub.status.busy": "2023-08-21T02:28:59.077090Z", - "iopub.status.idle": "2023-08-21T02:28:59.085265Z", - "shell.execute_reply": "2023-08-21T02:28:59.084291Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -4638,12 +4288,7 @@ "execution_count": 71, "id": "bee42b38", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.089190Z", - "iopub.status.busy": "2023-08-21T02:28:59.088696Z", - "iopub.status.idle": "2023-08-21T02:28:59.099445Z", - "shell.execute_reply": "2023-08-21T02:28:59.098750Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -4687,12 +4332,7 @@ "execution_count": 72, "id": "4aa60857", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.103423Z", - "iopub.status.busy": "2023-08-21T02:28:59.103057Z", - "iopub.status.idle": "2023-08-21T02:28:59.112346Z", - "shell.execute_reply": "2023-08-21T02:28:59.111002Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -4744,12 +4384,7 @@ "execution_count": 73, "id": "894d3e2c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.116495Z", - "iopub.status.busy": "2023-08-21T02:28:59.116193Z", - "iopub.status.idle": "2023-08-21T02:28:59.250351Z", - "shell.execute_reply": "2023-08-21T02:28:59.249608Z" - } + "execution": {} }, "outputs": [ { @@ -4786,12 +4421,7 @@ "execution_count": 74, "id": "d636746e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.253708Z", - "iopub.status.busy": "2023-08-21T02:28:59.253326Z", - "iopub.status.idle": "2023-08-21T02:28:59.260644Z", - "shell.execute_reply": "2023-08-21T02:28:59.259501Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -4815,12 +4445,7 @@ "execution_count": 75, "id": "ce6a1623", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.264364Z", - "iopub.status.busy": "2023-08-21T02:28:59.264112Z", - "iopub.status.idle": "2023-08-21T02:28:59.384102Z", - "shell.execute_reply": "2023-08-21T02:28:59.383714Z" - } + "execution": {} }, "outputs": [ { @@ -4861,12 +4486,7 @@ "execution_count": 76, "id": "9fb8b759", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.386009Z", - "iopub.status.busy": "2023-08-21T02:28:59.385867Z", - "iopub.status.idle": "2023-08-21T02:28:59.478822Z", - "shell.execute_reply": "2023-08-21T02:28:59.477841Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -4886,12 +4506,7 @@ "execution_count": 77, "id": "ee272341", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.482988Z", - "iopub.status.busy": "2023-08-21T02:28:59.482517Z", - "iopub.status.idle": "2023-08-21T02:28:59.506926Z", - "shell.execute_reply": "2023-08-21T02:28:59.506267Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -4920,12 +4535,7 @@ "execution_count": 78, "id": "1f5bde07", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.510834Z", - "iopub.status.busy": "2023-08-21T02:28:59.510470Z", - "iopub.status.idle": "2023-08-21T02:28:59.792175Z", - "shell.execute_reply": "2023-08-21T02:28:59.791845Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -4977,12 +4587,7 @@ "execution_count": 79, "id": "b0bd66a1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:28:59.793823Z", - "iopub.status.busy": "2023-08-21T02:28:59.793732Z", - "iopub.status.idle": "2023-08-21T02:28:59.904438Z", - "shell.execute_reply": "2023-08-21T02:28:59.904151Z" - } + "execution": {} }, "outputs": [ { diff --git a/Ch05-resample-lab.ipynb b/Ch05-resample-lab.ipynb index 85c1f65..8749b41 100644 --- a/Ch05-resample-lab.ipynb +++ b/Ch05-resample-lab.ipynb @@ -28,12 +28,7 @@ "execution_count": 1, "id": "e7712cfe", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:01.252458Z", - "iopub.status.busy": "2023-08-21T02:29:01.251970Z", - "iopub.status.idle": "2023-08-21T02:29:02.044045Z", - "shell.execute_reply": "2023-08-21T02:29:02.043730Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -60,12 +55,7 @@ "execution_count": 2, "id": "21c2ed4f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:02.045927Z", - "iopub.status.busy": "2023-08-21T02:29:02.045761Z", - "iopub.status.idle": "2023-08-21T02:29:02.047761Z", - "shell.execute_reply": "2023-08-21T02:29:02.047491Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -104,12 +94,7 @@ "execution_count": 3, "id": "8af59641", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:02.049239Z", - "iopub.status.busy": "2023-08-21T02:29:02.049145Z", - "iopub.status.idle": "2023-08-21T02:29:02.055524Z", - "shell.execute_reply": "2023-08-21T02:29:02.055162Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -132,12 +117,7 @@ "execution_count": 4, "id": "d9b0b7c8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:02.057278Z", - "iopub.status.busy": "2023-08-21T02:29:02.057182Z", - "iopub.status.idle": "2023-08-21T02:29:02.062537Z", - "shell.execute_reply": "2023-08-21T02:29:02.062265Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -162,12 +142,7 @@ "execution_count": 5, "id": "3e77d831", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:02.064056Z", - "iopub.status.busy": "2023-08-21T02:29:02.063966Z", - "iopub.status.idle": "2023-08-21T02:29:02.068279Z", - "shell.execute_reply": "2023-08-21T02:29:02.068024Z" - } + "execution": {} }, "outputs": [ { @@ -206,12 +181,7 @@ "execution_count": 6, "id": "0aa4bfcc", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:02.069789Z", - "iopub.status.busy": "2023-08-21T02:29:02.069682Z", - "iopub.status.idle": "2023-08-21T02:29:02.071953Z", - "shell.execute_reply": "2023-08-21T02:29:02.071703Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -249,12 +219,7 @@ "execution_count": 7, "id": "a0dbd55f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:02.073322Z", - "iopub.status.busy": "2023-08-21T02:29:02.073229Z", - "iopub.status.idle": "2023-08-21T02:29:02.088464Z", - "shell.execute_reply": "2023-08-21T02:29:02.088192Z" - } + "execution": {} }, "outputs": [ { @@ -293,12 +258,7 @@ "execution_count": 8, "id": "885136a4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:02.089889Z", - "iopub.status.busy": "2023-08-21T02:29:02.089804Z", - "iopub.status.idle": "2023-08-21T02:29:02.105353Z", - "shell.execute_reply": "2023-08-21T02:29:02.105089Z" - } + "execution": {} }, "outputs": [ { @@ -376,12 +336,7 @@ "execution_count": 9, "id": "6d957d8c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:02.106979Z", - "iopub.status.busy": "2023-08-21T02:29:02.106884Z", - "iopub.status.idle": "2023-08-21T02:29:03.184550Z", - "shell.execute_reply": "2023-08-21T02:29:03.184259Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -444,12 +399,7 @@ "execution_count": 10, "id": "e2b5ce95", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:03.186226Z", - "iopub.status.busy": "2023-08-21T02:29:03.186108Z", - "iopub.status.idle": "2023-08-21T02:29:03.782413Z", - "shell.execute_reply": "2023-08-21T02:29:03.782122Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -501,12 +451,7 @@ "execution_count": 11, "id": "1dda1bd7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:03.783997Z", - "iopub.status.busy": "2023-08-21T02:29:03.783886Z", - "iopub.status.idle": "2023-08-21T02:29:03.786132Z", - "shell.execute_reply": "2023-08-21T02:29:03.785881Z" - } + "execution": {} }, "outputs": [ { @@ -543,12 +488,7 @@ "execution_count": 12, "id": "fb25fa70", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:03.787622Z", - "iopub.status.busy": "2023-08-21T02:29:03.787525Z", - "iopub.status.idle": "2023-08-21T02:29:03.809671Z", - "shell.execute_reply": "2023-08-21T02:29:03.809398Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -608,12 +548,7 @@ "execution_count": 13, "id": "d78795cd", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:03.811123Z", - "iopub.status.busy": "2023-08-21T02:29:03.811046Z", - "iopub.status.idle": "2023-08-21T02:29:03.817840Z", - "shell.execute_reply": "2023-08-21T02:29:03.817582Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -652,12 +587,7 @@ "execution_count": 14, "id": "0407ad56", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:03.819308Z", - "iopub.status.busy": "2023-08-21T02:29:03.819228Z", - "iopub.status.idle": "2023-08-21T02:29:03.851921Z", - "shell.execute_reply": "2023-08-21T02:29:03.851658Z" - } + "execution": {} }, "outputs": [ { @@ -726,12 +656,7 @@ "execution_count": 15, "id": "f04f15bd", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:03.853415Z", - "iopub.status.busy": "2023-08-21T02:29:03.853334Z", - "iopub.status.idle": "2023-08-21T02:29:03.857370Z", - "shell.execute_reply": "2023-08-21T02:29:03.857115Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -760,12 +685,7 @@ "execution_count": 16, "id": "f98c0323", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:03.858828Z", - "iopub.status.busy": "2023-08-21T02:29:03.858753Z", - "iopub.status.idle": "2023-08-21T02:29:03.861443Z", - "shell.execute_reply": "2023-08-21T02:29:03.861198Z" - } + "execution": {} }, "outputs": [ { @@ -799,12 +719,7 @@ "execution_count": 17, "id": "bcd40175", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:03.862933Z", - "iopub.status.busy": "2023-08-21T02:29:03.862830Z", - "iopub.status.idle": "2023-08-21T02:29:03.865766Z", - "shell.execute_reply": "2023-08-21T02:29:03.865514Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -842,12 +757,7 @@ "execution_count": 18, "id": "ab6602cd", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:03.867170Z", - "iopub.status.busy": "2023-08-21T02:29:03.867072Z", - "iopub.status.idle": "2023-08-21T02:29:03.869326Z", - "shell.execute_reply": "2023-08-21T02:29:03.869094Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -887,12 +797,7 @@ "execution_count": 19, "id": "4a323513", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:03.870755Z", - "iopub.status.busy": "2023-08-21T02:29:03.870664Z", - "iopub.status.idle": "2023-08-21T02:29:04.157907Z", - "shell.execute_reply": "2023-08-21T02:29:04.157623Z" - } + "execution": {} }, "outputs": [ { @@ -953,12 +858,7 @@ "execution_count": 20, "id": "0220f3af", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:04.159500Z", - "iopub.status.busy": "2023-08-21T02:29:04.159419Z", - "iopub.status.idle": "2023-08-21T02:29:04.161332Z", - "shell.execute_reply": "2023-08-21T02:29:04.161073Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -988,12 +888,7 @@ "execution_count": 21, "id": "62037dcb", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:04.162950Z", - "iopub.status.busy": "2023-08-21T02:29:04.162849Z", - "iopub.status.idle": "2023-08-21T02:29:04.164486Z", - "shell.execute_reply": "2023-08-21T02:29:04.164241Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1021,12 +916,7 @@ "execution_count": 22, "id": "b8bdb7a4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:04.165879Z", - "iopub.status.busy": "2023-08-21T02:29:04.165798Z", - "iopub.status.idle": "2023-08-21T02:29:04.194029Z", - "shell.execute_reply": "2023-08-21T02:29:04.193764Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1072,12 +962,7 @@ "execution_count": 23, "id": "36808258", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:04.195612Z", - "iopub.status.busy": "2023-08-21T02:29:04.195529Z", - "iopub.status.idle": "2023-08-21T02:29:06.747175Z", - "shell.execute_reply": "2023-08-21T02:29:06.746638Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1122,12 +1007,7 @@ "execution_count": 24, "id": "c9aea297", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:06.749614Z", - "iopub.status.busy": "2023-08-21T02:29:06.749433Z", - "iopub.status.idle": "2023-08-21T02:29:06.812583Z", - "shell.execute_reply": "2023-08-21T02:29:06.812298Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1194,12 +1074,7 @@ "execution_count": 25, "id": "79c56529", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:06.814267Z", - "iopub.status.busy": "2023-08-21T02:29:06.814125Z", - "iopub.status.idle": "2023-08-21T02:29:10.162177Z", - "shell.execute_reply": "2023-08-21T02:29:10.161855Z" - } + "execution": {} }, "outputs": [ { @@ -1237,12 +1112,7 @@ "execution_count": 26, "id": "4d0b4edc", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:10.163852Z", - "iopub.status.busy": "2023-08-21T02:29:10.163742Z", - "iopub.status.idle": "2023-08-21T02:29:10.173834Z", - "shell.execute_reply": "2023-08-21T02:29:10.173578Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ diff --git a/Ch06-varselect-lab.ipynb b/Ch06-varselect-lab.ipynb index f3342ea..bd20ce2 100644 --- a/Ch06-varselect-lab.ipynb +++ b/Ch06-varselect-lab.ipynb @@ -25,12 +25,7 @@ "execution_count": 1, "id": "638bdae9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:11.258581Z", - "iopub.status.busy": "2023-08-21T02:29:11.258299Z", - "iopub.status.idle": "2023-08-21T02:29:12.282137Z", - "shell.execute_reply": "2023-08-21T02:29:12.281824Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -60,12 +55,7 @@ "execution_count": 2, "id": "c4b3398b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:12.284057Z", - "iopub.status.busy": "2023-08-21T02:29:12.283895Z", - "iopub.status.idle": "2023-08-21T02:29:14.091024Z", - "shell.execute_reply": "2023-08-21T02:29:14.090709Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -124,12 +114,7 @@ "execution_count": 3, "id": "18d03122", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:14.092873Z", - "iopub.status.busy": "2023-08-21T02:29:14.092763Z", - "iopub.status.idle": "2023-08-21T02:29:14.099984Z", - "shell.execute_reply": "2023-08-21T02:29:14.099726Z" - } + "execution": {} }, "outputs": [ { @@ -163,12 +148,7 @@ "execution_count": 4, "id": "87a4ba00", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:14.101494Z", - "iopub.status.busy": "2023-08-21T02:29:14.101409Z", - "iopub.status.idle": "2023-08-21T02:29:14.104265Z", - "shell.execute_reply": "2023-08-21T02:29:14.104009Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -204,12 +184,7 @@ "execution_count": 5, "id": "97d6b69c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:14.105644Z", - "iopub.status.busy": "2023-08-21T02:29:14.105549Z", - "iopub.status.idle": "2023-08-21T02:29:14.107583Z", - "shell.execute_reply": "2023-08-21T02:29:14.107310Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -236,12 +211,7 @@ "execution_count": 6, "id": "2575e116", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:14.109006Z", - "iopub.status.busy": "2023-08-21T02:29:14.108924Z", - "iopub.status.idle": "2023-08-21T02:29:14.129547Z", - "shell.execute_reply": "2023-08-21T02:29:14.129253Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -264,12 +234,7 @@ "execution_count": 7, "id": "4cfae1c0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:14.131136Z", - "iopub.status.busy": "2023-08-21T02:29:14.131050Z", - "iopub.status.idle": "2023-08-21T02:29:14.132859Z", - "shell.execute_reply": "2023-08-21T02:29:14.132610Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -302,12 +267,7 @@ "execution_count": 8, "id": "98b62676", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:14.134396Z", - "iopub.status.busy": "2023-08-21T02:29:14.134312Z", - "iopub.status.idle": "2023-08-21T02:29:14.136156Z", - "shell.execute_reply": "2023-08-21T02:29:14.135905Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -333,12 +293,7 @@ "execution_count": 9, "id": "3d1bd25a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:14.137540Z", - "iopub.status.busy": "2023-08-21T02:29:14.137462Z", - "iopub.status.idle": "2023-08-21T02:29:15.145790Z", - "shell.execute_reply": "2023-08-21T02:29:15.145505Z" - } + "execution": {} }, "outputs": [ { @@ -390,12 +345,7 @@ "execution_count": 10, "id": "b25dfa6c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:15.147492Z", - "iopub.status.busy": "2023-08-21T02:29:15.147368Z", - "iopub.status.idle": "2023-08-21T02:29:15.796510Z", - "shell.execute_reply": "2023-08-21T02:29:15.796218Z" - } + "execution": {} }, "outputs": [ { @@ -456,12 +406,7 @@ "execution_count": 11, "id": "0ef3f82d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:15.798342Z", - "iopub.status.busy": "2023-08-21T02:29:15.798201Z", - "iopub.status.idle": "2023-08-21T02:29:15.800265Z", - "shell.execute_reply": "2023-08-21T02:29:15.799952Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -484,12 +429,7 @@ "execution_count": 12, "id": "d4a8cf16", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:15.802048Z", - "iopub.status.busy": "2023-08-21T02:29:15.801932Z", - "iopub.status.idle": "2023-08-21T02:29:16.552146Z", - "shell.execute_reply": "2023-08-21T02:29:16.550354Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -529,12 +469,7 @@ "execution_count": 13, "id": "ce40a9ba", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:16.556568Z", - "iopub.status.busy": "2023-08-21T02:29:16.555939Z", - "iopub.status.idle": "2023-08-21T02:29:16.866266Z", - "shell.execute_reply": "2023-08-21T02:29:16.865469Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -598,12 +533,7 @@ "execution_count": 14, "id": "c7416ff6", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:16.869059Z", - "iopub.status.busy": "2023-08-21T02:29:16.868880Z", - "iopub.status.idle": "2023-08-21T02:29:20.216833Z", - "shell.execute_reply": "2023-08-21T02:29:20.216545Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -652,12 +582,7 @@ "execution_count": 15, "id": "a2ae089b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:20.218513Z", - "iopub.status.busy": "2023-08-21T02:29:20.218396Z", - "iopub.status.idle": "2023-08-21T02:29:20.221477Z", - "shell.execute_reply": "2023-08-21T02:29:20.221172Z" - } + "execution": {} }, "outputs": [ { @@ -694,12 +619,7 @@ "execution_count": 16, "id": "1681a9db", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:20.223098Z", - "iopub.status.busy": "2023-08-21T02:29:20.223012Z", - "iopub.status.idle": "2023-08-21T02:29:20.308656Z", - "shell.execute_reply": "2023-08-21T02:29:20.308356Z" - } + "execution": {} }, "outputs": [ { @@ -740,12 +660,7 @@ "execution_count": 17, "id": "5764b0ba", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:20.310366Z", - "iopub.status.busy": "2023-08-21T02:29:20.310242Z", - "iopub.status.idle": "2023-08-21T02:29:20.927992Z", - "shell.execute_reply": "2023-08-21T02:29:20.927702Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -774,12 +689,7 @@ "execution_count": 18, "id": "d76f3d3a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:20.929777Z", - "iopub.status.busy": "2023-08-21T02:29:20.929678Z", - "iopub.status.idle": "2023-08-21T02:29:21.021186Z", - "shell.execute_reply": "2023-08-21T02:29:21.020858Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -827,12 +737,7 @@ "execution_count": 19, "id": "ed25c2d4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:21.022941Z", - "iopub.status.busy": "2023-08-21T02:29:21.022836Z", - "iopub.status.idle": "2023-08-21T02:29:21.043228Z", - "shell.execute_reply": "2023-08-21T02:29:21.042926Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -856,12 +761,7 @@ "execution_count": 20, "id": "31e99e02", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:21.044846Z", - "iopub.status.busy": "2023-08-21T02:29:21.044745Z", - "iopub.status.idle": "2023-08-21T02:29:23.376539Z", - "shell.execute_reply": "2023-08-21T02:29:23.376256Z" - } + "execution": {} }, "outputs": [ { @@ -911,12 +811,7 @@ "execution_count": 21, "id": "214d0f23", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.378603Z", - "iopub.status.busy": "2023-08-21T02:29:23.378467Z", - "iopub.status.idle": "2023-08-21T02:29:23.380970Z", - "shell.execute_reply": "2023-08-21T02:29:23.380691Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -976,12 +871,7 @@ "execution_count": 22, "id": "ca7469fb", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.382549Z", - "iopub.status.busy": "2023-08-21T02:29:23.382432Z", - "iopub.status.idle": "2023-08-21T02:29:23.450752Z", - "shell.execute_reply": "2023-08-21T02:29:23.450471Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1443,12 +1333,7 @@ "execution_count": 23, "id": "a5b4b3a7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.452873Z", - "iopub.status.busy": "2023-08-21T02:29:23.452757Z", - "iopub.status.idle": "2023-08-21T02:29:23.462335Z", - "shell.execute_reply": "2023-08-21T02:29:23.462029Z" - } + "execution": {} }, "outputs": [ { @@ -1865,12 +1750,7 @@ "execution_count": 24, "id": "ffdcd0c6", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.463956Z", - "iopub.status.busy": "2023-08-21T02:29:23.463846Z", - "iopub.status.idle": "2023-08-21T02:29:23.670285Z", - "shell.execute_reply": "2023-08-21T02:29:23.669949Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1910,12 +1790,7 @@ "execution_count": 25, "id": "e60d63d3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.671975Z", - "iopub.status.busy": "2023-08-21T02:29:23.671852Z", - "iopub.status.idle": "2023-08-21T02:29:23.674849Z", - "shell.execute_reply": "2023-08-21T02:29:23.674590Z" - } + "execution": {} }, "outputs": [ { @@ -1967,12 +1842,7 @@ "execution_count": 26, "id": "a2253f89", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.676319Z", - "iopub.status.busy": "2023-08-21T02:29:23.676213Z", - "iopub.status.idle": "2023-08-21T02:29:23.678423Z", - "shell.execute_reply": "2023-08-21T02:29:23.678191Z" - } + "execution": {} }, "outputs": [ { @@ -2005,12 +1875,7 @@ "execution_count": 27, "id": "aa10fcf4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.679982Z", - "iopub.status.busy": "2023-08-21T02:29:23.679875Z", - "iopub.status.idle": "2023-08-21T02:29:23.682329Z", - "shell.execute_reply": "2023-08-21T02:29:23.682074Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2046,12 +1911,7 @@ "execution_count": 28, "id": "f5bc4121", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.683856Z", - "iopub.status.busy": "2023-08-21T02:29:23.683756Z", - "iopub.status.idle": "2023-08-21T02:29:23.696250Z", - "shell.execute_reply": "2023-08-21T02:29:23.695956Z" - } + "execution": {} }, "outputs": [ { @@ -2099,12 +1959,7 @@ "execution_count": 29, "id": "e4018437", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.697819Z", - "iopub.status.busy": "2023-08-21T02:29:23.697718Z", - "iopub.status.idle": "2023-08-21T02:29:23.700233Z", - "shell.execute_reply": "2023-08-21T02:29:23.699974Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2146,12 +2001,7 @@ "execution_count": 30, "id": "aaa73183", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.701707Z", - "iopub.status.busy": "2023-08-21T02:29:23.701624Z", - "iopub.status.idle": "2023-08-21T02:29:23.709254Z", - "shell.execute_reply": "2023-08-21T02:29:23.708916Z" - } + "execution": {} }, "outputs": [ { @@ -2204,12 +2054,7 @@ "execution_count": 31, "id": "8f95689e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.711112Z", - "iopub.status.busy": "2023-08-21T02:29:23.710959Z", - "iopub.status.idle": "2023-08-21T02:29:23.718893Z", - "shell.execute_reply": "2023-08-21T02:29:23.718567Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2261,12 +2106,7 @@ "execution_count": 32, "id": "725a3200", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:23.720467Z", - "iopub.status.busy": "2023-08-21T02:29:23.720361Z", - "iopub.status.idle": "2023-08-21T02:29:24.185363Z", - "shell.execute_reply": "2023-08-21T02:29:24.185015Z" - } + "execution": {} }, "outputs": [ { @@ -2518,12 +2358,7 @@ "execution_count": 33, "id": "823982cc", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:24.187182Z", - "iopub.status.busy": "2023-08-21T02:29:24.187049Z", - "iopub.status.idle": "2023-08-21T02:29:27.299737Z", - "shell.execute_reply": "2023-08-21T02:29:27.299435Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3576,12 +3411,7 @@ "execution_count": 34, "id": "b1b7d3b4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:27.301365Z", - "iopub.status.busy": "2023-08-21T02:29:27.301252Z", - "iopub.status.idle": "2023-08-21T02:29:27.401673Z", - "shell.execute_reply": "2023-08-21T02:29:27.401251Z" - } + "execution": {} }, "outputs": [ { @@ -3620,12 +3450,7 @@ "execution_count": 35, "id": "59a69421", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:27.403382Z", - "iopub.status.busy": "2023-08-21T02:29:27.403269Z", - "iopub.status.idle": "2023-08-21T02:29:30.557588Z", - "shell.execute_reply": "2023-08-21T02:29:30.557217Z" - } + "execution": {} }, "outputs": [ { @@ -4710,12 +4535,7 @@ "execution_count": 36, "id": "572b14c3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:30.559540Z", - "iopub.status.busy": "2023-08-21T02:29:30.559406Z", - "iopub.status.idle": "2023-08-21T02:29:30.661941Z", - "shell.execute_reply": "2023-08-21T02:29:30.660478Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -4759,12 +4579,7 @@ "execution_count": 37, "id": "a6129b36", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:30.663816Z", - "iopub.status.busy": "2023-08-21T02:29:30.663686Z", - "iopub.status.idle": "2023-08-21T02:29:31.013347Z", - "shell.execute_reply": "2023-08-21T02:29:31.012943Z" - } + "execution": {} }, "outputs": [ { @@ -6862,12 +6677,7 @@ "execution_count": 38, "id": "3683157f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.015165Z", - "iopub.status.busy": "2023-08-21T02:29:31.015003Z", - "iopub.status.idle": "2023-08-21T02:29:31.140464Z", - "shell.execute_reply": "2023-08-21T02:29:31.139654Z" - } + "execution": {} }, "outputs": [ { @@ -6909,12 +6719,7 @@ "execution_count": 39, "id": "1d504d1b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.144567Z", - "iopub.status.busy": "2023-08-21T02:29:31.144409Z", - "iopub.status.idle": "2023-08-21T02:29:31.154211Z", - "shell.execute_reply": "2023-08-21T02:29:31.151804Z" - } + "execution": {} }, "outputs": [ { @@ -6948,12 +6753,7 @@ "execution_count": 40, "id": "8503f6ed", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.164012Z", - "iopub.status.busy": "2023-08-21T02:29:31.163779Z", - "iopub.status.idle": "2023-08-21T02:29:31.173705Z", - "shell.execute_reply": "2023-08-21T02:29:31.169330Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7013,12 +6813,7 @@ "execution_count": 41, "id": "47ab71ff", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.190830Z", - "iopub.status.busy": "2023-08-21T02:29:31.190341Z", - "iopub.status.idle": "2023-08-21T02:29:31.196927Z", - "shell.execute_reply": "2023-08-21T02:29:31.195551Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -7040,12 +6835,7 @@ "execution_count": 42, "id": "825b7073", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.199687Z", - "iopub.status.busy": "2023-08-21T02:29:31.199561Z", - "iopub.status.idle": "2023-08-21T02:29:31.520903Z", - "shell.execute_reply": "2023-08-21T02:29:31.520496Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -9106,12 +8896,7 @@ "execution_count": 43, "id": "efb2d25e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.523410Z", - "iopub.status.busy": "2023-08-21T02:29:31.523272Z", - "iopub.status.idle": "2023-08-21T02:29:31.579951Z", - "shell.execute_reply": "2023-08-21T02:29:31.579678Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -9142,12 +8927,7 @@ "execution_count": 44, "id": "5d2977a4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.581483Z", - "iopub.status.busy": "2023-08-21T02:29:31.581387Z", - "iopub.status.idle": "2023-08-21T02:29:31.592388Z", - "shell.execute_reply": "2023-08-21T02:29:31.592127Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -9176,12 +8956,7 @@ "execution_count": 45, "id": "0d833201", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.593898Z", - "iopub.status.busy": "2023-08-21T02:29:31.593816Z", - "iopub.status.idle": "2023-08-21T02:29:31.766535Z", - "shell.execute_reply": "2023-08-21T02:29:31.766109Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -9219,12 +8994,7 @@ "execution_count": 46, "id": "bfbf2fe3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.768327Z", - "iopub.status.busy": "2023-08-21T02:29:31.768191Z", - "iopub.status.idle": "2023-08-21T02:29:31.770716Z", - "shell.execute_reply": "2023-08-21T02:29:31.770428Z" - } + "execution": {} }, "outputs": [ { @@ -9255,12 +9025,7 @@ "execution_count": 47, "id": "ccb9a209", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.772272Z", - "iopub.status.busy": "2023-08-21T02:29:31.772160Z", - "iopub.status.idle": "2023-08-21T02:29:31.881691Z", - "shell.execute_reply": "2023-08-21T02:29:31.881374Z" - } + "execution": {} }, "outputs": [ { @@ -9302,12 +9067,7 @@ "execution_count": 48, "id": "40eff15b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.883735Z", - "iopub.status.busy": "2023-08-21T02:29:31.883609Z", - "iopub.status.idle": "2023-08-21T02:29:31.886519Z", - "shell.execute_reply": "2023-08-21T02:29:31.886178Z" - } + "execution": {} }, "outputs": [ { @@ -9372,12 +9132,7 @@ "execution_count": 49, "id": "2bd0cc9c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.888390Z", - "iopub.status.busy": "2023-08-21T02:29:31.888274Z", - "iopub.status.idle": "2023-08-21T02:29:31.893813Z", - "shell.execute_reply": "2023-08-21T02:29:31.893422Z" - } + "execution": {} }, "outputs": [ { @@ -9416,12 +9171,7 @@ "execution_count": 50, "id": "f188c54a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.895683Z", - "iopub.status.busy": "2023-08-21T02:29:31.895544Z", - "iopub.status.idle": "2023-08-21T02:29:31.900117Z", - "shell.execute_reply": "2023-08-21T02:29:31.899738Z" - } + "execution": {} }, "outputs": [ { @@ -9459,12 +9209,7 @@ "execution_count": 51, "id": "8be53659", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:31.902369Z", - "iopub.status.busy": "2023-08-21T02:29:31.902221Z", - "iopub.status.idle": "2023-08-21T02:29:32.087080Z", - "shell.execute_reply": "2023-08-21T02:29:32.086738Z" - } + "execution": {} }, "outputs": [ { @@ -9519,12 +9264,7 @@ "execution_count": 52, "id": "b6c30e1c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:32.088803Z", - "iopub.status.busy": "2023-08-21T02:29:32.088665Z", - "iopub.status.idle": "2023-08-21T02:29:32.188991Z", - "shell.execute_reply": "2023-08-21T02:29:32.188578Z" - } + "execution": {} }, "outputs": [ { @@ -9574,12 +9314,7 @@ "execution_count": 53, "id": "6fedf71f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:32.190664Z", - "iopub.status.busy": "2023-08-21T02:29:32.190543Z", - "iopub.status.idle": "2023-08-21T02:29:32.196709Z", - "shell.execute_reply": "2023-08-21T02:29:32.196462Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -9620,12 +9355,7 @@ "execution_count": 54, "id": "f78e9153", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:32.198160Z", - "iopub.status.busy": "2023-08-21T02:29:32.198072Z", - "iopub.status.idle": "2023-08-21T02:29:32.201083Z", - "shell.execute_reply": "2023-08-21T02:29:32.200686Z" - } + "execution": {} }, "outputs": [ { @@ -9675,12 +9405,7 @@ "execution_count": 55, "id": "31120c88", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:32.203509Z", - "iopub.status.busy": "2023-08-21T02:29:32.203359Z", - "iopub.status.idle": "2023-08-21T02:29:32.207977Z", - "shell.execute_reply": "2023-08-21T02:29:32.207598Z" - } + "execution": {} }, "outputs": [ { @@ -9717,12 +9442,7 @@ "execution_count": 56, "id": "fc6b3a12", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:32.210299Z", - "iopub.status.busy": "2023-08-21T02:29:32.210090Z", - "iopub.status.idle": "2023-08-21T02:29:32.358906Z", - "shell.execute_reply": "2023-08-21T02:29:32.358585Z" - } + "execution": {} }, "outputs": [ { @@ -9770,12 +9490,7 @@ "execution_count": 57, "id": "b806f0e8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:32.362552Z", - "iopub.status.busy": "2023-08-21T02:29:32.362360Z", - "iopub.status.idle": "2023-08-21T02:29:32.464295Z", - "shell.execute_reply": "2023-08-21T02:29:32.463871Z" - } + "execution": {} }, "outputs": [ { diff --git a/Ch07-nonlin-lab.ipynb b/Ch07-nonlin-lab.ipynb index b56a2db..299d9bc 100644 --- a/Ch07-nonlin-lab.ipynb +++ b/Ch07-nonlin-lab.ipynb @@ -20,12 +20,7 @@ "execution_count": 1, "id": "f0d9a8c8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:33.891853Z", - "iopub.status.busy": "2023-08-21T02:29:33.891740Z", - "iopub.status.idle": "2023-08-21T02:29:35.316371Z", - "shell.execute_reply": "2023-08-21T02:29:35.315923Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -54,12 +49,7 @@ "execution_count": 2, "id": "c4bc71b4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.320427Z", - "iopub.status.busy": "2023-08-21T02:29:35.319735Z", - "iopub.status.idle": "2023-08-21T02:29:35.335825Z", - "shell.execute_reply": "2023-08-21T02:29:35.335435Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -93,12 +83,7 @@ "execution_count": 3, "id": "14649fd7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.338249Z", - "iopub.status.busy": "2023-08-21T02:29:35.338114Z", - "iopub.status.idle": "2023-08-21T02:29:35.348243Z", - "shell.execute_reply": "2023-08-21T02:29:35.347922Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -123,12 +108,7 @@ "execution_count": 4, "id": "bca84aa3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.350246Z", - "iopub.status.busy": "2023-08-21T02:29:35.350053Z", - "iopub.status.idle": "2023-08-21T02:29:35.474010Z", - "shell.execute_reply": "2023-08-21T02:29:35.473145Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -258,12 +238,7 @@ "execution_count": 5, "id": "411af5ab", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.479757Z", - "iopub.status.busy": "2023-08-21T02:29:35.479078Z", - "iopub.status.idle": "2023-08-21T02:29:35.483997Z", - "shell.execute_reply": "2023-08-21T02:29:35.483275Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -293,12 +268,7 @@ "execution_count": 6, "id": "0eb6317c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.487461Z", - "iopub.status.busy": "2023-08-21T02:29:35.487287Z", - "iopub.status.idle": "2023-08-21T02:29:35.493595Z", - "shell.execute_reply": "2023-08-21T02:29:35.491379Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -350,12 +320,7 @@ "execution_count": 7, "id": "714f2c6d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.499091Z", - "iopub.status.busy": "2023-08-21T02:29:35.498388Z", - "iopub.status.idle": "2023-08-21T02:29:35.798204Z", - "shell.execute_reply": "2023-08-21T02:29:35.797853Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -419,12 +384,7 @@ "execution_count": 8, "id": "0f5f60ed", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.799903Z", - "iopub.status.busy": "2023-08-21T02:29:35.799807Z", - "iopub.status.idle": "2023-08-21T02:29:35.885877Z", - "shell.execute_reply": "2023-08-21T02:29:35.880532Z" - } + "execution": {} }, "outputs": [ { @@ -559,12 +519,7 @@ "execution_count": 9, "id": "3ca7417d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.892132Z", - "iopub.status.busy": "2023-08-21T02:29:35.891945Z", - "iopub.status.idle": "2023-08-21T02:29:35.906237Z", - "shell.execute_reply": "2023-08-21T02:29:35.903796Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -668,12 +623,7 @@ "execution_count": 10, "id": "caadfcc3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.910461Z", - "iopub.status.busy": "2023-08-21T02:29:35.909732Z", - "iopub.status.idle": "2023-08-21T02:29:35.916845Z", - "shell.execute_reply": "2023-08-21T02:29:35.914913Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -709,12 +659,7 @@ "execution_count": 11, "id": "92de2600", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.921712Z", - "iopub.status.busy": "2023-08-21T02:29:35.921332Z", - "iopub.status.idle": "2023-08-21T02:29:35.972191Z", - "shell.execute_reply": "2023-08-21T02:29:35.968927Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -819,12 +764,7 @@ "execution_count": 12, "id": "a4452162", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:35.977098Z", - "iopub.status.busy": "2023-08-21T02:29:35.976606Z", - "iopub.status.idle": "2023-08-21T02:29:36.071648Z", - "shell.execute_reply": "2023-08-21T02:29:36.069969Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -932,12 +872,7 @@ "execution_count": 13, "id": "5b317cb2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.079783Z", - "iopub.status.busy": "2023-08-21T02:29:36.079376Z", - "iopub.status.idle": "2023-08-21T02:29:36.089301Z", - "shell.execute_reply": "2023-08-21T02:29:36.086171Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -959,12 +894,7 @@ "execution_count": 14, "id": "ba682884", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.096542Z", - "iopub.status.busy": "2023-08-21T02:29:36.096230Z", - "iopub.status.idle": "2023-08-21T02:29:36.294776Z", - "shell.execute_reply": "2023-08-21T02:29:36.292034Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1024,12 +954,7 @@ "execution_count": 15, "id": "84c211b3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.301026Z", - "iopub.status.busy": "2023-08-21T02:29:36.300636Z", - "iopub.status.idle": "2023-08-21T02:29:36.330683Z", - "shell.execute_reply": "2023-08-21T02:29:36.329634Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1153,12 +1078,7 @@ "execution_count": 16, "id": "60466a94", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.335194Z", - "iopub.status.busy": "2023-08-21T02:29:36.334390Z", - "iopub.status.idle": "2023-08-21T02:29:36.342883Z", - "shell.execute_reply": "2023-08-21T02:29:36.341853Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1196,12 +1116,7 @@ "execution_count": 17, "id": "ff6d9fcb", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.348667Z", - "iopub.status.busy": "2023-08-21T02:29:36.347888Z", - "iopub.status.idle": "2023-08-21T02:29:36.376193Z", - "shell.execute_reply": "2023-08-21T02:29:36.375375Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1322,12 +1237,7 @@ "execution_count": 18, "id": "2a206718", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.386789Z", - "iopub.status.busy": "2023-08-21T02:29:36.386044Z", - "iopub.status.idle": "2023-08-21T02:29:36.418061Z", - "shell.execute_reply": "2023-08-21T02:29:36.416433Z" - } + "execution": {} }, "outputs": [ { @@ -1458,12 +1368,7 @@ "execution_count": 19, "id": "766241f2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.425365Z", - "iopub.status.busy": "2023-08-21T02:29:36.424580Z", - "iopub.status.idle": "2023-08-21T02:29:36.432225Z", - "shell.execute_reply": "2023-08-21T02:29:36.431397Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1503,12 +1408,7 @@ "execution_count": 20, "id": "71b3ac84", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.443753Z", - "iopub.status.busy": "2023-08-21T02:29:36.443393Z", - "iopub.status.idle": "2023-08-21T02:29:36.490069Z", - "shell.execute_reply": "2023-08-21T02:29:36.489170Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1637,12 +1537,7 @@ "execution_count": 21, "id": "eb35ef98", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.498313Z", - "iopub.status.busy": "2023-08-21T02:29:36.498133Z", - "iopub.status.idle": "2023-08-21T02:29:36.532175Z", - "shell.execute_reply": "2023-08-21T02:29:36.530924Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1754,12 +1649,7 @@ "execution_count": 22, "id": "78b393fe", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.541740Z", - "iopub.status.busy": "2023-08-21T02:29:36.541236Z", - "iopub.status.idle": "2023-08-21T02:29:36.729893Z", - "shell.execute_reply": "2023-08-21T02:29:36.728852Z" - } + "execution": {} }, "outputs": [ { @@ -1802,12 +1692,7 @@ "execution_count": 23, "id": "cb014cc6", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.738629Z", - "iopub.status.busy": "2023-08-21T02:29:36.738138Z", - "iopub.status.idle": "2023-08-21T02:29:36.783309Z", - "shell.execute_reply": "2023-08-21T02:29:36.781945Z" - } + "execution": {} }, "outputs": [ { @@ -1848,12 +1733,7 @@ "execution_count": 24, "id": "106dc178", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:36.791911Z", - "iopub.status.busy": "2023-08-21T02:29:36.791104Z", - "iopub.status.idle": "2023-08-21T02:29:37.275891Z", - "shell.execute_reply": "2023-08-21T02:29:37.275551Z" - } + "execution": {} }, "outputs": [ { @@ -1894,12 +1774,7 @@ "execution_count": 25, "id": "d0334df0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:37.277695Z", - "iopub.status.busy": "2023-08-21T02:29:37.277558Z", - "iopub.status.idle": "2023-08-21T02:29:38.159528Z", - "shell.execute_reply": "2023-08-21T02:29:38.158089Z" - } + "execution": {} }, "outputs": [ { @@ -1949,12 +1824,7 @@ "execution_count": 26, "id": "e00ec554", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:38.167367Z", - "iopub.status.busy": "2023-08-21T02:29:38.166718Z", - "iopub.status.idle": "2023-08-21T02:29:38.206501Z", - "shell.execute_reply": "2023-08-21T02:29:38.203694Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1991,12 +1861,7 @@ "execution_count": 27, "id": "28e301a2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:38.216727Z", - "iopub.status.busy": "2023-08-21T02:29:38.215858Z", - "iopub.status.idle": "2023-08-21T02:29:38.814109Z", - "shell.execute_reply": "2023-08-21T02:29:38.813789Z" - } + "execution": {} }, "outputs": [ { @@ -2053,12 +1918,7 @@ "execution_count": 28, "id": "7988af75", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:38.815771Z", - "iopub.status.busy": "2023-08-21T02:29:38.815666Z", - "iopub.status.idle": "2023-08-21T02:29:38.846626Z", - "shell.execute_reply": "2023-08-21T02:29:38.845296Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -2092,12 +1952,7 @@ "execution_count": 29, "id": "1a4803f3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:38.852512Z", - "iopub.status.busy": "2023-08-21T02:29:38.851848Z", - "iopub.status.idle": "2023-08-21T02:29:39.089982Z", - "shell.execute_reply": "2023-08-21T02:29:39.089296Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2155,12 +2010,7 @@ "execution_count": 30, "id": "dc655431", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:39.094771Z", - "iopub.status.busy": "2023-08-21T02:29:39.093629Z", - "iopub.status.idle": "2023-08-21T02:29:39.227174Z", - "shell.execute_reply": "2023-08-21T02:29:39.226787Z" - } + "execution": {} }, "outputs": [ { @@ -2216,12 +2066,7 @@ "execution_count": 31, "id": "90ea4ff0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:39.228985Z", - "iopub.status.busy": "2023-08-21T02:29:39.228844Z", - "iopub.status.idle": "2023-08-21T02:29:39.289822Z", - "shell.execute_reply": "2023-08-21T02:29:39.286542Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -2253,12 +2098,7 @@ "execution_count": 32, "id": "104bc542", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:39.297216Z", - "iopub.status.busy": "2023-08-21T02:29:39.295538Z", - "iopub.status.idle": "2023-08-21T02:29:39.509987Z", - "shell.execute_reply": "2023-08-21T02:29:39.505606Z" - } + "execution": {} }, "outputs": [ { @@ -2296,12 +2136,7 @@ "execution_count": 33, "id": "d5884f39", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:39.515536Z", - "iopub.status.busy": "2023-08-21T02:29:39.514906Z", - "iopub.status.idle": "2023-08-21T02:29:39.590528Z", - "shell.execute_reply": "2023-08-21T02:29:39.587475Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -2329,12 +2164,7 @@ "execution_count": 34, "id": "9155767c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:39.595864Z", - "iopub.status.busy": "2023-08-21T02:29:39.595093Z", - "iopub.status.idle": "2023-08-21T02:29:39.751046Z", - "shell.execute_reply": "2023-08-21T02:29:39.747430Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2382,12 +2212,7 @@ "execution_count": 35, "id": "048524d1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:39.765191Z", - "iopub.status.busy": "2023-08-21T02:29:39.764636Z", - "iopub.status.idle": "2023-08-21T02:29:39.875769Z", - "shell.execute_reply": "2023-08-21T02:29:39.875407Z" - } + "execution": {} }, "outputs": [ { @@ -2429,12 +2254,7 @@ "execution_count": 36, "id": "3d632d24", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:39.878255Z", - "iopub.status.busy": "2023-08-21T02:29:39.878128Z", - "iopub.status.idle": "2023-08-21T02:29:40.030675Z", - "shell.execute_reply": "2023-08-21T02:29:40.030077Z" - } + "execution": {} }, "outputs": [ { @@ -2476,12 +2296,7 @@ "execution_count": 37, "id": "f5e21a13", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:40.036373Z", - "iopub.status.busy": "2023-08-21T02:29:40.035626Z", - "iopub.status.idle": "2023-08-21T02:29:40.048244Z", - "shell.execute_reply": "2023-08-21T02:29:40.047103Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2583,12 +2398,7 @@ "execution_count": 38, "id": "6bc84bd9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:40.053032Z", - "iopub.status.busy": "2023-08-21T02:29:40.052718Z", - "iopub.status.idle": "2023-08-21T02:29:40.121414Z", - "shell.execute_reply": "2023-08-21T02:29:40.119305Z" - } + "execution": {} }, "outputs": [ { @@ -2693,12 +2503,7 @@ "execution_count": 39, "id": "dd9e0491", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:40.127853Z", - "iopub.status.busy": "2023-08-21T02:29:40.126917Z", - "iopub.status.idle": "2023-08-21T02:29:40.134348Z", - "shell.execute_reply": "2023-08-21T02:29:40.133225Z" - } + "execution": {} }, "outputs": [ { @@ -2766,12 +2571,7 @@ "execution_count": 40, "id": "cb3cb4ef", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:40.140991Z", - "iopub.status.busy": "2023-08-21T02:29:40.139059Z", - "iopub.status.idle": "2023-08-21T02:29:40.156398Z", - "shell.execute_reply": "2023-08-21T02:29:40.154898Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -2792,12 +2592,7 @@ "execution_count": 41, "id": "583711cb", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:40.161933Z", - "iopub.status.busy": "2023-08-21T02:29:40.161044Z", - "iopub.status.idle": "2023-08-21T02:29:41.074609Z", - "shell.execute_reply": "2023-08-21T02:29:41.073657Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2826,12 +2621,7 @@ "execution_count": 42, "id": "259d273b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:41.077991Z", - "iopub.status.busy": "2023-08-21T02:29:41.077451Z", - "iopub.status.idle": "2023-08-21T02:29:41.210787Z", - "shell.execute_reply": "2023-08-21T02:29:41.209817Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2870,12 +2660,7 @@ "execution_count": 43, "id": "71dde739", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:41.214250Z", - "iopub.status.busy": "2023-08-21T02:29:41.213993Z", - "iopub.status.idle": "2023-08-21T02:29:41.230586Z", - "shell.execute_reply": "2023-08-21T02:29:41.229987Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2979,12 +2764,7 @@ "execution_count": 44, "id": "126b4433", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:41.236028Z", - "iopub.status.busy": "2023-08-21T02:29:41.234087Z", - "iopub.status.idle": "2023-08-21T02:29:41.242018Z", - "shell.execute_reply": "2023-08-21T02:29:41.240913Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -3013,12 +2793,7 @@ "execution_count": 45, "id": "71357343", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:41.246132Z", - "iopub.status.busy": "2023-08-21T02:29:41.245849Z", - "iopub.status.idle": "2023-08-21T02:29:41.516225Z", - "shell.execute_reply": "2023-08-21T02:29:41.513222Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -3056,12 +2831,7 @@ "execution_count": 46, "id": "568fe30f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:41.521913Z", - "iopub.status.busy": "2023-08-21T02:29:41.521643Z", - "iopub.status.idle": "2023-08-21T02:29:41.650531Z", - "shell.execute_reply": "2023-08-21T02:29:41.648645Z" - } + "execution": {} }, "outputs": [ { @@ -3090,12 +2860,7 @@ "execution_count": 47, "id": "56f3acef", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:41.656894Z", - "iopub.status.busy": "2023-08-21T02:29:41.656175Z", - "iopub.status.idle": "2023-08-21T02:29:41.778189Z", - "shell.execute_reply": "2023-08-21T02:29:41.777902Z" - } + "execution": {} }, "outputs": [ { @@ -3123,12 +2888,7 @@ "execution_count": 48, "id": "74d23615", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:41.779880Z", - "iopub.status.busy": "2023-08-21T02:29:41.779764Z", - "iopub.status.idle": "2023-08-21T02:29:41.891093Z", - "shell.execute_reply": "2023-08-21T02:29:41.890788Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -3171,12 +2931,7 @@ "execution_count": 49, "id": "5a0046bf", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:41.892708Z", - "iopub.status.busy": "2023-08-21T02:29:41.892590Z", - "iopub.status.idle": "2023-08-21T02:29:42.034991Z", - "shell.execute_reply": "2023-08-21T02:29:42.034633Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ diff --git a/Ch08-baggboost-lab.ipynb b/Ch08-baggboost-lab.ipynb index 0aaa6ac..ac79d45 100644 --- a/Ch08-baggboost-lab.ipynb +++ b/Ch08-baggboost-lab.ipynb @@ -25,12 +25,7 @@ "execution_count": 1, "id": "5061d7d5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:43.521031Z", - "iopub.status.busy": "2023-08-21T02:29:43.520759Z", - "iopub.status.idle": "2023-08-21T02:29:44.874525Z", - "shell.execute_reply": "2023-08-21T02:29:44.874222Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -57,12 +52,7 @@ "execution_count": 2, "id": "747b056a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:44.876483Z", - "iopub.status.busy": "2023-08-21T02:29:44.876317Z", - "iopub.status.idle": "2023-08-21T02:29:44.941466Z", - "shell.execute_reply": "2023-08-21T02:29:44.941148Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -105,12 +95,7 @@ "execution_count": 3, "id": "a29167fd", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:44.943319Z", - "iopub.status.busy": "2023-08-21T02:29:44.943207Z", - "iopub.status.idle": "2023-08-21T02:29:44.948609Z", - "shell.execute_reply": "2023-08-21T02:29:44.948363Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -136,12 +121,7 @@ "execution_count": 4, "id": "9fc6c8b9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:44.950122Z", - "iopub.status.busy": "2023-08-21T02:29:44.950017Z", - "iopub.status.idle": "2023-08-21T02:29:44.964042Z", - "shell.execute_reply": "2023-08-21T02:29:44.963794Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -171,12 +151,7 @@ "execution_count": 5, "id": "533f0949", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:44.965639Z", - "iopub.status.busy": "2023-08-21T02:29:44.965555Z", - "iopub.status.idle": "2023-08-21T02:29:44.972079Z", - "shell.execute_reply": "2023-08-21T02:29:44.971812Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -223,12 +198,7 @@ "execution_count": 6, "id": "c4a8718e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:44.973649Z", - "iopub.status.busy": "2023-08-21T02:29:44.973541Z", - "iopub.status.idle": "2023-08-21T02:29:44.976459Z", - "shell.execute_reply": "2023-08-21T02:29:44.976196Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -270,12 +240,7 @@ "execution_count": 7, "id": "2fe92cb1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:44.977909Z", - "iopub.status.busy": "2023-08-21T02:29:44.977813Z", - "iopub.status.idle": "2023-08-21T02:29:44.980904Z", - "shell.execute_reply": "2023-08-21T02:29:44.980648Z" - } + "execution": {} }, "outputs": [ { @@ -313,12 +278,7 @@ "execution_count": 8, "id": "823745dc", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:44.982460Z", - "iopub.status.busy": "2023-08-21T02:29:44.982347Z", - "iopub.status.idle": "2023-08-21T02:29:45.271601Z", - "shell.execute_reply": "2023-08-21T02:29:45.271198Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -361,12 +321,7 @@ "execution_count": 9, "id": "38ec5f13", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:45.273437Z", - "iopub.status.busy": "2023-08-21T02:29:45.273325Z", - "iopub.status.idle": "2023-08-21T02:29:45.276242Z", - "shell.execute_reply": "2023-08-21T02:29:45.275887Z" - } + "execution": {} }, "outputs": [ { @@ -426,12 +381,7 @@ "execution_count": 10, "id": "3959f39a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:45.277931Z", - "iopub.status.busy": "2023-08-21T02:29:45.277817Z", - "iopub.status.idle": "2023-08-21T02:29:45.284043Z", - "shell.execute_reply": "2023-08-21T02:29:45.283649Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -482,12 +432,7 @@ "execution_count": 11, "id": "201c4690", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:45.286011Z", - "iopub.status.busy": "2023-08-21T02:29:45.285866Z", - "iopub.status.idle": "2023-08-21T02:29:45.288396Z", - "shell.execute_reply": "2023-08-21T02:29:45.288038Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -515,12 +460,7 @@ "execution_count": 12, "id": "a8dc5c3a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:45.290090Z", - "iopub.status.busy": "2023-08-21T02:29:45.289979Z", - "iopub.status.idle": "2023-08-21T02:29:45.293957Z", - "shell.execute_reply": "2023-08-21T02:29:45.293696Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -555,12 +495,7 @@ "execution_count": 13, "id": "0cbe0d28", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:45.295541Z", - "iopub.status.busy": "2023-08-21T02:29:45.295458Z", - "iopub.status.idle": "2023-08-21T02:29:45.299182Z", - "shell.execute_reply": "2023-08-21T02:29:45.298807Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -585,12 +520,7 @@ "execution_count": 14, "id": "ea649080", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:45.300868Z", - "iopub.status.busy": "2023-08-21T02:29:45.300771Z", - "iopub.status.idle": "2023-08-21T02:29:45.571746Z", - "shell.execute_reply": "2023-08-21T02:29:45.571364Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -628,12 +558,7 @@ "execution_count": 15, "id": "e005da14", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:45.573701Z", - "iopub.status.busy": "2023-08-21T02:29:45.573563Z", - "iopub.status.idle": "2023-08-21T02:29:46.379024Z", - "shell.execute_reply": "2023-08-21T02:29:46.378601Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -670,12 +595,7 @@ "execution_count": 16, "id": "23324f7e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:46.381085Z", - "iopub.status.busy": "2023-08-21T02:29:46.380960Z", - "iopub.status.idle": "2023-08-21T02:29:46.383318Z", - "shell.execute_reply": "2023-08-21T02:29:46.383057Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -710,12 +630,7 @@ "execution_count": 17, "id": "6dcd8b37", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:46.385077Z", - "iopub.status.busy": "2023-08-21T02:29:46.384936Z", - "iopub.status.idle": "2023-08-21T02:29:46.392841Z", - "shell.execute_reply": "2023-08-21T02:29:46.392541Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -816,12 +731,7 @@ "execution_count": 18, "id": "0459d3a9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:46.395016Z", - "iopub.status.busy": "2023-08-21T02:29:46.394693Z", - "iopub.status.idle": "2023-08-21T02:29:46.408492Z", - "shell.execute_reply": "2023-08-21T02:29:46.408187Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -846,12 +756,7 @@ "execution_count": 19, "id": "34bf2864", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:46.411065Z", - "iopub.status.busy": "2023-08-21T02:29:46.410850Z", - "iopub.status.idle": "2023-08-21T02:29:46.413541Z", - "shell.execute_reply": "2023-08-21T02:29:46.413268Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -877,12 +782,7 @@ "execution_count": 20, "id": "dd0dfd8a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:46.415108Z", - "iopub.status.busy": "2023-08-21T02:29:46.414996Z", - "iopub.status.idle": "2023-08-21T02:29:46.704739Z", - "shell.execute_reply": "2023-08-21T02:29:46.704318Z" - } + "execution": {} }, "outputs": [ { @@ -931,12 +831,7 @@ "execution_count": 21, "id": "33fb7786", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:46.706833Z", - "iopub.status.busy": "2023-08-21T02:29:46.706699Z", - "iopub.status.idle": "2023-08-21T02:29:46.756824Z", - "shell.execute_reply": "2023-08-21T02:29:46.756520Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -966,12 +861,7 @@ "execution_count": 22, "id": "a386755b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:46.758663Z", - "iopub.status.busy": "2023-08-21T02:29:46.758546Z", - "iopub.status.idle": "2023-08-21T02:29:46.761814Z", - "shell.execute_reply": "2023-08-21T02:29:46.761470Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1012,12 +902,7 @@ "execution_count": 23, "id": "3d646928", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:46.763419Z", - "iopub.status.busy": "2023-08-21T02:29:46.763331Z", - "iopub.status.idle": "2023-08-21T02:29:47.049615Z", - "shell.execute_reply": "2023-08-21T02:29:47.049265Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1073,12 +958,7 @@ "execution_count": 24, "id": "275feef7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:47.051447Z", - "iopub.status.busy": "2023-08-21T02:29:47.051323Z", - "iopub.status.idle": "2023-08-21T02:29:47.211049Z", - "shell.execute_reply": "2023-08-21T02:29:47.210740Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1117,12 +997,7 @@ "execution_count": 25, "id": "01dbbef3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:47.212716Z", - "iopub.status.busy": "2023-08-21T02:29:47.212598Z", - "iopub.status.idle": "2023-08-21T02:29:47.305563Z", - "shell.execute_reply": "2023-08-21T02:29:47.305155Z" - } + "execution": {} }, "outputs": [ { @@ -1170,12 +1045,7 @@ "execution_count": 26, "id": "b75cc90e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:47.307949Z", - "iopub.status.busy": "2023-08-21T02:29:47.307809Z", - "iopub.status.idle": "2023-08-21T02:29:48.296516Z", - "shell.execute_reply": "2023-08-21T02:29:48.296211Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1219,12 +1089,7 @@ "execution_count": 27, "id": "bf9a5ed4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:48.298333Z", - "iopub.status.busy": "2023-08-21T02:29:48.298184Z", - "iopub.status.idle": "2023-08-21T02:29:48.412949Z", - "shell.execute_reply": "2023-08-21T02:29:48.412594Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1262,12 +1127,7 @@ "execution_count": 28, "id": "71316e9a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:48.414933Z", - "iopub.status.busy": "2023-08-21T02:29:48.414785Z", - "iopub.status.idle": "2023-08-21T02:29:48.422251Z", - "shell.execute_reply": "2023-08-21T02:29:48.421922Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1420,12 +1280,7 @@ "execution_count": 29, "id": "0bcc5ff1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:48.424109Z", - "iopub.status.busy": "2023-08-21T02:29:48.423996Z", - "iopub.status.idle": "2023-08-21T02:29:52.311829Z", - "shell.execute_reply": "2023-08-21T02:29:52.311492Z" - } + "execution": {} }, "outputs": [ { @@ -1468,12 +1323,7 @@ "execution_count": 30, "id": "060f47eb", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:52.313643Z", - "iopub.status.busy": "2023-08-21T02:29:52.313522Z", - "iopub.status.idle": "2023-08-21T02:29:52.788145Z", - "shell.execute_reply": "2023-08-21T02:29:52.787823Z" - } + "execution": {} }, "outputs": [ { @@ -1518,12 +1368,7 @@ "execution_count": 31, "id": "43505dad", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:52.789753Z", - "iopub.status.busy": "2023-08-21T02:29:52.789632Z", - "iopub.status.idle": "2023-08-21T02:29:52.801529Z", - "shell.execute_reply": "2023-08-21T02:29:52.801234Z" - } + "execution": {} }, "outputs": [ { @@ -1559,12 +1404,7 @@ "execution_count": 32, "id": "c0a03126", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:52.803315Z", - "iopub.status.busy": "2023-08-21T02:29:52.803174Z", - "iopub.status.idle": "2023-08-21T02:29:55.330726Z", - "shell.execute_reply": "2023-08-21T02:29:55.330425Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1626,12 +1466,7 @@ "execution_count": 33, "id": "58f6e11f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:55.332677Z", - "iopub.status.busy": "2023-08-21T02:29:55.332550Z", - "iopub.status.idle": "2023-08-21T02:29:56.797204Z", - "shell.execute_reply": "2023-08-21T02:29:56.796899Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1667,12 +1502,7 @@ "execution_count": 34, "id": "a5b1296f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:56.798892Z", - "iopub.status.busy": "2023-08-21T02:29:56.798779Z", - "iopub.status.idle": "2023-08-21T02:29:57.098494Z", - "shell.execute_reply": "2023-08-21T02:29:57.098140Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1706,12 +1536,7 @@ "execution_count": 35, "id": "36c52755", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:57.100444Z", - "iopub.status.busy": "2023-08-21T02:29:57.100310Z", - "iopub.status.idle": "2023-08-21T02:29:57.103577Z", - "shell.execute_reply": "2023-08-21T02:29:57.103213Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ diff --git a/Ch09-svm-lab.ipynb b/Ch09-svm-lab.ipynb index bf1cc7c..7900ed6 100644 --- a/Ch09-svm-lab.ipynb +++ b/Ch09-svm-lab.ipynb @@ -27,12 +27,7 @@ "execution_count": 1, "id": "3973b95f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:58.477582Z", - "iopub.status.busy": "2023-08-21T02:29:58.477467Z", - "iopub.status.idle": "2023-08-21T02:29:59.432527Z", - "shell.execute_reply": "2023-08-21T02:29:59.432225Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -57,12 +52,7 @@ "execution_count": 2, "id": "0161e55e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.434432Z", - "iopub.status.busy": "2023-08-21T02:29:59.434258Z", - "iopub.status.idle": "2023-08-21T02:29:59.466972Z", - "shell.execute_reply": "2023-08-21T02:29:59.466647Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -85,12 +75,7 @@ "execution_count": 3, "id": "7661b056", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.469128Z", - "iopub.status.busy": "2023-08-21T02:29:59.468999Z", - "iopub.status.idle": "2023-08-21T02:29:59.470961Z", - "shell.execute_reply": "2023-08-21T02:29:59.470667Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -125,12 +110,7 @@ "execution_count": 4, "id": "46e9ab84", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.472867Z", - "iopub.status.busy": "2023-08-21T02:29:59.472726Z", - "iopub.status.idle": "2023-08-21T02:29:59.583508Z", - "shell.execute_reply": "2023-08-21T02:29:59.583126Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -170,12 +150,7 @@ "execution_count": 5, "id": "605ffdc0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.585485Z", - "iopub.status.busy": "2023-08-21T02:29:59.585317Z", - "iopub.status.idle": "2023-08-21T02:29:59.590274Z", - "shell.execute_reply": "2023-08-21T02:29:59.589979Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -214,12 +189,7 @@ "execution_count": 6, "id": "302a49a1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.591976Z", - "iopub.status.busy": "2023-08-21T02:29:59.591865Z", - "iopub.status.idle": "2023-08-21T02:29:59.734225Z", - "shell.execute_reply": "2023-08-21T02:29:59.733936Z" - } + "execution": {} }, "outputs": [ { @@ -259,12 +229,7 @@ "execution_count": 7, "id": "cc1d6a13", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.735943Z", - "iopub.status.busy": "2023-08-21T02:29:59.735816Z", - "iopub.status.idle": "2023-08-21T02:29:59.878335Z", - "shell.execute_reply": "2023-08-21T02:29:59.878032Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -305,12 +270,7 @@ "execution_count": 8, "id": "6133c846", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.880078Z", - "iopub.status.busy": "2023-08-21T02:29:59.879965Z", - "iopub.status.idle": "2023-08-21T02:29:59.882347Z", - "shell.execute_reply": "2023-08-21T02:29:59.882070Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -343,12 +303,7 @@ "execution_count": 9, "id": "9adb3793", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.883852Z", - "iopub.status.busy": "2023-08-21T02:29:59.883749Z", - "iopub.status.idle": "2023-08-21T02:29:59.910535Z", - "shell.execute_reply": "2023-08-21T02:29:59.910272Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -391,12 +346,7 @@ "execution_count": 10, "id": "d3ab343e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.912005Z", - "iopub.status.busy": "2023-08-21T02:29:59.911925Z", - "iopub.status.idle": "2023-08-21T02:29:59.914189Z", - "shell.execute_reply": "2023-08-21T02:29:59.913943Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -432,12 +382,7 @@ "execution_count": 11, "id": "6aba117e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.915563Z", - "iopub.status.busy": "2023-08-21T02:29:59.915487Z", - "iopub.status.idle": "2023-08-21T02:29:59.917323Z", - "shell.execute_reply": "2023-08-21T02:29:59.917078Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -461,12 +406,7 @@ "execution_count": 12, "id": "dbe7d737", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.918744Z", - "iopub.status.busy": "2023-08-21T02:29:59.918666Z", - "iopub.status.idle": "2023-08-21T02:29:59.925361Z", - "shell.execute_reply": "2023-08-21T02:29:59.925039Z" - } + "execution": {} }, "outputs": [ { @@ -548,12 +488,7 @@ "execution_count": 13, "id": "ab1697c2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.927158Z", - "iopub.status.busy": "2023-08-21T02:29:59.927027Z", - "iopub.status.idle": "2023-08-21T02:29:59.931558Z", - "shell.execute_reply": "2023-08-21T02:29:59.931228Z" - } + "execution": {} }, "outputs": [ { @@ -639,12 +574,7 @@ "execution_count": 14, "id": "0fd42b1e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:59.933100Z", - "iopub.status.busy": "2023-08-21T02:29:59.933001Z", - "iopub.status.idle": "2023-08-21T02:30:00.054738Z", - "shell.execute_reply": "2023-08-21T02:30:00.054338Z" - } + "execution": {} }, "outputs": [ { @@ -677,12 +607,7 @@ "execution_count": 15, "id": "09c15299", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:00.056655Z", - "iopub.status.busy": "2023-08-21T02:30:00.056526Z", - "iopub.status.idle": "2023-08-21T02:30:00.061096Z", - "shell.execute_reply": "2023-08-21T02:30:00.060792Z" - } + "execution": {} }, "outputs": [ { @@ -764,12 +689,7 @@ "execution_count": 16, "id": "d5fd2ff9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:00.062673Z", - "iopub.status.busy": "2023-08-21T02:30:00.062585Z", - "iopub.status.idle": "2023-08-21T02:30:00.199860Z", - "shell.execute_reply": "2023-08-21T02:30:00.199129Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -809,12 +729,7 @@ "execution_count": 17, "id": "39aff1b1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:00.202380Z", - "iopub.status.busy": "2023-08-21T02:30:00.202233Z", - "iopub.status.idle": "2023-08-21T02:30:00.207886Z", - "shell.execute_reply": "2023-08-21T02:30:00.207493Z" - } + "execution": {} }, "outputs": [ { @@ -896,12 +811,7 @@ "execution_count": 18, "id": "63a9d752", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:00.209907Z", - "iopub.status.busy": "2023-08-21T02:30:00.209781Z", - "iopub.status.idle": "2023-08-21T02:30:00.340803Z", - "shell.execute_reply": "2023-08-21T02:30:00.340433Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -949,12 +859,7 @@ "execution_count": 19, "id": "2fee8df5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:00.342773Z", - "iopub.status.busy": "2023-08-21T02:30:00.342626Z", - "iopub.status.idle": "2023-08-21T02:30:00.345094Z", - "shell.execute_reply": "2023-08-21T02:30:00.344774Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -977,12 +882,7 @@ "execution_count": 20, "id": "48f01abe", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:00.347053Z", - "iopub.status.busy": "2023-08-21T02:30:00.346902Z", - "iopub.status.idle": "2023-08-21T02:30:00.440453Z", - "shell.execute_reply": "2023-08-21T02:30:00.440153Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1030,12 +930,7 @@ "execution_count": 21, "id": "4acc3246", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:00.442257Z", - "iopub.status.busy": "2023-08-21T02:30:00.442156Z", - "iopub.status.idle": "2023-08-21T02:30:00.446674Z", - "shell.execute_reply": "2023-08-21T02:30:00.446369Z" - } + "execution": {} }, "outputs": [ { @@ -1078,12 +973,7 @@ "execution_count": 22, "id": "e9852a28", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:00.448268Z", - "iopub.status.busy": "2023-08-21T02:30:00.448160Z", - "iopub.status.idle": "2023-08-21T02:30:00.828511Z", - "shell.execute_reply": "2023-08-21T02:30:00.828128Z" - } + "execution": {} }, "outputs": [ { @@ -1122,12 +1012,7 @@ "execution_count": 23, "id": "01232fc9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:00.830365Z", - "iopub.status.busy": "2023-08-21T02:30:00.830226Z", - "iopub.status.idle": "2023-08-21T02:30:01.132677Z", - "shell.execute_reply": "2023-08-21T02:30:01.132224Z" - } + "execution": {} }, "outputs": [ { @@ -1166,12 +1051,7 @@ "execution_count": 24, "id": "bcbd15a4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:01.134616Z", - "iopub.status.busy": "2023-08-21T02:30:01.134486Z", - "iopub.status.idle": "2023-08-21T02:30:01.243519Z", - "shell.execute_reply": "2023-08-21T02:30:01.243203Z" - } + "execution": {} }, "outputs": [ { @@ -1214,12 +1094,7 @@ "execution_count": 25, "id": "28ca551e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:01.245550Z", - "iopub.status.busy": "2023-08-21T02:30:01.245377Z", - "iopub.status.idle": "2023-08-21T02:30:01.600896Z", - "shell.execute_reply": "2023-08-21T02:30:01.600574Z" - } + "execution": {} }, "outputs": [ { @@ -1348,12 +1223,7 @@ "execution_count": 26, "id": "68ac9421", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:01.602740Z", - "iopub.status.busy": "2023-08-21T02:30:01.602614Z", - "iopub.status.idle": "2023-08-21T02:30:01.698620Z", - "shell.execute_reply": "2023-08-21T02:30:01.698322Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1393,12 +1263,7 @@ "execution_count": 27, "id": "f79a9e0a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:01.700479Z", - "iopub.status.busy": "2023-08-21T02:30:01.700347Z", - "iopub.status.idle": "2023-08-21T02:30:01.837479Z", - "shell.execute_reply": "2023-08-21T02:30:01.837102Z" - } + "execution": {} }, "outputs": [ { @@ -1442,12 +1307,7 @@ "execution_count": 28, "id": "bdb9e503", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:01.839390Z", - "iopub.status.busy": "2023-08-21T02:30:01.839243Z", - "iopub.status.idle": "2023-08-21T02:30:01.843595Z", - "shell.execute_reply": "2023-08-21T02:30:01.843287Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1473,12 +1333,7 @@ "execution_count": 29, "id": "329f5d2c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:01.845300Z", - "iopub.status.busy": "2023-08-21T02:30:01.845201Z", - "iopub.status.idle": "2023-08-21T02:30:01.944073Z", - "shell.execute_reply": "2023-08-21T02:30:01.943763Z" - } + "execution": {} }, "outputs": [ { @@ -1528,12 +1383,7 @@ "execution_count": 30, "id": "267e113d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:01.945725Z", - "iopub.status.busy": "2023-08-21T02:30:01.945611Z", - "iopub.status.idle": "2023-08-21T02:30:02.034378Z", - "shell.execute_reply": "2023-08-21T02:30:02.034069Z" - } + "execution": {} }, "outputs": [ { @@ -1569,12 +1419,7 @@ "execution_count": 31, "id": "64cbebd0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:02.036083Z", - "iopub.status.busy": "2023-08-21T02:30:02.035963Z", - "iopub.status.idle": "2023-08-21T02:30:03.015535Z", - "shell.execute_reply": "2023-08-21T02:30:03.014798Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1633,12 +1478,7 @@ "execution_count": 32, "id": "b6e6f12b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:03.017430Z", - "iopub.status.busy": "2023-08-21T02:30:03.017293Z", - "iopub.status.idle": "2023-08-21T02:30:03.099156Z", - "shell.execute_reply": "2023-08-21T02:30:03.098760Z" - } + "execution": {} }, "outputs": [ { @@ -1679,12 +1519,7 @@ "execution_count": 33, "id": "273a10b2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:03.101069Z", - "iopub.status.busy": "2023-08-21T02:30:03.100881Z", - "iopub.status.idle": "2023-08-21T02:30:03.130224Z", - "shell.execute_reply": "2023-08-21T02:30:03.129845Z" - } + "execution": {} }, "outputs": [ { @@ -1793,12 +1628,7 @@ "execution_count": 34, "id": "bc3079a7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:03.132111Z", - "iopub.status.busy": "2023-08-21T02:30:03.131975Z", - "iopub.status.idle": "2023-08-21T02:30:03.143298Z", - "shell.execute_reply": "2023-08-21T02:30:03.142948Z" - } + "execution": {} }, "outputs": [ { diff --git a/Ch10-deeplearning-lab.ipynb b/Ch10-deeplearning-lab.ipynb index 2577eac..977e821 100644 --- a/Ch10-deeplearning-lab.ipynb +++ b/Ch10-deeplearning-lab.ipynb @@ -26,6 +26,7 @@ "execution_count": 1, "id": "cf431f3f", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -62,7 +63,9 @@ "cell_type": "code", "execution_count": 2, "id": "1db00e03", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "import torch\n", @@ -88,7 +91,9 @@ "cell_type": "code", "execution_count": 3, "id": "3da0a445", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "from torchmetrics import (MeanAbsoluteError,\n", @@ -112,7 +117,9 @@ "cell_type": "code", "execution_count": 4, "id": "bbbf32fe", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "from pytorch_lightning import Trainer\n", @@ -132,7 +139,9 @@ "cell_type": "code", "execution_count": 5, "id": "3810caf4", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "name": "stderr", @@ -163,6 +172,7 @@ "execution_count": 6, "id": "454dc419", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -198,7 +208,9 @@ "cell_type": "code", "execution_count": 7, "id": "cd43a4c6", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "from ISLP.torch import (SimpleDataModule,\n", @@ -227,7 +239,9 @@ "cell_type": "code", "execution_count": 8, "id": "eaf84e9c", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "from ISLP.torch.imdb import (load_lookup,\n", @@ -257,6 +271,7 @@ "execution_count": 9, "id": "d007a49b", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -279,6 +294,7 @@ "execution_count": 10, "id": "9da64364", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -307,6 +323,7 @@ "execution_count": 11, "id": "a2cfe999", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -342,7 +359,9 @@ "cell_type": "code", "execution_count": 12, "id": "5c600069", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "(X_train, \n", @@ -367,7 +386,9 @@ "cell_type": "code", "execution_count": 13, "id": "6ea4f551", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "data": { @@ -403,7 +424,9 @@ "cell_type": "code", "execution_count": 14, "id": "f1b8b3f5", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "scaler = StandardScaler(with_mean=True, with_std=True)\n", @@ -427,6 +450,7 @@ "execution_count": 15, "id": "50ce4171", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -451,7 +475,9 @@ "cell_type": "code", "execution_count": 16, "id": "94c4ab75", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "cv = KFold(10,\n", @@ -479,6 +505,7 @@ "execution_count": 17, "id": "86e45999", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -520,7 +547,9 @@ "cell_type": "code", "execution_count": 18, "id": "00ac7606", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "class HittersModel(nn.Module):\n", @@ -578,7 +607,9 @@ "cell_type": "code", "execution_count": 19, "id": "bb7ff7e9", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "hit_model = HittersModel(X.shape[1])\n" @@ -614,6 +645,7 @@ "execution_count": 20, "id": "b60d34e1", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -682,6 +714,7 @@ "execution_count": 21, "id": "42f63682", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -703,7 +736,9 @@ "cell_type": "code", "execution_count": 22, "id": "57fbf564", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "X_test_t = torch.tensor(X_test.astype(np.float32))\n", @@ -738,7 +773,9 @@ "cell_type": "code", "execution_count": 23, "id": "570bdd73", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "max_num_workers = rec_num_workers()" @@ -770,7 +807,9 @@ "cell_type": "code", "execution_count": 24, "id": "c08a4d6d", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "hit_dm = SimpleDataModule(hit_train,\n", @@ -798,7 +837,9 @@ "cell_type": "code", "execution_count": 25, "id": "aaa1e593", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "hit_module = SimpleModule.regression(hit_model,\n", @@ -825,7 +866,9 @@ "cell_type": "code", "execution_count": 26, "id": "1a4e9b3c", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "hit_logger = CSVLogger('logs', name='hitters')" @@ -857,6 +900,7 @@ "execution_count": 27, "id": "2f839fde", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1645,6 +1689,7 @@ "execution_count": 28, "id": "672b4410", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1721,7 +1766,9 @@ "cell_type": "code", "execution_count": 29, "id": "8cf6ef60", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "hit_results = pd.read_csv(hit_logger.experiment.metrics_file_path)" @@ -1741,6 +1788,7 @@ "execution_count": 30, "id": "67ce1e26", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1784,6 +1832,7 @@ "execution_count": 31, "id": "deb684d2", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1831,6 +1880,7 @@ "execution_count": 32, "id": "454033dd", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1877,6 +1927,7 @@ "execution_count": 33, "id": "71b3d0d0", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -1909,7 +1960,9 @@ "cell_type": "code", "execution_count": 34, "id": "def8605c", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "data": { @@ -1964,7 +2017,9 @@ "cell_type": "code", "execution_count": 35, "id": "8b9e2b8c", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "mnist_dm = SimpleDataModule(mnist_train,\n", @@ -1988,6 +2043,7 @@ "execution_count": 36, "id": "a4b95dc6", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2026,7 +2082,9 @@ "cell_type": "code", "execution_count": 37, "id": "17714c25", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "class MNISTModel(nn.Module):\n", @@ -2066,7 +2124,9 @@ "cell_type": "code", "execution_count": 38, "id": "88a4bf46", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "mnist_model = MNISTModel()\n" @@ -2085,7 +2145,9 @@ "cell_type": "code", "execution_count": 39, "id": "ea0d9387", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "data": { @@ -2116,7 +2178,9 @@ "cell_type": "code", "execution_count": 40, "id": "17c34a29", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "data": { @@ -2178,7 +2242,9 @@ "cell_type": "code", "execution_count": 41, "id": "a0608bd1", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "mnist_module = SimpleModule.classification(mnist_model,\n", @@ -2199,6 +2265,7 @@ "execution_count": 42, "id": "cf8e3d9d", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2722,6 +2789,7 @@ "execution_count": 43, "id": "45e03385", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2761,7 +2829,9 @@ "cell_type": "code", "execution_count": 44, "id": "3a875b78", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "data": { @@ -2835,7 +2905,9 @@ "cell_type": "code", "execution_count": 45, "id": "2f035d83", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "class MNIST_MLR(nn.Module):\n", @@ -2857,6 +2929,7 @@ "execution_count": 46, "id": "2cd67ad8", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3358,6 +3431,7 @@ "execution_count": 47, "id": "3900d16e", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3432,6 +3506,7 @@ "execution_count": 48, "id": "679f2ea5", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -3462,7 +3537,9 @@ "cell_type": "code", "execution_count": 49, "id": "e4af6604", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "name": "stdout", @@ -3485,7 +3562,9 @@ "cell_type": "code", "execution_count": 50, "id": "2b613ecc", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "transform = ToTensor()\n", @@ -3517,6 +3596,7 @@ "execution_count": 51, "id": "4b325cb4", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -3541,6 +3621,7 @@ "execution_count": 52, "id": "cb3d00cb", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -3580,6 +3661,7 @@ "execution_count": 53, "id": "60d09656", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -3629,7 +3711,9 @@ "cell_type": "code", "execution_count": 54, "id": "f823da11", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "class BuildingBlock(nn.Module):\n", @@ -3674,7 +3758,9 @@ "cell_type": "code", "execution_count": 55, "id": "1a172f7e", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "class CIFARModel(nn.Module):\n", @@ -3711,6 +3797,7 @@ "execution_count": 56, "id": "651e62b4", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -3807,7 +3894,9 @@ "cell_type": "code", "execution_count": 57, "id": "63f2650e", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "cifar_optimizer = RMSprop(cifar_model.parameters(), lr=0.001)\n", @@ -3821,7 +3910,9 @@ "cell_type": "code", "execution_count": 58, "id": "a3e4bc28", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "name": "stderr", @@ -4328,6 +4419,7 @@ "execution_count": 59, "id": "6b161d93", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -4368,6 +4460,7 @@ "execution_count": 60, "id": "ab8a91dc", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -4451,6 +4544,7 @@ "execution_count": 61, "id": "6d9962ae", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5003,6 +5097,7 @@ "execution_count": 62, "id": "a71c9acb", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -5042,6 +5137,7 @@ "execution_count": 63, "id": "4f890244", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5266,6 +5362,7 @@ "execution_count": 64, "id": "c4be9922", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5475,7 +5572,9 @@ "cell_type": "code", "execution_count": 65, "id": "2dc63d85", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "img_preds = resnet_model(imgs)\n" @@ -5496,7 +5595,9 @@ "cell_type": "code", "execution_count": 66, "id": "711d5ba7", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "img_probs = np.exp(np.asarray(img_preds.detach()))\n", @@ -5515,7 +5616,9 @@ "cell_type": "code", "execution_count": 67, "id": "b22f70d8", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "labs = json.load(open('imagenet_class_index.json'))\n", @@ -5541,6 +5644,7 @@ "execution_count": 68, "id": "b19c6bd1", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -5607,6 +5711,7 @@ "execution_count": 69, "id": "ba80b615", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -5651,6 +5756,7 @@ "execution_count": 70, "id": "ba6d2d2c", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -5695,7 +5801,9 @@ "cell_type": "code", "execution_count": 71, "id": "93bda908", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "data": { @@ -5730,6 +5838,7 @@ "execution_count": 72, "id": "40943b7d", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -5757,6 +5866,7 @@ "execution_count": 73, "id": "2117fd9f", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -5793,7 +5903,9 @@ "cell_type": "code", "execution_count": 74, "id": "66d0b710", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "data": { @@ -5855,7 +5967,9 @@ "cell_type": "code", "execution_count": 75, "id": "9df8b4cf", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "imdb_optimizer = RMSprop(imdb_model.parameters(), lr=0.001)\n", @@ -5878,7 +5992,9 @@ "cell_type": "code", "execution_count": 76, "id": "73684c66", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "name": "stderr", @@ -6387,6 +6503,7 @@ "execution_count": 77, "id": "01c6e5ff", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -6461,7 +6578,9 @@ "cell_type": "code", "execution_count": 78, "id": "4d5b9d1d", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "((X_train, Y_train),\n", @@ -6486,6 +6605,7 @@ "execution_count": 79, "id": "e2a88e57", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -6511,6 +6631,7 @@ "execution_count": 80, "id": "9a3cf7a3", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -6534,7 +6655,9 @@ "cell_type": "code", "execution_count": 81, "id": "b46f02c2", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "coefs = []\n", @@ -6561,6 +6684,7 @@ "execution_count": 82, "id": "e5fb6afa", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -6583,6 +6707,7 @@ "execution_count": 83, "id": "cad28f1a", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -6626,6 +6751,7 @@ "execution_count": 84, "id": "a66ecdd8", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -6673,6 +6799,7 @@ "execution_count": 85, "id": "62440c1c", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -6718,7 +6845,9 @@ "cell_type": "code", "execution_count": 86, "id": "c73d6e28", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "imdb_seq_dm = SimpleDataModule(imdb_seq_train,\n", @@ -6762,6 +6891,7 @@ "execution_count": 87, "id": "cc9bbd00", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -6792,7 +6922,9 @@ "cell_type": "code", "execution_count": 88, "id": "5c9ffb46", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "data": { @@ -6844,7 +6976,9 @@ "cell_type": "code", "execution_count": 89, "id": "a2d6ddfd", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "lstm_module = SimpleModule.binary_classification(lstm_model)\n", @@ -6856,6 +6990,7 @@ "execution_count": 90, "id": "1d76f970", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7217,7 +7352,9 @@ "cell_type": "code", "execution_count": 91, "id": "d8a60d35", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "data": { @@ -7286,6 +7423,7 @@ "execution_count": 92, "id": "65d7276c", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -7327,6 +7465,7 @@ "execution_count": 93, "id": "c6f2d6c4", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -7354,7 +7493,9 @@ "cell_type": "code", "execution_count": 94, "id": "f3e17682", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "NYSE = load_data('NYSE')\n", @@ -7379,7 +7520,9 @@ "cell_type": "code", "execution_count": 95, "id": "78707eda", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "for lag in range(1, 6):\n", @@ -7405,6 +7548,7 @@ "execution_count": 96, "id": "4d894824", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -7442,7 +7586,9 @@ "cell_type": "code", "execution_count": 97, "id": "4d7f5ce0", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "data": { @@ -7476,6 +7622,7 @@ "execution_count": 98, "id": "a6b371bb", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -7500,6 +7647,7 @@ "execution_count": 99, "id": "a2a8cc85", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7552,6 +7700,7 @@ "execution_count": 100, "id": "8ee6e6a3", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7592,6 +7741,7 @@ "execution_count": 101, "id": "d35ceb54", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7629,7 +7779,9 @@ "cell_type": "code", "execution_count": 102, "id": "9e3dc6d5", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "class NYSEModel(nn.Module):\n", @@ -7666,7 +7818,9 @@ "cell_type": "code", "execution_count": 103, "id": "df5e5ab6", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "datasets = []\n", @@ -7690,6 +7844,7 @@ "execution_count": 104, "id": "d7f49bec", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -7743,6 +7898,7 @@ "execution_count": 105, "id": "ea7ce0f4", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -7766,7 +7922,9 @@ "cell_type": "code", "execution_count": 106, "id": "ccd77738", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [ { "name": "stdout", @@ -7800,7 +7958,9 @@ "cell_type": "code", "execution_count": 107, "id": "96e04e3f", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "nyse_optimizer = RMSprop(nyse_model.parameters(),\n", @@ -7824,6 +7984,7 @@ "execution_count": 108, "id": "fc6ba2ca", "metadata": { + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -10762,7 +10923,9 @@ "cell_type": "code", "execution_count": 109, "id": "c60876d7", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "datasets = []\n", @@ -10786,7 +10949,9 @@ "cell_type": "code", "execution_count": 110, "id": "282f7e1c", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "day_dm = SimpleDataModule(day_train,\n", @@ -10808,7 +10973,9 @@ "cell_type": "code", "execution_count": 111, "id": "038fea74", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "class NonLinearARModel(nn.Module):\n", @@ -10827,7 +10994,9 @@ "cell_type": "code", "execution_count": 112, "id": "68d309b2", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "nl_model = NonLinearARModel()\n", @@ -10852,6 +11021,7 @@ "execution_count": 113, "id": "9fc113a1", "metadata": { + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ diff --git a/Ch11-surv-lab.ipynb b/Ch11-surv-lab.ipynb index d4c812c..d2d13c8 100644 --- a/Ch11-surv-lab.ipynb +++ b/Ch11-surv-lab.ipynb @@ -33,12 +33,7 @@ "execution_count": 1, "id": "d2d71add", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:04.373618Z", - "iopub.status.busy": "2023-08-21T02:30:04.373522Z", - "iopub.status.idle": "2023-08-21T02:30:05.528375Z", - "shell.execute_reply": "2023-08-21T02:30:05.528065Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -63,12 +58,7 @@ "execution_count": 2, "id": "994efc94", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.530453Z", - "iopub.status.busy": "2023-08-21T02:30:05.530271Z", - "iopub.status.idle": "2023-08-21T02:30:05.593786Z", - "shell.execute_reply": "2023-08-21T02:30:05.593483Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -96,12 +86,7 @@ "execution_count": 3, "id": "9d41ddea", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.595762Z", - "iopub.status.busy": "2023-08-21T02:30:05.595642Z", - "iopub.status.idle": "2023-08-21T02:30:05.602243Z", - "shell.execute_reply": "2023-08-21T02:30:05.601969Z" - } + "execution": {} }, "outputs": [ { @@ -134,12 +119,7 @@ "execution_count": 4, "id": "2bece782", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.603954Z", - "iopub.status.busy": "2023-08-21T02:30:05.603852Z", - "iopub.status.idle": "2023-08-21T02:30:05.607075Z", - "shell.execute_reply": "2023-08-21T02:30:05.606729Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -165,12 +145,7 @@ "execution_count": 5, "id": "9ca465e5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.608553Z", - "iopub.status.busy": "2023-08-21T02:30:05.608445Z", - "iopub.status.idle": "2023-08-21T02:30:05.611386Z", - "shell.execute_reply": "2023-08-21T02:30:05.611134Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -198,12 +173,7 @@ "execution_count": 6, "id": "33bc4d3c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.612735Z", - "iopub.status.busy": "2023-08-21T02:30:05.612639Z", - "iopub.status.idle": "2023-08-21T02:30:05.615164Z", - "shell.execute_reply": "2023-08-21T02:30:05.614915Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -254,12 +224,7 @@ "execution_count": 7, "id": "0b6dba70", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.616714Z", - "iopub.status.busy": "2023-08-21T02:30:05.616622Z", - "iopub.status.idle": "2023-08-21T02:30:05.728265Z", - "shell.execute_reply": "2023-08-21T02:30:05.727903Z" - } + "execution": {} }, "outputs": [ { @@ -320,12 +285,7 @@ "execution_count": 8, "id": "9e6f2e70", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.730200Z", - "iopub.status.busy": "2023-08-21T02:30:05.730056Z", - "iopub.status.idle": "2023-08-21T02:30:05.845830Z", - "shell.execute_reply": "2023-08-21T02:30:05.845506Z" - } + "execution": {} }, "outputs": [ { @@ -365,12 +325,7 @@ "execution_count": 9, "id": "c135f7aa", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.847658Z", - "iopub.status.busy": "2023-08-21T02:30:05.847519Z", - "iopub.status.idle": "2023-08-21T02:30:05.901295Z", - "shell.execute_reply": "2023-08-21T02:30:05.900935Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -478,12 +433,7 @@ "execution_count": 10, "id": "5f9303dd", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.903263Z", - "iopub.status.busy": "2023-08-21T02:30:05.903017Z", - "iopub.status.idle": "2023-08-21T02:30:05.930691Z", - "shell.execute_reply": "2023-08-21T02:30:05.930331Z" - } + "execution": {} }, "outputs": [ { @@ -571,12 +521,7 @@ "execution_count": 11, "id": "bcc8470c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.932434Z", - "iopub.status.busy": "2023-08-21T02:30:05.932285Z", - "iopub.status.idle": "2023-08-21T02:30:05.937796Z", - "shell.execute_reply": "2023-08-21T02:30:05.937549Z" - } + "execution": {} }, "outputs": [ { @@ -677,12 +622,7 @@ "execution_count": 12, "id": "c26a3499", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.939300Z", - "iopub.status.busy": "2023-08-21T02:30:05.939184Z", - "iopub.status.idle": "2023-08-21T02:30:05.979585Z", - "shell.execute_reply": "2023-08-21T02:30:05.979250Z" - } + "execution": {} }, "outputs": [ { @@ -825,12 +765,7 @@ "execution_count": 13, "id": "8d999f26", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.981441Z", - "iopub.status.busy": "2023-08-21T02:30:05.981315Z", - "iopub.status.idle": "2023-08-21T02:30:05.986317Z", - "shell.execute_reply": "2023-08-21T02:30:05.985949Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -858,12 +793,7 @@ "execution_count": 14, "id": "a1f6b355", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.988012Z", - "iopub.status.busy": "2023-08-21T02:30:05.987898Z", - "iopub.status.idle": "2023-08-21T02:30:05.993889Z", - "shell.execute_reply": "2023-08-21T02:30:05.993534Z" - } + "execution": {} }, "outputs": [ { @@ -986,12 +916,7 @@ "execution_count": 15, "id": "a1a9d5b3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:05.995682Z", - "iopub.status.busy": "2023-08-21T02:30:05.995549Z", - "iopub.status.idle": "2023-08-21T02:30:06.005479Z", - "shell.execute_reply": "2023-08-21T02:30:06.005089Z" - } + "execution": {} }, "outputs": [ { @@ -1128,12 +1053,7 @@ "execution_count": 16, "id": "1a18b56a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.007172Z", - "iopub.status.busy": "2023-08-21T02:30:06.007049Z", - "iopub.status.idle": "2023-08-21T02:30:06.014185Z", - "shell.execute_reply": "2023-08-21T02:30:06.013870Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1289,12 +1209,7 @@ "execution_count": 17, "id": "ff3de29c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.015778Z", - "iopub.status.busy": "2023-08-21T02:30:06.015664Z", - "iopub.status.idle": "2023-08-21T02:30:06.124035Z", - "shell.execute_reply": "2023-08-21T02:30:06.123732Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1332,12 +1247,7 @@ "execution_count": 18, "id": "cd9060c1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.125714Z", - "iopub.status.busy": "2023-08-21T02:30:06.125592Z", - "iopub.status.idle": "2023-08-21T02:30:06.243701Z", - "shell.execute_reply": "2023-08-21T02:30:06.243300Z" - } + "execution": {} }, "outputs": [ { @@ -1377,12 +1287,7 @@ "execution_count": 19, "id": "6af7106e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.245493Z", - "iopub.status.busy": "2023-08-21T02:30:06.245357Z", - "iopub.status.idle": "2023-08-21T02:30:06.281521Z", - "shell.execute_reply": "2023-08-21T02:30:06.281138Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1466,12 +1371,7 @@ "execution_count": 20, "id": "b6ebefa7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.283282Z", - "iopub.status.busy": "2023-08-21T02:30:06.283123Z", - "iopub.status.idle": "2023-08-21T02:30:06.327003Z", - "shell.execute_reply": "2023-08-21T02:30:06.326646Z" - } + "execution": {} }, "outputs": [ { @@ -1610,12 +1510,7 @@ "execution_count": 21, "id": "098f42ea", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.329058Z", - "iopub.status.busy": "2023-08-21T02:30:06.328927Z", - "iopub.status.idle": "2023-08-21T02:30:06.332782Z", - "shell.execute_reply": "2023-08-21T02:30:06.332425Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1648,12 +1543,7 @@ "execution_count": 22, "id": "26d5d0d0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.334692Z", - "iopub.status.busy": "2023-08-21T02:30:06.334589Z", - "iopub.status.idle": "2023-08-21T02:30:06.344047Z", - "shell.execute_reply": "2023-08-21T02:30:06.343708Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1680,12 +1570,7 @@ "execution_count": 23, "id": "77500663", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.345660Z", - "iopub.status.busy": "2023-08-21T02:30:06.345575Z", - "iopub.status.idle": "2023-08-21T02:30:06.350086Z", - "shell.execute_reply": "2023-08-21T02:30:06.349797Z" - } + "execution": {} }, "outputs": [ { @@ -1792,12 +1677,7 @@ "execution_count": 24, "id": "74324a56", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.351738Z", - "iopub.status.busy": "2023-08-21T02:30:06.351549Z", - "iopub.status.idle": "2023-08-21T02:30:06.444268Z", - "shell.execute_reply": "2023-08-21T02:30:06.441484Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1839,12 +1719,7 @@ "execution_count": 25, "id": "d4be10c2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.449822Z", - "iopub.status.busy": "2023-08-21T02:30:06.449515Z", - "iopub.status.idle": "2023-08-21T02:30:06.458388Z", - "shell.execute_reply": "2023-08-21T02:30:06.457673Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1870,12 +1745,7 @@ "execution_count": 26, "id": "c98d396f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.461931Z", - "iopub.status.busy": "2023-08-21T02:30:06.461787Z", - "iopub.status.idle": "2023-08-21T02:30:06.624349Z", - "shell.execute_reply": "2023-08-21T02:30:06.624026Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1899,12 +1769,7 @@ "execution_count": 27, "id": "caf627bc", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.626165Z", - "iopub.status.busy": "2023-08-21T02:30:06.626054Z", - "iopub.status.idle": "2023-08-21T02:30:06.630808Z", - "shell.execute_reply": "2023-08-21T02:30:06.630542Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2007,12 +1872,7 @@ "execution_count": 28, "id": "e63242f9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.632357Z", - "iopub.status.busy": "2023-08-21T02:30:06.632261Z", - "iopub.status.idle": "2023-08-21T02:30:06.634630Z", - "shell.execute_reply": "2023-08-21T02:30:06.634305Z" - } + "execution": {} }, "outputs": [ { @@ -2043,12 +1903,7 @@ "execution_count": 29, "id": "338db71d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.636188Z", - "iopub.status.busy": "2023-08-21T02:30:06.636081Z", - "iopub.status.idle": "2023-08-21T02:30:06.791856Z", - "shell.execute_reply": "2023-08-21T02:30:06.791521Z" - } + "execution": {} }, "outputs": [ { @@ -2095,12 +1950,7 @@ "execution_count": 30, "id": "c1db6e15", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.793629Z", - "iopub.status.busy": "2023-08-21T02:30:06.793538Z", - "iopub.status.idle": "2023-08-21T02:30:06.992155Z", - "shell.execute_reply": "2023-08-21T02:30:06.991803Z" - } + "execution": {} }, "outputs": [ { @@ -2151,12 +2001,7 @@ "execution_count": 31, "id": "02ea4212", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:06.993929Z", - "iopub.status.busy": "2023-08-21T02:30:06.993819Z", - "iopub.status.idle": "2023-08-21T02:30:07.011557Z", - "shell.execute_reply": "2023-08-21T02:30:07.011276Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2258,12 +2103,7 @@ "execution_count": 32, "id": "0ac610d5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:07.013331Z", - "iopub.status.busy": "2023-08-21T02:30:07.013187Z", - "iopub.status.idle": "2023-08-21T02:30:07.030401Z", - "shell.execute_reply": "2023-08-21T02:30:07.030073Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2368,12 +2208,7 @@ "execution_count": 33, "id": "107cedad", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:07.032008Z", - "iopub.status.busy": "2023-08-21T02:30:07.031887Z", - "iopub.status.idle": "2023-08-21T02:30:07.160931Z", - "shell.execute_reply": "2023-08-21T02:30:07.160639Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2473,12 +2308,7 @@ "execution_count": 34, "id": "334eb331", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:07.162793Z", - "iopub.status.busy": "2023-08-21T02:30:07.162651Z", - "iopub.status.idle": "2023-08-21T02:30:07.291875Z", - "shell.execute_reply": "2023-08-21T02:30:07.291550Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2581,12 +2411,7 @@ "execution_count": 35, "id": "421811c5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:07.293545Z", - "iopub.status.busy": "2023-08-21T02:30:07.293433Z", - "iopub.status.idle": "2023-08-21T02:30:07.532213Z", - "shell.execute_reply": "2023-08-21T02:30:07.531293Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ diff --git a/Ch12-unsup-lab.ipynb b/Ch12-unsup-lab.ipynb index 54b3379..c67392a 100644 --- a/Ch12-unsup-lab.ipynb +++ b/Ch12-unsup-lab.ipynb @@ -21,12 +21,7 @@ "execution_count": 1, "id": "6d5ba583", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:08.846762Z", - "iopub.status.busy": "2023-08-21T02:30:08.846653Z", - "iopub.status.idle": "2023-08-21T02:30:09.939364Z", - "shell.execute_reply": "2023-08-21T02:30:09.939004Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -54,12 +49,7 @@ "execution_count": 2, "id": "64c83257", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:09.941473Z", - "iopub.status.busy": "2023-08-21T02:30:09.941296Z", - "iopub.status.idle": "2023-08-21T02:30:10.036632Z", - "shell.execute_reply": "2023-08-21T02:30:10.036163Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -91,12 +81,7 @@ "execution_count": 3, "id": "04ec4481", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:10.038974Z", - "iopub.status.busy": "2023-08-21T02:30:10.038734Z", - "iopub.status.idle": "2023-08-21T02:30:11.214222Z", - "shell.execute_reply": "2023-08-21T02:30:11.213910Z" - } + "execution": {} }, "outputs": [ { @@ -558,12 +543,7 @@ "execution_count": 4, "id": "1b66036a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.216028Z", - "iopub.status.busy": "2023-08-21T02:30:11.215902Z", - "iopub.status.idle": "2023-08-21T02:30:11.218553Z", - "shell.execute_reply": "2023-08-21T02:30:11.218232Z" - } + "execution": {} }, "outputs": [ { @@ -594,12 +574,7 @@ "execution_count": 5, "id": "52e900fd", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.220090Z", - "iopub.status.busy": "2023-08-21T02:30:11.219971Z", - "iopub.status.idle": "2023-08-21T02:30:11.223332Z", - "shell.execute_reply": "2023-08-21T02:30:11.223004Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -637,12 +612,7 @@ "execution_count": 6, "id": "68684f78", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.225020Z", - "iopub.status.busy": "2023-08-21T02:30:11.224913Z", - "iopub.status.idle": "2023-08-21T02:30:11.228160Z", - "shell.execute_reply": "2023-08-21T02:30:11.227843Z" - } + "execution": {} }, "outputs": [ { @@ -691,12 +661,7 @@ "execution_count": 7, "id": "d2b7caf9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.229847Z", - "iopub.status.busy": "2023-08-21T02:30:11.229717Z", - "iopub.status.idle": "2023-08-21T02:30:11.233108Z", - "shell.execute_reply": "2023-08-21T02:30:11.232828Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -721,12 +686,7 @@ "execution_count": 8, "id": "de8f57fa", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.234711Z", - "iopub.status.busy": "2023-08-21T02:30:11.234595Z", - "iopub.status.idle": "2023-08-21T02:30:11.241074Z", - "shell.execute_reply": "2023-08-21T02:30:11.239548Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -750,12 +710,7 @@ "execution_count": 9, "id": "26c45f1e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.242595Z", - "iopub.status.busy": "2023-08-21T02:30:11.242489Z", - "iopub.status.idle": "2023-08-21T02:30:11.246323Z", - "shell.execute_reply": "2023-08-21T02:30:11.246064Z" - } + "execution": {} }, "outputs": [ { @@ -791,12 +746,7 @@ "execution_count": 10, "id": "3097e99d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.247882Z", - "iopub.status.busy": "2023-08-21T02:30:11.247777Z", - "iopub.status.idle": "2023-08-21T02:30:11.250076Z", - "shell.execute_reply": "2023-08-21T02:30:11.249792Z" - } + "execution": {} }, "outputs": [ { @@ -828,12 +778,7 @@ "execution_count": 11, "id": "c071a242", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.251690Z", - "iopub.status.busy": "2023-08-21T02:30:11.251589Z", - "iopub.status.idle": "2023-08-21T02:30:11.253710Z", - "shell.execute_reply": "2023-08-21T02:30:11.253213Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -857,12 +802,7 @@ "execution_count": 12, "id": "c9bcab06", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.255475Z", - "iopub.status.busy": "2023-08-21T02:30:11.255331Z", - "iopub.status.idle": "2023-08-21T02:30:11.257666Z", - "shell.execute_reply": "2023-08-21T02:30:11.257404Z" - } + "execution": {} }, "outputs": [ { @@ -900,12 +840,7 @@ "execution_count": 13, "id": "7375ab13", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.259208Z", - "iopub.status.busy": "2023-08-21T02:30:11.259106Z", - "iopub.status.idle": "2023-08-21T02:30:11.411821Z", - "shell.execute_reply": "2023-08-21T02:30:11.411424Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -950,12 +885,7 @@ "execution_count": 14, "id": "4c1988de", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.413868Z", - "iopub.status.busy": "2023-08-21T02:30:11.413708Z", - "iopub.status.idle": "2023-08-21T02:30:11.510731Z", - "shell.execute_reply": "2023-08-21T02:30:11.510392Z" - } + "execution": {} }, "outputs": [ { @@ -997,12 +927,7 @@ "execution_count": 15, "id": "965c6320", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.512534Z", - "iopub.status.busy": "2023-08-21T02:30:11.512382Z", - "iopub.status.idle": "2023-08-21T02:30:11.515359Z", - "shell.execute_reply": "2023-08-21T02:30:11.514710Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1035,12 +960,7 @@ "execution_count": 16, "id": "cd5e1663", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.517105Z", - "iopub.status.busy": "2023-08-21T02:30:11.516982Z", - "iopub.status.idle": "2023-08-21T02:30:11.519375Z", - "shell.execute_reply": "2023-08-21T02:30:11.519076Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1073,12 +993,7 @@ "execution_count": 17, "id": "e711d1be", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.520951Z", - "iopub.status.busy": "2023-08-21T02:30:11.520847Z", - "iopub.status.idle": "2023-08-21T02:30:11.523283Z", - "shell.execute_reply": "2023-08-21T02:30:11.523005Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1114,12 +1029,7 @@ "execution_count": 18, "id": "e122eb41", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.524835Z", - "iopub.status.busy": "2023-08-21T02:30:11.524733Z", - "iopub.status.idle": "2023-08-21T02:30:11.658787Z", - "shell.execute_reply": "2023-08-21T02:30:11.658413Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1150,12 +1060,7 @@ "execution_count": 19, "id": "bef47d90", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.661199Z", - "iopub.status.busy": "2023-08-21T02:30:11.661017Z", - "iopub.status.idle": "2023-08-21T02:30:11.782427Z", - "shell.execute_reply": "2023-08-21T02:30:11.781635Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1198,12 +1103,7 @@ "execution_count": 20, "id": "f3300d9e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.785513Z", - "iopub.status.busy": "2023-08-21T02:30:11.785329Z", - "iopub.status.idle": "2023-08-21T02:30:11.789028Z", - "shell.execute_reply": "2023-08-21T02:30:11.788419Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1247,12 +1147,7 @@ "execution_count": 21, "id": "20e6009f", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.791569Z", - "iopub.status.busy": "2023-08-21T02:30:11.791444Z", - "iopub.status.idle": "2023-08-21T02:30:11.795478Z", - "shell.execute_reply": "2023-08-21T02:30:11.794972Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1288,12 +1183,7 @@ "execution_count": 22, "id": "7d9937cf", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.797640Z", - "iopub.status.busy": "2023-08-21T02:30:11.797509Z", - "iopub.status.idle": "2023-08-21T02:30:11.800846Z", - "shell.execute_reply": "2023-08-21T02:30:11.800294Z" - } + "execution": {} }, "outputs": [ { @@ -1319,12 +1209,7 @@ "execution_count": 23, "id": "e58f83a3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.808398Z", - "iopub.status.busy": "2023-08-21T02:30:11.808136Z", - "iopub.status.idle": "2023-08-21T02:30:11.811679Z", - "shell.execute_reply": "2023-08-21T02:30:11.811074Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1359,12 +1244,7 @@ "execution_count": 24, "id": "5c4f9b34", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.813485Z", - "iopub.status.busy": "2023-08-21T02:30:11.813382Z", - "iopub.status.idle": "2023-08-21T02:30:11.816392Z", - "shell.execute_reply": "2023-08-21T02:30:11.815967Z" - } + "execution": {} }, "outputs": [ { @@ -1389,12 +1269,7 @@ "execution_count": 25, "id": "0ce84f1b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.818183Z", - "iopub.status.busy": "2023-08-21T02:30:11.818037Z", - "iopub.status.idle": "2023-08-21T02:30:11.820586Z", - "shell.execute_reply": "2023-08-21T02:30:11.820295Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1434,12 +1309,7 @@ "execution_count": 26, "id": "cd8b4bed", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.822223Z", - "iopub.status.busy": "2023-08-21T02:30:11.822124Z", - "iopub.status.idle": "2023-08-21T02:30:11.824710Z", - "shell.execute_reply": "2023-08-21T02:30:11.824451Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1474,12 +1344,7 @@ "execution_count": 27, "id": "7f3bc8f9", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.826294Z", - "iopub.status.busy": "2023-08-21T02:30:11.826188Z", - "iopub.status.idle": "2023-08-21T02:30:11.828326Z", - "shell.execute_reply": "2023-08-21T02:30:11.827946Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1507,12 +1372,7 @@ "execution_count": 28, "id": "771a46a7", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.830112Z", - "iopub.status.busy": "2023-08-21T02:30:11.829990Z", - "iopub.status.idle": "2023-08-21T02:30:11.832019Z", - "shell.execute_reply": "2023-08-21T02:30:11.831653Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1535,12 +1395,7 @@ "execution_count": 29, "id": "1416f048", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.834018Z", - "iopub.status.busy": "2023-08-21T02:30:11.833888Z", - "iopub.status.idle": "2023-08-21T02:30:11.836065Z", - "shell.execute_reply": "2023-08-21T02:30:11.835740Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1575,12 +1430,7 @@ "execution_count": 30, "id": "9eff34aa", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.838230Z", - "iopub.status.busy": "2023-08-21T02:30:11.838081Z", - "iopub.status.idle": "2023-08-21T02:30:11.841552Z", - "shell.execute_reply": "2023-08-21T02:30:11.841240Z" - } + "execution": {} }, "outputs": [ { @@ -1630,12 +1480,7 @@ "execution_count": 31, "id": "7815b948", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.843245Z", - "iopub.status.busy": "2023-08-21T02:30:11.843118Z", - "iopub.status.idle": "2023-08-21T02:30:11.846592Z", - "shell.execute_reply": "2023-08-21T02:30:11.846200Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1688,12 +1533,7 @@ "execution_count": 32, "id": "f63cf4b8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.848430Z", - "iopub.status.busy": "2023-08-21T02:30:11.848311Z", - "iopub.status.idle": "2023-08-21T02:30:11.850755Z", - "shell.execute_reply": "2023-08-21T02:30:11.850430Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1717,12 +1557,7 @@ "execution_count": 33, "id": "f973c2d4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:11.852603Z", - "iopub.status.busy": "2023-08-21T02:30:11.852463Z", - "iopub.status.idle": "2023-08-21T02:30:12.419856Z", - "shell.execute_reply": "2023-08-21T02:30:12.416814Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -1745,12 +1580,7 @@ "execution_count": 34, "id": "e980954b", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:12.436151Z", - "iopub.status.busy": "2023-08-21T02:30:12.434738Z", - "iopub.status.idle": "2023-08-21T02:30:12.484691Z", - "shell.execute_reply": "2023-08-21T02:30:12.459324Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1787,12 +1617,7 @@ "execution_count": 35, "id": "a94d452c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:12.510741Z", - "iopub.status.busy": "2023-08-21T02:30:12.510582Z", - "iopub.status.idle": "2023-08-21T02:30:12.636062Z", - "shell.execute_reply": "2023-08-21T02:30:12.635730Z" - } + "execution": {} }, "outputs": [ { @@ -1834,12 +1659,7 @@ "execution_count": 36, "id": "94ff654c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:12.638065Z", - "iopub.status.busy": "2023-08-21T02:30:12.637921Z", - "iopub.status.idle": "2023-08-21T02:30:12.806481Z", - "shell.execute_reply": "2023-08-21T02:30:12.805717Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1883,12 +1703,7 @@ "execution_count": 37, "id": "b3561317", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:12.808756Z", - "iopub.status.busy": "2023-08-21T02:30:12.808647Z", - "iopub.status.idle": "2023-08-21T02:30:12.868305Z", - "shell.execute_reply": "2023-08-21T02:30:12.867287Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1956,12 +1771,7 @@ "execution_count": 38, "id": "be9e4f9c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:12.871403Z", - "iopub.status.busy": "2023-08-21T02:30:12.871255Z", - "iopub.status.idle": "2023-08-21T02:30:12.877754Z", - "shell.execute_reply": "2023-08-21T02:30:12.877453Z" - } + "execution": {} }, "outputs": [ { @@ -2003,12 +1813,7 @@ "execution_count": 39, "id": "f80d8563", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:12.879743Z", - "iopub.status.busy": "2023-08-21T02:30:12.879627Z", - "iopub.status.idle": "2023-08-21T02:30:12.883455Z", - "shell.execute_reply": "2023-08-21T02:30:12.883063Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -2036,12 +1841,7 @@ "execution_count": 40, "id": "83e7ccf8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:12.885091Z", - "iopub.status.busy": "2023-08-21T02:30:12.884985Z", - "iopub.status.idle": "2023-08-21T02:30:12.890499Z", - "shell.execute_reply": "2023-08-21T02:30:12.890138Z" - } + "execution": {} }, "outputs": [ { @@ -2096,12 +1896,7 @@ "execution_count": 41, "id": "56ee8cbf", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:12.892483Z", - "iopub.status.busy": "2023-08-21T02:30:12.892271Z", - "iopub.status.idle": "2023-08-21T02:30:13.132407Z", - "shell.execute_reply": "2023-08-21T02:30:13.132103Z" - } + "execution": {} }, "outputs": [ { @@ -2141,12 +1936,7 @@ "execution_count": 42, "id": "10f4fc97", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:13.134084Z", - "iopub.status.busy": "2023-08-21T02:30:13.133962Z", - "iopub.status.idle": "2023-08-21T02:30:13.363909Z", - "shell.execute_reply": "2023-08-21T02:30:13.363594Z" - } + "execution": {} }, "outputs": [ { @@ -2183,12 +1973,7 @@ "execution_count": 43, "id": "3aed342a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:13.365591Z", - "iopub.status.busy": "2023-08-21T02:30:13.365487Z", - "iopub.status.idle": "2023-08-21T02:30:13.368978Z", - "shell.execute_reply": "2023-08-21T02:30:13.368698Z" - } + "execution": {} }, "outputs": [ { @@ -2225,12 +2010,7 @@ "execution_count": 44, "id": "49c6db0c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:13.370508Z", - "iopub.status.busy": "2023-08-21T02:30:13.370414Z", - "iopub.status.idle": "2023-08-21T02:30:13.373767Z", - "shell.execute_reply": "2023-08-21T02:30:13.373373Z" - } + "execution": {} }, "outputs": [ { @@ -2311,12 +2091,7 @@ "execution_count": 45, "id": "0ef4b7ec", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:13.375598Z", - "iopub.status.busy": "2023-08-21T02:30:13.375476Z", - "iopub.status.idle": "2023-08-21T02:30:13.613632Z", - "shell.execute_reply": "2023-08-21T02:30:13.613228Z" - } + "execution": {} }, "outputs": [ { @@ -2366,12 +2141,7 @@ "execution_count": 46, "id": "51761ef3", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:13.616266Z", - "iopub.status.busy": "2023-08-21T02:30:13.616114Z", - "iopub.status.idle": "2023-08-21T02:30:13.807244Z", - "shell.execute_reply": "2023-08-21T02:30:13.806904Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2418,12 +2188,7 @@ "execution_count": 47, "id": "3dbe7baf", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:13.808881Z", - "iopub.status.busy": "2023-08-21T02:30:13.808757Z", - "iopub.status.idle": "2023-08-21T02:30:13.815572Z", - "shell.execute_reply": "2023-08-21T02:30:13.815234Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -2451,12 +2216,7 @@ "execution_count": 48, "id": "8f4e9db0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:13.817455Z", - "iopub.status.busy": "2023-08-21T02:30:13.817327Z", - "iopub.status.idle": "2023-08-21T02:30:13.819934Z", - "shell.execute_reply": "2023-08-21T02:30:13.819588Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2488,12 +2248,7 @@ "execution_count": 49, "id": "6373db4d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:13.821622Z", - "iopub.status.busy": "2023-08-21T02:30:13.821498Z", - "iopub.status.idle": "2023-08-21T02:30:13.825550Z", - "shell.execute_reply": "2023-08-21T02:30:13.825258Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -2544,12 +2299,7 @@ "execution_count": 50, "id": "9f185f83", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:13.827046Z", - "iopub.status.busy": "2023-08-21T02:30:13.826963Z", - "iopub.status.idle": "2023-08-21T02:30:15.128422Z", - "shell.execute_reply": "2023-08-21T02:30:15.127267Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -2576,12 +2326,7 @@ "execution_count": 51, "id": "b044b197", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:15.132319Z", - "iopub.status.busy": "2023-08-21T02:30:15.130836Z", - "iopub.status.idle": "2023-08-21T02:30:15.450531Z", - "shell.execute_reply": "2023-08-21T02:30:15.450148Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2646,12 +2391,7 @@ "execution_count": 52, "id": "b2450bb2", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:15.453108Z", - "iopub.status.busy": "2023-08-21T02:30:15.452934Z", - "iopub.status.idle": "2023-08-21T02:30:15.641832Z", - "shell.execute_reply": "2023-08-21T02:30:15.641441Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2719,12 +2459,7 @@ "execution_count": 53, "id": "f3f85512", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:15.645761Z", - "iopub.status.busy": "2023-08-21T02:30:15.645577Z", - "iopub.status.idle": "2023-08-21T02:30:15.648982Z", - "shell.execute_reply": "2023-08-21T02:30:15.648549Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -2757,12 +2492,7 @@ "execution_count": 54, "id": "5cbeeb19", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:15.651172Z", - "iopub.status.busy": "2023-08-21T02:30:15.651062Z", - "iopub.status.idle": "2023-08-21T02:30:17.138064Z", - "shell.execute_reply": "2023-08-21T02:30:17.137456Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -2810,12 +2540,7 @@ "execution_count": 55, "id": "1eb3c92e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:17.141105Z", - "iopub.status.busy": "2023-08-21T02:30:17.140950Z", - "iopub.status.idle": "2023-08-21T02:30:17.153308Z", - "shell.execute_reply": "2023-08-21T02:30:17.152985Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -3004,12 +2729,7 @@ "execution_count": 56, "id": "e3c2841c", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:17.155262Z", - "iopub.status.busy": "2023-08-21T02:30:17.155100Z", - "iopub.status.idle": "2023-08-21T02:30:17.595981Z", - "shell.execute_reply": "2023-08-21T02:30:17.595541Z" - } + "execution": {} }, "outputs": [ { @@ -3053,12 +2773,7 @@ "execution_count": 57, "id": "94dfe5a0", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:17.598183Z", - "iopub.status.busy": "2023-08-21T02:30:17.598049Z", - "iopub.status.idle": "2023-08-21T02:30:46.877046Z", - "shell.execute_reply": "2023-08-21T02:30:46.874804Z" - } + "execution": {} }, "outputs": [ { @@ -3178,12 +2893,7 @@ "execution_count": 58, "id": "abd51940", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:30:46.888673Z", - "iopub.status.busy": "2023-08-21T02:30:46.888240Z", - "iopub.status.idle": "2023-08-21T02:30:47.344737Z", - "shell.execute_reply": "2023-08-21T02:30:47.344286Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ diff --git a/Ch13-multiple-lab.ipynb b/Ch13-multiple-lab.ipynb index bb9684d..f5c9390 100644 --- a/Ch13-multiple-lab.ipynb +++ b/Ch13-multiple-lab.ipynb @@ -25,12 +25,7 @@ "execution_count": 1, "id": "7cc4fbeb", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:16.417394Z", - "iopub.status.busy": "2023-08-21T02:29:16.417287Z", - "iopub.status.idle": "2023-08-21T02:29:17.613483Z", - "shell.execute_reply": "2023-08-21T02:29:17.613156Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -55,12 +50,7 @@ "execution_count": 2, "id": "595efc18", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.615551Z", - "iopub.status.busy": "2023-08-21T02:29:17.615375Z", - "iopub.status.idle": "2023-08-21T02:29:17.617379Z", - "shell.execute_reply": "2023-08-21T02:29:17.617087Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [], @@ -94,12 +84,7 @@ "execution_count": 3, "id": "985d1d6e", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.618995Z", - "iopub.status.busy": "2023-08-21T02:29:17.618887Z", - "iopub.status.idle": "2023-08-21T02:29:17.620921Z", - "shell.execute_reply": "2023-08-21T02:29:17.620629Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -124,12 +109,7 @@ "execution_count": 4, "id": "753d612a", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.622537Z", - "iopub.status.busy": "2023-08-21T02:29:17.622429Z", - "iopub.status.idle": "2023-08-21T02:29:17.626063Z", - "shell.execute_reply": "2023-08-21T02:29:17.625801Z" - } + "execution": {} }, "outputs": [ { @@ -171,12 +151,7 @@ "execution_count": 5, "id": "facd6569", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.627714Z", - "iopub.status.busy": "2023-08-21T02:29:17.627617Z", - "iopub.status.idle": "2023-08-21T02:29:17.651726Z", - "shell.execute_reply": "2023-08-21T02:29:17.651448Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [], @@ -207,12 +182,7 @@ "execution_count": 6, "id": "e89ef3eb", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.653344Z", - "iopub.status.busy": "2023-08-21T02:29:17.653256Z", - "iopub.status.idle": "2023-08-21T02:29:17.662644Z", - "shell.execute_reply": "2023-08-21T02:29:17.662346Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -308,12 +278,7 @@ "execution_count": 7, "id": "ae184aaf", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.664327Z", - "iopub.status.busy": "2023-08-21T02:29:17.664213Z", - "iopub.status.idle": "2023-08-21T02:29:17.690928Z", - "shell.execute_reply": "2023-08-21T02:29:17.690657Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -420,12 +385,7 @@ "execution_count": 8, "id": "0295fe68", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.692568Z", - "iopub.status.busy": "2023-08-21T02:29:17.692459Z", - "iopub.status.idle": "2023-08-21T02:29:17.899403Z", - "shell.execute_reply": "2023-08-21T02:29:17.899081Z" - } + "execution": {} }, "outputs": [ { @@ -476,12 +436,7 @@ "execution_count": 9, "id": "406e59a8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.901146Z", - "iopub.status.busy": "2023-08-21T02:29:17.901041Z", - "iopub.status.idle": "2023-08-21T02:29:17.939312Z", - "shell.execute_reply": "2023-08-21T02:29:17.939019Z" - } + "execution": {} }, "outputs": [ { @@ -544,12 +499,7 @@ "execution_count": 10, "id": "d4f6a247", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.941032Z", - "iopub.status.busy": "2023-08-21T02:29:17.940919Z", - "iopub.status.idle": "2023-08-21T02:29:17.943369Z", - "shell.execute_reply": "2023-08-21T02:29:17.943081Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -583,12 +533,7 @@ "execution_count": 11, "id": "01a29d71", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.944859Z", - "iopub.status.busy": "2023-08-21T02:29:17.944760Z", - "iopub.status.idle": "2023-08-21T02:29:17.946888Z", - "shell.execute_reply": "2023-08-21T02:29:17.946639Z" - } + "execution": {} }, "outputs": [ { @@ -625,12 +570,7 @@ "execution_count": 12, "id": "95454eb4", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.948474Z", - "iopub.status.busy": "2023-08-21T02:29:17.948372Z", - "iopub.status.idle": "2023-08-21T02:29:17.990740Z", - "shell.execute_reply": "2023-08-21T02:29:17.990464Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -665,12 +605,7 @@ "execution_count": 13, "id": "1f1ac764", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.992261Z", - "iopub.status.busy": "2023-08-21T02:29:17.992149Z", - "iopub.status.idle": "2023-08-21T02:29:17.995141Z", - "shell.execute_reply": "2023-08-21T02:29:17.994894Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -709,12 +644,7 @@ "execution_count": 14, "id": "298d975d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:17.996686Z", - "iopub.status.busy": "2023-08-21T02:29:17.996590Z", - "iopub.status.idle": "2023-08-21T02:29:17.999332Z", - "shell.execute_reply": "2023-08-21T02:29:17.999076Z" - } + "execution": {} }, "outputs": [ { @@ -761,12 +691,7 @@ "execution_count": 15, "id": "be117713", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:18.000853Z", - "iopub.status.busy": "2023-08-21T02:29:18.000747Z", - "iopub.status.idle": "2023-08-21T02:29:18.487357Z", - "shell.execute_reply": "2023-08-21T02:29:18.487078Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -821,12 +746,7 @@ "execution_count": 16, "id": "537c4ea8", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:18.489069Z", - "iopub.status.busy": "2023-08-21T02:29:18.488949Z", - "iopub.status.idle": "2023-08-21T02:29:18.570869Z", - "shell.execute_reply": "2023-08-21T02:29:18.570427Z" - } + "execution": {} }, "outputs": [ { @@ -862,12 +782,7 @@ "execution_count": 17, "id": "2c88ec87", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:18.572454Z", - "iopub.status.busy": "2023-08-21T02:29:18.572341Z", - "iopub.status.idle": "2023-08-21T02:29:19.005707Z", - "shell.execute_reply": "2023-08-21T02:29:19.005387Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -891,12 +806,7 @@ "execution_count": 18, "id": "b6d56819", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:19.007847Z", - "iopub.status.busy": "2023-08-21T02:29:19.007564Z", - "iopub.status.idle": "2023-08-21T02:29:19.010742Z", - "shell.execute_reply": "2023-08-21T02:29:19.010371Z" - } + "execution": {} }, "outputs": [ { @@ -936,12 +846,7 @@ "execution_count": 19, "id": "b00da3a1", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:19.012400Z", - "iopub.status.busy": "2023-08-21T02:29:19.012298Z", - "iopub.status.idle": "2023-08-21T02:29:19.015314Z", - "shell.execute_reply": "2023-08-21T02:29:19.014978Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -980,12 +885,7 @@ "execution_count": 20, "id": "1c230117", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:19.016857Z", - "iopub.status.busy": "2023-08-21T02:29:19.016769Z", - "iopub.status.idle": "2023-08-21T02:29:19.019332Z", - "shell.execute_reply": "2023-08-21T02:29:19.019032Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1030,12 +930,7 @@ "execution_count": 21, "id": "62289650", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:19.021112Z", - "iopub.status.busy": "2023-08-21T02:29:19.020904Z", - "iopub.status.idle": "2023-08-21T02:29:19.023622Z", - "shell.execute_reply": "2023-08-21T02:29:19.023338Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1064,12 +959,7 @@ "execution_count": 22, "id": "18b3c0ed", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:19.025191Z", - "iopub.status.busy": "2023-08-21T02:29:19.025074Z", - "iopub.status.idle": "2023-08-21T02:29:19.262207Z", - "shell.execute_reply": "2023-08-21T02:29:19.261823Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1114,12 +1004,7 @@ "execution_count": 23, "id": "eb79e606", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:19.264174Z", - "iopub.status.busy": "2023-08-21T02:29:19.264030Z", - "iopub.status.idle": "2023-08-21T02:29:19.339232Z", - "shell.execute_reply": "2023-08-21T02:29:19.338912Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1165,12 +1050,7 @@ "execution_count": 24, "id": "1afbcf47", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:19.341009Z", - "iopub.status.busy": "2023-08-21T02:29:19.340889Z", - "iopub.status.idle": "2023-08-21T02:29:19.344670Z", - "shell.execute_reply": "2023-08-21T02:29:19.344391Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1218,12 +1098,7 @@ "execution_count": 25, "id": "f73f4c6d", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:19.346368Z", - "iopub.status.busy": "2023-08-21T02:29:19.346227Z", - "iopub.status.idle": "2023-08-21T02:29:21.776569Z", - "shell.execute_reply": "2023-08-21T02:29:21.776267Z" - }, + "execution": {}, "lines_to_next_cell": 2 }, "outputs": [ @@ -1269,12 +1144,7 @@ "execution_count": 26, "id": "062daf19", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:21.778366Z", - "iopub.status.busy": "2023-08-21T02:29:21.778242Z", - "iopub.status.idle": "2023-08-21T02:29:21.990476Z", - "shell.execute_reply": "2023-08-21T02:29:21.989965Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ @@ -1329,12 +1199,7 @@ "execution_count": 27, "id": "6d14fcad", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:29:21.992665Z", - "iopub.status.busy": "2023-08-21T02:29:21.992515Z", - "iopub.status.idle": "2023-08-21T02:34:05.930300Z", - "shell.execute_reply": "2023-08-21T02:34:05.929181Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1375,12 +1240,7 @@ "execution_count": 28, "id": "8f0ec909", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:34:05.935513Z", - "iopub.status.busy": "2023-08-21T02:34:05.935323Z", - "iopub.status.idle": "2023-08-21T02:34:06.118079Z", - "shell.execute_reply": "2023-08-21T02:34:06.117633Z" - } + "execution": {} }, "outputs": [], "source": [ @@ -1416,12 +1276,7 @@ "execution_count": 29, "id": "f11339e5", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:34:06.120138Z", - "iopub.status.busy": "2023-08-21T02:34:06.119994Z", - "iopub.status.idle": "2023-08-21T02:34:06.123846Z", - "shell.execute_reply": "2023-08-21T02:34:06.123478Z" - } + "execution": {} }, "outputs": [ { @@ -1471,12 +1326,7 @@ "execution_count": 30, "id": "d2600773", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:34:06.126460Z", - "iopub.status.busy": "2023-08-21T02:34:06.126346Z", - "iopub.status.idle": "2023-08-21T02:34:06.129561Z", - "shell.execute_reply": "2023-08-21T02:34:06.129124Z" - } + "execution": {} }, "outputs": [ { @@ -1539,12 +1389,7 @@ "execution_count": 31, "id": "924b7705", "metadata": { - "execution": { - "iopub.execute_input": "2023-08-21T02:34:06.131323Z", - "iopub.status.busy": "2023-08-21T02:34:06.131207Z", - "iopub.status.idle": "2023-08-21T02:34:06.216626Z", - "shell.execute_reply": "2023-08-21T02:34:06.216270Z" - }, + "execution": {}, "lines_to_next_cell": 0 }, "outputs": [ From 79caa951bac0d793d51b2bb881be57e33dca0514 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sat, 7 Oct 2023 08:14:23 -0700 Subject: [PATCH 19/19] incrementing ISLP version --- README.md | 4 ++-- requirements.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8e49c0e..dc8d4e1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ISLP_labs -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/intro-stat-learning/ISLP_labs/v2.1.2) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/intro-stat-learning/ISLP_labs/v2.1.3) Up-to-date version of labs for ISLP. @@ -12,7 +12,7 @@ intent is that building a conda environment with To install the current version of the requirements run ``` -pip install -r https://raw.githubusercontent.com/intro-stat-learning/ISLP_labs/v2.1.2/requirements.txt; +pip install -r https://raw.githubusercontent.com/intro-stat-learning/ISLP_labs/v2.1.3/requirements.txt; ``` The labs can now be run from this directory: diff --git a/requirements.txt b/requirements.txt index c917f5a..1bfa154 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,4 +13,4 @@ torchvision==0.15.2 pytorch-lightning==2.0.6 torchinfo==1.8.0 torchmetrics==1.0.1 -ISLP==0.3.19 +ISLP==0.3.20