mirror of
https://github.com/ArthurDanjou/ArtStudies.git
synced 2026-01-14 20:59:57 +01:00
1708 lines
213 KiB
Plaintext
1708 lines
213 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# TP1 A first example of statistical learning\n",
|
|
"\n",
|
|
"\n",
|
|
"### Table of Contents\n",
|
|
"\n",
|
|
"* [1. Linear regression](#chapter1)\n",
|
|
"* [2. Polynomial regression](#chapter2)\n",
|
|
" * [2.1 `PolynomialFeatures` 2-dimensional features](#section2_1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We will use the following simulated data. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:32:45.876883Z",
|
|
"start_time": "2025-01-22T09:32:45.601010Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"from cProfile import label\n",
|
|
"\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"rng = np.random.default_rng(seed=42)\n",
|
|
"size = 100\n",
|
|
"x = np.sort(rng.uniform(-5, 5, size))\n",
|
|
"X = x.reshape(size, 1) # See later (Question 8) for the reason why we reshape\n",
|
|
"# X into a 2-dimensional array with the same size (i.e \n",
|
|
"# same number of elements)\n",
|
|
"y = 0.5 + x ** 2 + x + 2 * rng.standard_normal(size)"
|
|
],
|
|
"outputs": [],
|
|
"execution_count": 1
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now let us display the data : "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:34:02.429428Z",
|
|
"start_time": "2025-01-22T09:34:02.363995Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"plt.scatter(x, y)\n",
|
|
"plt.show()"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
],
|
|
"image/png": "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"
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"execution_count": 7
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 1** : \n",
|
|
"1. Which variable is the *feature/input/covariable*? \n",
|
|
"2. Which variable is the *label/outcome/target*? \n",
|
|
"3. What is the dimension $X$? What is the sample size? \n"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:34:58.459483Z",
|
|
"start_time": "2025-01-22T09:34:58.457153Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": "print(X.shape, x.shape)",
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"(100, 1) (100,)\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 8
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Answer for Exercise 1 :\n",
|
|
"\n",
|
|
"1. Feature : x\n",
|
|
"\n",
|
|
"2. Target : y\n",
|
|
"\n",
|
|
"3. The dimension of X is (100, 1) and the sample size is 100.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 1. Linear regression <a class=\"anchor\" id=\"chapter1\"></a>\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We will first use linear regression to model the relationship between $x$ and $y$. That is, we are looking for $\\hat{a}$ and $\\hat{b}$ such that $\\hat{f}(x)=\\hat{a}\\cdot x+\\hat{b}$ is close to $y$ in the sense of quadratic loss.\n",
|
|
"\n",
|
|
"We will use the sklearn package : `sklearn.linear_model.LinearRegression`. \n",
|
|
"\n",
|
|
"(Ref: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html) <-- See the example on this page. The goal is to get used to sklearn syntax as we will use this package for all sessions (except for the neural networks). "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 2** : Define a linear regression model, named `lin_reg`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:38:51.198238Z",
|
|
"start_time": "2025-01-22T09:38:51.195801Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"from sklearn.linear_model import LinearRegression\n",
|
|
"\n",
|
|
"lin_reg = LinearRegression()"
|
|
],
|
|
"outputs": [],
|
|
"execution_count": 14
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 3** : Train the linear regression model `lin_reg` on $X$, y. If the training is successful, `lin_reg` will store the model and you will be able to access the different results using its attributes. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:38:55.111182Z",
|
|
"start_time": "2025-01-22T09:38:55.104393Z"
|
|
}
|
|
},
|
|
"source": "lin_reg.fit(X, y)",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"LinearRegression()"
|
|
],
|
|
"text/html": [
|
|
"<style>#sk-container-id-2 {\n",
|
|
" /* Definition of color scheme common for light and dark mode */\n",
|
|
" --sklearn-color-text: #000;\n",
|
|
" --sklearn-color-text-muted: #666;\n",
|
|
" --sklearn-color-line: gray;\n",
|
|
" /* Definition of color scheme for unfitted estimators */\n",
|
|
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
|
|
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
|
|
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
|
|
" --sklearn-color-unfitted-level-3: chocolate;\n",
|
|
" /* Definition of color scheme for fitted estimators */\n",
|
|
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
|
|
" --sklearn-color-fitted-level-1: #d4ebff;\n",
|
|
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
|
|
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
|
|
"\n",
|
|
" /* Specific color for light theme */\n",
|
|
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
|
|
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
|
|
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
|
|
" --sklearn-color-icon: #696969;\n",
|
|
"\n",
|
|
" @media (prefers-color-scheme: dark) {\n",
|
|
" /* Redefinition of color scheme for dark theme */\n",
|
|
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
|
|
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
|
|
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
|
|
" --sklearn-color-icon: #878787;\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 pre {\n",
|
|
" padding: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 input.sk-hidden--visually {\n",
|
|
" border: 0;\n",
|
|
" clip: rect(1px 1px 1px 1px);\n",
|
|
" clip: rect(1px, 1px, 1px, 1px);\n",
|
|
" height: 1px;\n",
|
|
" margin: -1px;\n",
|
|
" overflow: hidden;\n",
|
|
" padding: 0;\n",
|
|
" position: absolute;\n",
|
|
" width: 1px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-dashed-wrapped {\n",
|
|
" border: 1px dashed var(--sklearn-color-line);\n",
|
|
" margin: 0 0.4em 0.5em 0.4em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" padding-bottom: 0.4em;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-container {\n",
|
|
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
|
|
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
|
|
" so we also need the `!important` here to be able to override the\n",
|
|
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
|
|
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
|
|
" display: inline-block !important;\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-text-repr-fallback {\n",
|
|
" display: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-parallel-item,\n",
|
|
"div.sk-serial,\n",
|
|
"div.sk-item {\n",
|
|
" /* draw centered vertical line to link estimators */\n",
|
|
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
|
|
" background-size: 2px 100%;\n",
|
|
" background-repeat: no-repeat;\n",
|
|
" background-position: center center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Parallel-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item::after {\n",
|
|
" content: \"\";\n",
|
|
" width: 100%;\n",
|
|
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
|
|
" flex-grow: 1;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel {\n",
|
|
" display: flex;\n",
|
|
" align-items: stretch;\n",
|
|
" justify-content: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
|
|
" align-self: flex-end;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
|
|
" align-self: flex-start;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
|
|
" width: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Serial-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-serial {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
" align-items: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" padding-right: 1em;\n",
|
|
" padding-left: 1em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
|
|
"clickable and can be expanded/collapsed.\n",
|
|
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
|
|
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
|
|
"*/\n",
|
|
"\n",
|
|
"/* Pipeline and ColumnTransformer style (default) */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable {\n",
|
|
" /* Default theme specific background. It is overwritten whether we have a\n",
|
|
" specific estimator or a Pipeline/ColumnTransformer */\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable label */\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label {\n",
|
|
" cursor: pointer;\n",
|
|
" display: flex;\n",
|
|
" width: 100%;\n",
|
|
" margin-bottom: 0;\n",
|
|
" padding: 0.5em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" text-align: center;\n",
|
|
" align-items: start;\n",
|
|
" justify-content: space-between;\n",
|
|
" gap: 0.5em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label .caption {\n",
|
|
" font-size: 0.6rem;\n",
|
|
" font-weight: lighter;\n",
|
|
" color: var(--sklearn-color-text-muted);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
|
|
" /* Arrow on the left of the label */\n",
|
|
" content: \"▸\";\n",
|
|
" float: left;\n",
|
|
" margin-right: 0.25em;\n",
|
|
" color: var(--sklearn-color-icon);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable content - dropdown */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content {\n",
|
|
" max-height: 0;\n",
|
|
" max-width: 0;\n",
|
|
" overflow: hidden;\n",
|
|
" text-align: left;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content pre {\n",
|
|
" margin: 0.2em;\n",
|
|
" border-radius: 0.25em;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
|
|
" /* Expand drop-down */\n",
|
|
" max-height: 200px;\n",
|
|
" max-width: 100%;\n",
|
|
" overflow: auto;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
|
|
" content: \"▾\";\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Pipeline/ColumnTransformer-specific style */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific style */\n",
|
|
"\n",
|
|
"/* Colorize estimator box */\n",
|
|
"#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
|
|
"#sk-container-id-2 div.sk-label label {\n",
|
|
" /* The background is the default theme color */\n",
|
|
" color: var(--sklearn-color-text-on-default-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover, darken the color of the background */\n",
|
|
"#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Label box, darken color on hover, fitted */\n",
|
|
"#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator label */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label label {\n",
|
|
" font-family: monospace;\n",
|
|
" font-weight: bold;\n",
|
|
" display: inline-block;\n",
|
|
" line-height: 1.2em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label-container {\n",
|
|
" text-align: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific */\n",
|
|
"#sk-container-id-2 div.sk-estimator {\n",
|
|
" font-family: monospace;\n",
|
|
" border: 1px dotted var(--sklearn-color-border-box);\n",
|
|
" border-radius: 0.25em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" margin-bottom: 0.5em;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-estimator.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* on hover */\n",
|
|
"#sk-container-id-2 div.sk-estimator:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
|
|
"\n",
|
|
"/* Common style for \"i\" and \"?\" */\n",
|
|
"\n",
|
|
".sk-estimator-doc-link,\n",
|
|
"a:link.sk-estimator-doc-link,\n",
|
|
"a:visited.sk-estimator-doc-link {\n",
|
|
" float: right;\n",
|
|
" font-size: smaller;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" border-radius: 1em;\n",
|
|
" height: 1em;\n",
|
|
" width: 1em;\n",
|
|
" text-decoration: none !important;\n",
|
|
" margin-left: 0.5em;\n",
|
|
" text-align: center;\n",
|
|
" /* unfitted */\n",
|
|
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-unfitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted,\n",
|
|
"a:link.sk-estimator-doc-link.fitted,\n",
|
|
"a:visited.sk-estimator-doc-link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Span, style for the box shown on hovering the info icon */\n",
|
|
".sk-estimator-doc-link span {\n",
|
|
" display: none;\n",
|
|
" z-index: 9999;\n",
|
|
" position: relative;\n",
|
|
" font-weight: normal;\n",
|
|
" right: .2ex;\n",
|
|
" padding: .5ex;\n",
|
|
" margin: .5ex;\n",
|
|
" width: min-content;\n",
|
|
" min-width: 20ex;\n",
|
|
" max-width: 50ex;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" box-shadow: 2pt 2pt 4pt #999;\n",
|
|
" /* unfitted */\n",
|
|
" background: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted span {\n",
|
|
" /* fitted */\n",
|
|
" background: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link:hover span {\n",
|
|
" display: block;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
|
|
"\n",
|
|
"#sk-container-id-2 a.estimator_doc_link {\n",
|
|
" float: right;\n",
|
|
" font-size: 1rem;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" border-radius: 1rem;\n",
|
|
" height: 1rem;\n",
|
|
" width: 1rem;\n",
|
|
" text-decoration: none;\n",
|
|
" /* unfitted */\n",
|
|
" color: var(--sklearn-color-unfitted-level-1);\n",
|
|
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 a.estimator_doc_link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"#sk-container-id-2 a.estimator_doc_link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LinearRegression()</pre></div> </div></div></div></div>"
|
|
]
|
|
},
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 16
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 4**: Try the following code and explain the problem. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:38:57.098642Z",
|
|
"start_time": "2025-01-22T09:38:56.937883Z"
|
|
}
|
|
},
|
|
"source": "lin_reg.fit(x, y) # we used x instead of X",
|
|
"outputs": [
|
|
{
|
|
"ename": "ValueError",
|
|
"evalue": "Expected 2D array, got 1D array instead:\narray=[-4.9263773 -4.77287927 -4.69182165 -4.56196234 -4.41697258 -4.36182744\n -4.12350081 -4.09952139 -4.05822652 -3.85469926 -3.81994098 -3.71886367\n -3.70078495 -3.60247516 -3.60203002 -3.47687897 -3.45710508 -3.38728221\n -3.3302708 -3.10528641 -3.05361292 -3.00091798 -2.85415327 -2.73090651\n -2.72761278 -2.66060514 -2.18616108 -2.11671896 -2.06406242 -1.98487911\n -1.96049902 -1.87633359 -1.74174642 -1.45474032 -1.38187389 -1.29540294\n -1.29201976 -1.18978774 -1.12521621 -0.93613139 -0.91471356 -0.63282611\n -0.62848081 -0.6112156 -0.56585801 -0.53843724 -0.49614062 -0.41084224\n -0.3812277 -0.33278996 -0.30444189 -0.28903794 -0.24295074 0.01044775\n 0.53579401 0.54584787 0.57032152 0.59207161 0.65236106 0.68741196\n 1.30282593 1.31664399 1.3471832 1.4386512 1.61916515 1.6431354\n 1.64850857 1.68402962 1.69813995 1.82495504 1.83048953 1.96320375\n 1.97368029 2.00265102 2.05165379 2.22359351 2.44762156 2.5808774\n 2.61139702 2.64998857 2.73956049 2.78383497 2.80729031 2.83898209\n 2.86064305 2.86924378 3.04764357 3.14020385 3.22761613 3.27631172\n 3.32259801 3.32678196 3.53403073 3.5859792 3.93121121 4.26764989\n 4.61897665 4.67509732 4.70698024 4.75622352].\nReshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
|
|
"\u001B[0;31mValueError\u001B[0m Traceback (most recent call last)",
|
|
"Cell \u001B[0;32mIn[17], line 1\u001B[0m\n\u001B[0;32m----> 1\u001B[0m \u001B[43mlin_reg\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mfit\u001B[49m\u001B[43m(\u001B[49m\u001B[43mx\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my\u001B[49m\u001B[43m)\u001B[49m \u001B[38;5;66;03m# we used x instead of X\u001B[39;00m\n",
|
|
"File \u001B[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/sklearn/base.py:1389\u001B[0m, in \u001B[0;36m_fit_context.<locals>.decorator.<locals>.wrapper\u001B[0;34m(estimator, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1382\u001B[0m estimator\u001B[38;5;241m.\u001B[39m_validate_params()\n\u001B[1;32m 1384\u001B[0m \u001B[38;5;28;01mwith\u001B[39;00m config_context(\n\u001B[1;32m 1385\u001B[0m skip_parameter_validation\u001B[38;5;241m=\u001B[39m(\n\u001B[1;32m 1386\u001B[0m prefer_skip_nested_validation \u001B[38;5;129;01mor\u001B[39;00m global_skip_validation\n\u001B[1;32m 1387\u001B[0m )\n\u001B[1;32m 1388\u001B[0m ):\n\u001B[0;32m-> 1389\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfit_method\u001B[49m\u001B[43m(\u001B[49m\u001B[43mestimator\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n",
|
|
"File \u001B[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/sklearn/linear_model/_base.py:601\u001B[0m, in \u001B[0;36mLinearRegression.fit\u001B[0;34m(self, X, y, sample_weight)\u001B[0m\n\u001B[1;32m 597\u001B[0m n_jobs_ \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mn_jobs\n\u001B[1;32m 599\u001B[0m accept_sparse \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mFalse\u001B[39;00m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpositive \u001B[38;5;28;01melse\u001B[39;00m [\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mcsr\u001B[39m\u001B[38;5;124m\"\u001B[39m, \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mcsc\u001B[39m\u001B[38;5;124m\"\u001B[39m, \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mcoo\u001B[39m\u001B[38;5;124m\"\u001B[39m]\n\u001B[0;32m--> 601\u001B[0m X, y \u001B[38;5;241m=\u001B[39m \u001B[43mvalidate_data\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 602\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\n\u001B[1;32m 603\u001B[0m \u001B[43m \u001B[49m\u001B[43mX\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 604\u001B[0m \u001B[43m \u001B[49m\u001B[43my\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 605\u001B[0m \u001B[43m \u001B[49m\u001B[43maccept_sparse\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43maccept_sparse\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 606\u001B[0m \u001B[43m \u001B[49m\u001B[43my_numeric\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mTrue\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[1;32m 607\u001B[0m \u001B[43m \u001B[49m\u001B[43mmulti_output\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mTrue\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[1;32m 608\u001B[0m \u001B[43m \u001B[49m\u001B[43mforce_writeable\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mTrue\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[1;32m 609\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 611\u001B[0m has_sw \u001B[38;5;241m=\u001B[39m sample_weight \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m\n\u001B[1;32m 612\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m has_sw:\n",
|
|
"File \u001B[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/sklearn/utils/validation.py:2961\u001B[0m, in \u001B[0;36mvalidate_data\u001B[0;34m(_estimator, X, y, reset, validate_separately, skip_check_array, **check_params)\u001B[0m\n\u001B[1;32m 2959\u001B[0m y \u001B[38;5;241m=\u001B[39m check_array(y, input_name\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124my\u001B[39m\u001B[38;5;124m\"\u001B[39m, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mcheck_y_params)\n\u001B[1;32m 2960\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m-> 2961\u001B[0m X, y \u001B[38;5;241m=\u001B[39m \u001B[43mcheck_X_y\u001B[49m\u001B[43m(\u001B[49m\u001B[43mX\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mcheck_params\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 2962\u001B[0m out \u001B[38;5;241m=\u001B[39m X, y\n\u001B[1;32m 2964\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m no_val_X \u001B[38;5;129;01mand\u001B[39;00m check_params\u001B[38;5;241m.\u001B[39mget(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mensure_2d\u001B[39m\u001B[38;5;124m\"\u001B[39m, \u001B[38;5;28;01mTrue\u001B[39;00m):\n",
|
|
"File \u001B[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/sklearn/utils/validation.py:1370\u001B[0m, in \u001B[0;36mcheck_X_y\u001B[0;34m(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_writeable, force_all_finite, ensure_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator)\u001B[0m\n\u001B[1;32m 1364\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[1;32m 1365\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mestimator_name\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m requires y to be passed, but the target y is None\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1366\u001B[0m )\n\u001B[1;32m 1368\u001B[0m ensure_all_finite \u001B[38;5;241m=\u001B[39m _deprecate_force_all_finite(force_all_finite, ensure_all_finite)\n\u001B[0;32m-> 1370\u001B[0m X \u001B[38;5;241m=\u001B[39m \u001B[43mcheck_array\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 1371\u001B[0m \u001B[43m \u001B[49m\u001B[43mX\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1372\u001B[0m \u001B[43m \u001B[49m\u001B[43maccept_sparse\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43maccept_sparse\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1373\u001B[0m \u001B[43m \u001B[49m\u001B[43maccept_large_sparse\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43maccept_large_sparse\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1374\u001B[0m \u001B[43m \u001B[49m\u001B[43mdtype\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mdtype\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1375\u001B[0m \u001B[43m \u001B[49m\u001B[43morder\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43morder\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1376\u001B[0m \u001B[43m \u001B[49m\u001B[43mcopy\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mcopy\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1377\u001B[0m \u001B[43m \u001B[49m\u001B[43mforce_writeable\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mforce_writeable\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1378\u001B[0m \u001B[43m \u001B[49m\u001B[43mensure_all_finite\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mensure_all_finite\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1379\u001B[0m \u001B[43m \u001B[49m\u001B[43mensure_2d\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mensure_2d\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1380\u001B[0m \u001B[43m \u001B[49m\u001B[43mallow_nd\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mallow_nd\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1381\u001B[0m \u001B[43m \u001B[49m\u001B[43mensure_min_samples\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mensure_min_samples\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1382\u001B[0m \u001B[43m \u001B[49m\u001B[43mensure_min_features\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mensure_min_features\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1383\u001B[0m \u001B[43m \u001B[49m\u001B[43mestimator\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mestimator\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1384\u001B[0m \u001B[43m \u001B[49m\u001B[43minput_name\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mX\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1385\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1387\u001B[0m y \u001B[38;5;241m=\u001B[39m _check_y(y, multi_output\u001B[38;5;241m=\u001B[39mmulti_output, y_numeric\u001B[38;5;241m=\u001B[39my_numeric, estimator\u001B[38;5;241m=\u001B[39mestimator)\n\u001B[1;32m 1389\u001B[0m check_consistent_length(X, y)\n",
|
|
"File \u001B[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/sklearn/utils/validation.py:1093\u001B[0m, in \u001B[0;36mcheck_array\u001B[0;34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_writeable, force_all_finite, ensure_all_finite, ensure_non_negative, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\u001B[0m\n\u001B[1;32m 1086\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m 1087\u001B[0m msg \u001B[38;5;241m=\u001B[39m (\n\u001B[1;32m 1088\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mExpected 2D array, got 1D array instead:\u001B[39m\u001B[38;5;130;01m\\n\u001B[39;00m\u001B[38;5;124marray=\u001B[39m\u001B[38;5;132;01m{\u001B[39;00marray\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m.\u001B[39m\u001B[38;5;130;01m\\n\u001B[39;00m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1089\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mReshape your data either using array.reshape(-1, 1) if \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1090\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124myour data has a single feature or array.reshape(1, -1) \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1091\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mif it contains a single sample.\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1092\u001B[0m )\n\u001B[0;32m-> 1093\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(msg)\n\u001B[1;32m 1095\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m dtype_numeric \u001B[38;5;129;01mand\u001B[39;00m \u001B[38;5;28mhasattr\u001B[39m(array\u001B[38;5;241m.\u001B[39mdtype, \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mkind\u001B[39m\u001B[38;5;124m\"\u001B[39m) \u001B[38;5;129;01mand\u001B[39;00m array\u001B[38;5;241m.\u001B[39mdtype\u001B[38;5;241m.\u001B[39mkind \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mUSV\u001B[39m\u001B[38;5;124m\"\u001B[39m:\n\u001B[1;32m 1096\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[1;32m 1097\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mdtype=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mnumeric\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m is not compatible with arrays of bytes/strings.\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1098\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mConvert your data to numeric values explicitly instead.\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1099\u001B[0m )\n",
|
|
"\u001B[0;31mValueError\u001B[0m: Expected 2D array, got 1D array instead:\narray=[-4.9263773 -4.77287927 -4.69182165 -4.56196234 -4.41697258 -4.36182744\n -4.12350081 -4.09952139 -4.05822652 -3.85469926 -3.81994098 -3.71886367\n -3.70078495 -3.60247516 -3.60203002 -3.47687897 -3.45710508 -3.38728221\n -3.3302708 -3.10528641 -3.05361292 -3.00091798 -2.85415327 -2.73090651\n -2.72761278 -2.66060514 -2.18616108 -2.11671896 -2.06406242 -1.98487911\n -1.96049902 -1.87633359 -1.74174642 -1.45474032 -1.38187389 -1.29540294\n -1.29201976 -1.18978774 -1.12521621 -0.93613139 -0.91471356 -0.63282611\n -0.62848081 -0.6112156 -0.56585801 -0.53843724 -0.49614062 -0.41084224\n -0.3812277 -0.33278996 -0.30444189 -0.28903794 -0.24295074 0.01044775\n 0.53579401 0.54584787 0.57032152 0.59207161 0.65236106 0.68741196\n 1.30282593 1.31664399 1.3471832 1.4386512 1.61916515 1.6431354\n 1.64850857 1.68402962 1.69813995 1.82495504 1.83048953 1.96320375\n 1.97368029 2.00265102 2.05165379 2.22359351 2.44762156 2.5808774\n 2.61139702 2.64998857 2.73956049 2.78383497 2.80729031 2.83898209\n 2.86064305 2.86924378 3.04764357 3.14020385 3.22761613 3.27631172\n 3.32259801 3.32678196 3.53403073 3.5859792 3.93121121 4.26764989\n 4.61897665 4.67509732 4.70698024 4.75622352].\nReshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample."
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 17
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The same *problem* arises very often with sklearn : we will have to use `reshape` for one-dimensional features. Some extra info about `reshape`:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:39:52.478784Z",
|
|
"start_time": "2025-01-22T09:39:52.472388Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"a = np.arange(6).reshape(2, 3)\n",
|
|
"# 3 ways to reshape the array a into a 3 x 2 array \n",
|
|
"b = a.reshape(3, 2)\n",
|
|
"b2 = a.reshape(3, -1) # -1 means \"guess\" the number\n",
|
|
"b3 = a.reshape(-1, 2) # same\n",
|
|
"# obviously reshape(4,-1) would not work here as 2 X 3=6 is not\n",
|
|
"# divisible by 4...\n",
|
|
"print(a)\n",
|
|
"print(b)\n",
|
|
"print(b2)\n",
|
|
"print(b3)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[[0 1 2]\n",
|
|
" [3 4 5]]\n",
|
|
"[[0 1]\n",
|
|
" [2 3]\n",
|
|
" [4 5]]\n",
|
|
"[[0 1]\n",
|
|
" [2 3]\n",
|
|
" [4 5]]\n",
|
|
"[[0 1]\n",
|
|
" [2 3]\n",
|
|
" [4 5]]\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 20
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 5** : \n",
|
|
"\n",
|
|
"(1) Compute $\\hat{y}$ and the plot the line estimated by the model. \n",
|
|
"<details> \n",
|
|
"<summary>Click here for a hint</summary>\n",
|
|
"You can use `lin_reg.predict`. \n",
|
|
"</details>\n",
|
|
"\n",
|
|
"(2) Predict the value of $y$ for x=1. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:50:01.091807Z",
|
|
"start_time": "2025-01-22T09:50:00.964206Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"y_predict = lin_reg.predict(X)\n",
|
|
"plt.plot(X, y_predict, color='r', label='Regression')\n",
|
|
"plt.scatter(X, y, label='Sample')\n",
|
|
"plt.legend()\n",
|
|
"plt.show()\n",
|
|
"\n",
|
|
"y_1 = lin_reg.predict([[1]])\n",
|
|
"print(\"The estimated value for x=1 is\", y_1)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
],
|
|
"image/png": "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exTriEhBzu1L0dHRiI6Oxvvvvw+DwSB4TEhICP70pz/h8OHD2LhxI3bt2oWnn37a7pjm5mb86U9/wubNm1FSUoLdu3fj/vvvx/bt27F9+3a89dZbWLduHd577z27561cuRLDhw/HV199hWXLluHJJ5/Ejh07BMfR1taGKVOmICYmBp999hn279+P6Oho5OTkoLW11TcfCBERSS4nKwn7lt6Fv80fhz8+NAJ/mz8O+5beJXkQAgTp0own25eyByb49L27deuGDRs2YP78+Xj99dcxatQo3HnnnXjooYcwbNgwAMCiRYtsx/fv3x8vvPACFixYgDVr1tgeb2trw9q1azFw4EAAwKxZs/DWW2/h/PnziI6ORmZmJiZOnIhPP/0UDz74oO1548ePx7JlywAAGRkZ2L9/P1atWoXJkyd3Gus777wDk8mEP//5z1CpLNN069evR1xcHHbv3o177rnHp58NERFJJzRE5fNznDeCckZE7u1LM2fOxLlz5/DBBx8gJycHu3fvxqhRo7BhwwYAwCeffIK7774bKSkpiImJwU9+8hM0NDSgubnZ9hqRkZG2IAQAevfujf79+yM6OtrusQsXLti9d3Z2dqf73377reA4/+///g9VVVWIiYmxzeTEx8ejpaUFJ06c6OrHQERELsixoUJqQTkjooTtSxEREZg8eTImT56MZ599Fo899hgKCwsxYcIE/PCHP0Rubi5++9vfIj4+Hvv27cO8efPQ2tqKyMhIAEBYWJjd66lUKsHHTCaT12O8evUqRo8ejbfffrvT13r16uX16xIRkWtK6gcjpqCcEVHi9qXMzEw0NTXh0KFDMJlM+P3vf49x48YhIyMD586d89n7HDhwoNP9oUOHCh47atQoHD9+HImJiRg0aJDdTaPR+GxMRERkT2n9YMQUlIGIdfsSgE7BiNjblxoaGnDXXXehuLgYX3/9Naqrq/Huu+/ipZdewvTp0zFo0CC0tbVh9erVOHnyJN566y28/vrrPnv//fv346WXXsKxY8fw2muv4d1338WTTz4peOwjjzyCnj17Yvr06fjss89QXV2N3bt344knnsDZs2d9NiYiIrpBif1gxBSUgQgg3/al6OhojB07FqtWrcIdd9yBrKwsPPvss5g/fz5effVVDB8+HK+88gpWrFiBrKwsvP322ygqKvLZ+y9ZsgRffvklRo4c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"
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"The estimated value for x=1 is [8.54372371]\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 52
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 6** : Display the coefficients $\\hat{a}$ and $\\hat{b}$ computed by `lin_reg`. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:42:26.316701Z",
|
|
"start_time": "2025-01-22T09:42:26.312959Z"
|
|
}
|
|
},
|
|
"source": "print(\"The estimated coefficients are a=\", lin_reg.coef_, \", b=\", lin_reg.intercept_)",
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"The estimated coefficients are a= [0.6841386] , b= 7.8595851113619375\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 30
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 7** : Calculate the quadratic error $\\sum_{i=1}^{100}(y_i-\\hat{y}_i)^2$."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:42:50.448815Z",
|
|
"start_time": "2025-01-22T09:42:50.445550Z"
|
|
}
|
|
},
|
|
"source": "print(np.sum((y - y_predict) ** 2))",
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"4906.471161398307\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 31
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 8** : What does the next line of code compute ? (see the doc : https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html.)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:42:57.691432Z",
|
|
"start_time": "2025-01-22T09:42:57.686810Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"lin_reg.score(X, y)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"0.06603572054935491"
|
|
]
|
|
},
|
|
"execution_count": 32,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 32
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": "The output is the $R^2$ coefficient. It is far from 1, which means that the model is not perfect."
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 2.Polynomial regression <a class=\"anchor\" id=\"chapter2\"></a>\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We seek 3 coefficients $\\hat{a}$, $\\hat{b}$ and $\\hat{c}$ such that $\\hat{f}(x)=\\hat{a}\\cdot x^{2}+\\hat{b}\\cdot x +\\hat{c}$ is close to $y$ with respect to the quadratic loss. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 9** : Create a new 2-dimensional array named `X2`, of dimension $100\\times$2, the first column of which is $x^2$, and the second column is $x$."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:44:45.265060Z",
|
|
"start_time": "2025-01-22T09:44:45.261420Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"X2 = np.array([x ** 2, x]).T\n",
|
|
"print(X2.shape)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"(100, 2)\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 36
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 10** : Fit a new model, named `poly2_reg`, which will be the linear regression of `y` on `X2` (which will correspond to 2nd degree polynomial regression of `y` on `X`)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:45:05.543859Z",
|
|
"start_time": "2025-01-22T09:45:05.532828Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"poly2_reg = LinearRegression()\n",
|
|
"poly2_reg.fit(X2, y)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"LinearRegression()"
|
|
],
|
|
"text/html": [
|
|
"<style>#sk-container-id-3 {\n",
|
|
" /* Definition of color scheme common for light and dark mode */\n",
|
|
" --sklearn-color-text: #000;\n",
|
|
" --sklearn-color-text-muted: #666;\n",
|
|
" --sklearn-color-line: gray;\n",
|
|
" /* Definition of color scheme for unfitted estimators */\n",
|
|
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
|
|
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
|
|
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
|
|
" --sklearn-color-unfitted-level-3: chocolate;\n",
|
|
" /* Definition of color scheme for fitted estimators */\n",
|
|
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
|
|
" --sklearn-color-fitted-level-1: #d4ebff;\n",
|
|
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
|
|
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
|
|
"\n",
|
|
" /* Specific color for light theme */\n",
|
|
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
|
|
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
|
|
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
|
|
" --sklearn-color-icon: #696969;\n",
|
|
"\n",
|
|
" @media (prefers-color-scheme: dark) {\n",
|
|
" /* Redefinition of color scheme for dark theme */\n",
|
|
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
|
|
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
|
|
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
|
|
" --sklearn-color-icon: #878787;\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 pre {\n",
|
|
" padding: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 input.sk-hidden--visually {\n",
|
|
" border: 0;\n",
|
|
" clip: rect(1px 1px 1px 1px);\n",
|
|
" clip: rect(1px, 1px, 1px, 1px);\n",
|
|
" height: 1px;\n",
|
|
" margin: -1px;\n",
|
|
" overflow: hidden;\n",
|
|
" padding: 0;\n",
|
|
" position: absolute;\n",
|
|
" width: 1px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-dashed-wrapped {\n",
|
|
" border: 1px dashed var(--sklearn-color-line);\n",
|
|
" margin: 0 0.4em 0.5em 0.4em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" padding-bottom: 0.4em;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-container {\n",
|
|
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
|
|
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
|
|
" so we also need the `!important` here to be able to override the\n",
|
|
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
|
|
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
|
|
" display: inline-block !important;\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-text-repr-fallback {\n",
|
|
" display: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-parallel-item,\n",
|
|
"div.sk-serial,\n",
|
|
"div.sk-item {\n",
|
|
" /* draw centered vertical line to link estimators */\n",
|
|
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
|
|
" background-size: 2px 100%;\n",
|
|
" background-repeat: no-repeat;\n",
|
|
" background-position: center center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Parallel-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel-item::after {\n",
|
|
" content: \"\";\n",
|
|
" width: 100%;\n",
|
|
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
|
|
" flex-grow: 1;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel {\n",
|
|
" display: flex;\n",
|
|
" align-items: stretch;\n",
|
|
" justify-content: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel-item {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
|
|
" align-self: flex-end;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
|
|
" align-self: flex-start;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
|
|
" width: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Serial-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-serial {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
" align-items: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" padding-right: 1em;\n",
|
|
" padding-left: 1em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
|
|
"clickable and can be expanded/collapsed.\n",
|
|
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
|
|
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
|
|
"*/\n",
|
|
"\n",
|
|
"/* Pipeline and ColumnTransformer style (default) */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-toggleable {\n",
|
|
" /* Default theme specific background. It is overwritten whether we have a\n",
|
|
" specific estimator or a Pipeline/ColumnTransformer */\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable label */\n",
|
|
"#sk-container-id-3 label.sk-toggleable__label {\n",
|
|
" cursor: pointer;\n",
|
|
" display: flex;\n",
|
|
" width: 100%;\n",
|
|
" margin-bottom: 0;\n",
|
|
" padding: 0.5em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" text-align: center;\n",
|
|
" align-items: start;\n",
|
|
" justify-content: space-between;\n",
|
|
" gap: 0.5em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 label.sk-toggleable__label .caption {\n",
|
|
" font-size: 0.6rem;\n",
|
|
" font-weight: lighter;\n",
|
|
" color: var(--sklearn-color-text-muted);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
|
|
" /* Arrow on the left of the label */\n",
|
|
" content: \"▸\";\n",
|
|
" float: left;\n",
|
|
" margin-right: 0.25em;\n",
|
|
" color: var(--sklearn-color-icon);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable content - dropdown */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-toggleable__content {\n",
|
|
" max-height: 0;\n",
|
|
" max-width: 0;\n",
|
|
" overflow: hidden;\n",
|
|
" text-align: left;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-toggleable__content pre {\n",
|
|
" margin: 0.2em;\n",
|
|
" border-radius: 0.25em;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
|
|
" /* Expand drop-down */\n",
|
|
" max-height: 200px;\n",
|
|
" max-width: 100%;\n",
|
|
" overflow: auto;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
|
|
" content: \"▾\";\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Pipeline/ColumnTransformer-specific style */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific style */\n",
|
|
"\n",
|
|
"/* Colorize estimator box */\n",
|
|
"#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
|
|
"#sk-container-id-3 div.sk-label label {\n",
|
|
" /* The background is the default theme color */\n",
|
|
" color: var(--sklearn-color-text-on-default-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover, darken the color of the background */\n",
|
|
"#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Label box, darken color on hover, fitted */\n",
|
|
"#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator label */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-label label {\n",
|
|
" font-family: monospace;\n",
|
|
" font-weight: bold;\n",
|
|
" display: inline-block;\n",
|
|
" line-height: 1.2em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-label-container {\n",
|
|
" text-align: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific */\n",
|
|
"#sk-container-id-3 div.sk-estimator {\n",
|
|
" font-family: monospace;\n",
|
|
" border: 1px dotted var(--sklearn-color-border-box);\n",
|
|
" border-radius: 0.25em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" margin-bottom: 0.5em;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-estimator.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* on hover */\n",
|
|
"#sk-container-id-3 div.sk-estimator:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
|
|
"\n",
|
|
"/* Common style for \"i\" and \"?\" */\n",
|
|
"\n",
|
|
".sk-estimator-doc-link,\n",
|
|
"a:link.sk-estimator-doc-link,\n",
|
|
"a:visited.sk-estimator-doc-link {\n",
|
|
" float: right;\n",
|
|
" font-size: smaller;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" border-radius: 1em;\n",
|
|
" height: 1em;\n",
|
|
" width: 1em;\n",
|
|
" text-decoration: none !important;\n",
|
|
" margin-left: 0.5em;\n",
|
|
" text-align: center;\n",
|
|
" /* unfitted */\n",
|
|
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-unfitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted,\n",
|
|
"a:link.sk-estimator-doc-link.fitted,\n",
|
|
"a:visited.sk-estimator-doc-link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Span, style for the box shown on hovering the info icon */\n",
|
|
".sk-estimator-doc-link span {\n",
|
|
" display: none;\n",
|
|
" z-index: 9999;\n",
|
|
" position: relative;\n",
|
|
" font-weight: normal;\n",
|
|
" right: .2ex;\n",
|
|
" padding: .5ex;\n",
|
|
" margin: .5ex;\n",
|
|
" width: min-content;\n",
|
|
" min-width: 20ex;\n",
|
|
" max-width: 50ex;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" box-shadow: 2pt 2pt 4pt #999;\n",
|
|
" /* unfitted */\n",
|
|
" background: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted span {\n",
|
|
" /* fitted */\n",
|
|
" background: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link:hover span {\n",
|
|
" display: block;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
|
|
"\n",
|
|
"#sk-container-id-3 a.estimator_doc_link {\n",
|
|
" float: right;\n",
|
|
" font-size: 1rem;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" border-radius: 1rem;\n",
|
|
" height: 1rem;\n",
|
|
" width: 1rem;\n",
|
|
" text-decoration: none;\n",
|
|
" /* unfitted */\n",
|
|
" color: var(--sklearn-color-unfitted-level-1);\n",
|
|
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 a.estimator_doc_link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"#sk-container-id-3 a.estimator_doc_link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" checked><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LinearRegression()</pre></div> </div></div></div></div>"
|
|
]
|
|
},
|
|
"execution_count": 37,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 37
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 11** : \n",
|
|
"\n",
|
|
"(1) Plot the second degree polynomial estimated by `poly2_reg` \n",
|
|
"<details> \n",
|
|
" <summary> Hint </summary> you can use`poly2_reg.predict`. \n",
|
|
"</details> \n",
|
|
" \n",
|
|
"\n",
|
|
"(2) Predict the value of $y$ for x=1 using `poly2_reg`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:49:38.985508Z",
|
|
"start_time": "2025-01-22T09:49:38.910274Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"# Answer for Exercise 11\n",
|
|
"y2_predict = poly2_reg.predict(X2)\n",
|
|
"plt.scatter(x, y, label='Sample')\n",
|
|
"plt.plot(x, y2_predict, color='r', label='Regression')\n",
|
|
"\n",
|
|
"plt.legend()\n",
|
|
"plt.show()\n",
|
|
"\n",
|
|
"y2_1 = poly2_reg.predict([[1, 1]])\n",
|
|
"print(\"The estimated value for x=1 is\", y2_1) #add your code"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
],
|
|
"image/png": "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DBkyxDJgwACLxWKxTJgwwdKsWbNcrz/zzDMWwPLXX39ZLBaL5Z133rEAlp07d2Zvc+jQIUtgYKDl2LFjud7brVs3y6RJkywWi8Vy/fXXW5577jmb7e7du7floYcesvlaQkKCBbD8/PPPFovFYnn66actDRs2tJjN5uxt5s6da6lQoYIlKyvLYrFYLF26dLF07tw5137atm1rmTBhgs1jWCz5/L+LiEheTz5pnKO6dHH7oQs6f1/Nt3pEypUzeic8cVwHde3alXnz5nHhwgVmzZpFqVKl6NevH7t27eLixYt5egQyMjJo1aoVAHv37qVt27a5Xm/Xrl2eY5QpU4bmza+sF//tt9/IysqiQYMGubZLT0+ncmWjAvETTzzBsGHD+Oqrr+jevTv9+vXL3sewYcPo168fO3bs4NZbb6Vv37784x//sPn5fv/9dzp27IjJdCW67tSpE+fPn+fo0aPUqlULIFf7ACIiIjh58mT+X5yIiB/JMluK1muRmgpvvWXct9Fj7k18KxAxmYo1ROJO5cuXp169egAsWrSIFi1a8N///jd71cnnn39OzZo1c70nKCjIoWOULVs2VyBw/vx5AgMD2b59O4FXlX62Dr88/PDD9OzZk88//5yvvvqKmJgYXn31VUaOHMltt93GoUOHWLt2LevWraNbt24MHz6cV155xeHPb1W6dOlcj00mk0sn1YqIlBSx8YlMW7O7aPVgFiwwgpFGjeD2213c0uLxrcmqJVRAQABPP/00kydPzjWxtF69erlukZGRADRs2JCffvop1z5+/PHHQo/TqlUrsrKyOHnyZJ59h4eHZ28XGRnJY489xscff8y4ceNYsGBB9mtVq1Zl0KBBLF26lNdee423337b5rEaN25MXFwclhwTebds2UJISAjXXnutQ9+PiIi/iY1PZNjSHUWrB5OZCa+9ZtwfN85YMePFvLt1fuSf//wngYGBvPXWW4wfP54xY8awZMkSDhw4wI4dO5gzZw5LliwB4NFHH2XPnj1MmDCBP/74gw8//JDFixcD5OoBuVqDBg24//77efDBB/n4449JSEhg27ZtxMTE8PnnnwMwevRovvzySxISEtixYwfffPMNjRs3BuDZZ59l9erV7N+/n127dvHZZ59lv3a1xx9/nCNHjjBy5Ej27NnD6tWrmTp1KmPHjiXAy38pREQ8KctsYdqa3UWvB/Phh8ZE1erVYeBAVzXTaXxraKYEK1WqFCNGjODll18mISGBqlWrEhMTw59//knFihVp3bo1Tz/9NABRUVGsXLmScePGMXv2bDp27MgzzzzDsGHDCh2+eeedd3jxxRcZN24cx44do0qVKnTo0IFevXoBRr6R4cOHc/ToUUJDQ4mOjmbWrFmAMedk0qRJHDx4kLJly3LjjTeyfPlym8epWbMma9eu5cknn6RFixZUqlSJIUOGMHnyZCd+ayIivmdbwpk8PSE55awH07Fu5atetIB1uHzkSAh2X4bUojJZcvade5nU1FTCwsJISUkhNDQ012tpaWkkJCQQFRVFcAn4ol3t3//+N/Pnz+fIkSOebopL6f9dRHzd6p3HGLV8Z6Hbzb63JX1a5p5LyNdfQ48exiKKw4ehcmXbb3axgs7fV1OPSAn15ptv0rZtWypXrsyWLVuYMWMGI0aM8HSzRESkmOyt82JzO2tvyL/+5bEgxFEKREqoffv28eKLL3LmzBlq1arFuHHjmDRpkqebJSIixdQuqhIRYcEkpaTZnCdiwsiCmqcezK+/wpdfGpNTx4zJ874iLwV2MQUiJdSsWbOy526IiIjvsNaDGbZ0BybIFYwUWA9m5kzj33794Lrrcr1UrKXALqblCyIiIl7G4Xowx47BsmXG/XHjcr1UrKXAblDkQCQmJoa2bdsSEhJCtWrV6Nu3L3v37s21zc0335xd7t56e+yxx4rd6Jy8eK6tuID+v0XEX0Q3i+C7CbfwwdAOzL63JR8M7cB3E26x3YPx+utG/pAbb4T27bOfLvZSYDco8tDMpk2bGD58OG3btuXy5cs8/fTT3HrrrezevZvyObKbDh06lOeffz77cbkipEO3xZqR8+LFi5QtW9Yp+xTvd/HiRSBvRlYREV8UGGDKu0T3aqmpMH++cf+qdO7FWgrsJkUORGJjY3M9Xrx4MdWqVWP79u3cdNNN2c+XK1cuV9ZOZwkMDKRixYrZdUnKlStXYDIvKdksFgsXL17k5MmTVKxYMU+KehERv/Xf/xrBSMOG8HdOKKuT5/IPQoqynSs4bbJqSkoKAJUq5Z7F+/7777N06VLCw8Pp3bs3U6ZMybdXJD09nfT09OzHqampBR7TGuCoSJr/qFixoksCWxGREqmQdO7FWgrsJk4JRMxmM6NHj6ZTp07ZRdsA7rvvPmrXrk2NGjX49ddfmTBhAnv37uXjjz+2uZ+YmBimTZtm93FNJhMRERFUq1aNzMzMYn8O8W6lS5dWT4iISE4ffWQkLqtWDR54IM/LRV4K7EZOyaw6bNgwvvjiC7777rsCC5pt2LCBbt26sX//furWrZvndVs9IpGRkXZlZhMREfErFgu0aQM//wzPPw9TptjczLpqBmwvBba5CqeYHMmsWuzluyNGjOCzzz7jm2++KbSqavu/Z/Lu37/f5utBQUGEhobmuomIiIgN33xjBCFly8KwYflu5vBSYDcr8tCMxWJh5MiRrFq1io0bNxIVFVXoe3bu3AlARIRnP7SIiEiJZ03n/tBDUKWKzU2s2VTTL5t5pX8LMMHp8+m+kVl1+PDhLFu2jNWrVxMSEkJSUhIAYWFhlC1blgMHDrBs2TJuv/12KleuzK+//sqYMWO46aabaN68udM+gIiIiN+Jj4cvvgCTCcaOtblJQdlUPbVU15YizxHJb6nsO++8w+DBgzly5AgDBw4kPj6eCxcuEBkZyZ133snkyZPtHnJxZIxJRETEbzz0ECxebKRzX7kyz8vWeSFXn+BdOS8kJ0fO306ZrOoqCkRERESucvw41KljLN2Ni4MOHXK9nGW20Hn6hnwTmVlXynw34RaXDc24dbKqiIiIuNGcOUYQ0qlTniAEHMum6g0UiIiIiJQU585dSef+5JM2NykJ2VRzUiAiIiJSUixaBGfPQv360Lu3zU1KQjbVnBSIiIiIlASXL8OsWcZ9G+ncrazZVPOb/WHCWD3jyWyqOSkQERERKQlWroRDh4ycIQ8+mO9mgQEmpvZuApAnGLE+ntq7iVfkEAEFIiIiIt7PYoEZM4z7I0YY2VQL4O3ZVHPS8l0RERFvt3EjdO0KwcFw5Ei+mVSvZs2sevJcmluzqTpy/nZK9V0RERFxIWtvSAHp3G0JDDB5VRZVWzQ0IyIi4s127YK1a4107mPGeLo1TqdARERExJvNnGn827evsWzXxygQERER8VaJibB0qXF//HjPtsVFFIiIiIh4q1degYwM+Mc/jJsPUiAiIiLijU6dupLOffJkz7bFhRSIiIiIeKNZs+DiRWjTBqKjPd0al1EgIiIi4m3OnIE33jDuT55srJjxUQpEREREvM3rrxuVdq+/Hu64w9OtcSkFIiIiIt4kNRVmzzbuT56cb3E7X+Hbn05ERKSkeeMNOHsWGjWCfv083RqXUyAiIiLiLc6fv5LA7JlnIDDQs+1xAwUiIiIi3uKttyA5GerWhXvv9XRr3EKBiIiIiDe4dOlKcbtJk6CUf9SlVSAiIiLiDRYuhBMnoFYteOABT7fGbRSIiIiIeFp6OkyfbtyfOBHKlPFse9xIgYiIiIinLV4Mx45BjRrw0EOebo1bKRARERHxpMxMeOkl4/5TT0FwsGfb42YKRERERDzp/ffh4EGoVg2GDvV0a9xOgYiIiIinZGXBf/5j3B83DsqV82x7PECBiIiIiKesWAH79kGlSjBsmKdb4xEKRERERDzBbIZ//9u4P2YMhIR4tj0eokBERETEEz7+GHbvhrAwGDnS063xGAUiIiIi7maxwIsvGvefeMIIRvyUAhERERF3++wz+OUXqFABRo3ydGs8SoGIiIiIO1ks8MILxv3HH4fKlT3bHg/zj4o6V8kyW9iWcIaT59KoFhJMu6hKBAaYPN0sERHxB199BT/+CGXLGkt2/ZzfBSKx8YlMW7ObxJS07OciwoKZ2rsJ0c0iPNgyERHxeTl7Qx591Ehi5uf8amgmNj6RYUt35ApCAJJS0hi2dAex8YkeapmIiPiFjRthyxYICoInn/R0a7yC3wQiWWYL09bsxmLjNetz09bsJstsawsREREnsK6UGTLEKHAn/hOIbEs4k6cnJCcLkJiSxraEM+5rlIiI+I/vv4cNG6B0aZgwwdOt8Rp+E4icPJd/EFKU7URERBxinRsyaBDUquXZtngRvwlEqoXYV1bZ3u1ERETs9uOPEBsLgYEwcaKnW+NV/GbVTLuoSkSEBZOUkmZznogJCA8zlvKKiIh/c3qaB+vckPvug7p1ndNIH1HkHpGYmBjatm1LSEgI1apVo2/fvuzduzfXNmlpaQwfPpzKlStToUIF+vXrx4kTJ4rd6KIIDDAxtXcTwAg6crI+ntq7ifKJiIj4udj4RDpP38CABVsZtXwnAxZspfP0DUVfWfnLL/Dpp2AywdNPO7exPqDIgcimTZsYPnw4W7duZd26dWRmZnLrrbdy4cKF7G3GjBnDmjVr+Oijj9i0aRPHjx/nrrvuckrDiyK6WQTzBrYmPCz38Et4WDDzBrZWHhERET/nkjQP1gq7d98NjRo5oZW+xWSxWJyyXvXUqVNUq1aNTZs2cdNNN5GSkkLVqlVZtmwZ/fv3B2DPnj00btyYuLg4OnTokGcf6enppKenZz9OTU0lMjKSlJQUQkNDndFMQJlVRUQkryyzhc7TN+S7wtI6hP/dhFvsP2fs3AmtWhn3f/0Vrr/eKW31dqmpqYSFhdl1/nbaZNWUlBQAKlUy5lhs376dzMxMunfvnr1No0aNqFWrFnFxcTb3ERMTQ1hYWPYtMjLSWc3LJTDARMe6lenTsiYd61ZWECIiIq5J8/DMM8a/997rN0GIo5wSiJjNZkaPHk2nTp1o1qwZAElJSZQpU4aKFSvm2rZ69eokJSXZ3M+kSZNISUnJvh05csQZzRMRESmU09M8fPcdrF1rrJR5/vlitMy3OWXVzPDhw4mPj+e7774r1n6CgoIICgpyRpNcTsM7IiK+xalpHiwWmDTJuD9kCNSvX4yW+bZiByIjRozgs88+Y/PmzVx77bXZz4eHh5ORkcHZs2dz9YqcOHGC8PDw4h62eC5fhiVLoG1baN7c4bercJ6IiO9xapqH2FijRyQoCJ591tlN9SlFHpqxWCyMGDGCVatWsWHDBqKionK93qZNG0qXLs369euzn9u7dy+HDx+mY8eORW+xMzz1FDz8cJGWUalwnoiIb3Jamgez+cr5ZcQIqFnTqe30NUVeNfP444+zbNkyVq9eTcOGDbOfDwsLo2zZsgAMGzaMtWvXsnjxYkJDQxk5ciQA33//vV3HcGTWrUP27zeWUGVlGRFrp052vc0lM6pFRMSrFLvXe8UKY3JqSAhZ+w+w7VyA3w3jO3L+LnIgYjLZ/iLfeecdBg8eDBgJzcaNG8cHH3xAeno6PXv25M0337R7aMZlgQjAI4/AggXQpQt8842RaKYQcQeSGbBga6HbfTC0Ax3rVnZGK0VExAOKPA8wMxOaNoV9+9j3+HgevDbaL4fx3RKIuINLA5EjR4zJQ+np8NVX0KNHoW9ZvfMYo5bvLHS72fe2pE9LdcWJiPidBQvgkUdIr1SZNg/O43xQuVwvW0MZX0+i6ZE8IiVOZCQMG2bcf/ppY4ZzIVQ4T0RE8pWWBtOmATCv4915ghAgexLstDW7yTJ7bT+AW/lvIALG0qry5eGnn2D16kI3t86ozq9zzoTR7abCeSIifujNN+HYMdIjajKvUf697EVKjObD/DsQqVYNRo827k+ebExeLYAK54mIiE2pqfCf/wCwe+ho0kuVKfQtdidG83H+HYgAjB8PFSvCrl3wwQeFbq7CeSIiksfMmZCcDA0bknbfA3a9RcP4Bv+drJrTSy8ZwzTXXQd79kDp0oW+RZlVRUQEgNOnISoKzp+HDz8kq19/Ok/fUGhiNF9O9aDJqo4aORKqV4c//4RFi+x6iwrniYgIADExRhDSqhX066dhfAcpEAFjwqq1QuILL8ClS55tj4iIuESW2ULcgWRW7zxG3IHk4q9cOXIE5s417v/nPxBgnFY1jG8/Dc1YpadDgwZw+DC8+iqMHeva44mIiFu5pE7Y0KGwcCHcdBNs3JgnOaa/DuMroVlRLVpkVEmsUsUYpgkJcf0xRUTE5ax1wq4+4RUrwdgff0CTJsaKyy1b4B//cEZTfYLmiBTVgw8avSKnT8OsWZ5ujYiIOEGW2cK0NbttThwtVoKxZ581gpBevRSEFIMCkZxKlTLmiAC88ooRkIiISIm2LeFMvsVKoYgJxn7+2ShuB/Dii8VroJ9TIHK1/v2Nmc/nzsG//+3p1oiISDHZmzjMoQRj1gUOAwZAixZFaJVYKRC5WkAATJ9u3H/zTTh0yLPtERGRYnF6nbBvv4UvvjB60Z9/vhgtE1AgYluPHtCtG2RkGGOAIiJSYjm1TpjFYiTABGNxQ716zmqm31Igkp+XXjL+fe89+PVXz7ZFRESKzKkJxr74wlghExwMU6Y4tZ3+SoFIfm64Ae6+24h+n37a060REZFicEqCMbP5yvlgxAioWdMFLfU/yiNSkH37jDXily/Dpk1GwhoRESmxipVgbPlyY3JqaKiRa6pyZdc2tgRTHhFnqV/fyJoH8NRTRu+IiIiUWEWuE5aZeWUoZvx4BSFOpECkEFmTp5BVrjz88AN/zFlU/LoEIiJS8ixeDPv3Q9WqMHq0p1vjUxSIFCA2PpHOS3Yzu3VfAIKmTqbrv2OJjU/0bMNERMR9Ll2CadOM+08/rfIfTqZAJB/WugSJKWksbNuXk+WvofbZJLpvXMWwpTsUjIiI+Is334RjxyAyEh57zNOt8TkKRK6SZbawZd9pJv7vt+waBBfLlGVm5/sBGPn9ckLSzhetLoGIiJQsKSkQE2Pcf+45Y9muOJUCkRxi4xPpPH0D9//3B85eysz12kfNe/BH5Vpck3aOx+M+tKsuQZbZQtyBZFbvPEbcgWQFLiIiJU1MDCQnQ6NGRmFUcbpSnm6At8ivRLRVVkAgMV0f4p2V03ho+xrea92rwLoEsfGJTFuzO1ehpYiwYKb2buJ4qWkRESlUsZbm2nLoEJbXXsMEbB02EcuhlOLvU/JQIELBJaJz+ua6G/i+VnP+cfhXxm9+l2rj77C5XX5BTVJKGsOW7rA/eY6IiNjFFRd/x0aMo2Z6OnG1rmfAscqwYKsuKF1AQzMUXiI6m8nEf7r+C4A7d2+k3ZmEPJsUFNRYn9P8EhER58m5uCAn68VfURYXfP/hl9T87H8A/LvrEDCZir1PsU2BCI6Vft4VXo9PmtwMQOCEvEnOCgtqLGDX/BIRESmcKy7+srLMlJ3wFACfNOlCfPiVwna6oHQ+BSI4UPoZoy5BxVkvQ5ky8M03sHZtrtftDWocCX5ERMQ2V1z87Z//Lq0O/sqlUkFM7zLYKfuU/CkQofAS0QAVy5bm/Yfb892EW7j51rbwxBPGC08+aaT+/Zu9QY0jwY+IiNjm9Iu/tDSujZkKwNvt7iIxtGrx9ykFUiBC4SWiTcBL/a6nU70qV2ZLP/MMVKkCv/8Ob72VvX1hQY0JYwJVu6hKTv4UIiL+x+kXf7NnU/7YYZIqVGJ++37O2acUSIHI3xwuEV2xIjz/vHF/6lT46y+g8KAGYGrvJlr+JSLiBE69+EtKgn//G4C3bhtKWhnbgYYuKJ3LZLF4b0lZR8oIO4tD69AvX4aWLWHXLqMI0qxZ2S8pj4iIiHtYV80AuSatWv9y250yYehQWLgQ2rYlduEqhi3bWfx9+ilHzt8KRIpr3Tq49VYoVQri46Fhw+yXnJ5cR0REbCr2xd/OndC6tbEScssW+Mc/dEFZDApE3K13b/jsM+jVC9as8XRrRET8UpEv/iwW6NoVNm2Ce++FDz4o/j79nAIRd9u7F5o1M4ZqvvoKevTwdItERMReq1bBXXcZBe327IHatT3dohLPkfO3Jqs6Q8OGMHy4cX/sWCMgERER75eeDuPHG/fHj1cQ4gEKRJzl2WehUiVjnsjChZ5ujYiI2OP11+HPPyEiAiZM8HRr/JICEWepVAmmTTPuT5kCKSmebY+IiBTsxAl44QXjfkwMVKjg2fb4KQUizvToo9CoEZw+DS++6OnWiIhIQZ59Fs6dgzZt4IEHPN0av6VAxJlKl4aZM437s2fD/v2ebY+IiNj2yy9XhtFfew0CdDr0lCJ/85s3b6Z3797UqFEDk8nEJ598kuv1wYMHYzKZct2io6OL216vl9Uzmr9u6gaZmZx5dISqM4qIeBuLBcaMAbMZ7r4bOnf2dIv8WpEDkQsXLtCiRQvmzp2b7zbR0dEkJiZm3z7IsTbbF8XGJ9J5+gb6N+hPZkAglTZ8yfghLxEbn+jppomIiNWnnxrV04OCYPp0T7fG75Uq6htvu+02brvttgK3CQoKIjw8vKiHKFGsKYYtAJUjWdymN0N//IQRn77JbVUa8/qg9srEJyLiaTmX644dC3XqeLQ54uI5Ihs3bqRatWo0bNiQYcOGkZycXOD26enppKam5rqVBFlmC9PW7M5Vj+D1TgM4Va4idc8cZdD2NUxbs1vDNCIinvbaa8b8verVYdIkT7dGcGEgEh0dzbvvvsv69euZPn06mzZt4rbbbiMrKyvf98TExBAWFpZ9i4yMdFXznGpbwplctQgAzgWV5+UugwB4YssHZB09xraEM55onoiIX8oyW4g7kMzqnceIO5BM1pGjV5brvvwyhIR4toECOCnFu8lkYtWqVfTt2zffbf7880/q1q3L119/Tbdu3Wxuk56eTnp6evbj1NRUIiMjvT7F++qdxxi1fGee500WMx+/9yStEveyunEXWPY+fVrWdH8DRUT8jK2CdW/FzqTnLxugY0f47jutlHEhr0zxft1111GlShX2F7CkNSgoiNDQ0Fy3kqBaSLDN5y2mACbfOowsUwB9ft9Evd+2ubllIiL+xzpnL2cQ0vZIPD1/2YAZE9+PmqogxIu47X/i6NGjJCcnExHhexM220VVIiIsGFv1GHeF12Npq9sBaPLvSZCR4d7GiYj4EVtz9gLNWTy/bj4AK1rcyrg/S2nOnhcpciBy/vx5du7cyc6dOwFISEhg586dHD58mPPnz/Pkk0+ydetWDh48yPr16+nTpw/16tWjZ8+ezmq71wgMMDG1dxOAPMGICXj1xoGkV66Kae9eePVVt7dPRMRf2JqzN/DntTQ+dZC/gkN4+aYHSUxJ05w9L1LkQOSnn36iVatWtGrVCoCxY8fSqlUrnn32WQIDA/n111+54447aNCgAUOGDKFNmzZ8++23BAUFOa3x3iS6WQTzBrYmPCz3ME14WDAvP3wTQa/9nXH1hRfg0CEPtFBExPedPJc7CKly4S/GfbsUgFdueoC/yoXZ3E48p8h5RG6++WYKmuf65ZdfFnXXJVZ0swh6NAlnW8IZTp5Lo1pIMO2iKhEYYIKm9xvphDdtglGj4KpMtCIiUnxXz9mbuHExoekX+K16XT5o0TPf7cRzihyIiG2BASY61q2c9wWTCebOhZYtYfVq+Owz6NXL7e0TEfFmWWZL9sVclfJBYILT59NzX9gVwDpnLykljRuOxNM/fj0Az/YYhjkgEBNGT3W7qEpu+DRiDwUi7tS0qVHfYMYMeOIJ6NYNypb1dKtERLyCrSW3OUWEBTO1d5PsLNU5g5acgcrU3k0YuWQbL3w1D4BlLXryc81G2XP4pvZuUmhAI+6jQMTdnn0WPvgAEhIgJgaef97TLRIR8bhcZTLykZSSxrClO5g3sDVAnqAlZ6Cyhp9pdPoQZ8qGZieXDL8qkBHv4JSEZq7iSEKUEuV//4P+/aFMGYiPh/r1Pd0iERGPyTJb6Dx9Q749ITmZgLBypUm5mJknaLH2cSzqEUHXvl3g/HkO/Oc14m/rb/fQjjiHVyY0kxzuuguio42cIiNGGCWpRUT8lK0lt/mxAGdtBCHW1wCyxoyF8+ehY0fqThhJn5Y16Vi3soIQL6VAxBNMJpgzxyhB/dVXsHKlp1skIuIxzlxK2zlhB91/24QlIADefFMZVEsA/Q95Sr16MHGicX/MGDh3zrPtERHxEGctpQ26nMHz64wJqn/e+5CxSlG8ngIRT5owAa67Do4d06RVEfFbBZXJcMTjcR8S9VciSRUqkfzkZKe0TVxPgYgnlS1rDNEAzJplTFwVEfFRWWYLcQeSWb3zGHEHkrPrvRRUJiMn62sVy5XOs13d00cYttUY5p59xwjaNK/t3MaLy2jVjDe46y5YtQpuvNHIvGqy/7ogv3X0IiLexFaOkKvzgtibRwRg2NIdwN8TVC0WVnwwifZH4llfty2Zqz4h+voaLv08UjBHzt8KRLzB4cPQuDFcvAhLlsCDD9r1Nnt+sUVEPC2/HCHWS6Z5A1vbTFJWUGbVnH///vnrOmZ8MZtLpYPZtmYTXXq2c9+HE5sUiJRE06fDxIlkVqrCuo+/4ZprIwrs3XDkF1tExFMKyxFiTbn+3YRbHO7NzTJb2LF9H81v7UDQ2b8wv/wyAU8+6YRWS3Epj0gJ9OWt95JQtRalz5wm5YlxDFiwlc7TNxAbn5hn2yyzhWlrdhe4jn7amt3Z468iIp5SWI4QC5CYksa2hDMO7zswwETbuf8h6Oxf0Lw5AaNHF72h4jEKRLxAbHwij62I58lbhwMw4NevaH/4t+x0xlcHI678xRYRcSZ7c4QUKZfI118bw9kmE7z1FpQu7fg+xOMUiHhYzt6Nn65tyrIW0QD858u5lLmcAeTt3XDpL7aIiBPZmyPE4VwiFy7A0KHG/ccfhw4dHGyZeAsFIh52de/GSzcP5mT5a6h75iiPx31os3fDZb/YIiJOVliOEBPGJPt2UZUc2/GUKXDwINSqZRQQlRJLgYiHXd1rkRpcgandHwVg2NaVNDx1MM92LvvFFhFxsoJyhFgfT+3dxLGJqlu3wmuvGfffegtCQorbTPEgBSIeZqvX4ouGnfiqfgfKmC8zY+1rBJqzcm3nkl9sEREXiW4WwbyBrQkPy/33Ljws2PEVfhkZ8PDDRrHQBx4wCog6IL+kauI5Wr7rYdalbUkpablWwVQ9f4avFw4jLP0Cc3s+zGNr384TWCiPiIiUJE5JwDhtGjz3HFStCr//DpUr233sNzbs550tCZy9lJn9vP5muobyiJQw1pwgQK5gpN9v63l17SyyygQR+MtOaNQoz3uVWVVE/EZ8PLRuDZmZsGIF3H23XW+LjU9k4se/cfZiZp7XlHvJNZRHpITJr9vy+063c6rzLQRmpMO//gVZWXneGxhgomPdyvRpWZOOdSsrCBGREs/m8ElWljEkk5kJd9wB//ynXfuKjU/ksaU7bAYhoNxL3qCUpxsghuhmEfRoEp63d+OBhtC0KcTFweuvw5gxnm6qiIjL5DfkvOjsFhr/8AOEhsKbb9pVk8uaHqEwOVcndqxr31CPOI96RLyIzd6NyEh45RVjg2eegf37PdtIEREXsQ5TX52wsfShg9Se9R/jwSuvQM2adu2vsOSPV1PuJc9QIFISDB0K3brBpUtG16TZ7OkWiYg4VZbZwnOf2ihdYbHwn9g5lMtM56frWpL1ryF279PRwEK5lzxDgYiXKHBJmckECxZA+fKwaRPMn++5hoqIuMAbG/aRlJo3cPjnb+vofOgX0kqVYVz3x9l28C+79+lIYKHcS56jOSJewK5luFFR8NJLMHIkPPUU3H471KmT7z61mkZESorY+ERmfb0vz/NVz59h8ob/AvBq54EcuqaGQ70c1uSPV6dHuJoJ5V7yJPWIeFh+Y6I2C949/jjceKNRY+GRR4yEPvnss/P0DQxYsJVRy3cWWMlXRMST8p1QarHwny/nEpZ+gV/D67GobR/AsV6OgpI/Wl1TrrSW7nqYAhEPylnw7mo2l5QFBMB//wvBwbBuHSxalOd9DgU2IiIelt+E0r67N9Jj/w9kBJTiydtHkxUQWKThk/zSI1QsW5ox3evz0+QeCkI8TEMzHlTYjG6bS8rq14cXX4Tx42HsWOjZE669Fig8sDFhBDY9moSrC1JEvIKtoZZq55J57uu3AHi9073srVoHKPrwSb7pEfR30CuoR8SD7B3rTEq5lPuJ0aOhfXtITYVHH80eonEksBER8QZ5hlosFmK+fIOKaef5Nbwe89v3B2BM9wbF6rlQ8kfvpUDEg+wd63zh899zD6kEBhrDMmXKwNq18N57gP2BjdbKi4i3uLqa+D9/+5puB34kPbAU424fw+XAUoSHBjHilnoebae4jgIRD7r6FzA/f13IyDu/o0kTzFOnApA5fCTbv/uNKhWC7Dqu1sqLiLfIOaG0ZupJpqxfAMCszgPZX7U2JuC5O5qqB8OHKRDxoJy/gAWxNXE1Nj6Rm8w3sDOiAaXPp3LhgUGMW/EzFcuVzjewMaG18iLifaKbRTDvvpbM/nIOoRkX2V6jEW+3u5NrypfmX53qEFa2jOrA+DAFIh5mndFdqXzpArfLOb/DujLm6PlMxv3fGNJKleGmgz/TY9Mqzl7MzJ6YmpP1sdbKi4g3it74P27482eyypYj7tlXqRhSljMXMvnvloNKQeDjFIh4gehmEUzp1dSubZNSLuVaGXOgciQvdRkMwNPfLKJu8lEqlitN9dDcwy/hYcFaKy8iHmcri3TW73swPzUBgM0PP8mrCRbOXMjI9T6lIPBdWr7rJcJD7Zu3ceZCRp6VMUva9KLb/m3ceGgnr37+Kv3vn8HcRzoREGDSUjUR8Rq2skhXCTKxZOEYmqansblOKx4qe4PN9yoFge9Sj4iXKGziqnV+RyUbE1ItpgDG/99ozgZXoGXiPkbEreD0hfRcS9WA/GvZiIi4WH7JFh9c9y5Nj//B2eAKPHn7KKO2Vj6UgsA3KRDxEgWlIs45vyO/npMTIVWYfOvjAIz4fgXXHdiV/ZpSvouIJ+WXbLH10d8ZvvUjAJ7uOYITIVXs2p9SEPgWBSJeJL9UxDnndxTUc/JZ45v4pEkXSlnMNJs4HC5cUMp3EfG4rX8m5/kbVD79IrM+f5VAi5n/Ne3K2kad7d6fUhD4FpPFkk/lNC+QmppKWFgYKSkphIaGero5blNY5VxrcAHkusIwAaFp59m6fAxlTyRifuQROtW5O99sqyaMIOe7CbdovFVEXCI2PpGJ//uNs5cycz0/fe1s7vltHUdDq3Hbv+ZwLqh8ofvS36ySw5Hzt3pEvFBhqYgL6jmZ/vBNlF22FICAt9+myfZN+R7HFeOttmbEi4h/sl40XR2E9Pzje+75bR1mTIztNdbuIASUgsAXFXnVzObNm5kxYwbbt28nMTGRVatW0bdv3+zXLRYLU6dOZcGCBZw9e5ZOnToxb9486tev74x2+72CizhFwLhx8OqrvLx2NtH/eoNTFfJPYuas8VZbM+IjwoKZ2ruJlg2L+Jn85oVUP3eal76YA8Bb7fuxLbKZXfsL198Sn1XkHpELFy7QokUL5s6da/P1l19+mddff5358+fzww8/UL58eXr27ElamiYZOUuBPSf//jcXGl9P5UupzPxsJiaLOd/9OGO8VXNRRCQnW0U4TRYzr34+i2vSzvFb9brMvPF+m++1/iUb070+s+9tyQdDO/DdhFsUhPioIveI3Hbbbdx22202X7NYLLz22mtMnjyZPn36APDuu+9SvXp1PvnkE+69916b70tPTyc9PT37cWpqalGbJ0FBBK9cwaWWrbnx0E6GblvF2+375drEOt5a3JTv+V35gNb+i/grWz2tj2z7mM6HfuFi6SBG9X6SzMDSlCsTSJlSAZy9eGX4Rr0f/sUlCc0SEhJISkqie/fu2c+FhYXRvn174uLi8g1EYmJimDZtmiua5JcCmzTmwDMv0Oy5J3ly87vE1WrObxHG0Jgzx1ttXfnklHMuijWniYj4tqt7Wpsn/sH4zUal8GndHuHPytcCsOCBG+hQt3KBE/TFt7lksmpSUhIA1atXz/V89erVs1+zZdKkSaSkpGTfjhw54orm+ZVmz44jqUcvSpuzeH3Ny5RPvwg4N+W7vXNMtPZfxH/kTDVQIf0ir386g9LmLD5v2IkVzW/NTtLY4e9h5YIm6Itv86oU70FBQQQF2VfKXuxkMhG+4l0sLVsSdfgwXxz4iGOz5jn1isPeOSZa+y/iP6xJGoe9t52Y2DnUOZvI0dCqTIoeienv7KlaASPgoh6R8PBwAE6cOJHr+RMnTmS/Jm50zTWYli6FgABqrfmIjnFfOPWX39709MWdiyIiJUt0swjWlN1D7z3fctkUwBN3PEVqcAUV4ZRcXBKIREVFER4ezvr167OfS01N5YcffqBjx46uOKQU5sYb4dlnjfuPPQZ79mS/VNzcH/amp9eVj4if+e03mk2fAsCxJyczaNwArYCRPIo8NHP+/Hn279+f/TghIYGdO3dSqVIlatWqxejRo3nxxRepX78+UVFRTJkyhRo1auTKNSJuNnkybNoE33wDd98NP/xA7IGzTsn9YU2ydvW+NPtdxE9duGD8nUlLg+hoasdMpXaAcmhKXkVO8b5x40a6du2a5/lBgwaxePHi7IRmb7/9NmfPnqVz5868+eabNGjQwO5j+GuKd5dKSoKWLeHECY70u5+b6g3Is+zW2m9RlK7TwtLTi0jxlJjfsYcegsWLoUYN2LkTqlb1dIvEjRw5f6vWjD9avx5Ljx6YLBZG9RrH6qZ5A0rVdBDxPiUme/G778KgQRAQABs2QJcunm6RuJlqzUjBunXj6PBxAPzny7lcl3w0zybW3B+LtySoboyIFygx2Yv37oXHHzfuT52qIEQKpR4RP3F1d27SXxcI79eLjod/4/eqdej7wKukly546bRXXnmJ+IEss4XO0zd4fyXtixehY0f49Vfo2hXWrYPAQM+1RzzGkfO3V+UREdew1Z1bqXxpAns/ydp3nqDxqYNMXf82T0ePLHA/1isvLbsTca8Skb3YYoFHHjGCkGrV4P33FYSIXTQ04+Py6849cyGTUxUqMabXOMyYuO+XL7kzfkOB+7J2nU1bs1vDNCJuVCKyF7/xxpXg48MPIUIXK2IfBSI+rKBidFbfRbVizj+M2j//+XIujU4mFLjPnFdeIuIeXp+9+LvvYOxY4/6MGZoXIg5RIOLDCuvOtXrv1gfZXKcVZS+nM++T/xCadr7Q96hujIj7eHX24uPH4Z//hMuX4d57YfRo97dBSjQFIj7M3mDhmd7NKPvhci6G1yTqr0ReWfsaJou5wPeoboyI+3ht9uKMDCMISUqCZs1g4UIwabm/OEaBiA+zN1gIDytL27YNKLfmEyxlynDrvq0M27rS5raqGyPiGdbsxeFhuX+vPVq3ZexY+P57CAuDVaugfHn3t0FKPK2a8WHW7tyklDSb80SsS/6yg4obbsA0dy4MHcq4b5fyW3h9vo1qlWt7UN0YEU+JbhZBjybh3pFZ9d13Ye5c4/7SpVCvnvvbID5BPSI+rEjduQ8/DEOGEGgx88aal7n2bFL2S6qYKeJ5gQEmOtatTJ+WNelYt7JngpCff4ZHHzXuT50KvXq5vw3iM5TQzA84nBY6LQ1uugl+/JELjZvxzX9XUbnaNd5b00JE3Cc5GW64AQ4ehNtvhzVrjFTuIjmo1ozk4XChrCNHoE0bOHUK7rvP6HrVJDQR/5aVZQQfX30FdevCjz/CNdd4ulXihZRZVfKwdufaLTISPvoIunWDZcugaVN4+mnXNfAqJabCqIg/mTrVCELKloWPP1YQIk6hQERyyRUAXNuM9rNfJ2DEcHjmGWjUCO66y+VtKDEVRkX8ySefwL//bdxfuBCaN/doc8R3aGhGsuUXACyPX0btZYugXDn49lto3dqlbRi2dEeeVT7WvhBNlhVxDod6HffsgXbt4Nw5I2HZrFlubauUPJojIg4rKAAINGcR9/0sqm7ZCDVqGOPCNWo4vQ0lpsKoSAnnUK/j6dPQoQMcOGBMYv/6ayhd2s0tlpLGkfO3pjpLgTVpLEBWQCADuo3G0rixkc65Tx+j3LeTOVJhVESKJr9CmNbq2rHxiVeeTE83hmMPHICoKFi5UkGIOJ0CER+UZbYQdyCZ1TuPEXcgudBKufYEAPvTS/HzG+9C5crw008weDCYzUU6Xn5KRIVRkRKssIsOyFFd22IxcoV8+y2EhsJnn0HVqu5srvgJTVb1MUWZ6Gnvif1IpQhar1plrKT56CNo1IjYu4c5bWKp11cYFSnhHOl17Pjh27BkCQQGGr/vTZq4r6HiV9Qj4kMc6nLNwaEA4MYb4e23jSdeeIEvnp7p8PHy49UVRkW8lCM9kvZedAR+vPLKcv05c+DWW53RVBGbFIj4CIe6XK/icAAweDDm8eMBeHntbFod2+PQ8fLjtRVGRbxUbHwinadvYMCCrYxavpMBC7bSefqGYl10NE/8gxumjDYejBoFw4Y5scUieSkQ8RHFmehZlADgh6FPsq5ee4KyMnl71YvUSD1p9/EK4pUVRkW8UFF6QAu76KiZepJFq14kID3NyKD66qsuaLlIbgpEfERxJ3o6GgCcvJjJqN7j2V0tiqoXzvLflc9TPj3vSpqiTCyNbhbBdxNu4YOhHZh9b0s+GNqB7ybcoiBE5G9F7QEt6KKjQvpFFq58nirnzsD118Py5cb8EBEX02RVH+GMiZ6OlBivFhLMxTJlebjfFFa/O5bGpw7y2mev8uidT2MOCMy1XVE4nJJexI84NOn0qt8j60VHzknmAeYs5sfOpPGpg1C9urFCJiTEhZ9A5AoFIj7C2uWalJJm8yrJmgyssIme9gYA1uMlUo1H7pzM8g8m0WP/DzzzzSJe6DbU7uOJiOO+3p1k13Zb9p+yeVGR66Ij9RLtXnueiD1bITgYVq+GWrVc2XyRXDQ04yPcPdEz5/F21mzE+NtHAzDkp9UM+fETpx9PRAyx8Yn8d8tBu7Z945sD+U5itV509Fm/nIh3FxhPvvsutG9f5LY5K6eQ+BelePcxjuYRKW6V25zHe+SH//H0xncA2DljPi3HP1r8DyQi2Qorg1AQ62/13PtacU35IE6eS6PxprU0GP2I8cLMmTBmTJHbpmKVkpNqzfg5e4MLZ/3hyD5e6iXazZpGxHsLoUwZiI2Frl2d8plEBOIOJDNgwdZi7SPABGYLdDz0C0s+nEoZ82UODhxKnffeLvI+VaxSrqZaM34uu8u1ZU061q2cbxBSlORnBR6v1bVEvDPfqE2RkcHlO/rwzYp16qItYdS97r2cUd7AbIGmJw7w9scvUsZ8mc8a3cgtNXo7nIDQqjg5jERAk1X9UmF/OEwYfzh6NAl3fI5HYCBfPf0KVXfsp9XBX2k65B76DZzB5dp11EVbAqh73bs5o7xB1JljLPnwWUIyLhFX63rG/t9YLKaAIv/OF2cFjwioR8QvubLKbWx8Io9+tJtBfZ7m96p1qHbhL5aumIz56LEipX0X93FmL5m4RmEJyQoTkXqK91ZMpsrFFH6rXpdH7ppMRqnS2b/zs9b94XAvmIpVSnEpEPFDrvrDkbOnJTW4Ag/e/TwHK0ZQ+2wS762YQsVLqeqi9VLqXi8Z7FkdV7FcaZuBSqWLKby3YgrXpp7iQKVrGXT385wLKp9rmze+2V9omvirqVilFJcCET/kqj8cV/e0nKpQiYH3vkhihco0SD7M4g+ncu7kmXx7Wjw5N8Hf50W4spdMnKugLMjzB7bmpbuuB3IHKhXSL7L4o6nUO3OUYyFVeeCe5zlTLizfYzjSC6ZilVJcmiPih5yV/OxqtnpQjoZVZ+A9L/Lhsgm0SNrHf//3PCfvaQVXjRXHxify3Ke7SUq9so/w0GCeu8P1cxM0L0Ld6yVNYVmQc2ZODcpMZ+H/nqd50n6Sy4bywD0vcDy0WoH7d2SumLWXZtjSHZgg198UFasUe6hHxA+5KvlZfj0oB6pE8uDdz5Naphztj8TTedIwyMjIfj02PpHHlu7IFYQAJKWm8ZiL5yZoXoRB3eslT0Gr46z1mpYPbsPGn+bT4Ug8meUrMOju50mofK1d+3ekF0zFKqU4FIj4KVf84Sioi3ZXeD0e7v8saaWDuGbj1/DAA5CVRZbZwsSPfytwv5M+/s0lQyWaF3GFutd9UFYWdSeMIGLzOsxBwQR89hkjxt+d53e+MPb2gqlYpRSVhmb8mCNF7uxRWBftj5HNiH99ETc8MRg+/BBCQ9n61H84ezGzwP3+dTGTrX8m06lelSK1Kz9adniFutd9S+wvRzE/9C9u/3kdmQGBPNrrKX6Pu8zU3vDdhFvYlnCGLftP8cY3BwrdlyO9YCpWKUWhHhE/Z0/yM0cU1tNyw2P3wfvvQ0AALFxI+bGjwI7kvnEHkovVLls0LyI3da/7hthfj5H6wEPc/vM6LpsCeKL3k2yo1y57uHHd7iQ61q3MmB4N7e4F8/fJ3OJa6hERpyu0p+Wf/4SLF+Ghh2j52Qc8fyyVZ3s8BqaCgiDn/+HTvIi8nN1LJu6VdTmL9CFDufu3r8kyBTC693i+aNQZyD0B9ZZG1dl+6C9uaxbOoi0HC+wFW7c7ye8nc4trKRARlyi0i3bQILBYsPzrXzz48+dYTDC1e/7BSMfrnDssA65bPVTS+UP3enGLPXoli4VTgx6mz09fkGUKYEyvsXzW+Kbcm2AMN3aIWc+ZC1cmjJtMuTsmw/8ONACbNWSsvSvqKRNncGkg8txzzzFt2rRczzVs2JA9e/a48rBSUgwejCXLjGXowwza8TkWTDzX/dE8wUjFcqXp4IITo+ZF+CefXK5tscATTxC+bDFmTIz7vzF82uTmfDfPGYSAUX8GYEinOnRvEp4dfHeevsE1pSBEcnD5HJGmTZuSmJiYffvuu+9cfUgpQQKG/Itd017BjInBOz5j6vq388wZeemu6532h+7qse4eTcI1L8KP+ORybYsFxoyBN97AYjLx5O2j+aSp41WvTcDa+KTs3iEluRN3cfnQTKlSpQgPD3f1YaQEu37KWH4Drn92HA9tXwPAtG6PEB4WzHN3NHVaMFDQlbB1JYFPddVLLi4t9ugpZjM88QTMnQuA5e0FfH+qDqZ8hhsLcvUqMU3mFndxeY/Ivn37qFGjBtdddx33338/hw8fznfb9PR0UlNTc93EP1w/ZSzmtxcA8ND2Nfxw+CO2PNXVqUFIQVfC1pUEzlo9JN7H567wzWZ47DEjCDGZYMECAh4ekm+yQntZAwtN5hZ3cWkg0r59exYvXkxsbCzz5s0jISGBG2+8kXPnztncPiYmhrCwsOxbZGSkK5snXiZg6MOwaBGYTFRf/i6B/3oILl8u9n6VuEzAx5ZrX75sTPhesMBYCr94MTz8MJD/MuxK5UvbtWtrYKEkd+IuJovFjiQOTnL27Flq167NzJkzGTJkSJ7X09PTSU9Pz36cmppKZGQkKSkphIaGuquZ4mkffJCdeZX+/eG99yC46FddcQeSGbBga+GHHdrBp1aL+OTKkGLwmZ+DS5fgvvvgk08gMBCWLoV7782z2dX//21qX0OXGd8Uukrsuwm3ZP+cWHsSwfZkbs2jkvykpqYSFhZm1/nbrct3K1asSIMGDdi/f7/N14OCgggKCnJnk8QbDRgAZcvCPffAypVw/DisWgXVCi7UlR+fuhK2k0+uDCkmn1iuffYs9OkDmzdDUBCsWGE8tsHWMmxHV4lZe1eu/lkK9/OfJXEut2ZWPX/+PAcOHCAiQj+8Uoi+fWHtWqhYEb7/Htq1g/j4Iu3K38a6fXJliBO4qtij2yQmQpcuRhASGgpffplvEJKfomTPVQ0ZcTWXDs2MHz+e3r17U7t2bY4fP87UqVPZuXMnu3fvpmrVqoW+35GuHfFRe/dCr16wfz+EhMDy5XD77Q7tIstsofP0DQ51SZdU1s+a36RMX/qsRVUie4v27YOePSEhAapXh9hYaNmyyLvTsJ24mtcMzRw9epQBAwaQnJxM1apV6dy5M1u3brUrCBEBoGFD2LrVmCuycSP07g2vvgqjRhWSEv4Kf0pcpkJ+hStxaex37IDoaDh1CurWha++guuuK9Yu/SF7rpQcLg1Eli9f7srdi7+oXNnohh4+HBYuNJI3/f47vPEGlLZvJYC/jHX743yYoigxJ+ING4xhynPnoFUr+OILo0dExIeo1oyUDGXKwNtvQ+PGMH68cX//fvjoI6hk3+TCEnclXAT+Nh/Gp61cCfffDxkZ0LWrsUpGQ9TigxSIiNsVeXzaZIKxY6F+fWP54oYN0KEDfPYZNGhg17FLzJVwEfnEyhCBefOMHkCLBfr1M5boFmMJu4g3UyAibuWUiYK9e8OWLca/+/YZwcjKlXDLLQ61xRcn7PnTfBhn8pqfhawsmDDBmAcFRubUN94w8oWI+Ci3JjRzlFbN+BbrstKrf+CKnBzpxAlj/HzrVihVCt58E4YOtbstJW7lhAN8/fM5k9d8VxcuGEMxq1cbj59/HiZPtntStog3ceT8rUBE3MJly0rT0uBf/zKysYIxkXXGjAKvIJ0eEHkpr7nK92Je87Nw7BjccYexQiYoyEjZbiNbqkhJ4cj5260JzcR/uazgWHAwvP++cfUIMGuWkeQpn4KJ/lR3xjofRoX8bPOan4UdO6B9e+PfqlXhm28UhIhfUSAibuHSZaUmE0yZYqS7Dg6Gzz+HTp3g4ME8m/pcBVYpMq/4WVixAjp3NnpEGjeGH36Ajh3temuW2cKWfad55cs9vPLlXrbsP+0TAbT4H01WFbdwy7LSu++GqCijizs+3rjKXLUK/vGP7E2UZ0OsPPqzkJpqrAD773+Nx7ffDsuWQViYXW+PjU9k4se/cfZiZvZzb3yzn4rlSvPSXdf7xNCi+A/1iIhbuK2keNu28OOPRvrrkyeN/Avvv5/9svJsiJXHfhbWr4frrzeCEJMJJk6ETz91KAh5bOmOXEGI1dmLmTzmx/WEpGRSICJu4daCY9deC999Z6yoyciAgQONoRuz2X0BkXg9t/8snD8Pjz8O3bvD4cNGmvZNmyAmxu7luVlmC899uqvQ7XxlnpP4BwUi4jZFqfxZZOXLw//+Z1xtArz4ItxzD4Fpl0p2BVZxGrcGx5s3Q4sWRqIyMAKSX36BG290aDfbEs6QlJpe6Haa5yQlieaIiFu5Nc16QIBxtdmwITzyiJH07OBBolev9ou6M1I4l9cgungRnnkGZs82sqTWqgWLFkG3bkXanSPzVTTPSUoKBSLidm5Psz54sFG19M474aefoF07oj/9lB4TblGeDXFdcBwXZ/zs/fGH8fjhh42MqcXIieTIfBXNc5KSQoGI+Icbb4Rt26BXL6Ny7403EjhnDh0fekiZK8W5wXFaGkydCq+8AmYz1KhhVI2+7bZcm+WXcK6gRHTtoioRHhpU6PCM5jlJSaJARPzHddcZV6n33guxsTBkiPHvW2/BNdd4unU+we+zuf70EwwaBLt3G48ffBBeey3Pz1d+aeXvaBHBp78k5ptuPjDAxHN3NOWxpTsKbIbmOUlJohTv4n/MZuNq9Zln4PJliIyE996DLl083bISzWtqtnhCRga88IIxJykrC6pXh7ffNnLaXCW/tPL5sZVu3lYeEYBrypUmRnlExAuo1oyIPX78Ee67D/bvN4Znxo41Vtd4oNx6Se9J8JqaLZ7wyy9GL8gvvxiP773XqJhbOe9QT2E1l/JjqxZTltnC1gPJxP15GjCGljpcp1T+4h0UiIjY69w5IwBZuNB43LSpUXDshhvc1gRX9CS4M7BxWUFDb5eZCS+9ZNQ5unwZqlQxluf275/vW+IOJDNgwdYiH/KDoR3cO9FbpIgcOX9rjoj4t5AQWLAAeveGoUNh1y7o0AGefNKYcOji3pH8ehKSUtIYtnRHkXoS3D1E4kjNFp85ie7aZfSCbN9uPL7zTpg/H6pVK/BtxV1SqyW54ouU0EwEjLH8XbuMbvWsLONKt3VrowiZi7ii+qs1sLk6MLAGNq5I/e1X9XuysuDll42fje3bjUmo779vJM8rJAiB4i+p1ZJc8UUKRESsqlSBDz64clL5/XejEurIkZCS4vTDObv6q6fK2pfk+j1ZZgtxB5JZvfMYcQeSC/5u9u41KuVOmGBMTv2//zOKK953n91LwAtLK58flR4QX6ZARORqd91lLL984AEjG+Ybbxgl2j/80HjsJM7uSfBUWfuSWr8nNj6RztM3MGDBVkYt38mABVvpPH1D3l4js9lYgtuyJWzdaiQkW7QI1qwxcoQ4oKC08vlR6QHxdQpERGypXBnefRfWrYP69SExEe65B6KjYd8+pxzC2T0JnhoicWvNFiexewjrwAG4+WYYM8ZIVHbrrUYvSDES4eVXc8nq6q/JJbWYRLyIAhGRgnTvDr/+Cs89B2XKwFdfGStrxo2Ds2eLtWtn9yR4cojErQUNi8meIaznV8djnjsXmjeHb781iijOn28kwIuMLHYboptFMOX/mth8zTo6NKRTHT4Y2oHvJtziVd+fiLNp+a6IvfbtgyeeME5GYPSaPP+8UVCvVNEWoFmvzIFcJ8ai5N+wLqNNSkmzeZJ1xzLakpAPpbAltDVTTjL9i9l0PvR3XpCbbzaGYqKinNYGv13yLH7DkfO3ekRE7FW/PnzxhXFr3BiSk2H4cKO8uzU4cZAzexK8YYjEWrOlT8uadKzrncm18h2asli455cviV00nM6HfuFycDC8/jqsX+/UIAQ8N59HxBspj4iIo6KjjSGbt94yco3s3m0UNOvRAyZPNgrsOTB/oCjVX/PreXB5WXsfUKVCUJ7nmibtZ9LGd7J7QX6q2ZjAJYtp1a2dS9rgV0ueRQqhQESkKEqVMnpD7rvPqDEyZ44xsXXdOvjHP+Dpp+H22+0OSByp/lpYwjKXlbX3AbHxiTz36a7sx/VPHWL0lmX8394tAKQHluaVmx5gbbd72Ny1rcvaUZKXPIs4m+aIiOTDofkOf/5pJLp65x0jxwQYEx0nTYJ//hMCA53SJnfUdCkJ8zyKIud3V+/0YZ74fjm9fv+WACyYMfFJ05t5rfP9HKkY7vIJtmt/Pc6ID34mv7QlmiMiJZ1qzYgUkyNp0nOeuGte/IvWHy8m4K234Px5Y4O6dY0kWA8+CEF5hwXs5Y4Jjr5aQTfLbKHzS+upvudXhm77mNv2fk/A3+Hc2gb/4LXO9/FH1Tpu+az2VN814eOFAsXnKRARKQZHeh3yO3G/eFME3Tb8D2bPNia1gpH8atw4Y5VNhQoOt8vegmlFLYzmsxV09+3jyBsLyVj6PnXPHMt++sv6HZjd6T52V78u+7n3h7SnU/0qLmuKPdV3A0zwxoDW3N68BH7XIn/TqhmRInIkTXpBSbEeXpNA7J0Pw6FDMGsW1KwJx48bgUjt2jBtGpxxbEWEKyc4Fva5LcDE//3Glv2nnZ4i3iVOnDCCwHbtoEEDIl9/mbpnjnGpVBAfN+3Krf96g0fvmpwrCAE4fSHdpc0qbLUMGHlErilfxqXtEPEmCkREcrB3WeXWA8n2BSxly8Ho0UaGzoULjSXAZ84YCdJq1TICk/377WqbKyc42nOCPHspk/sX/mA7Dbo3OHfOyIbbs6fR+zR6NPz4IwQEcLZzV8b+3xhuGPEeY3uN44+qdWzuwtWTQ7VaRiQvBSIiOdh7Aoj787RjeSCCgmDIEKOQ3ooVRt2SCxdg5kwjOLnlFqPgXlr++3RlTRdHTnyFVfJ1qJBccWVkGDVf7r0XqleHQYOM7Ldms9EbMns2HD9OyKb1xHX6Py4GlbO5G3fVw9FqGZG8tHxXJAf7TwD2TQbNc4IPDIS77zZW0sTGGst+Y2Phm2+MW1iY8drAgUY+koAr1wrWhGXDlu7AhO1MrEVNWObIic/y9/GmrdlNjybhuY7nlsmuZjNs2QLvvw8ffZR7iKtBA7j/fhgwwAjw/hYILvvuHGENJgvLfuttBQJFXEk9IiI52NvrYO9k0HxP8CaTkQRt7Vo4eNBIjBYZCSkpxhDOzTeTfm0t9j/4GPEfriXrchbgupoujpant5X50+5CckUVH28sh46KgptuMhLKnTkD4eFXhmH27IFnn80VhFj1aBLO6O4NCCtbOtfz7qyH4w3Zb0W8jVbNiFwlv/ovVkM61eGWRtUZ99EvnEh1Yl0Xsxk2b+bInLe55vPVVEi/mP1ScoVruHBbL2oNuR9uvpms0mWcnuujsM9ty+x7W9KnZU3XLS0+fNgYslq2zCg+aBUSAv36GQnlbrml0DwttnpqKpYtzUOd6jDilvpuP/H76jJpESst3xUpJlsnigATuRJQVSxXmrMXM/Pt6i/KVbY1GChzOYOuB34k+o/vuWX/j4RmXAlKKFfOKMQWHQ1duhjVgJ2YMO3qz10Q61Jhpy4tPnMGVq40hl42b77yfOnSRrba+++HXr2gbFm72uity5J9NXGcCDh2/tYcEREbejQJJySoNHF/nubAqQt8EZ+UJwtmysVMAML+DkisilrXJecS2vRSZYht2InYhp0onZVJx0O/0nNfHLce+JGq55KNIZ21a403hoQYEzM7djRuHTpApaLNMbCmh996IJnhy3Zw9lKmze2unstQ5NUgFgskJsIvvxi377835sxk5jhuly5Gz0f//g5/rsKWJec318UdHEnrL+LLFIiIXMXeXgHriSy4VADvP9ye0+fTi3Vlm98S2szA0my+rg2br2vDMxYLq28MocXuH4y6Nlu3GstW1683blYNG14JTFq0MHKXVKuWa/JrfgIDTHSqX4WX+l1vc6jG1lwGeya7Bl3OoM7hP2DnOmOYxRp8WBO+5dS8+ZVJp5GRhe47P45UuVVQIOIZCkREcrAn/XZOFiApNZ0Ak4k+LWsW69h29SqYTBy8th4tenWBp56CrCxjEmdc3JXbvn2wd69xW7z4yntLlzbya1x7bf638HCjoB84VMn3rwvpBGAhOCONKhfOUv18MhHnTnNtykkanD5E45MJ1E0+SqlXzXk/U0CAETi1aGHcevWCZs2K+jXmorwdIt7P5YHI3LlzmTFjBklJSbRo0YI5c+bQrp1rSmuLFEdB3fiFccaJrEg5JgIDr5zAH3vMeO70aaOnJC4Otm2D3buN4Y/MTCPT66FD+e88IAAiIoxMsKGhRAcF0bNMEMnpWaRfNhMUGEDloABMmy8ZOU8uXeJc8llaJ53i90vnCMqyPZRjdTa4AlnXN6fyP9oavR4tWkCTJnbP93CU8naIeD+XBiIrVqxg7NixzJ8/n/bt2/Paa6/Rs2dP9u7dS7Vq1Vx5aBGH2ZNdND/OOJE5LcdElSpGr0KvXleey8yEpCQ4etT27dgx43b58pX7OY5bUPWVkL9vVpdKBXGywjUcD63K8ZAqHKgcye/Vovi9ahQnQioTXrGs26rKKm+HiPdzaSAyc+ZMhg4dykMPPQTA/Pnz+fzzz1m0aBETJ07Ms316ejrp6VdqPaSmprqyeSK5FKVXw5knMlcmLKN0aWOuRUHzLcxmOHnySmBy/rzR65GebgwBgZH/pHRpCA6GsmXZ81cG0zYe5lxQec6WDeGv4BAulClrbJcPd87JcOl3KiJO4bJAJCMjg+3btzNp0qTs5wICAujevTtxcXE23xMTE8O0adNc1SSRAjnaq+GKE5kj8zKcLiDAmCMSHg433GDXW/buPEZcwk6HD+XOORke/U5FpFAuC0ROnz5NVlYW1atXz/V89erV2bNnj833TJo0ibFjx2Y/Tk1NJbIYM+ZFHFFYN/7VXHUisy6h9fYcE1lmC6fPFa1arbvnZJSU71TEH3nVqpmgoCCCgoI83QzxU4V141uAMd3rU6dKeZefyLw9x4Sjic+sPDknw9u/UxF/5bJApEqVKgQGBnLixIlcz584cYLw8HBXHVakWNSNXzhHlzhbaU6GiNjiskCkTJkytGnThvXr19O3b18AzGYz69evZ8SIEa46rEixqRs/f44scb46Jb6CORGxxaVDM2PHjmXQoEHccMMNtGvXjtdee40LFy5kr6IR8VbqxrfN3iXOU/6vMQ90rMP2Q38pmBORArk0ELnnnns4deoUzz77LElJSbRs2ZLY2Ng8E1hFpGSwd7VLlZAgypQKUDAnIoVy+WTVESNGaChGxEfYu9rl4OmLhW8kIgIUXgFLRORv7aIqER5a+Mq25T8eJuvqcsUiIjYoEBEpIbLMFuIOJLN65zHiDiS7/USfZbawLeEMrWpVLHRba/ZUEZHCeFUeERGxzVbejgg3rkIpSt4QVbQVEXuoR0TEy1nzdlwdBCSlpDFs6Q5i4xM9cvzCOJo91dM9PiLiGeoREfEA6zBHYUtbC8rbYcFIEjZtzW56NAl3ydJYR/KGWBUle6qne3xExHMUiIi4mSMn3cLydlhwTTVba6C0Zf8ph3pCipI9Nb9MrdYen3kDWysYEfFhCkRE3MjRk6698yycOR+jqHVkwPHsqZ7u8RERz1MgIuImRTnp2jvPwlnVbItaR2ZE13p0qlfF4eypnurxERHvoUBExE0cOem2i6rEtoQzJKVcolL5Mvx1IcNmcODMarbFmQ8ypkeDIvVYuLPHx955OSLiXgpERNzE3pPput1JjP1wZ6FDI86uZmtvHRlnHt9dPT6aDCvivbR8V8RN7D2ZLtpy0K6AIDws2KkTOR3tdXDG8dtFVSIiLJj8whgTRsBQnB4fTy9/FpGCqUdExE2sJ92klLR8hz8CTFBQ+oxK5UszpVdTwkOdP7Rgb6BU1PkgtgQGmJjauwnDlu7ABLm+F2f0uGgyrIj3U4+IiJtYT7pAnh4A6+PCcniduZBJeGgwHetWdvqJ097eiTE9Gjj1+NHNIpg3sDXhYbkDIWf0uDgyL0dEPEM9IiJuZD3pXj1fITwsmNubhfPfLQcL3YerUqe7uneiINHNIujRJNzpk0k9sfxZRByjQETEzfI76W5LOGNXIOKspbr5tS2/QMnVEzsDA0xOX6Lr7uXPIuI4BSIiHmDrpFvYHBJnLtUtiKt6JzzBW75TEcmf5oiIeAl75pC4amjEVls61q1Mn5Y1XTIfxV286TsVEdsUiIh4EVdO3PRX+k5FvJvJYrF4ba3t1NRUwsLCSElJITQ01NPNEXEbZQF1Pn2nIu7jyPlbc0REvJArJm76O32nIt5JQzMiIiLiMQpERERExGMUiIiIiIjHKBARERERj1EgIiIiIh6jQEREREQ8RoGIiIiIeIwCEREREfEYJTQTkXwpG6mIuJoCERGxKTY+kWlrdpOYkpb9XERYMFN7N1F9FhFxGg3NiEgesfGJDFu6I1cQApCUksawpTuIjU/0UMtExNcoEBGRXLLMFqat2Y2tapjW56at2U2W2WvrZYpICaJARERy2ZZwJk9PSE4WIDEljW0JZ9zXKBHxWQpERCSXk+fyD0KKsp2ISEEUiIhILtVCgp26nYhIQRSIiEgu7aIqEREWTH6LdE0Yq2faRVVyZ7NExEcpEBGRXAIDTEzt3QQgTzBifTy1dxPlExERp1AgIiJ5RDeLYN7A1oSH5R5+CQ8LZt7A1sojIiJOo4RmImJTdLMIejQJV2ZVEXEpBSIikq/AABMd61b2dDNExIe5bGimTp06mEymXLeXXnrJVYcTERGREsilPSLPP/88Q4cOzX4cEhLiysOJiIhICePSQCQkJITw8HBXHkJERERKMJeumnnppZeoXLkyrVq1YsaMGVy+fLnA7dPT00lNTc11ExEREd/lsh6RJ554gtatW1OpUiW+//57Jk2aRGJiIjNnzsz3PTExMUybNs1VTRIREREvY7JYLHaX0Jw4cSLTp08vcJvff/+dRo0a5Xl+0aJFPProo5w/f56goCCb701PTyc9PT37cWpqKpGRkaSkpBAaGmpvM0VERMSDUlNTCQsLs+v87VAgcurUKZKTkwvc5rrrrqNMmTJ5nt+1axfNmjVjz549NGzY0K7jOfJBRERExDs4cv52aGimatWqVK1atUiN2rlzJwEBAVSrVq1I7xcRERHf45I5InFxcfzwww907dqVkJAQ4uLiGDNmDAMHDuSaa65xxSFFRESkBHJJIBIUFMTy5ct57rnnSE9PJyoqijFjxjB27FiH9mMdNdLqGRERkZLDet62Z/aHQ3NE3O3o0aNERkZ6uhkiIiJSBEeOHOHaa68tcBuvDkTMZjPHjx8nJCQEk8l/C21ZVw8dOXJEk3bdRN+5++k7dz995+7nL9+5xWLh3Llz1KhRg4CAglOWeXXRu4CAgEIjKX8SGhrq0z+43kjfufvpO3c/fefu5w/feVhYmF3buTSzqoiIiEhBFIiIiIiIxygQKQGCgoKYOnVqvhlpxfn0nbufvnP303fufvrO8/LqyaoiIiLi29QjIiIiIh6jQEREREQ8RoGIiIiIeIwCEREREfEYBSIiIiLiMQpESqj09HRatmyJyWRi586dnm6Ozzp48CBDhgwhKiqKsmXLUrduXaZOnUpGRoanm+Zz5s6dS506dQgODqZ9+/Zs27bN003yWTExMbRt25aQkBCqVatG37592bt3r6eb5VdeeuklTCYTo0eP9nRTPE6BSAn11FNPUaNGDU83w+ft2bMHs9nMW2+9xa5du5g1axbz58/n6aef9nTTfMqKFSsYO3YsU6dOZceOHbRo0YKePXty8uRJTzfNJ23atInhw4ezdetW1q1bR2ZmJrfeeisXLlzwdNP8wo8//shbb71F8+bNPd0U72CREmft2rWWRo0aWXbt2mUBLD///LOnm+RXXn75ZUtUVJSnm+FT2rVrZxk+fHj246ysLEuNGjUsMTExHmyV/zh58qQFsGzatMnTTfF5586ds9SvX9+ybt06S5cuXSyjRo3ydJM8Tj0iJcyJEycYOnQo7733HuXKlfN0c/xSSkoKlSpV8nQzfEZGRgbbt2+ne/fu2c8FBATQvXt34uLiPNgy/5GSkgKgn2s3GD58OP/3f/+X6+fd33l19V3JzWKxMHjwYB577DFuuOEGDh486Okm+Z39+/czZ84cXnnlFU83xWecPn2arKwsqlevnuv56tWrs2fPHg+1yn+YzWZGjx5Np06daNasmaeb49OWL1/Ojh07+PHHHz3dFK+iHhEvMHHiREwmU4G3PXv2MGfOHM6dO8ekSZM83eQSz97vPKdjx44RHR3NP//5T4YOHeqhlos41/Dhw4mPj2f58uWebopPO3LkCKNGjeL9998nODjY083xKqo14wVOnTpFcnJygdtcd9113H333axZswaTyZT9fFZWFoGBgdx///0sWbLE1U31GfZ+52XKlAHg+PHj3HzzzXTo0IHFixcTEKAY3lkyMjIoV64cK1eupG/fvtnPDxo0iLNnz7J69WrPNc7HjRgxgtWrV7N582aioqI83Ryf9sknn3DnnXcSGBiY/VxWVhYmk4mAgADS09NzveZPFIiUIIcPHyY1NTX78fHjx+nZsycrV66kffv2XHvttR5sne86duwYXbt2pU2bNixdutRv/1i4Uvv27WnXrh1z5swBjOGCWrVqMWLECCZOnOjh1vkei8XCyJEjWbVqFRs3bqR+/fqebpLPO3fuHIcOHcr13EMPPUSjRo2YMGGCXw+LaY5ICVKrVq1cjytUqABA3bp1FYS4yLFjx7j55pupXbs2r7zyCqdOncp+LTw83IMt8y1jx45l0KBB3HDDDbRr147XXnuNCxcu8NBDD3m6aT5p+PDhLFu2jNWrVxMSEkJSUhIAYWFhlC1b1sOt800hISF5go3y5ctTuXJlvw5CQIGISIHWrVvH/v372b9/f55gT52JznPPPfdw6tQpnn32WZKSkmjZsiWxsbF5JrCKc8ybNw+Am2++Odfz77zzDoMHD3Z/g8SvaWhGREREPEYz7kRERMRjFIiIiIiIxygQEREREY9RICIiIiIeo0BEREREPEaBiIiIiHiMAhERERHxGAUiIiIi4jEKRERERMRjFIiIiIiIxygQEREREY/5f/7aXHaT46BdAAAAAElFTkSuQmCC"
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"The estimated value for x=1 is [2.51857814]\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 50
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 12** : Display the estimated coefficients $\\hat{a}$, $\\hat{b}$, $\\hat{c}$. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:48:21.636481Z",
|
|
"start_time": "2025-01-22T09:48:21.632962Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"print(\"The estimated coefficients are a=\", poly2_reg.coef_[0], \", b=\", poly2_reg.coef_[1], \"and c=\",\n",
|
|
" poly2_reg.intercept_)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"The estimated coefficients are a= 1.0030014670964114 , b= 1.0581583492954199 and c= 0.4574183201104409\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 45
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 13** : Display the quadratic error of `poly2_reg` and compare with the quadratic error related to `lin_reg`. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:48:26.904691Z",
|
|
"start_time": "2025-01-22T09:48:26.902199Z"
|
|
}
|
|
},
|
|
"source": "print(\"Quadratic error for the 2nd degree polynomial regression\", np.sum((y - y2_predict) ** 2))",
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Quadratic error for the 2nd degree polynomial regression 381.2677328521117\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 46
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The creation of the array $[X^2, X]$ from $X$ can also be performed directly by by `sklearn.preprocessing.PolynomialFeatures`\n",
|
|
"\n",
|
|
"https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html\n",
|
|
"\n",
|
|
"(Pay attention to the order of the features in the output of `PolynomialFeatures` : $X\\rightarrow [1, X, X^2]$ )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercice 13** : In the cell below, we show how to use `PolynomialFeatures`in our example. Examine the syntax and then create a model for a $3^{rd}$ degree polynomial. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:51:54.357008Z",
|
|
"start_time": "2025-01-22T09:51:54.285099Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"from sklearn.preprocessing import PolynomialFeatures\n",
|
|
"\n",
|
|
"poly2 = PolynomialFeatures(degree=2) # definition of the transformer\n",
|
|
"# no calculation made yet\n",
|
|
"poly2.fit(X) # here you ask your transformer to make some calculations\n",
|
|
"# no output yet (no assignment here)\n",
|
|
"X2_bis = poly2.transform(X) # here you ask your transformer for an output\n",
|
|
"# (assignment 'X21_bis=...'). Your new array X2_bis now contains\n",
|
|
"# $[1,X,X^2]$\n",
|
|
"\n",
|
|
"# Fitting a linear regression model as before (y on X2_bis)\n",
|
|
"poly2_bis_reg = LinearRegression()\n",
|
|
"poly2_bis_reg.fit(X2_bis, y)\n",
|
|
"\n",
|
|
"# Plotting the estimated polynomial\n",
|
|
"plt.scatter(x, y)\n",
|
|
"plt.plot(x, poly2_bis_reg.predict(X2_bis), color='r')\n",
|
|
"plt.show()\n",
|
|
"\n",
|
|
"# estimated coefficients (Pay attention to the order)\n",
|
|
"print(poly2_bis_reg.coef_, poly2_bis_reg.intercept_)\n",
|
|
"print(\"The estimated coefficients are a=\", poly2_bis_reg.coef_[2], \", b=\", poly2_bis_reg.coef_[1], \"and c=\",\n",
|
|
" poly2_bis_reg.intercept_)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
],
|
|
"image/png": "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5ZfNHkrIOHLkCHl5edSuXbvQ/bVr12bLli0mjSp82Gw2hg0bRteuXWnZsqXZwwlp8+fPZ+PGjaxfv97soQQVzYgEgTFjxmCxWIq9bNmyhddff53s7GzGjh1r9pDLPHc/84L2799P7969+de//sWgQYNMGrmIbw0ZMoTU1FTmz59v9lBC2t69e3nsscf48MMPiY6ONns4QUW9ZoLA4cOHycjIKPaYhg0bcuutt7J48WIsFkv+/Xl5eURGRnLXXXfx3nvv+XuoIcPdz7xChQoAHDhwgCuuuILOnTszZ84cIiIUw/vK6dOnqVSpEp9++ik33HBD/v39+/fn2LFjLFq0yLzBhbihQ4eyaNEiVq1aRWJiotnDCWmff/45N954I5GRkfn35eXlYbFYiIiIwGq1FnosnCgQKUP27NlDVlZW/u0DBw7Qq1cvPv30Uzp16kTdunVNHF3o2r9/P927d6d9+/bMnTs3bP9Y+FOnTp3o2LEjr7/+OmAsF9SvX5+hQ4cyZswYk0cXeux2O4888ggLFy5kxYoVNG7c2Owhhbzs7Gx2795d6L4BAwbQtGlTRo8eHdbLYsoRKUPq169f6HaVKlUAaNSokYIQP9m/fz9XXHEFF1xwAS+//DKHDx/Ofyw+Pt7EkYWWESNG0L9/fy655BI6duzI1KlTOXHiBAMGDDB7aCFpyJAhzJs3j0WLFhETE0N6ejoAcXFxVKxY0eTRhaaYmJgiwUblypWpXr16WAchoEBEpFhLly5l+/btbN++vUiwp8lE37nttts4fPgw48ePJz09nTZt2pCcnFwkgVV8Y8aMGQBcccUVhe5/9913uffeewM/IAlrWpoRERER0yjjTkREREyjQERERERMo0BERERETKNAREREREyjQERERERMo0BERERETKNAREREREyjQERERERMo0BERERETKNAREREREyjQERERERM8/9H4RQTG6VJjwAAAABJRU5ErkJggg=="
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[0. 1.05815835 1.00300147] 0.45741832011044625\n",
|
|
"The estimated coefficients are a= 1.0030014670964105 , b= 1.0581583492954199 and c= 0.45741832011044625\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 53
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:56:27.580084Z",
|
|
"start_time": "2025-01-22T09:56:27.504624Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"# Answer for Exercise 13 ($3^{rd}$ degree)\n",
|
|
"poly3 = PolynomialFeatures(degree=3)\n",
|
|
"poly3.fit(X)\n",
|
|
"X3_bis = poly3.transform(X)\n",
|
|
"\n",
|
|
"poly3_reg = LinearRegression()\n",
|
|
"poly3_reg.fit(X3_bis, y)\n",
|
|
"\n",
|
|
"plt.scatter(x, y, label='Sample')\n",
|
|
"plt.plot(x, poly3_reg.predict(X3_bis), color='r', label='Regression')\n",
|
|
"plt.legend()\n",
|
|
"plt.show()\n",
|
|
"\n",
|
|
"print(poly3_reg.coef_, poly3_reg.intercept_)\n",
|
|
"print(\"The estimated coefficients are a=\", poly3_reg.coef_[3], \", b=\", poly3_reg.coef_[2], \", c=\", poly3_reg.coef_[1],\n",
|
|
" \"and d=\", poly3_reg.intercept_)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
],
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGfCAYAAABiCLkcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABlqUlEQVR4nO3dd3hTdfvH8XdaSkuhg11GmSJTWcoQVESmiqCgwiOKijyKgDJUhrLUn4goqIigqIAioqKICA+IIChYQBkiIChYdsuUFgptoc3vj2NKR9ombZKTJp/XdeUi4+Scb0Pac5/vuG+L1Wq1IiIiImKCALMbICIiIv5LgYiIiIiYRoGIiIiImEaBiIiIiJhGgYiIiIiYRoGIiIiImEaBiIiIiJhGgYiIiIiYRoGIiIiImEaBiIiIiJimWEHfOHPmTGbOnMmBAwcAaNiwIePGjaNr164AJCcnM2LECBYuXEhKSgqdO3fmnXfeoWLFig4fIz09nWPHjhEWFobFYiloU0VERMSDrFYr586do3LlygQE5N3nYSlorZmlS5cSGBhInTp1sFqtzJs3jylTprBt2zYaNmzIwIEDWbZsGXPnziUiIoLBgwcTEBDAhg0bHD7GkSNHiI6OLkjzRERExGSHDx+matWqeW5T4EDEnjJlyjBlyhR69epF+fLlWbBgAb169QJgz5491K9fn5iYGFq1auXQ/hISEoiMjOTw4cOEh4e7qpkiIiLiRomJiURHR3P27FkiIiLy3LbAQzOZpaWl8cUXX5CUlETr1q3ZsmULly5dokOHDhnb1KtXj2rVquUZiKSkpJCSkpLx+Ny5cwCEh4crEBERESliHJlWUajJqr///julSpUiODiYxx9/nMWLF9OgQQPi4+MpXrw4kZGRWbavWLEi8fHxue5v0qRJREREZNw0LCMiIuLbChWI1K1bl+3bt7Np0yYGDhxIv3792L17d4H3N3r0aBISEjJuhw8fLkzzRERExMsVamimePHiXHXVVQA0b96cX375hTfffJP77ruP1NRUzp49m6VX5Pjx40RFReW6v+DgYIKDgwvTJBERESlCXDJHxCY9PZ2UlBSaN29OUFAQq1evpmfPngDs3buXQ4cO0bp1a1ceEqvVyuXLl0lLS3PpfsX7BAYGUqxYMS3lFhHxIQUOREaPHk3Xrl2pVq0a586dY8GCBaxdu5aVK1cSERFB//79GT58OGXKlCE8PJwhQ4bQunVrh1fMOCI1NZW4uDguXLjgsn2KdwsNDaVSpUoUL17c7KaIiIgLFDgQOXHiBA8++CBxcXFERERw7bXXsnLlSjp27AjAtGnTCAgIoGfPnlkSmrlKeno6sbGxBAYGUrlyZYoXL64rZR9mtVpJTU3l5MmTxMbGUqdOnXyT5IiIiPdzaR4RV0tMTCQiIoKEhIQcy3eTk5OJjY2levXqhIaGmtRC8bQLFy5w8OBBatasSUhIiNnNERERO/I6f2dX5C8pdVXsX/T/LSLiW1w6WVVERES8V1q6lc2xZzhxLpkKYSG0qFmGwABzpzUoEBEREfEDK3bGMXHpbuISkjOeqxQRwvhuDejSqJJp7VI/t2RhsVj4+uuvzW6GiIi40IqdcQycvzVLEAIQn5DMwPlbWbEzzqSWKRAxxcmTJxk4cCDVqlUjODiYqKgoOnfu7FRlYhEREUekpVuZuHQ39lam2J6buHQ3aenmrF3x+6EZM8bLevbsSWpqKvPmzaNWrVocP36c1atXc/r0abceV0RE/M/m2DM5ekIyswJxCclsjj1D69plPdewf/l1j8iKnXG0nbyGPrM38tTC7fSZvZG2k9e4tYvq7Nmz/PTTT0yePJlbbrmF6tWr06JFC0aPHs2dd94JwNSpU7nmmmsoWbIk0dHRPPHEE5w/fz5jH3PnziUyMpJvv/2WunXrEhoaSq9evbhw4QLz5s2jRo0alC5dmieffDJLxtkaNWrw4osv0qdPH0qWLEmVKlWYMWNGnu09fPgw9957L5GRkZQpU4bu3btz4MABt3w2IiLieifO5R6EFGQ7V/PbQMSs8bJSpUpRqlQpvv76a1JSUuxuExAQwFtvvcWuXbuYN28ea9as4dlnn82yzYULF3jrrbdYuHAhK1asYO3atdx1110sX76c5cuX8/HHH/Puu++yaNGiLO+bMmUKjRs3Ztu2bYwaNYqnnnqKVatW2W3HpUuX6Ny5M2FhYfz0009s2LCBUqVK0aVLF1JTU13zgYiIiFtVCHMs55Kj27maXw7N5DdeZsEYL+vYIMrlwzTFihVj7ty5DBgwgFmzZtGsWTNuvvlmevfuzbXXXgvA0KFDM7avUaMGL730Eo8//niWzLSXLl1i5syZ1K5dG4BevXrx8ccfc/z4cUqVKkWDBg245ZZb+OGHH7jvvvsy3temTRtGjRoFwNVXX82GDRuYNm1aRkbczD777DPS09N5//33M7LWzpkzh8jISNauXUunTp1c+tmIiIjrtahZhkoRIcQnJNs971mAqAhjaoIZ/LJHxJnxMnfo2bMnx44d45tvvqFLly6sXbuWZs2aMXfuXAC+//57br31VqpUqUJYWBgPPPAAp0+fzlJTJzQ0NCMIAahYsSI1atSgVKlSWZ47ceJElmNnLzrYunVr/vjjD7vt/O2339i3bx9hYWEZPTllypQhOTmZ/fv3F/ZjEBERDwgMsDC+WwPACDoysz0e362BaflE/DIQ8YbxspCQEDp27MjYsWP5+eefeeihhxg/fjwHDhzgjjvu4Nprr+XLL79ky5YtGfM4Mg+HBAUFZdmfxWKx+1x6enqB23j+/HmaN2/O9u3bs9z+/PNP/vOf/xR4vyIi4lldGlViZt9mREVkHX6JighhZt9mpuYR8cuhGW8cL2vQoAFff/01W7ZsIT09nddffz0jnfnnn3/usuNs3Lgxx+P69evb3bZZs2Z89tlnVKhQId9aASIi4t26NKpExwZRXpdZ1S97RGzjZbl99BaMbHPuGC87ffo07du3Z/78+ezYsYPY2Fi++OILXn31Vbp3785VV13FpUuXmD59On///Tcff/wxs2bNctnxN2zYwKuvvsqff/7JjBkz+OKLL3jqqafsbnv//fdTrlw5unfvzk8//URsbCxr167lySef5MiRIy5rk4iIeEZggIXWtcvSvUkVWp8/QmDnTvC//5naJr8MRMwcLytVqhQtW7Zk2rRp3HTTTTRq1IixY8cyYMAA3n77bRo3bszUqVOZPHkyjRo14pNPPmHSpEkuO/6IESP49ddfadq0KS+99BJTp06lc+fOdrcNDQ3lxx9/pFq1atx9993Ur1+f/v37k5ycrB4SEZGi7o034Pvv4d/5iWaxWK1Wc1KpOSCvMsLJycnExsYWqhy8t+bdd5caNWowdOjQLKtyihpX/L+LiPi948ehWjVITYWYGGjVyqW7z+v8nZ1fzhGx8dbxMhEREbeaNcsIQlq2dHkQ4iy/DkTgyniZiIiIX0hOBlteqmHDzG0LCkT8ilKzi4gICxfCiRNQtSrcfbfZrVEgIiIi4jesVpg2DYD0wYPZdCjR9KkJCkRERET8xQ8/wI4dXC5RgtvPX83e2VdyS5m1WMMvl++KiIj4pX97Qz6t1569l4pnecndRV9zo0BERETEH+zdC99+C8CH192Z42VbLo+JS3eTlu65zB4KRERERPzBm28C8H3t64ktU8XuJu4u+mqPAhERERFfd/p0RgbV91vcle/m7iz6mp0CEXGJAwcOYLFY2L59u9lNERGR7GbNgosXOd/gGjZGX5Pv5p4s+qpAxAQPPfQQFosFi8VCUFAQNWvW5NlnnyU52XMRqKtFR0cTFxdHo0aNzG6KiIhklpICb78NQOjIZ6gUWcKUoq+5USBiki5duhAXF8fff//NtGnTePfddxk/frzbjpeWlkZ6errb9h8YGEhUVBTFimlFuIiIV1m4EOLjoXJlAnrfZ1rR19z4ViBitUJSkudvBagbGBwcTFRUFNHR0fTo0YMOHTqwatUqANLT05k0aRI1a9akRIkSNG7cmEWLFmV5/zfffEOdOnUICQnhlltuYd68eVgsFs6ePQvA3LlziYyM5JtvvqFBgwYEBwdz6NAhUlJSePrpp6lSpQolS5akZcuWrF27NmO/Bw8epFu3bpQuXZqSJUvSsGFDli9fDsA///zD/fffT/ny5SlRogR16tRhzpw5gP2hmXXr1tGiRQuCg4OpVKkSo0aN4vLlyxmvt2vXjieffJJnn32WMmXKEBUVxYQJE5z+LEVEJBdWK0ydatwfMgSKF6dLo0rM7NuMqIiswy9RESHM7NvM43lEfOvy9cIFKFXK88c9fx5Klizw23fu3MnPP/9M9erVAZg0aRLz589n1qxZ1KlThx9//JG+fftSvnx5br75ZmJjY+nVqxdPPfUUjz76KNu2bePpp5/Osd8LFy4wefJk3n//fcqWLUuFChUYPHgwu3fvZuHChVSuXJnFixfTpUsXfv/9d+rUqcOgQYNITU3lxx9/pGTJkuzevZtS/36mY8eOZffu3fzvf/+jXLly7Nu3j4sXL9r9mY4ePcptt93GQw89xEcffcSePXsYMGAAISEhWYKNefPmMXz4cDZt2kRMTAwPPfQQbdq0oWPHjgX+PEVE5F8rV8KOHcY56r//zXjaq4q+Wr1YQkKCFbAmJCTkeO3ixYvW3bt3Wy9evHjlyfPnrVYj/vPs7fx5p36ufv36WQMDA60lS5a0BgcHWwFrQECAddGiRdbk5GRraGio9eeff87ynv79+1v79OljtVqt1pEjR1obNWqU5fXnnnvOClj/+ecfq9Vqtc6ZM8cKWLdv356xzcGDB62BgYHWo0ePZnnvrbfeah09erTVarVar7nmGuuECRPstrtbt27Whx9+2O5rsbGxVsC6bds2q9VqtY4ZM8Zat25da3p6esY2M2bMsJYqVcqalpZmtVqt1ptvvtnatm3bLPu5/vrrrSNHjrR7DKs1l/93ERGxr1074zw1bJhHD5vX+Ts73+oRCQ01eifMOK6TbrnlFmbOnElSUhLTpk2jWLFi9OzZk127dnHhwoUcPQKpqak0bdoUgL1793L99ddneb1FixY5jlG8eHGuvfbajMe///47aWlpXH311Vm2S0lJoWxZowLxk08+ycCBA/nuu+/o0KEDPXv2zNjHwIED6dmzJ1u3bqVTp0706NGDG264we7P98cff9C6dWsslivRdZs2bTh//jxHjhyhWrVqAFnaB1CpUiVOnDiR+wcnIuJH0tKtBe+12LwZ1q6FYsW8ospubnwrELFYCjVE4kklS5bkqquuAuDDDz+kcePGfPDBBxmrTpYtW0aVKlkTzgQHBzt1jBIlSmQJBM6fP09gYCBbtmwhMDAwy7a24ZdHH32Uzp07s2zZMr777jsmTZrE66+/zpAhQ+jatSsHDx5k+fLlrFq1iltvvZVBgwbx2muvOf3z2wQFBWV5bLFY3DqpVkSkqFixM46JS3cTl3BlRaVT9WBefdX49z//gehoN7Wy8HxrsmoRFRAQwJgxY3j++eezTCy96qqrstyi//0i1a1bl19//TXLPn755Zd8j9O0aVPS0tI4ceJEjn1HRUVlbBcdHc3jjz/OV199xYgRI5g9e3bGa+XLl6dfv37Mnz+fN954g/fee8/userXr09MTAzWTBN5N2zYQFhYGFWrVnXq8xER8TcrdsYxcP7WLEEIOFEP5q+/4KuvjPvPPOOmVrqGAhEvcc899xAYGMi7777L008/zbBhw5g3bx779+9n69atTJ8+nXnz5gHw2GOPsWfPHkaOHMmff/7J559/ztx/M+Zl7gHJ7uqrr+b+++/nwQcf5KuvviI2NpbNmzczadIkli1bBsDQoUNZuXIlsbGxbN26lR9++IH69esDMG7cOJYsWcK+ffvYtWsX3377bcZr2T3xxBMcPnyYIUOGsGfPHpYsWcL48eMZPnw4AQH62omI5CYt3crEpbux2nnN4Xowr71mzGK8/Xbw8vxOvjU0U4QVK1aMwYMH8+qrrxIbG0v58uWZNGkSf//9N5GRkTRr1owxY8YAULNmTRYtWsSIESN48803ad26Nc899xwDBw7Md/hmzpw5vPTSS4wYMYKjR49Srlw5WrVqxR133AEY+UYGDRrEkSNHCA8Pp0uXLkz7t1pj8eLFGT16NAcOHKBEiRLceOONLFy40O5xqlSpwvLly3nmmWdo3LgxZcqUoX///jz//PMu/NRERHzP5tgzOXpCMstcD6Z17bI5N4iPh38vXBk50j2NdCGLNXPfuZdJTEwkIiKChIQEwsPDs7yWnJxMbGwsNWvWJCTEc6lovdX//d//MWvWLA4fPmx2U9xK/+8i4uuWbD/KUwu357vdm72b0L2JneJ1Y8bApEnQqhX8/LMxf9LD8jp/Z6cekSLqnXfe4frrr6ds2bJs2LCBKVOmMHjwYLObJSIiheRonRe72yUmwjvvGPdHjjQlCHGWApEi6q+//uKll17izJkzVKtWjREjRjB69GizmyUiIoXUomYZKkWEEJ+QbHeeiAUjC6rdejCzZ0NCAtStC3femeWlQi0FdiMFIkXUtGnTMuZuiIiI7wgMsDC+WwMGzt+KBbIEI3nWg0lNBdt54ZlnINPCgEIvBXYjLV8QERHxMgWqB/PJJ3D0KFSqBH37Zjxd6KXAblbgQGTSpElcf/31hIWFUaFCBXr06MHevXuzbNOuXbuMcve22+OPP17oRmfmxXNtxQ30/y0i/qJLo0qsH9meTwe04s3eTfh0QCvWj2xvPwhJT4cpU4z7Q4fCvysoXbIU2M0KPDSzbt06Bg0axPXXX8/ly5cZM2YMnTp1Yvfu3ZTMlN10wIABvPDCCxmPQwuQDt0eW0bOCxcuUKJECZfsU7zfhQsXgJwZWUVEfFFggMX+Et3svv0W/vgDwsPhsccyni70UmAPKHAgsmLFiiyP586dS4UKFdiyZQs33XRTxvOhoaFZsna6SmBgIJGRkRl1SUJDQ/NM5iVFm9Vq5cKFC5w4cYLIyMgcKepFRPyaLZ37wIEQEZHx9IlzuQchmTm6nTu4bLJqQkICAGXKZJ3F+8knnzB//nyioqLo1q0bY8eOzbVXJCUlhZSUlIzHiYmJeR7TFuCoSJr/iIyMdEtgKyJSZG3YYNyKF4ennsryUqGWAnuISwKR9PR0hg4dSps2bTKKtgH85z//oXr16lSuXJkdO3YwcuRI9u7dy1e2/PfZTJo0iYkTJzp8XIvFQqVKlahQoQKXLl0q9M8h3i0oKEg9ISIi2U2ebPz74IPGRNVMCrUU2ENckll14MCB/O9//2P9+vV5FjRbs2YNt956K/v27aN27do5XrfXIxIdHe1QZjYRERG/s3s3NGxoJC774w8jf0g2tlUzYH8pcK6rcArBmcyqhV6+O3jwYL799lt++OGHfKuqtmzZEoB9+/bZfT04OJjw8PAsNxEREcmFbaVMjx52gxAo4FJgDyrw0IzVamXIkCEsXryYtWvXUrNmzXzfs337dgAqVTL3hxYRESnyjhwxcodArsXtbNlUUy6n81qvxmCBU+dTfCOz6qBBg1iwYAFLliwhLCyM+Ph4ACIiIihRogT79+9nwYIF3HbbbZQtW5YdO3YwbNgwbrrpJq699lqX/QAiIiJ+6Y034NIluOkm+HfEIbO8sqmatVTXngLPEcltqeycOXN46KGHOHz4MH379mXnzp0kJSURHR3NXXfdxfPPP+/wkIszY0wiIiJ+459/oFo1OH8eli2D227L8rJtXkj2E7w754Vk5pHqu/nFL9HR0axbt66guxcREZHczJplBCGNGkHXrlleyi+bqgUjm2rHBlFeMTSjWjMiIiJFSXIyvPmmcf/ZZ40VM5k4k03VGygQERERKUo++giOH4foaOjdO8fLRSGbamYKRERERIqKtLQrS3aHDwc7dbeKQjbVzBSIiIiIFBWLF8O+fVC6NDz6qN1NbNlUc5v9YcFYPWNmNtXMFIiIiIgUBVbrleJ2gwdDqVJ2NwsMsDC+WwOAHMGI7fH4bg28YqIqKBAREREpGtauhV9+gZAQIxDJg7dnU83MZdV3RURExI1sxe0eeQQqVMh38y6NKtGxQRSbY89w4lyyV2VTzUyBiIiIiLf77TdYuRICAmDECIffFhhg8aosqvZoaEZERMTb2eaG3HMP1KplbltcTIGIiIiINztwAD77zLj/7LOmNsUdFIiIiIh4s6lTjfwhHTpAs2Zmt8blFIiIiIh4q1On4P33jfsjR5rbFjdRICIiIuKtpk6FixeNnpBbbzW7NW6hQERERMQbnT4N06cb98eOzVHczlcoEBEREfFG06bB+fPQuDF07252a9xGgYiIiIi3OXMG3nrLuD9unM/2hoACEREREe/zxhtw7hxccw306GF2a9xKgYiIiIg3+ecfePNN4/748UY2VR/m2z+diIhIUfPmm5CYCI0awV13md0at1MgIiIi4i3OnjWGZcCYG+LjvSGgQERERMR7vPUWJCRAw4bQs6fZrfEIBSIiIiLeICHBWLILRt4QP+gNAQUiIiIi3mH6dGNopn596NXL7NZ4jAIRERERsyUmGuncwegNCQw0tz0epEBERETEbNOnG8t269WDe+81uzUepUBERETETOfOXekNef55v+oNAQUiIiIi5nr7bSOl+9VXQ+/eZrfG4xSIiIiImOX8eXj9deO+H/aGgAIRERER88yYAadPw1VXQZ8+ZrfGFApEREREzHD+PLz2mnF/7FgoVszc9phEgYiIiIgZZs6EU6eM3pD//Mfs1phGgYiIiIinJSXBlCnG/eee89veEFAgIiIi4nmzZsHJk1CrFvTta3ZrTOWXIVhaupXNsWc4cS6ZCmEhtKhZhsAAi9nNEhERf3DhArz6qnHfz3tDwA8DkRU745i4dDdxCckZz1WKCGF8twZ0aVTJxJaJiIhfePddOHECataEBx4wuzWm86uhmRU74xg4f2uWIAQgPiGZgfO3smJnnEktExERv3Dx4pXekDFjICjI3PZ4Ab8JRNLSrUxcuhurnddsz01cupu0dHtbiIiIuMB770F8PFSvDg8+aHZrvILfBCKbY8/k6AnJzArEJSSzOfaM5xolIiL+IzkZJk827o8ZA8WLm9seL+E3gciJc7kHIQXZTkRExCmzZ0NcHFSrBg89ZHZrvIbfBCIVwkJcup2IiIjDkpPhlVeM+6NHqzckE79ZNdOiZhkqRYQQn5Bsd56IBYiKMJbyioiIf3N5mof334djx6BqVXj4Ydc11AcUuEdk0qRJXH/99YSFhVGhQgV69OjB3r17s2yTnJzMoEGDKFu2LKVKlaJnz54cP3680I0uiMAAC+O7NQCMoCMz2+Px3Roon4iIiJ9bsTOOtpPX0Gf2Rp5auJ0+szfSdvKagq+sTEm50hsyZgwEB7uusT6gwIHIunXrGDRoEBs3bmTVqlVcunSJTp06kZSUlLHNsGHDWLp0KV988QXr1q3j2LFj3H333S5peEF0aVSJmX2bERWRdfglKiKEmX2bKY+IiIifc0uahw8+gKNHjd6QRx5xUUt9h8VqtbpkverJkyepUKEC69at46abbiIhIYHy5cuzYMECevXqBcCePXuoX78+MTExtGrVKsc+UlJSSElJyXicmJhIdHQ0CQkJhIeHu6KZgDKriohITmnpVtpOXpPrCkvbEP76ke0dP2dcvAhXXw1HjsDbb8OgQa5rsBdLTEwkIiLCofO3yyarJiQkAFCmjDHHYsuWLVy6dIkOHTpkbFOvXj2qVatGTEyM3X1MmjSJiIiIjFt0dLSrmpdFYICF1rXL0r1JFVrXLqsgRERE3JPmYcYMIwiJjob+/QvfSB/kkkAkPT2doUOH0qZNGxo1agRAfHw8xYsXJzIyMsu2FStWJD4+3u5+Ro8eTUJCQsbt8OHDrmheTikpxpdjyxb37F9ERIocl6d5OHsWXn7ZuD9xIoRoVaY9Llk1M2jQIHbu3Mn69esLtZ/g4GCCPTGJZ9QoeOMN6NIF/ve/Au1CwzsiIr7F5WkepkyBf/6BBg2URTUPhQ5EBg8ezLfffsuPP/5I1apVM56PiooiNTWVs2fPZukVOX78OFFRUYU9bOEMGQLTp8OKFfDzz3DDDU69XYXzRER8j0vTPMTFwbRpxv2XX4bAQFc21acUeGjGarUyePBgFi9ezJo1a6hZs2aW15s3b05QUBCrV6/OeG7v3r0cOnSI1q1bF7zFrlCr1pV13OPGOfVWFc4TEfFNLk3z8MILxkTVG26AO+90aTt9TYFXzTzxxBMsWLCAJUuWULdu3YznIyIiKFGiBAADBw5k+fLlzJ07l/DwcIYMGQLAzz//7NAxnJl167SDB6FOHbh0CdauhZtvzvctbplRLSIiXqXQvd5//QX160NaGmlr17G5akO/G8Z35vxd4EDEYrH/Qc6ZM4eH/s2hn5yczIgRI/j0009JSUmhc+fOvPPOOw4Pzbg1EAF44gmYORNuuskIRnL5mWxi9p+mz+yN+e720wGtaF27rIsaKSIinlaoeYD33Qeff86JmzrQvcsovxzG90gg4gluD0SOHIHatSE1FVavhvbt89x8yfajPLVwe767fbN3E7o3qeKiRoqISJGxZQtcdx1Wi4XbHnqLPypknbZgC2V8PYmmKXlEiqSqVeGxx4z748ZBPjGZCueJiEieRo0CYEXjW3MEIUDGJNiJS3eTlu61/QAe5d+BCBhfmpAQ2LABVq3Kc1PbjOrcOucsGN1uKpwnIuKHvv8evv+e9KAg/q9l71w3K1BiNB+mQKRyZRg40Lg/dmyevSIqnCciInZZrTB6NACxvR7gSGT+cyEdTozm4xSIAIwcCaGhsHkzLF+e56YqnCciIjksWgS//gqlSnFm6DMOvUXD+AaXZFYt8ipWhMGD4dVXjbkit92W5wqaLo0q0bFBlDKrioiIkQbiueeM+08/TbPr6lJp9VHXJEbzA+oRsXnmGShVCrZuhW++yXdzFc4TEREAPvzQyB1SvjwMH65hfCcpELEpVw6efNK4P348pKeb2x4REXG5tHQrMftPs2T7UWL2ny78ypULF4yCdgDPPw9hYYCG8Z3h33lEsjtzBmrUgHPnjPG+nj3df0wREfEIt9QJmzQJxowxzh179kC2wq3+WiBVeUQKqkwZGDbMuD9uHKSlmdseERFxCbfUCTtzBiZPNu6/+GKOIAQ0jO8IBSLZDRsGpUvD7t3w6admt0ZERAopLd3KxKW77U4cLVSCsVdegYQEuPZa+M9/CttMv6VAJLvISGM5LxhzRVJTTW2OiIgUzubYM7kWK4UCJhg7cgSmTzfuT5oEATqdFpQ+OXsGD4aoKPj7b2M2tIiIFFmOJg5zKsHYhAmQnAw33ghduxasYQIoELGvZElj9jPACy/AxYvmtkdERArM5XXC/vgD5swx7k+enG/ldsmbApHcDBgA1atDXBzMmGF2a0REpIBcXifsueeMFA/du0Pr1q5qpt9SIJKb4sWNrjcwxv8SE01tjoiIFIxLE4xt2gSLFxtzQl5+2aXt9FcKRPLSty/Uq2cs0Xr9dbNbIyIiBeSSBGNWq1GxHaBfP2jQwA0t9T9KaJafRYvgnnuMeSP79xt1aUREpEgqVIKxFSuMianBwfDnn1CtmnsbW4QpoZkr9ewJLVpAUpKRsEZERIqsAicYS0+/0hsyaJCCEBdSIJKPNCvsGjIagPR33yXtr30mt0hERDxu4UL47TcIDzdSuovLKBDJw4qdcbSdvIbbdwaxtmZzAi5fZnWv/xYsFbCIiBRNqakwdqxx/9lnoWxZc9vjYxSI5CJ7XYJXb+4HQKcdP/D2a58rGBER8RfvvWckuIyKgqFDzW6Nz1Egkk1aupUNf51i1Je/Z6lLsLtiLRY3aAfAyHXzClaXQEREipZz567MDxw3zli4IC5VzOwGeBN7JaIze/3Gvty+Zz03HthGrd82sjm2Ca1r595F56/ln0VEfMYrr8CJE1CnDjz6qNmt8UkKRP5lG4rJq4/jSGQUnzTtysNbljJy3VxiEx4E7Aci9oKaShEhjO/WwLH16iIi4hSXX/wdPox16lQswKaBI0k/lKgLSjdQIELeJaKzm35Db3r9/j3Xxu8jZP1KaJYzQs4tqIlPSGbg/K2OJ88RERGHuOPi7+gTw6iSnMym6EbcF18RZm/UBaUbaI4I+ZeIzuxMaASzW9wNQJ23XoFLl7K8nldQY3tO80tERFwn++ICG9vFX0EWF/z82QqqfPslAC/d0j+jsF1h9in2KRDBudLPFuCD63uQUqYclv37jdnUmeQX1FiBuIRkNseeKWBrRUTExh0Xf2lp6ZR69mkAvmp4C79XqlPofUruFIjgROlnjLoErz/ShuAXJxpPTJyYpSCeo0GNM8GPiIjY546Lv/3T3+faQ7u4EBTM5H9TNxR2n5I7BSLkXyIaILJEEJ882pL1I9sbY4MDBsDVV8PJk8as6n85GtQ4E/yIiIh9Lr/4S0oi+pUJALzT6h6Oh5Ur/D4lTwpEyL9EtAV4pec1tLmq3JXZ0kFB8Oqrxv1p0+DQISD/oMaCMYGqRc0yLv4pRET8j8sv/l59lRLH4zgSXoHZ19/lmn1KnhSI/KtAJaLvvBNuugmSk+H554H8gxqA8d0aaPmXiIgLuPTi79ChjAvMd25/nNSg4MLvU/JlsVqtXjvbxpkywq7i9Dr0X3+F66+/cr95c0B5REREPMW2agbIMmnV9pfb4ZQJvXvDZ5/BzTezYvoCBn6yrfD79FPOnL8ViLhC377wySfQrh2sWZOxzEuZVUVEPKPQF38//WT0cFsssHUrNGmiC8pCUCDiaYcOGRNXU1JgyRJjyEZERDyqwBd/aWlGz/a2bfDf/8K77xZ+n35OgYgZRo82Vs/UrQu//25MZhUREe/3wQdGHZmICPjrLyhf3uwWFXnOnL81WdVVRo82vrx79+ZIciYiIl4qIQHGjDHujx+vIMQECkRcJTwcJkww7k+YYHy5RUTEu730klFdt25dGDTI7Nb4JQUirjRggPFlPnUqS5IzERHxQn/+CW++adyfNg2KFze3PX5KgYgrBQXBlCnG/WnT4OBBc9sjIiK5GzHCKFzatatxE1MoEHG1O+4wlvGmpMCoUWa3RkRE7Fm5Er79FooVg6lTzW6NXytwIPLjjz/SrVs3KleujMVi4euvv87y+kMPPYTFYsly69KlS2Hb6/XSrPDbsHFYLRZYuJC09RvMbpKIiGR26RIMG2bcHzIE6tUztz1+rsCBSFJSEo0bN2bGjBm5btOlSxfi4uIybp9++mlBD1ckrNgZR9vJa+j+8wU+u6YjAHv79GfFjqMmt0xERDLMnAl//AHlysG4cWa3xu8VK+gbu3btStd8xtSCg4OJiooq6CGKFFuKYVtSltdvfIDb9/xEgyN7eX/MVHjlaWXiExEx26lTxjJdgP/7P4iMNLU54uY5ImvXrqVChQrUrVuXgQMHcvr06Ty3T0lJITExMcutKEhLtzJx6e4s9QhOlirNjNb3AfDsurm8umgLaelemztORMQ/jB4NZ89CkybQv7/ZrRHcGIh06dKFjz76iNWrVzN58mTWrVtH165dSUtLy/U9kyZNIiIiIuMWHR3trua51ObYM1lqEdjMue5ODkZGEXX+DPesmMfm2DMmtE5ExD+lpVuJ2X+aJduPErP/NGkbNxlZVAHefhsCA81toAAuSvFusVhYvHgxPXr0yHWbv//+m9q1a/P9999z66232t0mJSWFlJSUjMeJiYlER0d7fYr3JduP8tTC7XZfa79vMx9++QKpAcX46cvV3NrjJs82TkTED2UvWGexprPsk6dpcPRPePBBmDfP5Bb6Nq9M8V6rVi3KlSvHvn37ct0mODiY8PDwLLeioEJYSK6vrbmqBatrX0/x9Ms0f30CeG9pHxERn2Cbs5e5p/q+376jwdE/SSweypqHh5vYOsnOY4HIkSNHOH36NJUq+d6EzRY1y1ApIoTc6jG+eOsAUgODiFz/A2Rb5iwiIq5jb85e6QsJjFxn9IC80fZ+nos5pTl7XqTAgcj58+fZvn0727dvByA2Npbt27dz6NAhzp8/zzPPPMPGjRs5cOAAq1evpnv37lx11VV07tzZVW33GoEBFsZ3awCQIxixAAdLV+bwI08YTwwbBhcueLR9IiL+wt6cvWfXzaN08jn+KF+Dec3vIC4hWXP2vEiBA5Fff/2Vpk2b0rRpUwCGDx9O06ZNGTduHIGBgezYsYM777yTq6++mv79+9O8eXN++ukngoODXdZ4b9KlUSVm9m1GVETWYZqoiBBm9m1G7TdehmrVjLTvkyeb1EoREd924lzWIKTp0T302fEdAGM7DSQtINDudmKeAucRadeuHXnNc125cmVBd11kdWlUiY4Notgce4YT55KpEBZCi5plCAz4t59k6lTo1csIRPr1g1q1zG2wiIiPyTxnLzA9jRdXzQRgUaNb+bVqQ7vbibkKHIiIfYEBFlrXLmv/xbvvhg4d4PvvYehQ+OYbj7ZNRMTbpaVbMy7mypUMBgucOp+S88IuF7Y5e/EJyTy49VsaHd9PQnBJJrV7GDCGy6MijH2Jd1Ag4kkWC7z1Flx7LSxdCsuWwe23m90qERGvkH3JbXaVIkIY361BRpbqzEFL5kBlfLcGjJ+5iuE/zQdgcruHOF0yMmMO3/huDfINaMRzFIh4Wv36Rm/Ia6/BU0/BrbdCiLoIRcS/ZS+TYU98QjID529lZt9mADmClsyBSuP9iwhLvci2SnX5tLGxSCIqWyAj3sElCc3cxZmEKEXKuXNQty7ExRm1DsaMMbtFIiKmSUu30nbymlx7QjKzABGhQSRcuJQjaLH1cXxRM5HrHv8P1oAAdny9mgPRdRwe2hHX8MqEZpJJWJjRIwLw0ktw6JC57RERMVFuZTLssQJn7QQhtteCL6UQNeZpACxPPknjbu3o3qQKrWuXVRDipRSImKVPH7jxRrh4EUaMMLs1IiKmceVS2oEbF1H1zDFSK0bBCy+4bL/iPgpEzGKxGEWXAgJg0SJjJY2IiB9y1VLa2qcOM3DjFwD8NmKC0fssXk+BiJmuvRYGDTLuDxkCqanmtkdExAT5lclwhMWazssr36Z4+mXW1LqOy3f1dFn7xL0UiJjthRegfHnYswemTze7NSIibpOWbiVm/2mWbD9KzP7TGfVe8iqTkZnttcjQoBzb3btjFS2P7OJCUDDTew6lRa1c8jmJ19GqGW8wZw488giUKgV//glOFAbMbR29iIg3sZcjJHteEEfziAAMnL8VMCaolkv6h9WzHyciJYn/u+URmr/1kpbomsyZ87cCEW+Qng433ACbNsH998P8+Q69zZFfbBERs+WWI8R2yTSzbzO7Scryyqya+e/fm99Mofsf69hb+SoOLFtD5ybRnvvhxC4FIkXRr79ibdECi9XKhvc+I6D9rXn2bjjziy0iYpb8coTYUq6vH9ne6d7ctHQrf879gvr978MaEEB6zEYCW1zvglZLYSmPSBG0IqQKX7W4A4CoUSPoN/Mn2k5ew4qdcTm2TUu3MnHp7lzX0YORcdA2/ioiYpb8coRYgbiEZDbHnnF634EXL1D/pVEAWIYMURBSRCkQ8QK23o2Jre7nZMlIap85wmObFmWkM84ejLjzF1tExJUczRFSoFwizz8PsbEQHQ0vvuj8+8UrKBAxWebejcSQUrzYfgAAg2M+p/qZo0DO3g23/mKLiLiQozlCnM4lEhMDb75p3H/vPeUMKcIUiJgse+/GN/Vv4scaTQlOu8SL383EarXm6N1w2y+2iIiL5ZcjxIIxyb5FzTKO7zQlBfr3B6sVHnwQunRxRVPFJApETJaj18Ji4flOT5BcrDg3HtzO3bvW5NjOLb/YIiJukFeOENvj8d0aODdR9cUX4Y8/oGJFmDbNJe0U8ygQMZm9XotDpSvxZps+AIxbPZtySf9k2c4tv9giIm7SpVElZvZtRlRE1r93UREhzq/w27YNXnnFuD9jBpRx7oIrt6RqYh4t3zWZbWlbfEJyllUwxdIus+Sj4TQ88TffX3Mzt2z/IUdgoTwiIlKUFDoB46VL0KIFbN8OPXsadbqcOPbba/YxZ0MsZy9eynhefzPdQ3lEihjbqhkgSzDSKH4fX380nGLWdPj6a+jePcd7lVlVRPzGyy/Dc88ZvSC7dkFUlENvW7EzjlFf/c7ZC5dyvKbcS+6hQKQIyq1345N9i6n14QyoXBl274aICBNbKSLifnYvsPbugSZNjOKgH30EDzzg0L5W7Izj8X8v9HJTmKRqYp8z5+9iHmqT5KNLo0p0bBCV85cv5Qb46Tv46y949ll4912zmyoi4jb2LsqqhAXx7RdjKJ2aCl27Qt++Du3Llh4hP5lzL7WurWJ5nqZAxIsEBlhy/hKUKAGzZ0O7dsZa+T59jPsiIj4mt9IVnX5YROnftnC5ZCmKvfsuWBzrtcgv+WN2yr1kDq2aKQpuvhkee8y4P2AAXLxobntERFwsLd3KhG9ylq6IPhvPMz9+BMDUDv1Jq1LV4X06G1go95I5FIh4iXyXlE2ebMwT2bcPJkwwpY0iIu7y9pq/iE/MFjhYrbyy4i1CL6WwMboRM+ve6lTpCmcCC+VeMo+GZryAQ8twIyJg5kxj5czrr8N990GzZrnuU6tpRKSoWLEzjmnf/5Xj+T6/raTNwR1cLBbMyK5PYrUEONXLYUv+mD09QnYWlHvJTOoRMZltTDT7OKbdgnd33mkEIGlpRnrjSzmXotn22XbyGvrM3shTC7fTZ/bGXCv5ioiYKbcJpVUTjvPcDx8A8NqNfTlYujLgXC9HXskfbUqHBmnprskUiJgoc8G77GzPZS94x1tvGWvot2+H117L8T6nAhsREZPZm1BqsaYz+X9vUir1IpurNmDOdXcCBRs+yS2ra2SJIIZ1qMOvz3dUEGIyDc2YKL8Z3XaXlFWoYNRW6NcPJk6Eu++GunWB/AMbC0Zg07FBlLogRcQr2BtqeWDrMtoc3MGFoGCeuW0o6QGBQMGHT3JNj6C/g15BPSImcnSsMz4h2yqZBx6ATp2MCpQDBkB6OuBcYCMi4g2yD7XUOHOU0WvnAjCp3cMZQzLDOlxdqJ4LW3qE7k2q0Lp2WQUhXkSBiIkcHet8cdkfWYdULBYjsVnJkvDTTzBrFuB4YKO18iLiLTJXEw9MT2PqsqmUuJzC+uqNmd/0NgCiwoMZ3P4qcxsqbqNAxESZfwHz8k9Sas75HTVqkP7yywBcfvoZtq7dSrlSwQ4dV2vlRcRbZJ5Q+timL2l2bC+JxUN59ranwBKABZhwZ0P1YPgwBSImyvwLmBd7E1dX7Iyj7bn6bKrakGIXL5Dc72GeXriVyNCgXAMbC1orLyLep0ujSsy/rjjDNiwAYGKHxzgWXoHSJYN4pE0NIkoUz5lbSXyGAhGT2WZ0lykZlOd2med32FbGHDuXyrO3PcXFYsHccGgHndZ9xdkLlzImpmZme6y18iLidZKTaTNhGEFplznd6XYiHnuEMiWLcybpEh9sOKAUBD5OgYgX6NKoEmPvaOjQtvEJF7OsjDlYujKT2j0EwKi1c6l15iiRoUFUDM86/BIVEaK18iJiOntZpNPHjIFdu0guW54vB4xlzs8HOZOUmuV9SkHgu7R810tEhTs2b+NMUmqOlTEfN7udTn9tpO3B33j926n06vsqMwbcQECARUvVRMRr2Msi3Sl+J+/NmwbAE+0GsubXU3bfqxQEvks9Il4iv4mrtvkdZexMSLVaAnjmtqEkBpekadxeHtv0JaeSUrIsVQPyrmUjIuJG9pItRlw8x8QvpwAwv0lX1lzVIs99KAWBb1Ig4iXySkWceX5Hbj0nceHlmdDhvwAMXb+AGkf2ZbymlO8iYia7yRatVl5e+TaVzp9mf5mqvNS+v8P7UwoC36JAxIvkloo48/yOvHpOvmrYnpV1WlE8/TLXjhkCKSlK+S4iptv49+kcf4N67lzD7Xs3cCkgkKF3jCA5yPG0AkpB4Fs0R8TL5JeK2NZzMnD+ViyQ5QrDYrHwXOfBtDv9F8G//076uHFMjOyklO8iYpoVO+MY9eXvWZ6rejaeCd8biRintb2f3yvVcWhfFowLM6Ug8C3qEfFC+aUizqvn5KXH2hP8/mwALK+9RpVdW3I9jjvGW+3NiBcR/2TrkT178Uql8MD0NN5c+hph/xa0m9Wyp0P7UgoC31XgHpEff/yRKVOmsGXLFuLi4li8eDE9evTIeN1qtTJ+/Hhmz57N2bNnadOmDTNnzqROHcciX8lbnj0nje6Cfv2wzJvHtG+nctvDb3EuuGSu+3LVeKu9GfGVIkIY362Blg2L+JncinA+ueFTmh/bQ2LxUIbfMSKjoF1+ovS3xGcVuEckKSmJxo0bM2PGDLuvv/rqq7z11lvMmjWLTZs2UbJkSTp37kxysiYZuUqePSdvvUVydHWiE44zYdWsPPfjivFWzUURkczsFeFscXgng2M+B+C5zoM4ElHR7nttf8mGdajDm72b8OmAVqwf2V5BiI8qcI9I165d6dq1q93XrFYrb7zxBs8//zzdu3cH4KOPPqJixYp8/fXX9O7d2+77UlJSSElJyXicmJhY0OZJeDhBCz4h7aab6LnrB9bVuo5vGtycZRNXjbfmduUDmosi4q+y97RGXDzHG0tfI9CazpeN2rP0379HocUDKV4sgLMXrgzfqPfDv7hlsmpsbCzx8fF06NAh47mIiAhatmxJTExMroHIpEmTmDhxojua5JcC27Zh3+NDuWrmVF767h22VKnP0YgKgGvHW+1d+WSWeS6KLaeJiPi2LD2tViuTV7xF5XOn+Lt0ZcZ1eDzjpdkPXEer2mVznaAvvs8tk1Xj4+MBqFgxa7dbxYoVM16zZ/To0SQkJGTcDh8+7I7m+ZWr3prM2WubE56SxNRlUwlITwNcm/Ld0TkmWvsv4j8ypxrot/VbuvwZQ0pgMZ6881mSgkMzkjS2+ndYOa8J+uLbvGr5bnBwMMHBjpWyFwcVK0bk4s+xNm5My8M7+fZiDAlDn3bpFYejc0y09l/Ef9hSDcx47XPG/PABAC/f0p+dUVdpBYxk4ZYekaioKACOHz+e5fnjx49nvCYeVKsWln8nFTeY9RqtT+936S+/o+nptfZfxL90iQ7ls9XTCE67zIqrWzOv2R2AinBKVm4JRGrWrElUVBSrV6/OeC4xMZFNmzbRunVrdxxS8vPAA3DffXD5MvTuDQkJGS8VNveHo+npdeUj4kesVvjvfwk9chBrjRqU+fRj3uzTVCtgJIcCD82cP3+effuu1DOJjY1l+/btlClThmrVqjF06FBeeukl6tSpQ82aNRk7diyVK1fOkmtEPMhigVmzYNMmiI2FAQPgs89YsSveJbk/bEnWsu9Ls99F/NS778Lnn0OxYlgWLqRFs9pmt0i8lMVqtRYo9eXatWu55ZZbcjzfr18/5s6dm5HQ7L333uPs2bO0bduWd955h6uvvtrhYyQmJhIREUFCQgLh4eEFaaZkt3kztGkDly+za+xk7khtmGPZra3foiBdp2npVs1+F3GjIvE7tn07tGoFKSnw+uswfLjZLRIPc+b8XeBAxBMUiLjJa6/BM8+QUqw4dz44lb3la+TYxJZjZP3I9t73R07ETxWJ7MXnzkHz5vDXX3DHHfDNN0aPrPgVZ87fqjXjj4YP55+bOxB8OZUZX79CidScy2ptuT/mbohV3RgRL1AkshdbrfD440YQEh0Nc+cqCJF8qUfET2Tvzj1z8CjXdb+FiufP8Pk1HXj2tqH57sPrrrxE/ERaupW2k9fkmjjQa3ow334bhgyBwEBYt84YBha/5Mz526vyiIh72OvOLVMyiLp3PM0nC5/j3t+/Z0P1xixpmHPOT2a2Ky8tuxPxrCKRvfinn2DYMOP+lCkKQsRhGprxcbl1555JukRM9WuZfoORbv//vnuHWqeP5LkvW9fZxKW7NUwj4kFen7342DG45x4jPUCfPjB0qDntkCJJgYgPy6sYnc1bbXqzKboRpVIvMmPJKwRfSslj66xXXiLiGV6dvTg1FXr1guPH4ZprYPZszQsRpygQ8WH5decCpAUEMrb3c5wMjaT+yQO8uGqmQ/tW3RgRz/Hq7MVDh0JMDERGwuLFULKk59sgRZoCER/maLAwsHdbTrw7B2tAAPf+/j33/vZdvu9R3RgRz/Ha7MVz5sDMmUYPyIIFUFtJy8R5CkR8mKPBQlRECRr27YHlxRcBePH7mTQ8vt/utqobI2IOW/biqIisv9em1W3ZsgUGDjTuT5wIXbt69vjiM7R814fZlvzFJyTbnSeSY8lfejp07w7ffsvByCi69XuDxJBSWbaHgmVcFRHX8IrMqidPwnXXwaFDcOedxpBMgK5r5QolNBOgAN25AQEwbx7UqEH1s/G8s/INLNb0jPeoYqaI+QIDLLSuXZbuTarQunZZzwchtpUxhw5BnTrw0UcKQqRQlEfExzldjK5MGfjyS7jhBtru2ci6Lj+zrd9g761pISKe9dxzsHq1MSl18WKIiDC7RVLEaWjGTzjdnTtnDjzyiDEJbdkyjf+KCHzxBdx7r3H/88+N3CEidqjonbjG448bpbwjI2HTJnCicnJhecU4uIhcsWsXtGwJSUnw7LMwebLZLRIvphTvUmCZA4CKT46j5Y4dWGJijAlpGzcaQYmbFYkKoyL+JCEB7rrLCEJuvRX+7//MbpH4EPWISAZ7AUDDgAssmjOUEvHHoHNn+PZbKOa++NWWkj77l1IrdkRcy+Fex8uX4fbb4bvvoFo1Y9luuXKeb7AUKeoREaflFgDsTg+lV5eRLPlsFMVWroRnnoFp09zShrxS0lsxgpGJS3fTsUGUhmlECsHhXkerFZ56yghCQkONyakKQsTFtOZK8g0Adleszdi7njGeeOMNeP99t7TDmQqjIlIwuRXCtFXXXrEz7sqT06fDO+9cyZzarJmHWyv+QIGID0pLtxKz/zRLth8lZv/pfCvlOhIAfBrdgkNDRxlPPPEE/PhjgY+XG6+vMCpSxOV30QGZqmsvWwbDhhlPvvqqkexQxA00NONjCjLR09ET+7YHB1EtLhY++wzuvht++YUVSSEum1jq1RVGRXyAo72OO//3E4179zayLT/6KIwY4blGit9Rj4gPcarLNROHA4DwEvDhh9C8OZw+zblOXXnmg/VOHy83Xl1hVMRLOdMj6chFR/nz/1Dn0T5w/jy0b39laEbETRSI+AinulyzcSoACA2FJUuwVqpE2L69TFs6hYD0NKeOlxuvrTAq4qVW7Iyj7eQ19Jm9kacWbqfP7I20nbymwBcdwZdSmP3Vi4TGHzPyBi1aBEFB7mi6SAYFIj6iMBM9nQ4AqlRh59vzSAkMosP+X3jmx4+dOl5evK7CqIiXKkgPaF4XHRZrOlOXTaNJ3J9Yy5Qx5oiULu2m1otcoUDERxR2oqezAcDftRrwzG1PATBw0yLu2rmmUO3K3pb1I9vz6YBWvNm7CZ8OaMX6ke0VhIj8q6A9oHlddIz46RNu37ue9GJBWBYvhquucnm7RezRZFUf4YqJnl0aVaJjgyiHkhxVCAvhmwbtuPrUIQbHfM4rK97iQOnKbKtSr0Dtys5WYVREcnKmBzT775G9Qpg9f1/N4JjPAAh4fzbcdJPb2i6SnQIRH2Hrco1PSLZ7lWTB6N3Ib6KnowGA7XhTb+xLnVOH6PzXRt5b/BLdH5zKsfAKDh9PRJz3/e54h7bbsO+k3YuKzBcd1u9W0ur16cYbRo+Gfv3c1WwRuzQ04yM8PdHTdjyrJYDhd4zgj/I1KJ90lg+/mEh4SpLLjycihhU74/hgwwGHtn37h/25TmINDLDQ+txhbnj2MQIuX4b774eXXipU21yVU0j8i2rN+Bhn84gUtsqt7XiWw4dY/PHTVDx/hl9qN+XMF4vp3LS6S34mETGkpVtpO3lNnsMyubH9Vs/4T1NKlwzm/J4/ufnhHhQ/ecIoZLd8ORQvXuC2qVilZObM+VuBiA9yNLhw1R8O2/FSfvmVG/v3JPBCEjz4IMydq/wDIi4Us/80fWZvLNQ+AiwQmZTAF588S+0zR/krqhYHv1pOh9Z1C7xPFauU7FT0zs85Ms8jtz8ctqV/zvzhyDhe7c4Q8QV06wYffcSR0DJseezpAvW0iHkK20sm7uOK8gahyReY+8V4ap85ypHw8vS9ezwnluxjZlh4gYIFFauUwlIg4ofc+oeja1d+H/8q14wbQdVZb/Du/mQ+bnaHumiLCHWve7fCljcIvpzK7K9e5Nr4fZwuEU6/e1/geFjZQv3OF2YFjwhosqpfcmeV2xU747gzqS6vt70fgImr3uW2PesLnPZdPKegJQLEc/LLgpyXwPQ03l4ymdaHfudc8RL0u/cF9peNBq78zk9b9afTk0xVrFIKS4GIH3LXH47MPS3Tb+jNJ026EICVN5a+xo1/bwGcT/sunlGYEgHiOY6sjosMDcr5mjWdV//3Jh33bSIlMIhHe45jZ1TOhGVv/7Av3zTx2alYpRSWAhE/5K4/HFl6WiwWxnYcyLf1bqR4+mVmff0yTY/8kWdPi5lL//x92aE7e8nEtfLKgjyrbzNeufsaIFOgYrUybvVseu5cw2VLAE/0GMWmatfkeQxnesFUrFIKS3NE/JCrkp9ll70HJT0gkGF3DKdUygXaxW5hzqIJ3PefVzhxrkmO967YGceEb3YTn3hlH1HhIUy40/1zEzQvQt3rRU1+WZAzZ0598ueFPLxlKQDP3DaU1Ve1zHf/zswVs/XSDJy/FQtk+ZuiYpXiCPWI+CF3JT+z14NyKTCIgT1G80uVBkSkJPHx52OpdvpYlm1W7Izj8flbswQhAPGJyTzu5rkJmhdhUPd60WNbrda9SRVa1y6b5ffVVq/ph+DfGb7+EwB2PfsCXzdq7/D8Emd6wVSsUgpDgYifcscfjty6aC8WD6F/r3HsrlCT8klnafLovXD0KGAMiYz66vc89zv6q9/dMlSieRFXqHvd91jefZeaL4wG4PCQZ6g36Xm7v/P5cbQXTMUqpaAUiPgxV//hyKun5VxIKfrd+wJJ1WpiOXAAOnWC06fZ+Pdpzl64lOd+/7lwiY1/ny5Qm/KieRFXeLpEgLjX7y+8TsATAwF47/q7uLHETbSdbFTItv3OD76ltkP7cqYXLK9eGpHcKBDxc67+w5FXT8uLj91KyXVroEoV2L0bunZly46DDu03Zr/rAxHNi8hK3eu+Ycf/vUnD8c8A8GHzO3n5lkfAYskYbly1O57WtcsyrGNdh3vB/H0yt7iXJquKy+U3kY5Vq+DGG+GXX+g5dgDvdhpNUnBoPnt1/R8+zYvIKd//O/Fq6R99TKOxwwjAyrxmt/PCrQMyyixknoDavl5Fthz8h66Novhww4E8J5mu2h3v95O5xb1Ua0bMsW2bUWjrn3/YXLUBD90zkQvFS+S6+Sf9W9KmTjmXNsFWQCy/1UPrR7bXidjH+GQa+4ULsd5/P5b0dD5p0oXnOz2B1WK/07tMyeKcSUrNeBxggcydHLZAA1ANGSkQZ87fbh2amTBhAhaLJcutXr167jykFBVNm8KqVVgjI2lxZDdzFk2kRKr9IZDI0CBauSE1tOZF+KcVO+NoO3kNfWZv5KmF251O4OWVFi2Cvn2xpKez8NpOeQYhQJYgBK4EIf3b1MiYK9axQZQmc4tHuH2OSMOGDYmLi8u4rV+/3t2HlKKieXMs333HpbBwWh7eyYdfTiTkUs5g5JW7r3FZMJB9rLtjgyjNi/AjPrlc+4svoHdvSEvjxN29Gd1lcJ5BSG4swPKd8Rm9Q5rMLZ7i9jkixYoVIyoqyt2HkaLq+usJWvUdlzp0pPWh3/ngyxfo33McyUEhRIUHM+HOhi4LBvJKXLZ+ZHvf66qXLHyySuwnn8CDD0J6OjzwAGU/+JCo19blOtyYl+zF6TSZWzzF7T0if/31F5UrV6ZWrVrcf//9HDp0KNdtU1JSSExMzHITP9CyJUHfrcRaqhRtDu7gp/Vv8Nn917Bh1K0uDULyuhK2rSTQskPf5XNX+HPmwAMPGEHII4/AnDkEBhXLdbjRUbbAQpO5xVPcGoi0bNmSuXPnsmLFCmbOnElsbCw33ngj586ds7v9pEmTiIiIyLhFR0e7s3niTVq3xrJiBZQqRfnN62k5qC+BSeddsmslLhPwseXa06cbwYfVCo89BrNnQ2AgkPsy7DIlgxzatS2wUJI78RSPrpo5e/Ys1atXZ+rUqfTv3z/H6ykpKaSkpGQ8TkxMJDo6Wqtm/MnPP0PXrpCYCK1awf/+B5GRhdplzP7T9Jm9Md/tPh3QitZumBRrFp9cGVIIPvE9sFph/Hh48UXj8dChMHVqxhLdzLL//zevXpqbp/zg1CoxW08i2F/eq3lUkhtnVs14NI9IZGQkV199Nfv27bP7enBwMMHBwZ5sknibG26A1auNzKsbNxpLfJctg0LMM/KpK2EHqZBfTu4q9ugxaWkweDDMmmU8fuEFeP55u0EIXElWmJmzxelsvSvZv0tRfv5dEtfyaGbV8+fPs3//fipV0pdX8nDddfDDD1C+PGzdCi1awI4dBd6dv411++TKEBco0su1U1KgTx8jCLFY4J13YOzYXIOQ3BQke65qyIi7uXVo5umnn6Zbt25Ur16dY8eOMX78eLZv387u3bspX758vu9XQjM/99dfcMcd8OefUKoUfPqp8dhJ/pS4zPaz5jYp05d+1oIqcr1F587B3XfD999DUBDMnw/33luoXWrYTtzNa4Zmjhw5Qp8+fTh9+jTly5enbdu2bNy40aEgRIQ6dYzhmV69YM0auPNOeO01GDbMqStB25WwM13SRZUzK0O8dh6EmxWpNPYnT8Jtt8Gvv0LJkvD119ChQ6F3a2/YRsQsbg1EFi5c6M7diz8oXRpWrDDGxt97D0aMgD17YMYM4+rQQf4y1u2P82EKokiciA8dMuZK7d0L5crB8uVw/fVmt0rE5VT0TrxfUJAxNl6vnhGIzJ4N+/cbGSXLOD6xsEhdCReQv82H8Vm7dxtByNGjEB0N331nfP9FfJACEfG4Ao1PWyzGkEydOsakvTVroHVr+PZb4zkHFYkr4UIo8itDBNauNeaE/PMP1K9vBCFVq5rdKhG3USAiHlXoiYJ33AEbNkC3bsYk1pYt4auvoF07p9viixP2/Gk+jCt5zXfho4/g0Ufh0iUj0F66FMr6buAsAh5OaOYsrZrxLbZlpS4pKR4fDz16wKZNUKwYzJxp/AF3oi1FauWEk3z953Mlr/isrFYYNw5eesl4fO+9MHculCjhmeOLuJgz528FIuIRbllWevGikebaNin66afhlVcyUl3nxqUBkRfzmqt8L+YV34XkZON7/OmnxuMxY4zMqQEeTfMk4lLOnL/1TRePcEvBsRIlYMECmDDBePzaa8bY+vnca9T4U90Z23wYFfKzzyu+C/HxxrDip58aPXsffAD/938KQsSv6NsuHuG2ZaUWi1F7Y8ECCA6Gb76Btm3h8GG7m/tcBVYpMNO/C2vXGlmEN20ylqmvXGn0jDgoLd3Khr9O8drKPby2ci8b9p3yiQBa/I8mq4pHuH1ZaZ8+ULMmdO8Ov/1mpIVfssT4NxPl2RAb074LFy8awy9vvGE8rlfPCKCdWP21Ymcco776nbMXLmU89/YP+4gMDeKVu6/xiaFF8R/qERGP8EhJ8VatYPNmuOYao8v75pvh88+zbKI8G2Jjynfhl1+gWbMrQch//2t8Z50MQh6fvzVLEGJz9sIlHvfjekJSNCkQEY/wWMGx6tWN5b23325MArzvPmMlwr9zsj0SEEmR4NHvwqVLxqqY1q2NzMCVKhlVpd99F8LCHN5NWrqVCd/sync7X5nnJP5BgYh4TEEqfxZIWJgxLDNsmPF47Fh44AFITi7aFVjFpTz2Xdi508h38+KLkJYGvXsbz912m9O72hx7hvjElHy30zwnKUo0R0Q8ymNp1gMDYepUY/x90CD45BP4+2/4+mu/qTsj+XPrdyEtzfgOPv88pKYa5QhmzixU5Vxn5qtonpMUFQpExOM8mmb9v/+F2rWNCr4xMcaV6dKldGnUyOfrzohj3BIc//039OsH69cbj2+/3aiRVKlwQa4z81U0z0mKCgUi4vtuvRU2bjTSw+/bBzfcAJ99RmDXrj5dd0Yc57Lg2Gq9UiU6KQlKlTImpj7yiLHUPJPcEs7llYiuRc0yRIUH5zs8o3lOUpQoEBH/ULeuEYz07Anr1hlByfPPG/NHiunXwFX8Opvr0aNGmYEVK4zHN98Mc+YYy8qzyS2t/J2NK/HNb3G5ppsPDLAw4c6GPD5/a55N0TwnKUqU4l38S2oqDB5sdJODsYrhk0/snizEOV5Rs8UMVquRGXXQIDh71kisN2kSPPWU3QypuaWVz429dPP28ogAlA4NYpLyiIgXUK0Zkfx8+ik8/jgkJkJ4OMyYAfffn6P73FOKek+CV9RsMcOpUzBwICxaZDy+7jqjgm79+nY3z6/mUm7s1WJKS7eycf9pYv4+BRhDS61qKZW/eAcFIiKOOHDACD5+/tl43KsXzJrl8bLr7uhJ8GRg45aChkXB0qUwYAAcP24M740dC6NHQ1BQrm+J2X+aPrM3FviQnw5opXlNUiSo6J2II2rUMOaLvPiicSJZtAgaNoSvv/ZYE2w9CdlP4vEJyQwsYIbMFTvjaDt5DX1mb+SphdvpM3sjbSevcVu2TdNrtnhaYqIx+fTOO40gpEEDY/7RuHF5BiFQ+CW1WpIrvkiBiPi3YsWMSasbNxonlOPH4a67jNo1p0659dDuqP7qjsAmP35Vv+eHH+Daa41JqBYLPP00bNkCzZs79PbCLqnVklzxRQpERMA4kWzZYnStBwbCwoVGYPL55xnp4V3N1T0JZpW1L8r1e9LSrcTsP82S7UeJ2X8698/m4kUYOhTat4eDB43JzevWwZQpEOL4z5VfWvncqPSA+DIFIiI2ISHw8stG70ijRnDypFGr5o47IDbW5YdzdU+CWUMkRbV+j8NDWJs3Q9Om8OabxuP//teo8HzjjU4fM6+08rlR6QHxdQpERLK77jr49VcYP94Y81++3OgdefllY/mvi7i6J8GsIZKiWL/HoSGs1FRjAuoNN8DevUZW1OXLnS5Ul11uNZdssn9MLq/FJOJlFIiI2BMcDBMmwI4dcMstRiXf556Dxo1h1SqXHMLVPQlmDpF4rKChCzgyhPXx7GVYW7UyKjenpRlzhnbuhK5dXdKGLo0qMfb2BnZfs40O9W9Tg08HtGL9yPZe9fmJuJpSSorkpV49WL0aFiyA4cONEu6dOhm1Q6ZMyTVfhCNsPQkD52/FAllOjAXpSbAFNvEJyXZPsrZltO4aIvFYQcNCymsIKyA9jQG/LGb4T/OxpF02lnLPnAn33OPSNqSlW3lx2e5cX7cAy3fGM+Z27+pJEnEH9YiI5MdiMfKN7N1rZMssVgyWLYNrroEhQwq1usaVPQneMERiq9nSvUkVWtf2zuRauQ1NVf/nGJ8tGM3otXMJTrtM/E0djF4QFwch4IdLnkXyoB4REUdFRhoFzJ54Ap55Br75Bt5+Gz7+2JhLMHiwMaTjpIL0JOSWsMytZe19RLlSWf+PSl9IYFDM5zywbRnBaZc5X7wEE28dwN1vjSUqqpxb2uBXS55F8qFARMRZV18NS5bAmjXGcM1vvxn5JN56y/i3f38IDXVql85Uf80vE2tRGSIxw4qdcUz4ZhcAYSlJPLr5ax759WvCUi8C8GONpozpMpi0atV5pZb7MpgW5SXPIq6mFO8iuXAoTXpaGsybZ0xkjY83nitXDp580iiCVsa18zE8UdOlqNe9yY3tswtNucCD25bx301fUTr5HAA7K9Zm8s39WF+jKVgsbp9gu3zHMQZ/uo3c0pb4bFp88RuqNSNSSM7Uf0lLt/LrH0cJ+eRj6s5/l5DDB40XSpaExx6DYcOgatVCt8kTNV18tYJuWrqV+56dz40xy3lw67KMAOSvstFMbXs/K+regNUS4JGf1ZHquxZ8uFCg+AUFIiKF4EyvQ/YTd2B6Gvcf2sTT274m/M9/V0UEBcEDD8Czz0LdugVul6MF0wpaGM0nK+j+8w988QWJ731I+JZNGU/vL1OF6Tf05pv6N5EeEJjx/Cf9W9KmjnvmhYBj1XcDLPB2n2bcdm0R+6xFMnHm/K05IiKZ5JdjwoKRJr1jgyhW7Y7PceJOCwjk4xo38HH11nxRI4HrFr4HP/4IH35o1Ce56y4YNQquv97ptrlzgqMjuTVGffk7YSFB3l9q/tIlWLkSPvrImFCckkI4kGYJYEP1xnx+bUeW122TJQCxOZWU4tam5bdaBow8IqVLFndrO0S8iQIRkUwcXVa5cf/pvAMWi4UhZ6NY/8NaAjfGwOTJxknxq6+MW/v2RkDSoYOxPNgB7pzg6MgJ8uzFS9z//ibvHKqxWmHbNiP4WLDASM9v07AhB+/oxb3nanI8LO/eDndPDtVqGZGclEdEJBNHTwAxf59yPA/EDTcYq2x27oQHHzTykKxZYyRGa94c3nvPKC2fD3fWdHHmxJdfJV+HC8m5wtGj8OqrRk6X5s2NejAnT0KFCkaRuq1b4fffqfryeAKqVjW9Ho5Wy4jkpEBEJBPHTwCO9WJkOcE3bGissNm3z1hVExpqXMU/9phRx+Shh4wy82lpdvflzoRlzpz48qrk63AhucI4f97I3dKxI0RHw8iRsGuXkcPl3nvh22/hyBGYNs0oVmexeEWyNyi6BQJF3EmBiEgmjp4oHJ0MavcEX726ceV+8KCRJr5ePbhwwQhS2reHatVIHz6cHUtWs2TbkSy9Cu6q6eJseXp7mT8dKiRXUGlpRqr9fv0gKsroWfr+e2NI5sYbYfZsY/n0Z58Z6feDgnLsomODKIZ2uJqIEllf82Q9HG8JiES8iVbNiGRjO6ECdueA9G9Tg/b1KjLii984nph3XReHltJarRATY0xmXbQIzp7NeOlgZBSrrmrJ1iY30X3QPXRuEg24J9dHfj+3PW/2bkL3JlXct7T4jz+MeR/z5xu9HDa1axvBSN++UKtWvruxtyw5skQQD7epweD2dTx+4vfVZdIiNlq+K1JI9k4UARayJKCKDA3i7IVLuRasK8hV9sqtB/jy/z7gzt3r6LBvEyGXUzNe+yckjAsdO1Olz93GJNfy5Z3/wfJh7+fOi22psEuXFp88CQsXGgHIr79eeT4yEu67zwhAWrd2eJKvty5L9tXEcSKg5bsihdaxQRRhwUHE/H2K/SeT+N/O+BxZMBMuXAIg4t+AxKagdV3S0q1MWLmfuDqt+K5OK0JTL3Jj7DY67dtI+32/UDr5HKWXLoKli4w3NGliDEu0aAEtW8JVVzl8cs6NLT38xv2nGbRgK2cvXrK7XfZKvoVaDXLmjDFXZts2Y6nz//4Hly8brxUrBl27GsHHHXdAiHOTOJ1Zju3pIMCZtP4ivkyBiEg2jvYK2E5kIcUC+OTRlpw6n1KoK9vsS2gvFC/Byro3sLLuDQSmp9H86B/cum8zfRP3UnLPLti+3bjZlC5tBCW2wKRFiwL1mgQGWGhTpxyv9LzG7lCNvbkMjk52rZKcAMt/M1azbNtm/HvgQM4Nmzc3go/evY0VMAXkTJVbBQUi5lAgIpKJI+m3M7MC8YkpBFgsdG9SpVDHzqtXIS0gkM3Rjdgc3Yio3k3oXunfJcCbNhm3bduMLKIrVxo3mxo1oFEjI8V8pUo5bxUqGL0OdjhTyfefpJQrQ1dWK+EpSUQnHKfaP3HUPxFLwxN/0+j4fipOzqWsfa1a0KyZcbvzTmOFkQsob4eI93N7IDJjxgymTJlCfHw8jRs3Zvr06bRo0cLdhxVxWl7d+PlxxYnMqRwTFctCnz7GDSA1FXbsgM2bjcBk82bYs8fobbDX42ATEGAEI9kDlKgoKFmSLkFBdKoewL5TSSQmpRARFEDtsEACVu2AxechKYlDfx+DHX/zadJZyl04S9S505S8ZP/zSMfChVpXUap1iyuBR5MmxvwPN1DeDhHv59ZA5LPPPmP48OHMmjWLli1b8sYbb9C5c2f27t1LhUJ0t4q4gyPZRXPjihOZbQltfELeK3Hs5pgoXhyuu864PfGE8dzZs0ZPyd69EBcHx44Z/9pux49Derqx7DU+3tjWjgDg6jzaXe3fW3YnQyM5ElGRP8tVY2dUbXZVrM2e8jWJKB/psaqyhfpMRcQj3BqITJ06lQEDBvDwww8DMGvWLJYtW8aHH37IqFGjcmyfkpJCSsqVWg+JDmSbFHGVgvRquPJEZssxMXD+1lxX4jiVYyIyEm65xbjZk5ZmrFDJHJzYbvHxcPGiUbfFNnE0MNC4hYRAqVJQsiTHLgXw2V/nOFsijFOhkZwuGcHxUmWJCytLcpD94OyCB+dkuPwzFRGXc1sgkpqaypYtWxg9enTGcwEBAXTo0IGYmBi775k0aRITJ050V5NE8uRsr4Y7TmTOzMsotMBAYwgmKsrIQFoAv2w/ypsLtzv9Pk/OyfDoZyoiTnNbIHLq1CnS0tKoWLFilucrVqzInj177L5n9OjRDB8+PONxYmIi0dHR7mqiSBb5deNn564TmW0JrbfnmEhLt3LqXMGq1Xp6TkZR+UxF/JFXrZoJDg4mODjY7GaIn8qvG98KDOtQhxrlSrr9RObtOSacTXxmY+acDG//TEX8ldsCkXLlyhEYGMjx48ezPH/8+HGioqLcdViRQlE3fv6cXeJsozkZImKP2wKR4sWL07x5c1avXk2PHj0ASE9PZ/Xq1QwePNhdhxUpNHXj586ZJc7ZU+IrmBMRe9w6NDN8+HD69evHddddR4sWLXjjjTdISkrKWEUj4q3UjW+fo0ucx95enwda12DLwX8UzIlIntwaiNx3332cPHmScePGER8fT5MmTVixYkWOCawiUjQ4utqlXFgwxYsFKJgTkXy5fbLq4MGDNRQj4iMcXe1y4NQFN7dERHxFgNkNEJGio0XNMkSF57+ybeEvh0jLXq5YRMQOBSIiRURaupWY/adZsv0oMftPe/xEn5ZuZXPsGZpWi8x3W1tFWxGR/HhVHhERsc9e3o5KHlyFUpC8IapoKyKOUI+IiJez5e3IHgTEJyQzcP5WVuyMM+X4+XE2e6rZPT4iYg71iIiYwDbMkd/S1rzydlgxkoRNXLqbjg2i3LI01pm8ITYFyZ5qdo+PiJhHgYiIhzlz0s0vb4eVK/MxXLlU1hYobdh30qmekIJkT80tU6utx2dm32YKRkR8mAIREQ9y9qTr6DwLV87HKGgdGXA+e6rZPT4iYj4FIiIeUpCTrqPzLFxVzbagdWQG33IVba4q53T2VLN6fETEeygQEfEQZ066LWqWYXPsGeITLlKmZHH+SUq1Gxy4spptYeaDDOt4dYF6LDzZ4+PovBwR8SwFIiIe4ujJdNXueIZ/vj3foRFXV7N1tI6MK4/vqR4fTYYV8V5aviviIY6eTD/ccMChgCAqIsSlEzmd7XVwxfFb1CxDpYgQcgtjLBgBQ2F6fMxe/iwieVOPiIiH2E668QnJuQ5/BFggr/QZZUoGMfaOhkSFu35owdFAqaDzQewJDLAwvlsDBs7figWyfC6u6HHRZFgR76ceEREPsZ10gRw9ALbH+eXwOpN0iajwEFrXLuvyE6ejvRPDOl7t0uN3aVSJmX2bERWRNRByRY+LM/NyRMQc6hER8SDbSTf7fIWoiBBuaxTFBxsO5LsPd6VOd3fvRF66NKpExwZRLp9MasbyZxFxjgIREQ/L7aS7OfaMQ4GIq5bq5ta23AIld0/sDAywuHyJrqeXP4uI8xSIiJjA3kk3vzkkrlyqmxd39U6YwVs+UxHJneaIiHgJR+aQuGtoxF5bWtcuS/cmVdwyH8VTvOkzFRH7FIiIeBF3Ttz0V/pMRbybxWq1em2t7cTERCIiIkhISCA8PNzs5oh4jLKAup4+UxHPceb8rTkiIl7IHRM3/Z0+UxHvpKEZERERMY0CERERETGNAhERERExjQIRERERMY0CERERETGNAhERERExjQIRERERMY0CERERETGNEpqJSK6UjVRE3E2BiIjYtWJnHBOX7iYuITnjuUoRIYzv1kD1WUTEZTQ0IyI5rNgZx8D5W7MEIQDxCckMnL+VFTvjTGqZiPgaBSIikkVaupWJS3djrxqm7bmJS3eTlu619TJFpAhRICIiWWyOPZOjJyQzKxCXkMzm2DOea5SI+CwFIiKSxYlzuQchBdlORCQvCkREJIsKYSEu3U5EJC8KREQkixY1y1ApIoTcFulaMFbPtKhZxpPNEhEfpUBERLIIDLAwvlsDgBzBiO3x+G4NlE9ERFxCgYiI5NClUSVm9m1GVETW4ZeoiBBm9m2mPCIi4jJKaCYidnVpVImODaKUWVVE3EqBiIjkKjDAQuvaZc1uhoj4MLcNzdSoUQOLxZLl9sorr7jrcCIiIlIEubVH5IUXXmDAgAEZj8PCwtx5OBERESli3BqIhIWFERUV5c5DiIiISBHm1lUzr7zyCmXLlqVp06ZMmTKFy5cv57l9SkoKiYmJWW4iIiLiu9zWI/Lkk0/SrFkzypQpw88//8zo0aOJi4tj6tSpub5n0qRJTJw40V1NEhERES9jsVqtDpfQHDVqFJMnT85zmz/++IN69erleP7DDz/kscce4/z58wQHB9t9b0pKCikpKRmPExMTiY6OJiEhgfDwcEebKSIiIiZKTEwkIiLCofO3U4HIyZMnOX36dJ7b1KpVi+LFi+d4fteuXTRq1Ig9e/ZQt25dh47nzA8iIiIi3sGZ87dTQzPly5enfPnyBWrU9u3bCQgIoEKFCgV6v4iIiPget8wRiYmJYdOmTdxyyy2EhYURExPDsGHD6Nu3L6VLl3bHIUVERKQIcksgEhwczMKFC5kwYQIpKSnUrFmTYcOGMXz4cKf2Yxs10uoZERGRosN23nZk9odTc0Q87ciRI0RHR5vdDBERESmAw4cPU7Vq1Ty38epAJD09nWPHjhEWFobF4r+Ftmyrhw4fPqxJux6iz9zz9Jl7nj5zz/OXz9xqtXLu3DkqV65MQEDeKcu8uuhdQEBAvpGUPwkPD/fpL6430mfuefrMPU+fuef5w2ceERHh0HZuzawqIiIikhcFIiIiImIaBSJFQHBwMOPHj881I624nj5zz9Nn7nn6zD1Pn3lOXj1ZVURERHybekRERETENApERERExDQKRERERMQ0CkRERETENApERERExDQKRIqolJQUmjRpgsViYfv27WY3x2cdOHCA/v37U7NmTUqUKEHt2rUZP348qampZjfN58yYMYMaNWoQEhJCy5Yt2bx5s9lN8lmTJk3i+uuvJywsjAoVKtCjRw/27t1rdrP8yiuvvILFYmHo0KFmN8V0CkSKqGeffZbKlSub3Qyft2fPHtLT03n33XfZtWsX06ZNY9asWYwZM8bspvmUzz77jOHDhzN+/Hi2bt1K48aN6dy5MydOnDC7aT5p3bp1DBo0iI0bN7Jq1SouXbpEp06dSEpKMrtpfuGXX37h3Xff5dprrzW7Kd7BKkXO8uXLrfXq1bPu2rXLCli3bdtmdpP8yquvvmqtWbOm2c3wKS1atLAOGjQo43FaWpq1cuXK1kmTJpnYKv9x4sQJK2Bdt26d2U3xeefOnbPWqVPHumrVKuvNN99sfeqpp8xukunUI1LEHD9+nAEDBvDxxx8TGhpqdnP8UkJCAmXKlDG7GT4jNTWVLVu20KFDh4znAgIC6NChAzExMSa2zH8kJCQA6HvtAYMGDeL222/P8n33d15dfVeyslqtPPTQQzz++ONcd911HDhwwOwm+Z19+/Yxffp0XnvtNbOb4jNOnTpFWloaFStWzPJ8xYoV2bNnj0mt8h/p6ekMHTqUNm3a0KhRI7Ob49MWLlzI1q1b+eWXX8xuildRj4gXGDVqFBaLJc/bnj17mD59OufOnWP06NFmN7nIc/Qzz+zo0aN06dKFe+65hwEDBpjUchHXGjRoEDt37mThwoVmN8WnHT58mKeeeopPPvmEkJAQs5vjVVRrxgucPHmS06dP57lNrVq1uPfee1m6dCkWiyXj+bS0NAIDA7n//vuZN2+eu5vqMxz9zIsXLw7AsWPHaNeuHa1atWLu3LkEBCiGd5XU1FRCQ0NZtGgRPXr0yHi+X79+nD17liVLlpjXOB83ePBglixZwo8//kjNmjXNbo5P+/rrr7nrrrsIDAzMeC4tLQ2LxUJAQAApKSlZXvMnCkSKkEOHDpGYmJjx+NixY3Tu3JlFixbRsmVLqlatamLrfNfRo0e55ZZbaN68OfPnz/fbPxbu1LJlS1q0aMH06dMBY7igWrVqDB48mFGjRpncOt9jtVoZMmQIixcvZu3atdSpU8fsJvm8c+fOcfDgwSzPPfzww9SrV4+RI0f69bCY5ogUIdWqVcvyuFSpUgDUrl1bQYibHD16lHbt2lG9enVee+01Tp48mfFaVFSUiS3zLcOHD6dfv35cd911tGjRgjfeeIOkpCQefvhhs5vmkwYNGsSCBQtYsmQJYWFhxMfHAxAREUGJEiVMbp1vCgsLyxFslCxZkrJly/p1EAIKRETytGrVKvbt28e+fftyBHvqTHSd++67j5MnTzJu3Dji4+Np0qQJK1asyDGBVVxj5syZALRr1y7L83PmzOGhhx7yfIPEr2loRkREREyjGXciIiJiGgUiIiIiYhoFIiIiImIaBSIiIiJiGgUiIiIiYhoFIiIiImIaBSIiIiJiGgUiIiIiYhoFIiIiImIaBSIiIiJiGgUiIiIiYpr/B5H3vKj73z9KAAAAAElFTkSuQmCC"
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[ 0. 1.11490357 1.00197225 -0.0042044 ] 0.45683227934303705\n",
|
|
"The estimated coefficients are a= -0.00420440206943242 , b= 1.0019722513203924 , c= 1.1149035682964386 and d= 0.45683227934303705\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 61
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### 2.1 `PolynomialFeatures` for 2-dimensional features <a class=\"anchor\" id=\"section2_1\"></a>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Exercise 14** : Examine the next 3 cells and their outputs. Foir an output $X=(x_1,x_2)$, what do the output of `PolynomialFeatures(2)` and the output of `PolynomialFeatures(2, interaction_only=True)` correspond to?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:57:11.033033Z",
|
|
"start_time": "2025-01-22T09:57:11.029811Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"XX = np.arange(6).reshape(3, 2)\n",
|
|
"print(XX)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[[0 1]\n",
|
|
" [2 3]\n",
|
|
" [4 5]]\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 62
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:57:11.899363Z",
|
|
"start_time": "2025-01-22T09:57:11.893990Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"poly2 = PolynomialFeatures(2)\n",
|
|
"poly2.fit_transform(XX)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"array([[ 1., 0., 1., 0., 0., 1.],\n",
|
|
" [ 1., 2., 3., 4., 6., 9.],\n",
|
|
" [ 1., 4., 5., 16., 20., 25.]])"
|
|
]
|
|
},
|
|
"execution_count": 63,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 63
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2025-01-22T09:57:12.753351Z",
|
|
"start_time": "2025-01-22T09:57:12.748167Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"poly2_bis = PolynomialFeatures(2, interaction_only=True)\n",
|
|
"poly2_bis.fit_transform(XX)"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"array([[ 1., 0., 1., 0.],\n",
|
|
" [ 1., 2., 3., 6.],\n",
|
|
" [ 1., 4., 5., 20.]])"
|
|
]
|
|
},
|
|
"execution_count": 64,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 64
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"### Answer for Exercise 14\n",
|
|
"The output of PolynomialFeatures(2) corresponds to $[1, x_1, x_2, x_1^2, x_1x_2, x_2^2]$\n",
|
|
"\n",
|
|
"The output of PolynomialFeatures(2, interaction_only=True) corresponds to $[1, x_1, x_2, x_1x_2]$"
|
|
]
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "code",
|
|
"outputs": [],
|
|
"execution_count": null,
|
|
"source": ""
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.9.7"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|