From fc0c9152cb9405b63bc48d803d67ed3e4046eec7 Mon Sep 17 00:00:00 2001 From: Jonathan Taylor Date: Sun, 20 Aug 2023 19:31:42 -0700 Subject: [PATCH] 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": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABxB0lEQVR4nO3deXgUVboG8LcTQkgI2RMgEkKAGPZ9MewIssgdZEBFcC6IEUeJMIoLgzOCoCMqIowI6FXEFVxGEJcZATWEVdZEQDQQwhJkyQJJSAIhy7l/MN2m09XVVb1Vdff7e548j1RVV51T3aa/nPrOdwxCCAEiIiIiD+SndQOIiIiI7MVAhoiIiDwWAxkiIiLyWAxkiIiIyGMxkCEiIiKPxUCGiIiIPBYDGSIiIvJYDGSIiIjIYzGQISIiIo/FQIaIiIg8FgMZIjd69913YTAYsH//fsn9Q4YMQadOndzcKtLaqVOnYDAYYDAY8Pzzz0sec++998JgMCAkJMRs+5AhQ0yvNRgMiIyMRO/evfHOO++gtrbW4jzbt2/H3XffjZtuugkNGzZEWFgY+vbti4ULF+LixYsu6R+RKzGQISLSiUaNGmHdunUW28vLy7Fx40Y0atRI8nUtWrTABx98gA8++ADPPPMMqqurkZqaiqefftrsuHnz5mHQoEE4cOAA7rvvPqxatQovvPACOnbsiCVLlqBfv34u6ReRKzXQugFE5BpCCFy7dg1BQUFaN0V3ysvL0bhxY62bYeH222/H+vXr8dNPP6Fr166m7Rs3bsT169cxatQo/PDDDxavCwsLw5/+9CfTv//85z8jOTkZr7/+Op577jkEBATgk08+wXPPPYe7774bH3zwARo2bGh2jqVLl2Lp0qWu6xyRi3BEhkjnqqur8dxzz6FNmzYIDAxEq1at8PTTT6OystLsuFatWuF//ud/sGnTJvTq1QtBQUF48803AQBbtmzBgAEDEB4ejpCQECQnJ1v8tV5ZWYn58+ejbdu2CAwMRHx8PJ566imL6xgMBjzyyCP46KOPkJycjEaNGqFnz57Ytm2bRdszMzMxevRohIaGIiQkBMOGDcOPP/5o2l9cXAx/f3+89tprpm2FhYXw8/NDVFQUhBCm7Q8//DCaNWtmdv49e/Zg1KhRCAsLQ3BwMAYPHoydO3eaHfPss8/CYDDg6NGjmDx5MiIiIjBgwADJe71//34YDAa89957Fvs2bdoEg8GAr7/+GgBw5coVPProo2jVqhUCAwMRGxuL2267DQcPHpQ8txIpKSlITEzE2rVrzbZ/9NFHGDVqFCIjIxWdJzg4GLfccgvKy8tRUFAA4MZoTHR0NFavXm0RxAA3gqFnn33W7rYTaYWBDJEGSkpKUFhYaPFTVVVlcewDDzyAefPmoUePHli6dCkGDx6MRYsW4Z577rE4Njs7G5MmTcJtt92Gf/7zn+jWrRt+/vln/M///A8qKyuxcOFCLFmyBGPHjjX7wq+trcXYsWPxyiuv4A9/+AOWL1+OcePGYenSpZg4caLFdTIyMvDoo4/iT3/6ExYuXIiioiKMGjUKR44cMR3z888/Y+DAgfjpp5/w1FNP4ZlnnsHJkycxZMgQ7NmzBwAQHh6OTp06mQVBO3bsgMFgwKVLl3D06FHT9u3bt2PgwIGmf//www8YNGgQSktLMX/+fLzwwgsoLi7Grbfeir1791q0+a677kJFRQVeeOEFTJ8+XfJ96dWrF1q3bo1PP/3UYt8nn3yCiIgIjBw5EgDw0EMPYdWqVZgwYQJWrlyJJ554AkFBQfjll18kz63UpEmT8PHHH5uCuMLCQmzevBmTJ09WdZ7c3Fz4+/sjPDwcx44dw7FjxzBu3DiLHBsijyeIyG3WrFkjAMj+dOzY0XR8VlaWACAeeOABs/M88cQTAoD44YcfTNsSEhIEAPHtt9+aHbt06VIBQBQUFFht1wcffCD8/PzE9u3bzba/8cYbAoDYuXOnaZuxnfv37zdtO336tGjUqJH44x//aNo2btw40bBhQ3HixAnTtnPnzokmTZqIQYMGmbalpaWJpk2bmv49e/ZsMWjQIBEbGytWrVolhBCiqKhIGAwG8c9//lMIIURtba1ISkoSI0eOFLW1tabXVlRUiMTERHHbbbeZts2fP18AEJMmTbLa/7rmzp0rAgICxKVLl0zbKisrRXh4uLj//vtN28LCwkRaWpqic9py8uRJAUAsXrxYHDlyRAAwvRcrVqwQISEhory8XEydOlU0btzY7LWDBw8W7dq1EwUFBaKgoED88ssvYtasWQKA+MMf/iCEEGLjxo0CgFi2bJnZa2tra02vM/5UVVU5pU9E7sIRGSINrFixAlu2bLH46dKli9lx//73vwEAs2fPNtv++OOPAwC++eYbs+2JiYmmEQOj8PBwADfyLKRmsQDAZ599hvbt26Ndu3ZmI0S33norACA9Pd3s+JSUFPTs2dP075YtW+KOO+7Apk2bUFNTg5qaGmzevBnjxo1D69atTcc1b94ckydPxo4dO1BaWgoAGDhwIC5evIjs7GwAN0ZeBg0ahIEDB2L79u0AbozSCCFMIzJZWVk4fvw4Jk+ejKKiIlN7y8vLMWzYMGzbts2irw899JBk3+ubOHEiqqqqsH79etO2zZs3o7i42Gx0Kjw8HHv27MG5c+cUnVepjh07okuXLqak37Vr1+KOO+5AcHCw1df8+uuviImJQUxMDNq3b4/ly5djzJgxeOeddwDAdK/rj8aUlJSYXmf8ycrKcmp/iFyNyb5EGujTpw969eplsT0iIgKFhYWmf58+fRp+fn5o27at2XHNmjVDeHg4Tp8+bbY9MTHR4pwTJ07E22+/jQceeAB//etfMWzYMIwfPx533nkn/Pxu/C1z/Phx/PLLL4iJiZFsb35+vtm/k5KSLI65+eabUVFRYcrJqKioQHJyssVx7du3R21tLfLy8tCxY0dTcLJ9+3a0aNECmZmZeP755xETE4NXXnnFtC80NNSUAHv8+HEAwNSpUyXbC9z4ko6IiJC9N1K6du2Kdu3a4ZNPPkFqaiqAG4+VoqOjTYEdALz88suYOnUq4uPj0bNnT9x+++2YMmWKWeBmr8mTJ2PJkiV47LHHsGvXLot8pvpatWqFt956CwaDAY0aNUJSUhJiY2NN+5s0aQIAKCsrM3tdSEgItmzZAuBGsLZ48WKH207kbgxkiDyAwWBQdJzUDKWgoCBs27YN6enp+Oabb/Dtt9/ik08+wa233orNmzfD398ftbW16Ny5M1599VXJ88bHxzvUfjlxcXFITEzEtm3b0KpVKwghkJKSgpiYGPzlL3/B6dOnsX37dvTr188UeBlHWxYvXoxu3bpJnrf+6IOa2VsTJ07EP/7xDxQWFqJJkyb48ssvMWnSJDRo8PuvzLvvvhsDBw7Ehg0bTEHASy+9hPXr12P06NEq74K5SZMmYe7cuZg+fTqioqIwYsQI2eMbN26M4cOHW93frl07ADDLYQKABg0amF539uxZh9pMpBUGMkQ6lpCQgNraWhw/fhzt27c3bb948SKKi4uRkJCg6Dx+fn4YNmwYhg0bhldffRUvvPAC/va3vyE9PR3Dhw9HmzZt8NNPP2HYsGGKgibjiEhdx44dQ3BwsGlUJzg42PS4qK5ff/0Vfn5+ZsHRwIEDsW3bNiQmJqJbt25o0qQJunbtirCwMHz77bc4ePAgFixYYDq+TZs2AIDQ0FDZL3B7TZw4EQsWLMDnn3+Opk2borS0VDK5unnz5pgxYwZmzJiB/Px89OjRA//4xz8cDmRatmyJ/v37Y+vWrXj44YfNAih7JCcnIykpCV988QWWLVumy6nnRPZijgyRjt1+++0AgGXLlpltN46cjBkzxuY5Ll26ZLHNOIphnFp9991347fffsNbb71lcezVq1dRXl5utm337t1m04zz8vKwceNGjBgxAv7+/vD398eIESOwceNGnDp1ynTcxYsXsXbtWgwYMAChoaGm7QMHDsSpU6fwySefmB41+fn5oV+/fnj11VdRVVVlNmOpZ8+eaNOmDV555RWLxyUATI+37NW+fXt07twZn3zyCT755BM0b94cgwYNMu2vqalBSUmJ2WtiY2MRFxdnNl29sLAQv/76KyoqKlS34fnnn8f8+fMxc+ZM+ztSx7PPPovCwkJMnz5dcnacqDPVnciTcESGSMe6du2KqVOn4v/+7/9QXFyMwYMHY+/evXjvvfcwbtw4DB061OY5Fi5ciG3btmHMmDFISEhAfn4+Vq5ciRYtWpjqqfzv//4vPv30Uzz00ENIT09H//79UVNTg19//RWffvqpqTaNUadOnTBy5EjMmjULgYGBWLlyJQCYjZo8//zzpvo1M2bMQIMGDfDmm2+isrISL7/8slkbjUFKdnY2XnjhBdP2QYMG4T//+Q8CAwPRu3dv03Y/Pz+8/fbbGD16NDp27Ihp06bhpptuwm+//Yb09HSEhobiq6++suOO/27ixImYN28eGjVqhNTUVNNjLeBGDZkWLVrgzjvvRNeuXRESEoLvvvsO+/btw5IlS0zHvf7661iwYAHS09MxZMgQVdcfPHgwBg8e7FAf6po8eTKOHDmCRYsWYe/evbjnnnuQmJiI8vJyHDlyBOvWrUOTJk3M8oqIPILGs6aIfIpx+vW+ffsk9w8ePNhs+rUQQlRVVYkFCxaIxMREERAQIOLj48XcuXPFtWvXzI5LSEgQY8aMsTjn999/L+644w4RFxcnGjZsKOLi4sSkSZPEsWPHzI67fv26eOmll0THjh1FYGCgiIiIED179hQLFiwQJSUlpuMAiLS0NPHhhx+KpKQkERgYKLp37y7S09Mtrn3w4EExcuRIERISIoKDg8XQoUPFrl27JPseGxsrAIiLFy+atu3YsUMAEAMHDpR8TWZmphg/fryIiooSgYGBIiEhQdx9993i+++/Nx1jnH4tN/1cyvHjx01TzXfs2GG2r7KyUjz55JOia9euokmTJqJx48aia9euYuXKlWbHGa8tdW/qqjv9Wo616df1PzNytm7dKu68807RvHlzERAQIEJDQ0WvXr3E/Pnzxfnz5xWfh0gvDEJwPJGIlDMYDEhLS8Prr7+udVOIiJgjQ0RERJ6LgQwRERF5LAYyRERE5LE4a4mIVGFaHRHpCUdkiIiIyGMxkCEiIiKP5fWPlmpra3Hu3Dk0adJE8Xo1REREpC0hBK5cuYK4uDizgpT1eX0gc+7cOZcueEdERESuk5eXhxYtWljd7/WBjHH5+ry8PLO1XYiIiEi/SktLER8fb/oet8brAxnj46TQ0FAGMkRERB7GVloIk32JiIjIYzGQISIiIo/FQIaIiIg8FgMZIiIi8lgMZIiIiMhjMZAhIiIij8VAhoiIiDwWAxkiIiLyWAxkiIiIyGMxkCEiIiKP5fVLFJCl3IIynL5UgVZRjZEY3Vjr5hAREdmNgYwPKa64jlnrsrDteIFp26CkGCyf1B1hwQEatoyIiMg+fLTkQ2aty8LOnEKzbTtzCjFzXaZGLSIiInIMAxkfkVtQhm3HC1AjhNn2GiGw7XgBThaWa9QyIiIi+zGQ8RGnL1XI7j9VxECGiIg8DwMZH5EQGSy7v1UUk36JiMjzMJDxEa1jQjAoKQb+BoPZdn+DAYOSYjh7iYiIPBIDGR+yfFJ39G8bbbatf9toLJ/UXaMWEREROYbTr31IWHAA3k/tg5OF5ThVVM46MkRE5PEYyPigxGgGMERE5B34aImIiIg8FgMZIiIi8lgMZIiIiMhjMZAhIiIij6WbQObFF1+EwWDAo48+ato2ZMgQGAwGs5+HHnpIu0YSERGRruhi1tK+ffvw5ptvokuXLhb7pk+fjoULF5r+HRwsX6GWiIiIfIfmIzJlZWW499578dZbbyEiIsJif3BwMJo1a2b6CQ0N1aCVREREpEeaBzJpaWkYM2YMhg8fLrn/o48+QnR0NDp16oS5c+eiokJ+8cPKykqUlpaa/RAREZF30vTR0scff4yDBw9i3759kvsnT56MhIQExMXF4dChQ5gzZw6ys7Oxfv16q+dctGgRFixY4Kome63cgjKcvlTBar9ERORRDEIIocWF8/Ly0KtXL2zZssWUGzNkyBB069YNy5Ytk3zNDz/8gGHDhiEnJwdt2rSRPKayshKVlZWmf5eWliI+Ph4lJSV8LCWhuOI6Zq3LwrbjBaZtg5JisHxSd4QFB2jYMiIi8mWlpaUICwuz+f2t2aOlAwcOID8/Hz169ECDBg3QoEEDZGRk4LXXXkODBg1QU1Nj8Zq+ffsCAHJycqyeNzAwEKGhoWY/7pJbUIb07HycLCx32zUdNWtdFnbmFJpt25lTiJnrMjVqERERkXKaPVoaNmwYDh8+bLZt2rRpaNeuHebMmQN/f3+L12RlZQEAmjdv7o4mKuapoxq5BWVmbTaqEQLbjhfgZGE5HzMREZGuaRbINGnSBJ06dTLb1rhxY0RFRaFTp044ceIE1q5di9tvvx1RUVE4dOgQHnvsMQwaNEhymraW5EY13k/to1GrbDt9ST5x+lQRAxkiItI3XdSRkdKwYUN89913WLZsGcrLyxEfH48JEybg73//u9ZNM2PPqIZeEmsTIuVr8rSKYhBDRET6pqtAZuvWrab/jo+PR0ZGhnaNUUjNqIbeHkG1jgnBoKQY7MwpRE2dnG9/gwH920ZzNIaIiHRP8zoynk7NqIYeE2uXT+qO/m2jzbb1bxuN5ZO6a9QiIiIi5XQ1IuOJlI5q6DWxNiw4AO+n9sHJwnKcKirX/HEXERGRGhyRcQIloxpKHkFpKTG6MYYmxzKIISIij8IRGSdQMqrBxFoiIiLn44iME8kVSTY+gvI3GMy2+xsMGJQUw5EQIiIiO3BExgmUzkZaPqk7Zq7LNDuOibVERET202ytJXdRulaDI6as3ms12VeqIB4Ta4mIiOQp/f7miIyD7JmNlBjNAIaIiMgZmCPjIL3PRiIiIvJmDGQcZOsGNvAz2DiCiIiI7MVAxkG1NvZX13p1ChIREZGmGMg4iPVhiIiItMNAxkGsD0NERKQdBjJOwIUXiYiItMHp107AhReJiIi0wUDGiVgfhoiIyL34aImIiIg8FgMZIiIi8lgMZIiIiMhjMZAhIiIij8VkX3Kp3IIynL5UwZlcRETkEgxkyCWKK65j1ross5XBByXFYPmk7ggLDtCwZURE5E34aIlcYta6LOzMKTTbtjOnEDPXZWrUIiIi8kYMZMjpcgvKsO14AWqE+YKZNUJg2/ECnCws16hlRETkbRjIkNOdvlQhu/9UEQMZIiJyDgYy5HRcEZyIiNyFgQw5HVcEJyIid2Eg44NyC8qQnp3v0lwVrghORETuwOnXPsSdU6K5IjgREbkDR2R8iBZTohOjG2NociyDGCIicgkGMj6CU6KJiMgbMZDxEZwSTURE3oiBjI/glGgiIvJGDGR8BKdEExGRN9JNIPPiiy/CYDDg0UcfNW27du0a0tLSEBUVhZCQEEyYMAEXL17UrpEejlOiiYjI2+hi+vW+ffvw5ptvokuXLmbbH3vsMXzzzTf47LPPEBYWhkceeQTjx4/Hzp07NWqpZ+OUaCIi8jaaj8iUlZXh3nvvxVtvvYWIiAjT9pKSEqxevRqvvvoqbr31VvTs2RNr1qzBrl278OOPP2rYYs/HKdFEROQtNA9k0tLSMGbMGAwfPtxs+4EDB1BVVWW2vV27dmjZsiV2795t9XyVlZUoLS01+yEiIiLvpOmjpY8//hgHDx7Evn37LPZduHABDRs2RHh4uNn2pk2b4sKFC1bPuWjRIixYsMDZTSUiIiId0mxEJi8vD3/5y1/w0UcfoVGjRk4779y5c1FSUmL6ycvLc9q5fZU71mYiIiKyh2YjMgcOHEB+fj569Ohh2lZTU4Nt27bh9ddfx6ZNm3D9+nUUFxebjcpcvHgRzZo1s3rewMBABAYGurLpPsOdazMRERHZQ7MRmWHDhuHw4cPIysoy/fTq1Qv33nuv6b8DAgLw/fffm16TnZ2NM2fOICUlRatm+xQt1mYiIiJSQ7MRmSZNmqBTp05m2xo3boyoqCjT9tTUVMyePRuRkZEIDQ3FzJkzkZKSgltuuUWLJutCbkEZTl+qcPnUaePaTPXVXZuJs56IiEhruqgjY83SpUvh5+eHCRMmoLKyEiNHjsTKlSu1bpYmnPGYR00QpGRtJgYyRESkNYMQ9ZZD9jKlpaUICwtDSUkJQkNDtW6O3aas3oudOYVmq1f7Gwzo3zYa76f2kX2tPUFQbkEZbl2SYfWc6U8MYSBDREQuo/T7W/M6MmSb8TFPTb2Ys+5jHjn25LpwbSYiIvIEDGQ8gJLHPNY4EgRxbSYiItI7XefI0A0JkcGy+1tFWR8dcSTXhWszERGR3jGQ8QDGxzzWcmTkggtHgiCjxGgGMEREpE98tOQh7H3Mw1wXIiLyZpy15GHsecxTUlGFmesyWaGXiIg8htLvbwYyXkBpfRjmuhARkadQ+v3NHBkPpqQ+TP0gx1oAk5Gdj6yzxejRMgIDk2Lc0n5HuKvCMRER6RsDGQ8mVx/mtUndFBXBO11UjnErduJyRZVpW0RwAL5MG4D4KPlEYS1wIUsiIqqLyb4eylZ9mP9dvQc7cszXSpIqglc/iAGAyxVVGLtih2sa7iAuZElERHUxkPFQturDHP6tFLX1sp/qF8HLyM63CGKMLldUYbvEopFacrTCMREReR8GMh7KVn0YOcZKwFlni2WPO3jmst3XcAVHKhwTEZF3YiDjoazVh1HCWASvW4tw2eN6tIywp2ku44zifkRE5F0YyHgwqSJ5cvwMMCuCNzg5FhFWEmQjggNwU3gQ0rPzdfPIhsX9iIioPtaR8QLG+jD+BgOmvLPX6nG9W0Xg7Sm9UVReaZq63MBgwNgVO8xyZcKDApAUG4J9p39/tKSXmUEs7kdE5BtYEO+/fCGQqWvK6r0WazL5AeiZEIG3pvayOnX50G/FOHjmMnq0jMBb205aXdfp/dQ+7uyOVSzuR0Tk3ZR+f/PRkpeRetw0ICkGb0/tLTt1eWBSDP4y7GbU1gqPmBmUGN0YQ5NjHQpicgvKdPXojIiI1GNBPC8TFhyA91P7WIxYGKcu12cMUH7KK8aSzcckj6nrVFG5x4+AsKgeEZH34IiMl6o/YmFr6vLfvjhsMVojxRtmBrGoHhGR92Ag4yNsvdFHfiu1eJxUl7fMDGJRPSIi78JAxkfUOvj6/m2jsXxSd6e0RUssqkdE5F2YI+MjHKkE/EFqH49YEVsJFtUjIvIuHJHxEdaLycFqUTzj4yRvCWIAFtUjIvI2DGR8iNTU7NCgAJRYWTjSWx4n1Sd1H7y1r0RE3o4F8bxAbkGZqVKvkhEF49Ts/JJrmLP+sNXj0p8Y4tUjFCyqR0SkX0q/v5kj42HqBi0RwQF21UOJCA7A/I2nFNeMURoo1T1OCKEquFJKSVuUtjcxmgEMEZGnYyDjIaSKuEUEB6D0qvljIWM9FLmlBKTqqEiJDG6IKav32gyUpNpWlzOKzSkpYsdCd0REvoc5Mh5CKvi4XFGFmnoPBm3VQ7FWR6UuY+Lrks3HFBWOsxUYKSk2Z2u5ACVF7FjojojI93BExgNYW15AjrWlBGzVUQFuJL4+PuJm3LFip8W+uoGS3NIHcq+pS8koiq3lFU4WlkP897/VXJuIiDwfR2Q8gJLgoz5r9VBs1VH5ILUP3k/tg0sV12WPMxaOU9M2qWJzSkZRlBSxY6E7IiLfxEDGA6gpZmerHoqtOirGmjFKC8epaVv94ErpcgFK2sJCd0REvomBjAewFnz4wbKYnZJ6KErqqCgtHGftOLnXGCkdRVHSFha6IyLyTawj4yFKKqowc12mZC7JpYrrdtVDsVVHRe6adWcBSR1Xl7WZQ7kFZbh1SYbV9tWtY6OkLUrbS0RE+qf0+1vTQGbVqlVYtWoVTp06BQDo2LEj5s2bh9GjRwMAhgwZgowM8y+6P//5z3jjjTcUX8NbAhkjqeBDbUE8Z1zT1nEAFL1myuq92JlTaPZ4yd9gQP+20ZJTyJW0hYXuiIg8n0cEMl999RX8/f2RlJQEIQTee+89LF68GJmZmejYsSOGDBmCm2++GQsXLjS9Jjg4WFVA4m2BTF2urpvi6gAJcM0oijvaTUREruURgYyUyMhILF68GKmpqRgyZAi6deuGZcuW2X0+bw5k1I5mKKVFYTlnjKKwIB4RkfdQ+v2tm2TfmpoafPzxxygvL0dKSopp+0cffYTo6Gh06tQJc+fORUWF+qnI3kjpjB9bheakaFFYLjG6MYYmxzo0gsKCeEREvkfzgniHDx9GSkoKrl27hpCQEGzYsAEdOnQAAEyePBkJCQmIi4vDoUOHMGfOHGRnZ2P9+vVWz1dZWYnKykrTv0tLS13eBy3YmvFz5FwJ5m/8WfXohJLic3p8XOOp7SYiIsdoHsgkJycjKysLJSUl+Ne//oWpU6ciIyMDHTp0wIMPPmg6rnPnzmjevDmGDRuGEydOoE2bNpLnW7RoERYsWOCu5mvGVt2U93edwsHTxWbblKzDpGRKtB4DAk9tNxEROUbzR0sNGzZE27Zt0bNnTyxatAhdu3bFP//5T8lj+/btCwDIycmxer65c+eipKTE9JOXl+eSdmtNrm5Kr4QI7Dt12epjp23HCqw+brIVIK1Mz0FJRZXsMVpgQTwiIt+keSBTX21trdmjobqysrIAAM2bN7f6+sDAQISGhpr9eCtrhe2m9Wsl+7op7+zFtDX7MPSVrZiyeq9ZYGKrwN3B08UO55zYk7djCwviERH5Jk1nLc2dOxejR49Gy5YtceXKFaxduxYvvfQSNm3ahNatW2Pt2rW4/fbbERUVhUOHDuGxxx5DixYtLGrLyPHmWUtG9Wf82Co0V5fULKeSiiqkvrcP+09ftvq6usXqlHL1rCIWxCMi8h5Kv781zZHJz8/HlClTcP78eYSFhaFLly7YtGkTbrvtNuTl5eG7777DsmXLUF5ejvj4eEyYMAF///vftWyyLiVGm09ZNo5O1J+aLUVqNevTlyowoWcL2UDGnpwTuVlFjkwXNwoLDsD7qX1YEI+IyIdoGsisXr3a6r74+HhVIy9kbvmk7rLLBtT382+Ws5zkqM05ceesIp2VRiIiIhfSfNYSuUb90Ql/gwFT3tlr9fg3t53Az+dcN1XdHbOKWBCPiMj36C7Zl5zLWGiuRUSQ7HGHfytFrYqBDOPK1NbUT+h1x6wiFsQjIvI9HJHxEbZGRNRq4Cc9q0luVEQqb8eYbOzoaAwL4hER+SaOyPgIWyMialVbGb6RGxWxNl18+aTustdSMl3bVqD2Y26h06d8ExGR9jgi4yPUzGRSQupRkK1RkUsV11XNKlKT82IrUJu7/ojNcxARkefhiIwPkRoRkeNv5dMRERwgGYAoSegFlC8QqSbnxVYhPyXnICIiz8NAxocYZzKlPzEEa6b1RvoTQyS//P0AdL4pFDW10ue5XFFl1/IGahJ6la7uXZfSQE3uHERE5FkYyGgsIzsf//z+GLYrrN/iDHVHRKS+/AckxeDPg6UX5TSyNmup002hqJ8HbM8yAUpHd+qqH6gtGt9Z9TmIiMizMEdGI6eLyjFuxU5crrPOUURwAL5MG4D4KOcm5sqxVg03t6BM9nV1R1ekclnqUpLQW58jozvGSsdq+uAMxqrIrChMROQ+DGQ0kFtQhrGv70BZZY3Z9ssVVRi7Ygcy541we5uULnMgNV1aKpfFD0CHuFAsn9zDri91Ndd35TmUYCE+IiLt8NGSGxVXXMeU1Xtx65IMiyDG6HJFlVsfM8lRMl3aWi5LLYAjDlYKtne6trPPYQsL8TnGFauhE5Hv4IiMG0l94Uk5eOYyBibFuKFF8pQswujKpQecsQikqxeSZCE++3Eki4icgYGMm1j7wpPSo2WEi1ujTv3HTnW5Y+kBueu78xxS3LGGlLdy9WroROQb+GjJTZQuERARHKCL0RhbjI8DDP+dkSQ1hbtTXKg2jXMjdwRy3sie6fVERFI4IuMmSpYIMM5a0oLSGTdSjwNSWkehb+tI7DpRZNpmzJEZ+spWr35c4K6EYm/DkSwichaOyLiJtcqzfgYgISoYH6T2Qea8EW6deg2YJyBPW7MPQ1/Ziimr96KkzrTwusmYUo8D9p68hAZ+fkh/YohkHRlvT3x1R0Kxt+FIFhE5C0dk3Gj5pO6YuS7TbDRjQFvnjVYoHVWpe9z8jT9bzVN4bVI32fowRsbHAXmXKnDkN8uZSs5MfNWiVouta7o6odgbcSSLiJyFgYwbueoLT+nsD1uF64yMgce0NfuQmVesuB2ZeZdl9zvyuECLGS5qr+mqhGJvJRXYcySLiNQyCOGEpZB1rLS0FGFhYSgpKUFoqHcmn05ZvdfqX7Z1Z39IHedML03ojDmfH7a6/4PUPnYnMivtozNpcU1fxJEsIpKi9PubOTIeTunsD2vHOYNxLaXY0Eayx1XX2ndtLWa4cFaN+yhdDZ2ISAoDGQ+ndHFFpdO/7dEjIRzLJ3W3+WGyN4HTngUkHaXFNYmISD3myHg4pbM/XBmxTunXyiLXoS5HEzi1mOHCWTVERJ6BIzIeztq0buPjHmPwUGvHucOClMW57+86Jbv0gqMJnEr76ExaXJOIiNRjIOMFlNQxUVKQr76ya9WIsDEjKLRRA+w7ddlq7s3iO7vg/dQ+Ds8s0qJWC+vDEBHpH2cteRFbsz+szcLpkRCOfaesT51++c7OeOpf1mcj2eLMadJazHDhrBoiIvfjrCUdq1sp15lszf6wNsIwtV8r2fOeL7nmULvsrewrdZ+MfRRCuOQeSuGsGiIi/WKyrxtpUdStLgHLwbeK69WYK1P7BQC6x8uvxt27VQQOni62+nhJbWVfufskIDS9h0REpC8ckXEjqXWK3LkOkdT195++jCuV1VZfExEcgEE3x8gmvr49pbfFSI8UpVOW5e6T1veQiIj0hYGMm2hdYM3egniXK6pwsrBcNvHVuPTC+/f3lj2XkinLtu4Ti9QREVFdfLTkJkoKrLkyB8ORgnjGttlaJ6pFhPzMqKf+9RPentJb9hGQM9pJRES+g4GMm2hVYM24crO/wfax1tRtm9zCiLaCkAOnL2Pmukw8O7aD1dWk7ZkmLtVOIiLyDQxk3MRYYM3aIoTOHkmQSpiNCA5ASUWV4uJ4attmKwipFcC24wW4dUmGaVv9RF1b9wmA2+4hERHpH3Nk3MidBdakkmJLr1ZZPNbpnRCB8CDpRz1q22YMQtR8qKQSdeXuE4vUERFRXSyIpwFXF1jLLSgzG/Wo74PUPqiuFWbX3368AAfPXEZcWBCimwTa3baSiiqkvrcP+09bL7AnJf2JIRbXk7tPLFJHROTdPKIg3qpVq9ClSxeEhoYiNDQUKSkp+M9//mPaf+3aNaSlpSEqKgohISGYMGECLl68qGGLncPVBdZs5apU1wqL69fW3ohnpcJaNQX8woID8K+H+6F3qwj4qcjL+TG30Grxu7rtNLYFAIvUERGRtiMyX331Ffz9/ZGUlAQhBN577z0sXrwYmZmZ6NixIx5++GF88803ePfddxEWFoZHHnkEfn5+2Llzp+Jr6HFExtVsjci8f38f1IgbIzJ+BmDcip24XFFlcVy/NlEQAtidW2TaprT43Jmictxh5by2SF1D62KCRETkXkq/v3X3aCkyMhKLFy/GnXfeiZiYGKxduxZ33nknAODXX39F+/btsXv3btxyyy2KzueLgQwA3LlqFw6evmyW2OuHGyMmdYOLBn4GVNcq/wgYE2vfT+0je5zUuk6OXMPaOlFK2gL8PnuLj6KIiDyD0u9v3cxaqqmpwWeffYby8nKkpKTgwIEDqKqqwvDhw03HtGvXDi1btpQNZCorK1FZWWn6d2lpqcvbrifGkQupHJWw4ACUXjUfIVETxADKlhswFrWzV/1rWDufkrZwJIeIyLtpPmvp8OHDCAkJQWBgIB566CFs2LABHTp0wIULF9CwYUOEh4ebHd+0aVNcuHDB6vkWLVqEsLAw0098fLyLe6AvUrOV/AxA55tCcbmiCjVOGn+TW27AVo7OovGdsWZabywa31nRNZQUE7SGSxoQEXk3zQOZ5ORkZGVlYc+ePXj44YcxdepUHD161O7zzZ07FyUlJaafvLw8J7ZW36yV968VwOHfnDsy1UAmk9dWPZlbWkdhaHIs+iZGyh5nLHBnbzFBrZeFICIi19M8kGnYsCHatm2Lnj17YtGiRejatSv++c9/olmzZrh+/TqKi4vNjr948SKaNWtm9XyBgYGmWVDGH1/hSHl/tf539V5MWb0XJRLJvMZ6MtYWmTQ+BnL2cfU5MpJDRESeQfNApr7a2lpUVlaiZ8+eCAgIwPfff2/al52djTNnziAlJUXDFuqXrZGL3q0iLIIBP4P86EqYlWJ5gPwjGqWF65x9XF1aLQtBRETuo2my79y5czF69Gi0bNkSV65cwdq1a7F161Zs2rQJYWFhSE1NxezZsxEZGYnQ0FDMnDkTKSkpimcs+Rpb5f2XT+qOmesyzRJfB7SNweMjknDHil2S5yy5WoWXJ3TBU58fstgnl2xrXBHbVuE6Zx+n5n5w9hIRkefTNJDJz8/HlClTcP78eYSFhaFLly7YtGkTbrvtNgDA0qVL4efnhwkTJqCyshIjR47EypUrtWyyYnLTfV05FVgqWDEGMdaCAWOBOWt25xbK7pdadbpuH4cmx1rdZ3yd3GKUdY9XWy1A7n4QEZHn010dGWdzdx0Zuem+AsJtU4HVjFzYKqBnS93lBZzZf6lz1aXm3nFJAyIiz+KxBfGczd2BjFzhNsD6ys1Kirq5kj0F7NQWrgPU9d9Wm/Ry7/SMhQCJyFN5XEE8b2CrcJsUJUXd3EHqEYwt9R/ROLP/Sorq6eXe6RELARKRr7ArkImIiIDBYDnTxWAwoFGjRmjbti3uu+8+TJs2zeEGehJHpj9L5Zm4U/38mYzsfLy767TV4+/rl4Bnx3Yy2+bM/qs5l9b3To/kCgFyBIuIvIldgcy8efPwj3/8A6NHj0afPjd+Ke7duxfffvst0tLScPLkSTz88MOorq7G9OnTndpgPbM13VeOXqYCG5Nu/QDZQGZY+6YW25zZfzXn0su90wtHlnQgIvI0dgUyO3bswPPPP4+HHnrIbPubb76JzZs34/PPP0eXLl3w2muv+VQgY2u6L2A9R0RvXyyDk2MRUW+BSaOI4AAMTIqx2O7M/ls7V11q7p0v5YooKQTo7feAiHyHXQXxNm3aZLaYo9GwYcOwadMmAMDtt9+O3Nxcx1rngeQKt9lT1E1LX6YNQES9fIqI4AB8mTbA6muc2X+p45W+1qi44jqmrN6LW5dkYNqafRj6ylarFYm9BQsBEpEvsWvWUsuWLfHYY4/hscceM9u+dOlSLF26FGfOnMGhQ4cwYsQI2QUe3cHds5aM5Kb7etpU4O3HC3DwzGX0aBkhORIjRW3/5UZM6h4PQNW9k5tF5c25Ir7abyLyHi6dtfTMM8/g4YcfRnp6uilHZt++ffj3v/+NN954AwCwZcsWDB482J7TewW5Am9y+/RoYFKM4gDG6ExROQ6dLUYDP4NFX439zy0ow9c/ncN7u05h3+nLpv31Z9fUv1/1ZzfVD4CM2/wNkM0V2XYsHzUCHhNQqsFCgETkK+yuI7Nz5068/vrryM7OBnBjFeuZM2eiX79+Tm2go7QakfFVp4vKMW7FTrPcGuPjqPioG488bBW6A4B+baKwdrr1pSikzpHSOgoGA7DrRJHqdmsxNdkdeTueNvpHRGTEgnj/xUDGvbov3Gw1QThz3ggAyovv1a0YXJ89BfzkuPOxC2u8EBHZ5vKCeDU1NdiwYQN++eUXAECHDh1wxx13oEED1tjzVRnZ+ZJBDABcrqjC9uMFuCk8SHHRvT25RZKBjJJieWq5c2oya7wQETmPXVHHzz//jLFjx+LChQtITk4GALz00kuIiYnBV199hU6dOtk4A3mjrLPFsvsPnrmM6lrlIyjWjnSk8J4trp6azBovRETOZdf06wceeAAdO3bE2bNncfDgQRw8eBB5eXno0qULHnzwQWe3kTxEtxbhsvt7tIxQVejultZRktsdKbxnS92pybkFZUjPzsfJwnKnnV9JjRciIlLOrhGZrKws7N+/HxEREaZtERER+Mc//oHevXs7rXHkWZQW0bNV6A4AeidEWB2ZUFIsT626xfVcmcPCGi9ERM5l14jMzTffjIsXL1psz8/PR9u2bR1uFOmXrVEKJUX0bBW6A4CABtIfTeP1nxhxs8U5UlpHoV8b81GcHi3D4V9vWbAGfkCP+HCzbXWnJlvLYUl9b5/DIzTGIMy/3lpl/gYDBiXF8LESEZFKds1a+ve//42nnnoKzz77LG655cYU2R9//BELFy7Eiy++iAEDfv/S0nqmEGctOYfaUQolRfS2HcvHlHf2Wb1m3VlL1q7/xMibUVR+3Wx6sdSU48/252HniUL0bxONu3rFWz0ut6AMty7JsHk/HBmhKamosqjxwllLRETmXDr92s/v97+WjatgG09T998GgwE1NTVqT+9UvhDIuKMeiSsqxaZn52PaGuuBzJppvTE0ORa5BWWY9XEmjp4rRd1cYX+DAd1bhiPt1rZmfX/9++PYeaIQA5NiMGPojRHCjOx8ZJ0ttlmd2Fab6l7b0enarPFCRGSdS6dfp6en290wch531SNx1UwbW/kikcEBmLJ6r9Wp1jVCYP/py6bAo0uLUBw6W2ravzv3El7elI0mgQ1wpbLatL1+gT41bap7bUdnGXlahWciIj2yK0dm8ODB6Nu3L4KCgnDlyhWUlJSY/QwePNj0Q64jV4/EmVw108ZWvsiSzcct+ienbhBTV90gBrhR02bsih2q2mSN3mcZuWLmFRGRntg1IvPtt99iypQpKCy0/JLRw+MkX+DOeiSunGljbU2gx0ck4Y4Vu+w+ry3GAn1Sj5mk2mSNXmcZsXowEfkKu0ZkZs6cibvuugvnz59HbW2t2Q+DGPdwZz0SV860CQsOwPupfZD+xBCsmdYb6U8MwfupfXDJSoVgZzp45rLk9vpt6t0qwiV9d+VoibtG64iItGbXiMzFixcxe/ZsNG3a1NntIYXcXY9EapSifVwTPDHyZqecv36+iCuL3hn1aBkhu9/Yph7xEU5dSdrVoyWsHkxEvsSuEZk777wTW7dudXJTSA131yMxjlJsTOuHTnE3sseP/FaKsa/vxJTVe1Hi5BEUtbkqatUt0GeLtVEje4MOV4+WsHowEfkSu6ZfV1RU4K677kJMTAw6d+6MgADzX+izZs1yWgMd5c3Tr7WoR+KKadjWSPVPTkigP8oqLR9t+huAmjqfcrlZS65mq06N3IrferoGEZGruXT69bp167B582Y0atQIW7duNdWOAW4k++opkPFmxpECd9UjcfcjC2P/Pt57Bn9df9jqcY/dloTu8eFWi+vVCGDxnV1wruSqzToyrqZktMTRe2htCYe6yzAQEXkLuwKZv/3tb1iwYAH++te/mhXH8yVKC6y5gzPqkUgV1TNuM45oXCy5JnuOul/Ccvfn9/MaUCMEWkU1hhDCalG/PomRstcd2/Umm49Lqmtr0aVFOFpE/D4KU7fPctd3JlfmNtXtj7XZYPbm9RAR6ZVdgcz169cxceJEnwxiTheVY9yKnWYLI2r5qMJRUomn/dpEQQhgd26RqnO1imose3+aBDWwuJaU+o/HlIww2HpCOnf9EdN/p7SOgsEA7Doh3T9XPp5zxWiJXPLwpYrrrB5MRF7NrhyZxx57DDExMXj66add0SancnaOTPeFm62u7pw5b4TD53c3qZwXtermyMjdn843hSu6llTOjZJ8IGf0xdr1ncnZuU3uzFsiInIXl+bI1NTU4OWXX8amTZvQpUsXi2TfV1991Z7T6l5Gdr7klzQgX2BNr6zlvKhlfGRh6/4ovZZUzo2SfCA1hezUXt+ZnJnbxKnWROTr7ApkDh8+jO7dbzxrP3LkiNk+g4umy+pB1tli2f0Hz1z2qEDGVuKpnEXjO6NZWCOzL2Fb90ctqcRXuXyg+gHChZJrmCuTJKz0+q5alNMZuU3uSB4mItIzLhqpQrcW4bL7bRVY0xtHis7d0jrK4gvS1v1Ry97E18ToxogIDsD09P0OXT8yuKHFopV6K/OvNHnYHSukExFpwfeydR0wODkWEVa+wNQUWNMLe4rOyRXck7s/ajijqN+sdVk4eLrYoesv2XxM92X+bRVGjPjvCuK3LsnAtDX7MPSVrS4pYEhEpBUGMip9mTbA4svaOCvHEy2f1B3920abbevXJgopraMkj7c1hVfq/qjl6DRhY96IvUm/NxatvFnyHHVzT/RC6j003kOuuURE3s6uR0u+LD4qGJnzRmD78QIcPHNZF3VkHCGXeGrc1sDPgOpaoeixRN378/0vF/HurtNWj118ZxdENwk0Pf5w1jThPScvye7vdFMofjl3xSxI8TMAHeJCsXxSDyRGN0Z6dr7sOfSUe2LtPWQiMBH5Ak1HZBYtWoTevXujSZMmiI2Nxbhx45CdnW12zJAhQ2AwGMx+HnroIY1a/LuBSTH4y7CbPTqIqSsxujGGJseafbEZtw1MijHtU7pi803hQYho3FD2mOgmgabzGqsA5F2qsHtF6Kwzl/E/y7fbTPB94Y+dLUYwBrSNwUept5j67+5FOZWwde/rv4dcc4mIfIGmIzIZGRlIS0tD7969UV1djaeffhojRozA0aNH0bjx718U06dPx8KFC03/Dg72vMJznk7pis1Sx1nTKqqx7PFKE2uVXtNYW6WljSDldFE5JqzaJXsOd45k2LNadnHFdaz4IUf2vFoEY0REzqbpiMy3336L++67Dx07dkTXrl3x7rvv4syZMzhw4IDZccHBwWjWrJnpx9sWf/QESnMtpI6rr24yr9zxSnM5Zq3Lwg4FgZPSvJH6lYmlzuFO9uS5zFqXhcwzxZL7XLVCOhGRFnSV7FtSUgIAiIw0X1vno48+QnR0NDp16oS5c+eiosL6kHllZSVKS0vNfsgx1pJn6ye+Kk2yNQYDto5XklhrPEetjT68OL4z3k/tg6LyStm+fLL3jNUgBgCmD0p069RrpfdeyWuMeiSEc80lIvIaukn2ra2txaOPPor+/fujU6dOpu2TJ09GQkIC4uLicOjQIcyZMwfZ2dlYv3695HkWLVqEBQsWuKvZuuDqGiFKi67ZOu6x25IwtutNpjYezLus6PpyibVKi/r1/e8sLFvH7z4pv76Uu4se2lPwztZrZgxtq5s6OEREjtJNIJOWloYjR45gx44dZtsffPBB03937twZzZs3x7Bhw3DixAm0adPG4jxz587F7NmzTf8uLS1FfHy86xquIXtyJ+yhNPHV1nF1gxglx9c/vz1tA25MJ1eaxJuSGIUvMs9Z3e/uoof2JB3rMVGZiMhVdPFo6ZFHHsHXX3+N9PR0tGjRQvbYvn37AgBycqQTGQMDAxEaGmr2463cVSPEVtE1Y5Cg9Dhb57X1OjXnAAAhfp/xY/jvOa21cWKflroqeqj2ntr7GiIiT6VpICOEwCOPPIINGzbghx9+QGJios3XZGVlAQCaN2/u4tbpmz25E46QK7pmz3Fyxyt5Xf1zdG8ZbnX/7twis8q21bW16JNonodV91p6K3qo9p7a+xrA9hRvIiK9MQhhZ/lTJ5gxYwbWrl2LjRs3Ijk52bQ9LCwMQUFBOHHiBNauXYvbb78dUVFROHToEB577DG0aNECGRkZiq6hdBlwT5OenY9pa/ZZ3b9mWm8MTY51+nWVrtisdmVne4rv1WXrftRlnEK94I6Osm3UW9FDe1bLVvoadz2mJCJSSun3t6Y5MqtWrQJwo+hdXWvWrMF9992Hhg0b4rvvvsOyZctQXl6O+Ph4TJgwAX//+981aK2+aJUHoXTF5jNF5Th0thgN/AyKjjee15i4rJaaBTCNo1Z5Nq5TW3sjxj9fchXp2fnIL72GC6XXNAts7PmbQ+n7JfeY8v3UPqqvS0TkLpoGMrZ+McfHxyseefE1xjyInTmFZo+XtCjYVtfponKLOizGxzLxUdaDDUdHBKzdDzlT3tkreS2pPtSnpE/O4urREi5lQESeTBfJvmQfe/MgXEkqALhcUYWxK3ZYecUNahOXpXI55PJtbFFaEM/ockUV/uf17XZdSy1XJ3VzKQMi8mS6mX5N6skt+KiFjOx8qwHA5YoqbD9eIPlIRs2IgK3Ribr3w98ATHlHWd6M0oJ4dZVcrTbrkyvq+bhjtITTtYnIk3FExgtILfiohayzxbL7D56RLoCnZkRAyeiE8X78VnzNRost2SqIV9/3v1xEccV1TFm912xm1JTVe1GiMCCS447REk7XJiJPxkCGnKZbi3DZ/daKySkdEVA/5Vx9cmxKYpSq46NDAl366MddoyV6fExJRKQEHy2R0wxOjkVEcIDkoxm5YnJKE5fVluvvqyIoMV5rYp+WePHbXxU/XurSIhyvbD5msd1Zj35ax4TI3lNnjZbo7TElEZFSHJEhp7K3mJySEQG1oxOtY0LQr410MBMeZN5GWwXxpPRpFWlzhpTcox8lxedyC8pk846cXbhOL48piYiU4ogMOVV8VDAy541QXUxOyYiAPVPOV93bEzPXZUomB1+quC55rfp9CA8KwGcHzuLIb6UW5ygqr5Ttl9SjHzXTqe1ZNJKIyJcwkNEJV69g7W4Dk2KsBjByfZUq4Fb3+OWTulsEJu3jmuCJkTdbPb+1ACnMxqMZY0G81jEh+HrmQGw7lo/MvGKz4CwsOEB1cKWm+JzeZxR52+eWiDwPAxmN+VJpeLV9lTv+VFEZ/rbhCI6cK8WR30ox9vWdSGkdBYMB2HWiyOJ4pRVuAemifsalE6TaLRVcWUuUVTudWq+FD33pc0tE+qbpWkvuoPe1lqas3mv1S8rbSsOr7avc8QAUVfG15152X7jZZrKv1HmVJMras0ZWSUWV1cdjWgUNvvS5JSJteMRaS77Ol0rDq+2rreOVUnsv5Yr62TqvklEfex4V6W1GkS99bolI/zhrSUO+VBpebV/tWThSzo+5RTZnCAG2i/rVp/Y9cqT4nF5mFPnS55aI9I8jMhrSeyKnM6ntq5rVrJWYu/6w6b/lHsvYKupXnz3vkZqcmrr0kljrS59bItI/BjIa0msipyuo7aut4wFlOTJSrM0QAuSL+tXlyHuk9lGR3hJrfelzS0T6x0dLGvOl0vBq+yp3vNS+XgkRFoXupFhf0uAGqYJ4DfzMHwU54z1S+qjI1atf28OXPrdEpG+ctaQTeknkdAe1fZU7vu6++Rt/VjVKIzVDqK76Rf20eI9yC8pw65IMq/vTnxii6efFlz63RORenLXkYdTUOdEDpfkaUsep7avc8cY4PO9SharZTIB0Lkfd9t4UHoTqWoEWEcFm16p/nLFtanNYlBxvK7H2x9wiTQMJT/vcEpH3YSBDqijN13B1XofU+ZWSyuWwdT65vBm5QnxqC/3VP95WYq3SJGYiIm/FHBlSRWm+hqvzOqTOr5RULoet88kl/+7OLTILYgD5vqq5N9ama0vROm+GiEgLHJEhxZQWQnN1wTRr55diHH1ZcEdHq49g1JxPKXsL/UndG6np2kqvqZcp20RErsJAhhRTuhKzq1dsVlMszzj6IrdApLOL79VVv6/23BvjdO1P9p7B7pNFiApuiNU7T8meIyI4QFdTtomIXIWBDCmmtBCaqwum2Tr/B6l9UF0rFI9COLv4Xl1qC/1J3RupRSxtnePhDw9id675465txwvw0IcHsO7BWxSdh4jIEzBHhhRTWl7fkTL8zmjHwKQYVaX81eShKGWtr/bcG6VBjPEcQgiLIMZod26RzWUaiIg8CQMZUkVpITRXF0xz9vmlzldX/QJ5daW0jkK/NlGK26Km7UoXsax7jj0nL8ke96OVIIeIyBPx0RKporS8vqtXbHb2+aXOl3epApl50gXxAFhcV2lb1LTd1iKW9/VLwODk2HrnkC8I6LxxJyIi7TGQIbsoLQjtqoJpxtk4dR/RyM3QUTp7JzG6sWyibN3X1j+PMwr91W+nrUUsh7VvioFJMWbb+iZGWTn6v/tby+8nIvIkDGRIFa0XMFRaCM/YJgGhur1ydV6kFpp0Brn7Gh4UgOKrlo+XwoMCLIIY4EYeTr82URa1bQCgX5soTsMmIq/CHBlSResFDB/+8KCimi/GNqltr7HOS/31mmwtNOkouXYmxYZIvsbadgBYdW9PDKoX5AxKisGqe3s63lgiIh3hiAwp5upCd0qub202jrU2ye2Taq+ra+DU9fvjMcjeV2v2nb5s9Z67OkeJiEgvGMiQYu78kpdiazaOWlLtdaQGjtI8HEfWiarP1j3noo5E5O0YyJBiri50Z5uyBGOlpNprT36J2ryhGR8dlDy/PVx/z4mI9I05MqSYqwvd2WJrNk5dxjbZ015rE7KsbVeSh5NbUIb07HxsO5avOIjxNxjQKyFC0bFERL6KIzKkitQChs4sdCdHbrSkvvbNm+CJETcjIaqxqvbK5eEYq+KqWQTyp7xiLNl8zK7HSP3bRmNirxbYf/qy1WNc/TjPU3BxTCLfpWkgs2jRIqxfvx6//vorgoKC0K9fP7z00ktITk42HXPt2jU8/vjj+Pjjj1FZWYmRI0di5cqVaNq0qYYt911aJ5G+OL4z7qhXsj8k0B//97+90DiwAf72xWEc+a0UR86VYuyKnejXJsrqSIoUtXlAto7/2xeH8cu5K4qv/8SIm9HxpjDTfc0tKJM93tcfLWldDoCItKfpo6WMjAykpaXhxx9/xJYtW1BVVYURI0agvPz3Ka6PPfYYvvrqK3z22WfIyMjAuXPnMH78eA1bTcCNJFI16xk5y9+/+BmlV6vNtl29Xos3MnKxZPMxi6Bh14kiixGWHTkFuHf1j5JTqdXmAdk6/shvpRZTueWM6RJndl+1fpwH/P5YTI9rNGldDoCItGcQSku0ukFBQQFiY2ORkZGBQYMGoaSkBDExMVi7di3uvPNOAMCvv/6K9u3bY/fu3bjlFtur+JaWliIsLAwlJSUIDQ11dRfIhXILynDrkgynnlPqr/fJb/1oNdl37XTLz9zdb+zC3lOWj3+CAvxwtapWcVtSWkdJrkx9pqjcYhQqIjgAX6YNQHyU61bu1vtoh63PQ/oTQ/iYiciDKf3+1lWyb0lJCQAgMjISAHDgwAFUVVVh+PDhpmPatWuHli1bYvfu3Zq0kbRj6zGOPaT+eleb7Jt9UfrRkZogZlBSDN74k3SxujmfH7ZYOPJyRRWe+vyQ4vPbQ++jHUoeAxKR99NNsm9tbS0effRR9O/fH506dQIAXLhwAQ0bNkR4eLjZsU2bNsWFCxckz1NZWYnKykrTv0tLS13WZnIvW49x7FG/OJ7aZN+M7HyU1HvUZYufARjQNgYL7uhoM89IbXucRevih0poXw6AiPRANyMyaWlpOHLkCD7++GOHzrNo0SKEhYWZfuLj453UQvJmxr/e1f6Vb2t1aikd4kJNC1DayjOyVQTwR4WVjtXyhNEOPeQPEZH2dBHIPPLII/j666+Rnp6OFi1amLY3a9YM169fR3FxsdnxFy9eRLNmzSTPNXfuXJSUlJh+8vLyXNl0ciNXPFoyMv71rvavfFurU0tZPqmHihwT+RQ2g+xe+3nKaMfySd3Rv2202bYeCeG4u3cLXSYnE5HzafpoSQiBmTNnYsOGDdi6dSsSExPN9vfs2RMBAQH4/vvvMWHCBABAdnY2zpw5g5SUFMlzBgYGIjAw0OVtJ/ez9eXaOyECB88Uq5ol5G8woH/baItZQjtzCs3OU/84o8HJsYgIDrDIYVFyLSVsFQHs21p5kUA11N4HrdQtB/DzbyV4b9cp7Dt1Gfv+m3ytp+RkInINTUdk0tLS8OGHH2Lt2rVo0qQJLly4gAsXLuDq1asAgLCwMKSmpmL27NlIT0/HgQMHMG3aNKSkpCiasUTexdajhLen9rb46zw8SP4LTKo4ntRf+XJF9L5MG4CIel+UYUEN0KdVpOw5lExrNhYBlGJtyQRnUXIf9DI1OzG6MT7dfxYHzxSbbVeSnKyXPhCRfTSdfm0wSA+Mr1mzBvfddx+A3wvirVu3zqwgnrVHS/Vx+rV3KamosqjUW/+vbmOxPn+DAVPe2Wv1XB+k9sHApBir+9UW/dt+vAAHz1xGj5YRpvNKnUPttGYlfXYlZ/TB1eyZiq23PhCROaXf37qqI+MKDGS807Zj+cjMKzYLGowysvORdbYY/gYDXtl8zOo51kzrjaHJsVb31y97b6sM/uvfH8fOE4UYmBSDGUPbWj3vlNV7rT6yeT+1j+S1AemAQqvS/Er64E7p2fmYtmaf1f1S77Xe+kBE5pR+f+tm+jWREnJ/RRdfvY5x9QrHybGWsCp1jfp5MHX/ct+VU4DJb/8+8rM79xJe3pSNT6bfgr71HgvZXpvpMpZsPi7Zv8RofYyI6HFqttrkZD32gYjso4tZS0RKyRVpUxPEqL1G/fPWzb2oG8TUNfGtHy222VybacMRRUXotCxWp8ep2WqnYuuxD0RkHwYy5DGMf0XXn5Vk/CtabRCzR6IGi7Vr1Ge85sIvf5Y9bmV6jtm/ba7NdM5ybSbjtbYdK0B6dj62HcuXvQ+uTlrV69RsNUnaeu0DEanHR0vkMZxdR0YqVFF7ja3H8mX3bz9eYJYvIzetuX1cExz5zXolarnE5brqr9DtbHqdmq1mZXZH+qBVXhIRSeOIDHkMZy9RcItEDRa118gtlA98pGZFWRs5+Me4TqqubY07RhPUTlF3J6Urs6vtQ3HFdUxZvRe3LsnAtDX7MPSVrZiyei9KnPA4k4jsx1lL5FHkZpoc/q1Y8eMlaytNW7uGvU69OMbqPqmRA0eurcWMG7VT1PVIaR84y4nIvTxy9WsiW+T+ipYuTBeAPq0izLbJrTRt7Rr1z6vEJ9PlizZKjRxIXVspLUZElI5+OMLVBeuU9MFWfhaL6RFphyMy5HbOyDGQ+yt6xQ/HsSPHvJ6LXN0Za7YdK0Bm3u8F7hZ89TPW7Dxl9fge8eE4fbkcvRMi8cb/9rJ5/k/2nsHuk0Xo3yYad/UyX9zU2L/DZ0vw6hbrtXDu75eAsMYNVfVLjqvzP9ScX80Uc1e32546NUTkGBbE+y8GMvrh6tonp4vKLaZghwU1QHLTUOw99fsq0rauKdXOBn4GVNcq/1+lgZ8BX6b1R4ebwiz2HT5bjD+u3GV2PmvH26pYW5cj99LV740951fyKMdd9XTsqRxMRI7hoyXSHVfXPpGqI1NytdosiFFyTal2qglijMePXbFTcl/9IEbu+NYxIQgLUja50JF76er3Ru35lT7KcVc9ndYxIVYfL0YEBzCIIdIQAxlyC1fnGGRk5ytO9JW7ptI6MkpU1wp8tj/PbNsne89YDYqkjs8tKEPJ1WpF17P3Xrr6vbHn/EoK1rkzbyW3oMzq5+tyRZXmOTJc+JJ8GQMZcgtnV1Kt/4s762yx6jZJXVNtHZnW0fLTtXeeMB8t2H3Ssgif3PH21M5Rey9dXeXWnvMrKVjnzuq8eq0EzCnhRCyIR27irEqq1nIi7undQnWbpK6pto7M0ORY5Baesrq/fxvzGUgpiVH4IvOc4uPtqZ2jto6MK6vcFldct6hurOT8SgrW2UrvK7xSqaiNShKF9VoJWO7RGqeEk6/giAy5hdq1cKyx9ov7431nFU+Rlrtm65gQpEgUypMSERyAZ/7QEQ38DJL7G/gZLGYjTezTUtXxatqj9l7WvYYz3hsps9Zl4eDpYsl9ts5vq2CdtXYbPfmvQ+i+cDPyiqRHU9SMZrjyHtmLU8KJbmAgQ27jaDVYW7+4V0zuIVFHpgH6tIpUdU0r34tmIoID8GXaAADAl2n9LYIT4ywkKWqPt9ae8CDzvjpSR8YVlXpt5Rv1aBkue37jkgPpTwzBmmm9kf7EELyf2sdsNpKtujuXK6owdsUOyX1qE4X1Vs1Yr4+7iNyNj5bIbdSshSPF1i/uyppaZM4bge3HC3DwzGWz2ipKr5lbUIZdJ6znsdzXLwHD2jc1q9nS4aYw5LxwOz7bn4edJwol68LUpeZ4ufYUX63CB6l9UF0rHK6f4uh7I8XW+zXj1raKpkgnRltvi7Hdn+w7gzmfH5Y85nJFFbYfLzB7z4xBVn11RzPqX9MV98gRen3cReRuDGTI7eS+mOQo/cU9MCnGojic0mva+vIdnBxrtfBcz4QIRDcJVPwFcleveNmAR0l7qmuFUwuxqX1v5PJL3PlFe6H0muz+g2cum71vSkYzrN0HvZTe0uvinUTuxkCGPIY7fnHb8+XryqJsev2rW0mfrb1fRvM3/uy0wnXdWoTL7u/R0nyZCne/z66qPLx8UnfMXJdp1ia9LN5J5C7MkSGP4uo8BXuSOl1ZlK11TIhscrBWf3Ur7bNcDoszC9cNTo6VvU/1R9Hc9T67enq0kjwiIm/HQIY8ijt+casJltxR6E+ugN52iTwPV1PT57DgADw7toPkeZw5uya3oEz2Pkldwx3vs7sqD7tj8U4iveKjJfJI9ubZKKEmqdORXAslbBX6q5/74Q5q++zqe2TvNVz9PtuTUExE6jGQIbJCSbDk6hwWtbkfjnJFcThX3iNje/1tTJmXu4ar3md3BHB65uoVyYmMGMgQOcDVCciDk2MRERwguc5PRHCA00Zj1CSyqu2zK+6RVHsjggNQUlGF2jrHOet9sKcPek3UdjV3rUhOZMQcGSIHuToB+cu0ARaF/uoW5HMGVxeHc/Y9kmpv6dUqiy9KZ74Pavugx2rA7uCuvCAiI4PQS1EEFyktLUVYWBhKSkoQGhqqdXPIi7m6UJpUoT9nyC0ow61LMqzuT39iiNX+qO2zreOVPI6w1V5nFQm0Rk2fSyqqLKZHe/PohCOfJaL6lH5/89ESkZOcKSrHobPFiqdFZ2TnI+tsseLA5KbwIFTXCrSIUL+QpBxHcjnUJl1bO17N4whb7T17uQLNwoIUt0kpY5B19LcSHC8oQ/82th9Z6a0asJGr8ld8PS/IF+khF4qBDJGDTheVY9yKnWZ5LMZHP/FRlkGH2uNdnXOgh1wONas422rv3PVHTP/tjPskdf8B4IvMc5i7/jC+TOuPDjeFyZ7DlbPs1PCFzxK5h55yoZgjQ+Sg+kEJIL9YodrjXZ1zoHUuh9oaLbZWva7LGfdJ6v4bVdcKjF2x06Hzu5M7PkvWVqGPCA7QRTBHzqGnXCgGMkQOyMjOl5xRBPy+WKEjx7u64J6Rlis727OKs61Vr40cvU+2VvAGbgQzn+3Ps+v87uSOz1JuQZns59tZn1fSlrt+LynFR0tEDlBbsE7t8e7KOdAyl8OexxH123uh5Brmrpde/Rqw/z7Zuv9GO08U2lwAVGt6LUxInkdv7zNHZIgcoLZgnTsWN3SEFpMYHXm0ZSzN3zcxUvYa/gYD0rPzJf9SzC0os7rP1v036t/G9uiQ1tzxWXLn51XufSPX0lsuFEdkiBygtmCd2uPdseI3oH3inqOrOFu7T364MXoz5Z29pm3GfgkIh1fwBm4sSqn30RjgRl9SWkdhd26Rxb6U1lFO+Sy54/Oq9WeV3Pd7SSmOyBA5SG3BOrXHuyN/RevEPWcsBip1n8KCA1B61TxoNPbLGSt4N/Az4Mu0/orbqDVr+dEK8qYVc/XnVevPKt2gZV5dfSyIR+QkagvWqT3eVfkr3lbEzHif/A0Gs5EYNaT6bDzvL+dKcSz/Cvq3ifaIkRgjd7/Prvi8ettn1Ru4Mq9O6fe3piMy27Ztwx/+8AfExcXBYDDgiy++MNt/3333wWAwmP2MGjVKm8aSmYzsfPzz+2MWs2x82U3hQejSIlxxwbqBSTH4y7CbFVfpddXfHPbMGrKXO/IajHkzcjONbJHqs/G8hVcq8ev5UmRfuOJIM51KyX115/sM/H6/3F1wz17MubGPK95ntTTNkSkvL0fXrl1x//33Y/z48ZLHjBo1CmvWrDH9OzAw0F3NIwlqi7n5Alc/s/eGImZa5DUoTdSVItXnzUfO48EPD5r+/euFMry94yRWT+mFYR2a2n0tR6i5r3pL0LSHK/rAnBvPp+mIzOjRo/H888/jj3/8o9VjAgMD0axZM9NPRESE1WPJ9dQWc/MFrn5m7w0F8bTIa7DVrwZ+0okh1paYqBvE1JX6/n7HG2snNffVG4rVuaIPzLnxfLpP9t26dStiY2ORnJyMhx9+GEVFlhn3dVVWVqK0tNTsh5xDbTE3X+DqwlDeUBBPy+JZ1vp1T+8WqK6VfvRUXSssPssLv/xZ9jrPf33UsYbaQe199YZidc7ug94Ku5F9dD39etSoURg/fjwSExNx4sQJPP300xg9ejR2794Nf39/ydcsWrQICxYscHNLfYPaYm6+wNWFobyhIJ6WxbOs9euf3x+TfV39z/KuXOklCox25Lg/iFd7X/VWxMwezu6DN9wT0nkgc88995j+u3PnzujSpQvatGmDrVu3YtiwYZKvmTt3LmbPnm36d2lpKeLjPWdmgZ6pLebmC1ydd+DuvAZXLG6oh9yM+v1S+1nu1zoav14os3p855vCkZ6dr+uKyHp4Hxzl7D54wz0hD3i0VFfr1q0RHR2NnJwcq8cEBgYiNDTU7Iecw1jMTYpUMTdf4Or8Eq0XdHQGPfZB7Wd53tiOsuf77MBZTFuzD0Nf2Yopq/eixMrjD2dSe1/1+D6o5ew+eMM9IQ8LZM6ePYuioiI0b95c66b4LLXF3HyBqwtD6anwlL302Ae1n+XVU3pJbq+fM+zORFG191WP74Nazu6DN9wTX6dpQbyysjLT6Er37t3x6quvYujQoYiMjERkZCQWLFiACRMmoFmzZjhx4gSeeuopXLlyBYcPH1Y8DZsF8VxDbTE3X+DqBRe1WNDR2fTYB7Wf5ee/PoodOQXofFM4Pjtw1upx7izOpva+6vF9UMvZffCGe+JtlH5/axrIbN26FUOHDrXYPnXqVKxatQrjxo1DZmYmiouLERcXhxEjRuC5555D06bKazYwkCHyLrkFZTh9qcLqF46t/Y5e6/FPsrDnVBFaRTXGjhzrsyifGHEzHrk1yWnXdebx9sjIzkfW2WL+8aIxV3829PQ+e0Qg4w4MZIi8g63CZc4sbCZ1rnZNQ/DrResJv1LUFotU2wd3FHNjEUx9cPVnQ4/vs0csUUBEpJStwmXOLGwmdS61QQygvlik2j64o5gbi2Dqg6s/G578PjOQISLds1W4bNuxAqcVNrN2LXspLRZpT4E7VxdzYxFMfXD1Z8PT32cGMkSke7YKl2XmXZbdr2YxQVvXktK4ofyv0oNn5Nun5Lr1++CORSCVFMEk13P1Z8PT32cGMkSke7YKl3WPly/GqKawmT2LTfawcX0lxSL1WOCORTD1wdWfDU9/nxnIEJHu2SpcNujmGKcVNrN2LTkfTL/F4WKReixwxyKY+uDqz4anv88MZIjII9gqXObMwmZS52rXrInksa9N7AbAOcUi9VjgjkUw9cHVnw1Pfp85/ZqIPIqtwmXOLGwmda4nP/sJu3MLkdI6Govv6mrxGmcUi9RjgTsWwdQHV3829PQ+K/3+1vWikUTkHYxFufJLr+FC6TWHfknaWthS7d9mcgXApK6VEBmMs5eDrbZhYFKMxXnkipJJ7VO7eKcz+2zNuctXcbKwHHFhQaqu5SruKAKoR2rfa7WfJanPr95xRIaIXEaqKJeRs4ttuboA2K6cAkx+e6/F9k+m34K+baJUt0lAOFzMzh1Fzw6fLcYfV+5Cde3vXxUN/Az4Mq0/OtwUpqidzuSOIoB65Iv9ZmXf/2IgQ6SdKav3YmdOodWaLBHBAcicN8Jl1/I3GNC/bTTeT+1jcXz3hZsla2dYa1Orv35j9dqnXhyjuk0AVLVX7fmd0WcAaPv0v82CGKMGfgbkvHC7onY6k9o+ewtf7Dcr+xKRppQUlnNWsS1XFwB7/fvjstdfmZ6juk2OFrNzR9GzT/aekQxiAKC6VuCz/Xk22+lM7igCqEe+2m+lGMgQkUsoLSznjGJbri4AtvNEoZUjb5AKAuwprGekpJidO4qe7T5pfVFMwPZ9cTZ3FAHUI1/tt1IMZIjIJZQWlnNGsS1XFwDr3ybaypE3SCVH2lNYz0hJMTt3FD1LSZTO/TGydV+czR1FAPXIV/utFAMZInIJJYXlnFVsy9UFwB4ZliR7/RlD26puk6PF7NxR9Gxin5Zo4Cf9/jXwM+CuXvE22+lM7igCqEe+2m+lGMgQkctIFeUycnaxLVcXAPtk+i2qtttqkzOK2bmj6NmXaf0tghnjrCUtuKMIoB75ar+V4KwlInI5Y1GuwiuVOFdy1aXFtlxdAGxleg62Hy/AwKQYyZEYtW1yRjE7dxQ9+2x/HnaeKET/NtFuH4mR4o4igHrkS/3m9Ov/YiBDRJ7GGcXetC4YZ0/RPS1pfb/0Qk/3gZV9iYg8jDOKnmldOM2eonta0vp+6YUn3wfmyBAR6cSsdVnYmWM+pXlnTiFmrst06zkcUT+IAW7UqRm7Yodbrq+W1vdLLzz5PjCQISLSAWcUPdO6cJo9Rfe0pPX90gtPvw8MZIiIdMAZRc+0LpxmT9E9LWl9v/TC0+8DAxkiIh1wRtEzrQun2VN0T0ta3y+98PT7wECGiEgHnFH0TOvCafYU3dOS1vdLLzz9PjCQISLSCS2K5DmbPUX3tKT1/dILT74PrCNDRKQzWhTJczZ7iu5pSev7pRd6ug8siPdfDGSIyJn0VDBMz3ifzEndD94jeSyIR0TkRJ5cMMydeJ/MSd2Pfm2iIASwO7fItM2X75GjmCNDRKSAJxcMcyfeJ3NS92PXiSKzIAbw7XvkKAYyREQ2eHrBMHfhfTJn7X5I8dV75AwMZIiIbPD0gmHuwvtkztb9kOJr98gZGMgQEdng6QXD3IX3yZyt+yHF1+6RMzCQISKywdMLhrkL75M5a/dDiq/eI2dgIENEpIAnFwxzJ94nc1L3o1+bKKS0jjLb5sv3yFGsI0NEpIKeCobpGe+TOan7wXskT+n3t6YjMtu2bcMf/vAHxMXFwWAw4IsvvjDbL4TAvHnz0Lx5cwQFBWH48OE4fvy4No0lIgKQGN0YQ5Nj+cVjgzfcp9yCMqRn5ztlJpHU/bDnHjmzTd5C04J45eXl6Nq1K+6//36MHz/eYv/LL7+M1157De+99x4SExPxzDPPYOTIkTh69CgaNWqkQYuJiMjb6bGonx7bpBe6ebRkMBiwYcMGjBs3DsCN0Zi4uDg8/vjjeOKJJwAAJSUlaNq0Kd59913cc889is7LR0tERKTGlNV7sTOn0Kz+i7/BgP5to/F+ah+2yU084tGSnJMnT+LChQsYPny4aVtYWBj69u2L3bt3W31dZWUlSktLzX6IiIiU0GNRPz22SU90G8hcuHABANC0aVOz7U2bNjXtk7Jo0SKEhYWZfuLj413aTiIi8h56LOqnxzbpiW4DGXvNnTsXJSUlpp+8vDytm0RERB5Cj0X99NgmPdFtINOsWTMAwMWLF822X7x40bRPSmBgIEJDQ81+iIiIlNBjUT89tklPdBvIJCYmolmzZvj+++9N20pLS7Fnzx6kpKRo2DIiIvJmeizqp8c26YWm06/LysqQk5Nj+vfJkyeRlZWFyMhItGzZEo8++iief/55JCUlmaZfx8XFmWY2EREROVtYcADeT+2jq4J1emyTXmg6/Xrr1q0YOnSoxfapU6fi3XffhRAC8+fPx//93/+huLgYAwYMwMqVK3HzzTcrvganXxMR+Z7cgjKcvlTBL3wPpvT7Wzd1ZFyFgQwRke9g4Tjv4fF1ZIiIiNSatS4LO3MKzbbtzCnEzHWZGrWIXI2BDBEReQUWjvNNDGSIiMgrsHCcb2IgQ0REXoGF43wTAxkiIvIKLBznmxjIEBGR12DhON+jaUE8IiIiZ2LhON/DQIaIiLxOYjQDGF/BR0tERETksRjIEBERkcdiIENEREQei4EMEREReSwGMkREROSxGMgQERGRx2IgQ0RERB6LgQwRERF5LAYyRERE5LEYyBAREZHH8volCoQQAIDS0lKNW0JERERKGb+3jd/j1nh9IHPlyhUAQHx8vMYtISIiIrWuXLmCsLAwq/sNwlao4+Fqa2tx7tw5NGnSBAaDwe3XLy0tRXx8PPLy8hAaGur262vFF/vNPrPP3swX+80+a9tnIQSuXLmCuLg4+PlZz4Tx+hEZPz8/tGjRQutmIDQ0VPMPhRZ8sd/ss2/wxT4Dvtlv9lk7ciMxRkz2JSIiIo/FQIaIiIg8FgMZFwsMDMT8+fMRGBiodVPcyhf7zT77Bl/sM+Cb/WafPYPXJ/sSERGR9+KIDBEREXksBjJERETksRjIEBERkcdiIENEREQei4GMkzz77LMwGAxmP+3atTPtv3btGtLS0hAVFYWQkBBMmDABFy9e1LDFjmvVqpVFnw0GA9LS0gAAQ4YMsdj30EMPadxqdbZt24Y//OEPiIuLg8FgwBdffGG2XwiBefPmoXnz5ggKCsLw4cNx/Phxs2MuXbqEe++9F6GhoQgPD0dqairKysrc2At15PpcVVWFOXPmoHPnzmjcuDHi4uIwZcoUnDt3zuwcUp+NF1980c09UcfWe33fffdZ9GnUqFFmx3jTew1A8v9vg8GAxYsXm47xtPd60aJF6N27N5o0aYLY2FiMGzcO2dnZZsco+X195swZjBkzBsHBwYiNjcWTTz6J6upqd3ZFMVt9vnTpEmbOnInk5GQEBQWhZcuWmDVrFkpKSszOI/VZ+Pjjj93dHQsMZJyoY8eOOH/+vOlnx44dpn2PPfYYvvrqK3z22WfIyMjAuXPnMH78eA1b67h9+/aZ9XfLli0AgLvuust0zPTp082Oefnll7Vqrl3Ky8vRtWtXrFixQnL/yy+/jNdeew1vvPEG9uzZg8aNG2PkyJG4du2a6Zh7770XP//8M7Zs2YKvv/4a27Ztw4MPPuiuLqgm1+eKigocPHgQzzzzDA4ePIj169cjOzsbY8eOtTh24cKFZu/9zJkz3dF8u9l6rwFg1KhRZn1at26d2X5veq8BmPX1/PnzeOedd2AwGDBhwgSz4zzpvc7IyEBaWhp+/PFHbNmyBVVVVRgxYgTKy8tNx9j6fV1TU4MxY8bg+vXr2LVrF9577z28++67mDdvnhZdsslWn8+dO4dz587hlVdewZEjR/Duu+/i22+/RWpqqsW51qxZY/Zejxs3zs29kSDIKebPny+6du0qua+4uFgEBASIzz77zLTtl19+EQDE7t273dRC1/vLX/4i2rRpI2pra4UQQgwePFj85S9/0bZRTgRAbNiwwfTv2tpa0axZM7F48WLTtuLiYhEYGCjWrVsnhBDi6NGjAoDYt2+f6Zj//Oc/wmAwiN9++81tbbdX/T5L2bt3rwAgTp8+bdqWkJAgli5d6trGuZBUv6dOnSruuOMOq6/xhff6jjvuELfeeqvZNk9/r/Pz8wUAkZGRIYRQ9vv63//+t/Dz8xMXLlwwHbNq1SoRGhoqKisr3dsBO9Tvs5RPP/1UNGzYUFRVVZm2KfmMaIEjMk50/PhxxMXFoXXr1rj33ntx5swZAMCBAwdQVVWF4cOHm45t164dWrZsid27d2vVXKe6fv06PvzwQ9x///1mi3N+9NFHiI6ORqdOnTB37lxUVFRo2ErnOnnyJC5cuGD2voaFhaFv376m93X37t0IDw9Hr169TMcMHz4cfn5+2LNnj9vb7AolJSUwGAwIDw832/7iiy8iKioK3bt3x+LFi3U77K7G1q1bERsbi+TkZDz88MMoKioy7fP29/rixYv45ptvJP9K9+T32vj4JDIyEoCy39e7d+9G586d0bRpU9MxI0eORGlpKX7++Wc3tt4+9fts7ZjQ0FA0aGC+JGNaWhqio6PRp08fvPPOOxA6KEXn9YtGukvfvn3x7rvvIjk5GefPn8eCBQswcOBAHDlyBBcuXEDDhg0tftE3bdoUFy5c0KbBTvbFF1+guLgY9913n2nb5MmTkZCQgLi4OBw6dAhz5sxBdnY21q9fr11Dncj43tX9ZWb8t3HfhQsXEBsba7a/QYMGiIyM9Ir3/tq1a5gzZw4mTZpktsDcrFmz0KNHD0RGRmLXrl2YO3cuzp8/j1dffVXD1jpm1KhRGD9+PBITE3HixAk8/fTTGD16NHbv3g1/f3+vf6/fe+89NGnSxOKRuCe/17W1tXj00UfRv39/dOrUCQAU/b6+cOGC5P/3xn16JtXn+goLC/Hcc89ZPBZduHAhbr31VgQHB2Pz5s2YMWMGysrKMGvWLHc03SoGMk4yevRo03936dIFffv2RUJCAj799FMEBQVp2DL3WL16NUaPHo24uDjTtrr/E3Tu3BnNmzfHsGHDcOLECbRp00aLZpITVVVV4e6774YQAqtWrTLbN3v2bNN/d+nSBQ0bNsSf//xnLFq0yKNKn9d1zz33mP67c+fO6NKlC9q0aYOtW7di2LBhGrbMPd555x3ce++9aNSokdl2T36v09LScOTIEbN8Rm9nq8+lpaUYM2YMOnTogGeffdZs3zPPPGP67+7du6O8vByLFy/WPJDhoyUXCQ8Px80334ycnBw0a9YM169fR3FxsdkxFy9eRLNmzbRpoBOdPn0a3333HR544AHZ4/r27QsAyMnJcUezXM743tWfzVD3fW3WrBny8/PN9ldXV+PSpUse/d4bg5jTp09jy5YtZqMxUvr27Yvq6mqcOnXKPQ10g9atWyM6Otr0efbW9xoAtm/fjuzsbJv/jwOe814/8sgj+Prrr5Geno4WLVqYtiv5fd2sWTPJ/++N+/TKWp+Nrly5glGjRqFJkybYsGEDAgICZM/Xt29fnD17FpWVla5qsiIMZFykrKwMJ06cQPPmzdGzZ08EBATg+++/N+3Pzs7GmTNnkJKSomErnWPNmjWIjY3FmDFjZI/LysoCADRv3twNrXK9xMRENGvWzOx9LS0txZ49e0zva0pKCoqLi3HgwAHTMT/88ANqa2tNgZ2nMQYxx48fx3fffYeoqCibr8nKyoKfn5/FoxdPdvbsWRQVFZk+z974XhutXr0aPXv2RNeuXW0eq/f3WgiBRx55BBs2bMAPP/yAxMREs/1Kfl+npKTg8OHDZoGrMaDv0KGDezqigq0+Azd+d40YMQINGzbEl19+aTHyJiUrKwsRERHaj7xpm2vsPR5//HGxdetWcfLkSbFz504xfPhwER0dLfLz84UQQjz00EOiZcuW4ocffhD79+8XKSkpIiUlReNWO66mpka0bNlSzJkzx2x7Tk6OWLhwodi/f784efKk2Lhxo2jdurUYNGiQRi21z5UrV0RmZqbIzMwUAMSrr74qMjMzTTN0XnzxRREeHi42btwoDh06JO644w6RmJgorl69ajrHqFGjRPfu3cWePXvEjh07RFJSkpg0aZJWXbJJrs/Xr18XY8eOFS1atBBZWVni/Pnzph/jbI1du3aJpUuXiqysLHHixAnx4YcfipiYGDFlyhSNeyZPrt9XrlwRTzzxhNi9e7c4efKk+O6770SPHj1EUlKSuHbtmukc3vReG5WUlIjg4GCxatUqi9d74nv98MMPi7CwMLF161azz29FRYXpGFu/r6urq0WnTp3EiBEjRFZWlvj2229FTEyMmDt3rhZdsslWn0tKSkTfvn1F586dRU5Ojtkx1dXVQgghvvzyS/HWW2+Jw4cPi+PHj4uVK1eK4OBgMW/ePC27JoQQgoGMk0ycOFE0b95cNGzYUNx0001i4sSJIicnx7T/6tWrYsaMGSIiIkIEBweLP/7xj+L8+fMattg5Nm3aJACI7Oxss+1nzpwRgwYNEpGRkSIwMFC0bdtWPPnkk6KkpESjltonPT1dALD4mTp1qhDixhTsZ555RjRt2lQEBgaKYcOGWdyLoqIiMWnSJBESEiJCQ0PFtGnTxJUrVzTojTJyfT558qTkPgAiPT1dCCHEgQMHRN++fUVYWJho1KiRaN++vXjhhRfMvvD1SK7fFRUVYsSIESImJkYEBASIhIQEMX36dLPpt0J413tt9Oabb4qgoCBRXFxs8XpPfK+tfX7XrFljOkbJ7+tTp06J0aNHi6CgIBEdHS0ef/xxs6nKemKrz9Y+BwDEyZMnhRA3Sgl069ZNhISEiMaNG4uuXbuKN954Q9TU1GjXsf8yCKGDuVNEREREdmCODBEREXksBjJERETksRjIEBERkcdiIENEREQei4EMEREReSwGMkREROSxGMgQERGRx2IgQ0SyhgwZgkcffVTrZhARSWIgQ0RERB6LgQwRudX169e1boLb+FJfibTCQIaIbKqtrcVTTz2FyMhINGvWDM8++6xp35kzZ3DHHXcgJCQEoaGhuPvuu3Hx4kXT/meffRbdunXD22+/jcTERNOquv/617/QuXNnBAUFISoqCsOHD0d5ebnpdW+//Tbat2+PRo0aoV27dli5cqVp36lTp2AwGPDxxx+jX79+aNSoETp16oSMjAyzdmdkZKBPnz4IDAxE8+bN8de//hXV1dUAgK+//hrh4eGoqakBcGMlX4PBgL/+9a+m1z/wwAP405/+ZPr3jh07MHDgQAQFBSE+Ph6zZs0ya3OrVq3w3HPPYcqUKQgNDcWDDz7oyG0nIiW0XuyJiPRt8ODBIjQ0VDz77LPi2LFj4r333hMGg0Fs3rxZ1NTUiG7duokBAwaI/fv3ix9//FH07NlTDB482PT6+fPni8aNG4tRo0aJgwcPip9++kmcO3dONGjQQLz66qvi5MmT4tChQ2LFihWmBRY//PBD0bx5c/H555+L3Nxc8fnnn4vIyEjx7rvvCiGEafHKFi1aiH/961/i6NGj4oEHHhBNmjQRhYWFQgghzp49K4KDg8WMGTPEL7/8IjZs2CCio6PF/PnzhRBCFBcXCz8/P7Fv3z4hhBDLli0T0dHRom/fvqa2t23bVrz11ltCiBsrujdu3FgsXbpUHDt2TOzcuVN0795d3HfffabjExISRGhoqHjllVdETk6O2cKxROQaDGSISNbgwYPFgAEDzLb17t1bzJkzR2zevFn4+/uLM2fOmPb9/PPPAoDYu3evEOJGIBMQECDy8/NNxxw4cEAAEKdOnZK8Zps2bcTatWvNtj333HMiJSVFCPF7IPPiiy+a9ldVVYkWLVqIl156SQghxNNPPy2Sk5NFbW2t6ZgVK1aIkJAQ04q9PXr0EIsXLxZCCDFu3Djxj3/8QzRs2FBcuXJFnD17VgAQx44dE0IIkZqaKh588EGzNm3fvl34+fmJq1evCiFuBDLjxo2TvZ9E5Fx8tERENnXp0sXs382bN0d+fj5++eUXxMfHIz4+3rSvQ4cOCA8Pxy+//GLalpCQgJiYGNO/u3btimHDhqFz586466678NZbb+Hy5csAgPLycpw4cQKpqakICQkx/Tz//PM4ceKEWTtSUlJM/92gQQP06tXLdN1ffvkFKSkpMBgMpmP69++PsrIynD17FgAwePBgbN26FUIIbN++HePHj0f79u2xY8cOZGRkIC4uDklJSQCAn376Ce+++65Zm0aOHIna2lqcPHnSdI1evXrZd5OJyC4NtG4AEelfQECA2b8NBgNqa2sVv75x48Zm//b398eWLVuwa9cubN68GcuXL8ff/vY37NmzB8HBwQCAt956C3379rV4nTMNGTIE77zzDn766ScEBASgXbt2GDJkCLZu3YrLly9j8ODBpmPLysrw5z//GbNmzbI4T8uWLU3/Xb+vRORaHJEhIru1b98eeXl5yMvLM207evQoiouL0aFDB9nXGgwG9O/fHwsWLEBmZiYaNmyIDRs2oGnTpoiLi0Nubi7atm1r9pOYmGh2jh9//NH039XV1Thw4ADat29vatvu3bshhDAds3PnTjRp0gQtWrQAAAwcOBBXrlzB0qVLTUGLMZDZunUrhgwZYnptjx49cPToUYs2tW3bFg0bNrTvBhKRwzgiQ0R2Gz58ODp37ox7770Xy5YtQ3V1NWbMmIHBgwfLPmLZs2cPvv/+e4wYMQKxsbHYs2cPCgoKTEHIggULMGvWLISFhWHUqFGorKzE/v37cfnyZcyePdt0nhUrViApKQnt27fH0qVLcfnyZdx///0AgBkzZmDZsmWYOXMmHnnkEWRnZ2P+/PmYPXs2/Pxu/A0XERGBLl264KOPPsLrr78OABg0aBDuvvtuVFVVmY3IzJkzB7fccgseeeQRPPDAA2jcuDGOHj2KLVu2mF5LRO7HQIaI7GYwGLBx40bMnDkTgwYNgp+fH0aNGoXly5fLvi40NBTbtm3DsmXLUFpaioSEBCxZsgSjR48GcGPac3BwMBYvXownn3wSjRs3RufOnS0qDL/44ot48cUXkZWVhbZt2+LLL79EdHQ0AOCmm27Cv//9bzz55JPo2rUrIiMjkZqair///e9m5xg8eDCysrJMoy+RkZHo0KEDLl68iOTkZNNxXbp0QUZGBv72t79h4MCBEEKgTZs2mDhxooN3kYgcYRB1x12JiDzAqVOnkJiYiMzMTHTr1k3r5hCRhpgjQ0RERB6LgQwRERF5LD5aIiIiIo/FERkiIiLyWAxkiIiIyGMxkCEiIiKPxUCGiIiIPBYDGSIiIvJYDGSIiIjIYzGQISIiIo/FQIaIiIg8FgMZIiIi8lj/DzlNp+/T9/oFAAAAAElFTkSuQmCC", @@ -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/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", + "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": {