1177 lines
115 KiB
Plaintext
1177 lines
115 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Your Turn\n",
|
||
"\n",
|
||
"In the previous video, you saw an example of working with some MNIST digits data. The MNIST dataset can be found here: http://yann.lecun.com/exdb/mnist/.\n",
|
||
"\n",
|
||
"First, let's import the necessary libraries. Notice there are also some imports from a file called `helper_functions`, which contains the functions used in the previous video."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"import numpy as np\n",
|
||
"from sklearn.decomposition import PCA\n",
|
||
"from sklearn.preprocessing import StandardScaler\n",
|
||
"from sklearn.ensemble import RandomForestClassifier\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"from sklearn.metrics import confusion_matrix, accuracy_score\n",
|
||
"from helper_functions import show_images, show_images_by_digit, fit_random_forest_classifier2 \n",
|
||
"from helper_functions import fit_random_forest_classifier, do_pca, plot_components\n",
|
||
"import test_code as t\n",
|
||
"\n",
|
||
"import matplotlib.image as mpimg\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import seaborn as sns\n",
|
||
"\n",
|
||
"%matplotlib inline"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"`1.` Use pandas to read in the dataset, which can be found in this workspace using the filepath **'./data/train.csv'**. If you have missing values, fill them with 0. Take a look at info about the data using `head`, `tail`, `describe`, `info`, etc. You can learn more about the data values from the article here: https://homepages.inf.ed.ac.uk/rbf/HIPR2/value.htm."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 19,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df = pd.read_csv('./data/train.csv')\n",
|
||
"df.fillna(value=0, inplace=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 20,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>label</th>\n",
|
||
" <th>pixel0</th>\n",
|
||
" <th>pixel1</th>\n",
|
||
" <th>pixel2</th>\n",
|
||
" <th>pixel3</th>\n",
|
||
" <th>pixel4</th>\n",
|
||
" <th>pixel5</th>\n",
|
||
" <th>pixel6</th>\n",
|
||
" <th>pixel7</th>\n",
|
||
" <th>pixel8</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>pixel774</th>\n",
|
||
" <th>pixel775</th>\n",
|
||
" <th>pixel776</th>\n",
|
||
" <th>pixel777</th>\n",
|
||
" <th>pixel778</th>\n",
|
||
" <th>pixel779</th>\n",
|
||
" <th>pixel780</th>\n",
|
||
" <th>pixel781</th>\n",
|
||
" <th>pixel782</th>\n",
|
||
" <th>pixel783</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 785 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" label pixel0 pixel1 pixel2 pixel3 pixel4 pixel5 pixel6 pixel7 \\\n",
|
||
"0 1 0 0 0 0 0 0 0 0 \n",
|
||
"1 0 0 0 0 0 0 0 0 0 \n",
|
||
"2 1 0 0 0 0 0 0 0 0 \n",
|
||
"3 4 0 0 0 0 0 0 0 0 \n",
|
||
"4 0 0 0 0 0 0 0 0 0 \n",
|
||
"\n",
|
||
" pixel8 ... pixel774 pixel775 pixel776 pixel777 pixel778 \\\n",
|
||
"0 0 ... 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"1 0 ... 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"2 0 ... 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"3 0 ... 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"4 0 ... 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
" pixel779 pixel780 pixel781 pixel782 pixel783 \n",
|
||
"0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"1 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"2 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"3 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"4 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
"[5 rows x 785 columns]"
|
||
]
|
||
},
|
||
"execution_count": 20,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df.head(5)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>label</th>\n",
|
||
" <th>pixel0</th>\n",
|
||
" <th>pixel1</th>\n",
|
||
" <th>pixel2</th>\n",
|
||
" <th>pixel3</th>\n",
|
||
" <th>pixel4</th>\n",
|
||
" <th>pixel5</th>\n",
|
||
" <th>pixel6</th>\n",
|
||
" <th>pixel7</th>\n",
|
||
" <th>pixel8</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>pixel774</th>\n",
|
||
" <th>pixel775</th>\n",
|
||
" <th>pixel776</th>\n",
|
||
" <th>pixel777</th>\n",
|
||
" <th>pixel778</th>\n",
|
||
" <th>pixel779</th>\n",
|
||
" <th>pixel780</th>\n",
|
||
" <th>pixel781</th>\n",
|
||
" <th>pixel782</th>\n",
|
||
" <th>pixel783</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>count</th>\n",
|
||
" <td>6304.000000</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>6304.000000</td>\n",
|
||
" <td>6304.000000</td>\n",
|
||
" <td>6304.000000</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" <td>6304.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>mean</th>\n",
|
||
" <td>4.440355</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.139594</td>\n",
|
||
" <td>0.142291</td>\n",
|
||
" <td>0.026967</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>std</th>\n",
|
||
" <td>2.885613</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>5.099940</td>\n",
|
||
" <td>5.531089</td>\n",
|
||
" <td>1.675547</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>min</th>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>25%</th>\n",
|
||
" <td>2.000000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>50%</th>\n",
|
||
" <td>4.000000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>75%</th>\n",
|
||
" <td>7.000000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>max</th>\n",
|
||
" <td>9.000000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>253.000000</td>\n",
|
||
" <td>253.000000</td>\n",
|
||
" <td>130.000000</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>8 rows × 785 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" label pixel0 pixel1 pixel2 pixel3 pixel4 pixel5 pixel6 \\\n",
|
||
"count 6304.000000 6304.0 6304.0 6304.0 6304.0 6304.0 6304.0 6304.0 \n",
|
||
"mean 4.440355 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"std 2.885613 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"min 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"25% 2.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"50% 4.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"75% 7.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"max 9.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
" pixel7 pixel8 ... pixel774 pixel775 pixel776 \\\n",
|
||
"count 6304.0 6304.0 ... 6304.000000 6304.000000 6304.000000 \n",
|
||
"mean 0.0 0.0 ... 0.139594 0.142291 0.026967 \n",
|
||
"std 0.0 0.0 ... 5.099940 5.531089 1.675547 \n",
|
||
"min 0.0 0.0 ... 0.000000 0.000000 0.000000 \n",
|
||
"25% 0.0 0.0 ... 0.000000 0.000000 0.000000 \n",
|
||
"50% 0.0 0.0 ... 0.000000 0.000000 0.000000 \n",
|
||
"75% 0.0 0.0 ... 0.000000 0.000000 0.000000 \n",
|
||
"max 0.0 0.0 ... 253.000000 253.000000 130.000000 \n",
|
||
"\n",
|
||
" pixel777 pixel778 pixel779 pixel780 pixel781 pixel782 pixel783 \n",
|
||
"count 6304.0 6304.0 6304.0 6304.0 6304.0 6304.0 6304.0 \n",
|
||
"mean 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"std 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"min 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"25% 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"50% 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"75% 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"max 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
"[8 rows x 785 columns]"
|
||
]
|
||
},
|
||
"execution_count": 21,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df.describe()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"`2.` Create a vector called y that holds the **label** column of the dataset. Store all other columns holding the pixel data of your images in X."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"y = df['label']\n",
|
||
"X = df.drop('label', axis=1)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"That looks right!\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"#Check Your Solution \n",
|
||
"t.question_two_check(y, X)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"`3.` Now use the `show_images_by_digit` function from the `helper_functions` module to take a look some of the `1`'s, `2`'s, `3`'s, or any other value you are interested in looking at. Do they all look like what you would expect?"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/home/workspace/helper_functions.py:63: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
|
||
" mat_data = X.iloc[indices[0][digit_num]].as_matrix().reshape(28,28) #reshape images\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAADlCAYAAABkgI3pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzsnXd8FNX6/98zu8luekJCKiRAGr23UAKIioCgSBdBuSAdFbA31Kv3KiiggoCKWLBgowo2egfpJRAg1AABAkkgfXfm98eQTUIKJJnd5H5/582LV3Zmzs7z7O7M55zznOeckVRVRSAQCASVj1zZDggEAoFAQwiyQCAQVBGEIAsEAkEVQQiyQCAQVBGEIAsEAkEVQQiyQCAQVBGEIAsEAkEVQQiyQCAQVBGEIAsEAkEVwViWws6SSTXjZi9fipBFOjlqtiT8EH4IP4Qf/9f8KI4yCbIZN9pIXcvnVTnYoa4Rfgg/hB/Cj/+TfhSHCFkIBAJBFUEIskAgEFQRhCALBAJBFUEIskBQiRjDatL9cAo/nNvKiZltMUSFV7ZLgkqkTIN6JZE8IoaUrpn4LzfjcjkXAPPxJCxBPljcnYuUT+xkon23A2xIiCDq3+lY447r4UYRDD4+pN4XzaUY6BX7j21/K/dTDPFIpuuR3nwe+R0TYgdjOXNON7sB2zz5Omwjw87EsmV7fSImbS+x7ImZbQE4OXAeAB3Hj8Z1yY4K2TfWqUXcpADeuO8XBnskFTnuJBk4lXuT4WMnAWD+az9qbk6FbOqB0rEZQz77jX7uZ2m+eRTGg+5k+yoYgjOo84GKuuugLnaMQYGc+tiPKQ3+5qeLLbiRY+LKvgDczhcdCHdOVfH+ZpsudovjYvcaTPReBpiJH/AJBx/Opc8fEwGoN/OarZyUkYXl3Hm7+XE7ySNjUB9KBmBBw29oajJRe/ko/Lca8DiXjfPek1hTUnWzJ7u5kdK7EZfutQDwYex3dHe9gZNkIFe12so9faE9f69pRvi/D6Ckp+tmv6qgiyCnRkFcpwUonRRkZBQUVqb70sp8gSCDCwoKgO1Y3t+9/ht4i0F6uFCI7J6tME+5wJLopRgpfoTTqsKf9ZYCrhwfW4PaL+ojyCdmtuWPME1cvw7bCGEbYWBp79hXaGvTnPl0W9K0Qj5c7BZE3CMfAdz65guTq0Kw0cQfn30CwEPHHubshjBC39xaIbtlRWrRgK5fbefXc9rnXdZwNr6yC+BMXMcvORmTyb7sYPq6Xafzj2Nx3aWP3WOTa3MsZg6t9wziRrqZ2tWvUT0mgXfCltrK1HUyAfB7pitzVrfHejVZH+O3caO29jdNyaLT7hFsbbmQE72064de+eUO5uTySruHsFy8ZBc/8pBaNaLuvDg+CJyDQcrrQGvfxanen0JvyFBySFVy6LRlPLUH79fF7rF3GxL3yMeF9inAgIT7UVStonwvdCkzgzfB0E20P/kUvp/Zr6LMwxBRm4ShQdqGpD3MwztexWvRdgy+1chpXAvDuj262dNFkJGg2UcTCVl3g8QuHqUXbZvCvtaLAJnBa0cTFfdPqeXLg2nyRX6LXsGmLBOzL9zD7kN1CNwkY75mLVTOapZYN2ceudUsutjN6NPG1tIddiYWuCXKDibwp3jGPd6FNl4JTFv5EG4XJNLq5/JSh98AmHX4Hl5s+DsDPS4CsCx6KZvDzIxxG0XEG/tRMjLs7qPSqRn3zt7MZJ/jTPbRekjPX+rI2i/a2sr47c/gxONOdH5gFuZk/Vvw/i/J+B06AEAmMJkYACSTiRu9m/Kvt5bx3z3dCb+6V3fbedRrewqABIuRoIfj6OcUi7VNfW1fPzNzH1xAV5dsGjk7gdlkFx+kFg148vsVvPvfISx/czpBRnfWZDox6eAAALIPeQMQ3OYCH0YuprGzGVfZmcOxX3D/A2Nw/r3iNaVXqNbabjbvaWqsyW/5SlvzBX9C01Ecf96Zw50+I7dnCnxWYbM2UobG0HjCAXpV035rg6RgVWW8DftoY9J6/fKtCO9Fayb7pvpjlnIJNK7inMUbq5of/X1my2Ain9hdLj90EeT+921h+Q8dYOdBQnaWXta0IRAFlTkp4dR/4yL6SGFhzm4IpdvbI3E+ch5r0mWiuFpsuZShMRzOzaH+u1d08eNCbNEub7fgpmT0acOFWKmIWG/Zrt147dsesQl3+OIxRFByiONusF5NJnFiI37ZdZNwtFZEIPAL/gDU5BDfu0Xz3y+7A/B9y8/pYM7i0JCPePC3Ucgb7CdAoIW4Vkydjr/BFYMkM/q8JoQJk6Px31y4lS4/0pa2SyYTuaFiYZyyoGZn4707iSc8L/DRThfdzmusHYaadgNrshaKMNaswSe1fwBc823n5iBv1npNEZthtOsTnOg5Xzcfbkc2m7nwmkJf9zT6vjOXixZosXsAAc+rBMXFFSn/Up1BpDYP4LsZHxBqdOf0wxJRv1fcj9xt1Xi1ZmtqfXgIa1pasWWUfUdQkttU3NhtnHo3hs1D3sdLzg+v5vXiiyPAYKKba164xkA9p/RCZePum0dvWpXLF31ayEB65J1bMAZvL+7zi0NG4qu5PfA/b58ucuhb2nmtdyj3wLMb2ZQRiSXhtO4+FIwduy7ZQcQS6DYpLxShXXB5wrtlZlsttKEjd4q3KunphPbXyvT5dAJHe2rhi7QwM966elKU91+ej7/BlU9SajP/m56ETNPEVlb2FSkbveA6iosTlfXkx+r7s3Q7l+XUmULb6Y2CCDK4llBaY0zMegA2ZRlRMzJ18yWPK0Obsb/1XNt2u98mEzV2Z4n3jiXhNDd6BRNqdOe85Sa1fy1etMpKyLtbOfh3Q9S0Q7qcrywcHjobBU2Ms1QLf2cE4CRZmHn6Pup4JLM2LhqADzt8D0CuWlg2e7tdL7Qdl1P+76Tigty6EWN857L8eIc7Fs1uHsEo77+JPTiQoK8P3VEw7YnSsRkv+31K89lPUwN9K4ZhZ2JLHci7nfZtj+hqv6yEf2eFntrr+uMOkbTcS9cBm4JILRtSx2kzUy515nhPX0IuFfPdywauPtma7mM3s/kVT0y/6RQ8vkX1vSqR1Z8k+sThEstY/Dw4nJuD6UyyXXpxAImxpd9+xz9qw6pqmlhOPDCI4CT9rhPJaOT64FaseG064A5A1MZhRI0r/bs21ItkytgfAXjzYjec/tQv5Kj+43gxvp2mf00gargWbnDmDOeBKLTtOUQVKX/9iRh6vzPbth2Xo/Dsv8ZioHxxZV1ayLuygu+q3COz/0RGJnVdIO5pCXqYLh+ygS5ztrL4RhA1p+/UrfUVMWn7rVZw8V2u4sjo04avw7Qu6bAzsQRvrNyngM+ruZaHaz0O++wjyLmeJu7fPpbwSclYLl0otozB0523nlvInF69MMXpK8YAnt9tx/O74gc88zh3nwdHsoOKtGrtxeAdI6mNFs+WXbVW89h7/gYg0ZpB4Ax948cJi+oTHzuXgmJce9CBUt+T3aMV42b9yAD3VE7l3mTXt00INO1GrhmM9cQpXf0rCdVJuz9y9vnods6u48cC4B6fQtSRu4/9Jk1sx64XP76VCQLrMs2MWzaC8HXlDzlWXJB3HuSLezoSxpk7tiRGeZ0uMS7jSC493YYXfGcT8/J4fCz2H6ktjYJx51PT6lU45a2i9D7aBynupN3Ob1y7m7C1lHqtJH4ZzPzEzliPVV6lbWlo/5Qqr+OwJVumvUnBeMjdtv/Ko00AmOwzB4DO658icpN+I/kXnm9HfKwWorpouamFKe7UMo6OYPKH39LbLYP43HQGTn+egNlbkf18SY4JxNsBgpzVqzV7es4iyapQ8y/9Bp5dlmoDX2XpsVvuacHy56ahYCJXhfuPPIL8rh/hayo2/iMmhggEAkEVQZeQheV8YqnHMx9qDYDMHkAmZN0NPcyWGdlsBuDRf/3F4FP34fN1xWozvbkQKxGxpHJ9yJ4RhCnbcRMQbufk9Bg2NZ9O+3VPEanYN+e2NFqGnrW7Dd8F23j3p1hwdiI0JT901nV84V6bx26zrnadO2pZR+ctN+k273mi/lP6GIpkMlHzm0Rb6/jJCZPwX+HYnHUAt8nncZWdeO1CB6QtRQeAHcXFKe0Y8sRfBBi0MFLrf4YQOPA0SlbFw1u6ZVmUxrW6mhkFldgDA/Dcqc+Mq7Jy8kstKL+y2pd0faEzJtU+yf5lobIH9AAuP5M/eu90015DWCVjrBECgLRIIS5yNj37jSdyhz4TDsqDIcCfhbV+o+6qcUShfwy7INa0NCQnZ2QfLSZ65slIpngUTrB9asyv/PRQC+RHbuoy2FptmhudX3uYMwn+dxRjgGPzGvJ7jQWczL3JgPefJ6ASxBigk599ZvTeLUkT2wGw8ulpBBhMtowMv/ddULL0ycZxiCDLMVpaiIxE1m8BeGK/GGWJPnh48HbzZQCctGTiuuNkpWZ5QOEBPaBMmRl64uqca0t6rxSMBgDG1ljD4IRuOF28jkWpvF9HkiRMklPpo346kjSqJf+8nDdS/0eR4094XuAJzwv09ukDOgiyvGkvpvshitOlljv7hiZAO+6dDrjRb9rzBMypHDEGkCWFXNXKro+b441jx36uPxHDrhe1mYTKrZmLeRkZMvrl7TtEkB8M09KLFFR8D+uX11kWkoY0pK/bBgA6TpmCR3LlhytqP5+feK/HhJCyIjlpuZduzjmVNthqrBVKj1XaBf30kuGEP1e5g6x5WFUFvx0OuT0IXpXIuMfb09NnPz1dbxZb5qwlA3Id13tROjVjw4jpAPjKLtRe8SRRlSjGAIoq80+2K95fO/YaKZhNAdrSA9FLxhE1Qf8BeLtfcZZ7WvCm/6eA1kKuDGQPD4ZPXMXR3GwAfDafs1tuaVkoOK26UtLdGkYCsKrelwBMT26Ec7x9Zk8WR0afNnR7cwOGW5VB1DtHKr3XAnClWx0SrRn47bzukGrKcuoMp1vD/MCONN/5S6HJIvce6YP0nh/O17NQz5ecN60nxtphvPPlPPwN2mOOaq94kqjRJYduJNW+164hsg4ADV1W2dVOcVyc0o6VT+dnUwDU/Wk80S/us8u14ZAmQH7rq3K6xVLNIMZ5b+C1y9q0S0ti8fmvlYmj090kk4ljTxZ+rtjmq+GoF0sfoNWTrBHXecn3CK3eHg9AkDkBsE/+c1nIrC5xPNcL5dBRh9q1XEoi+zZtc30iF0vibofOVIxdfkRb3W3ZKACixpa8HoL1ajJei+w7FpPWpDoA97rcYMlNf7vaKogxJNg2ePfzzUBe+6sfgCbGOsWMi9i0y1lvIy8+WSktZNlA6gytzfdjXHMAIl2PV+rSfQHbPAtta2tb3P1kEj0whARx9KE5hfZdXBZGIPYXZMloJH5GC/Y2nUW9jWOoPU8L1Vjs3NK6W3JLXx/LbqjtmlBNzg8LtN8/AK+LjplwkceJb5rxh+9C/sxwov6bWtZAZfcmE+/Nvy5eWzKIOg6IH6cMjaHFU3t5ptoR9mbLfDPoASL3ao0me/aaHNpCnpcSgfPuEw7tlmb2bsHGRvOIXj+CqLHaYKK1ktdRvX0FuFPT6uFK5U4IOZSjErDTMd/LjZWhHG80l4jfJxI1Qv/V/ipKrY6OmZ13O9cauOIp56e4WX6pDsoJh9m3dm5O/D2fAzKv/nskPpcqP55viKzDkm55y3I6roedGiFpS30CgzeMImpv+VZvKyt2/4RnRlqRb/37akaPEldysguSRK0XjvJ7pitRb6RiTUtzrP1iyOhTeLWqYWdiKyVckfBe4Wbg7KSuSNvsn2p26el2dAk8zvvXoqm92O7m/qfwGVR5+d+ymxtvfvE5BklmxrU6+K1yXEVQGoqnC/WcZeo5a1IVNdu++eEG32oEbPPk6JOfICMz6UJH29oWjsDugryo7QKUW/98Fzi2xjWG1WRh6Hpe+OxfWI9X4toZBbh9ic68JTgdyanXm7Ov3ReF9q2PK7pwit4YAvz54plZjKm2jWXvdNV1YRo9kN3ckN3cWBT5o8NtG6pXZ3qdnwssCl86V0fH6Gr/xNTGtDfLHM7J5K9BrbFeuaLr+cvLsXGFlz9Nb3J36+aUG79qfBa6hlzVyvJ0H4692MC+9m7DroJsrFmDtmaDrYXsaBKme3FTzSZoq/7LFurFyYHzisSU7U2uZ+EoWOPNI6g7vujat3oitWjA69tW09TZyH0Lnsfjh8pPOyyCLIMs4yO78O7pHg41bb1yhTGvPU2qkkn7/QNov38AAX+U3BrMddNvPMYYGMDyAR8A8Ny9jzp8MLM06oRdtr1elu6HyzrHZJqsyzTzydj+GNc4rnUM9o4hqyq5qpU5KZXz4Eazcy7tdoykxib7Lrj+v0bd1+Op6zrWdrGHfSjZ/Skh8plLpClm6m8eTJ339lSBJaaKIVd7MsSmLCOZuU643aG43ngt2s6ARTF4oYULShtMC5qhY06w2USwUaLNC2PxTrjDEyYczIWNNeim9AfA/LI7aoZ9l+g83U/L4hi3bESFFwoqD3YVZMv5RB4MaWFPE6Xi/1DVqenzyF+isyCOjWtbr1+/bTDN/us2WK8m80FEA2pxoGqKMdhSmf4b3hg3qkaIyxFYTp9lQI0Yh89+uxvyHjYBOCT1r9a8ozR1eprwNypnEoykliHVSJKkK4Ajh6DDVFWtLvwQfgg/hB//1/wojjIJskAgEAjsh1gPWSAQCKoIQpAFAoGgiiAEWSAQCKoIQpAFAoGgiiAEWSAQCKoIQpAFAoGgiiAEWSAQCKoIQpAFAoGgiiAEWSAQCKoIQpAFAoGgiiAEWSAQCKoIQpAFAoGgiiAEWSAQCKoIQpAFAoGgiiAEWSAQCKoIZXpiiLNkUs0OfLBNFunkqNlFHh4m/BB+CD+EH//rfhRHmQTZjBttpK7l86oc7FDXCD+EH8IP4cf/ST+KQ4QsBAKBoIogBFkgEAiqCEKQBQKBoIpQphhyWTD4VgNAzcxCqhkMwLExfgzusoWp1ffZyjlJBiYktuF4q2x7uVLpxM9vxaL75jPl6ADSMsy4/OUBQODv57GcOWdX2xl92lD7+Ti+DttI+OIxtv3t2x5hy/b6AJwcOK/Qe8IXjyFi0na7+iWoOhhrhJAVHYjztjgujmxKWoS10PFOrY+wYWd9fur1MWvT6zF37b347pXxXbQbNTdHFx+Of9iWhP7zaLxzMM/W/YshHpdLLR/10zginqm8a9QQ4E9ah9q8+t6X1HdOZlTfsai7Dlb4vLoKsuzqyrF3G+EXfo2eNQ5jkBQOpIXwTe3v88sgo6DYtnNVULirAcgSOTu1HXGjP6Hu5qGEDaj4l6I7qkRLk5UNTW59DzHan2uvZNN76nNUW7jNbqbzxBiKCi+39t/OyYHz6LhxNK5LdtjNrzxkNzcsLaMAuBjjQp3uCXxR5xfa/vAskVP3o2Rk2N2HysTg7UV28wjOjLTSqc6JQsc2JEQA4L7NleCvDmFNS9Pfvp8vsavjebbailt7Nhcpk61aSApaDcBIr4M80zceua9EZJeRRD6+F3R4cn3UonQa1BgCwHuHu/FOnCfOKZou+B7OtZW7+mQGe9t8jecJB3buZQMGT3eu9awHQGqETItuR1hVa/6tAu7ET3QicljFTekqyAmvNCGu70e2bRkZxTdfIHvE9eXS2hr478nlfBcjhx7Tyq5f3pyabK2Qbauq8GnLb3iHpmV+r7F2GAnDQjAng//sivlRHO4JRtZlutPF5Wah/X4GF759430elZ/Fd4F9RPnrEkT3TlyIlYhYUjHbufe2INfDaBP25JEx5LrnV75+D56ni388L/kuuO2dLhx7dA4PfvsY7DtSMSducebHRhxs/2WJx50kA7mqtdhjUatHEzXyH138KETrRnRfuJFR3n/bGioFGyxyzQ3avk4yc8aEs2hGd/2vE4uF3amhxHvsxywpLLnRmM9+fqBQEY/TKj5fanZzurUk8Ylc4mIX0iHyBJednVGzK967VXcdpEbfO5fLHNIMgBu1FfwrbLUoqY+1xT0xh6QWZjKaZqJkG2gScY6lkX8AG0p8n5eXPg0HXQU5/KvLtG04lO0tv7Ht6xHXF/5bHQCnDfupYTmLIaI2o94/oB0/+jBhsw4WaDOXn7F7h1CDw3dVVm3XhLQ6LmT3T2Ft8y/wlM28fy2atbP1z08MnraV93cNYcqEbL5t/gX1nPNr9zCjM9+9/j4PNJlM5FP6t0jDF48p0jIediYWKFmsh52J1SVkcWqgzOHuH5P6odat9TPsRkbCIMlY1fxf/K9MFwCeO9iX3FwDRzt8U+i4HnzQ/KdCPbPb0XpqxR8/+MBsYsdOovpc/cTQUD+K13/4klYmiV3ZMoPXjsbtuHORcnV6JLAkYhXjvU8y8a05jHyyExfa3tDND2tKKqkdYErAw6hBfij7jhBaSuPI+Y9/kNu1g1jYdDiKqGw7VFSlsLLDHMBE6OrcO5YtK3Ljuiz5z/tkqVDbyb3I8QxFu45Hnb2fUzOjcb6hsO6LzwDIzHbSxQddBdkafxL/h6A3rQoYOAucBUAFDNERPLx0K8M9zwEyl/6oSfCN8sdRJZOJBx/SbpQ9bb/k52OBvPZ7fwyZEoE7FVJrGcjyV232AR7tvpERPnMINboTn5tOlqriI8l8sfReamGflqph3R5qrINXQvqQ3CUUgMv35xDXdT5hRmf6d9zBQW8vrCmputqNmLSdcLTYcfBG9VZrVev6duwzGoBNc+YXes+pafVwpeKVg+dhJw50NdDK5ArAZ6k1+epMW9vx7OX+uF5R8Np8WvPv0hHOvNkOa3uFqVeaICWcr7APeuAkGVCcKhZWK8L5S4ydMZGdL33M8K8mEvVm8SKY/R50HDSO6GcO82nN9Yz038AT08ZT53l9r1Nr0mVIKj1uC5D2aFv+HD4NcNXV/t2gdGiKr2ELD8X3wmntvju/oQwYa4TwwtIfCDIWFeIex3oQFx9C6ErtGjCv2Ik7O7j0TDtbmeo/6PN92G1QryQuTTfwuOcZFKDB+lGET6tYiCC7S2PeDdAE5anEWD4J2cKgfp9oB4eW/L6pV2L4bkN76s26yIVZLvzT8jvqTDukS0u9NCyJF/BadAEAr0XQcsnj7Gn9DW/77ybq3bFEjdmpu83iWrsZfdoUEWKAjuP1ix0HztrKW98+gGTSWn7qzZt4ppwsUEJ7bbm1ZYisw8sDfwTgu83tiEzTr8fwWWInPgOypmi9tTM9PAnamk32s9cBuLY10FY2bJVWYcV+sYspvocAeGjEBrZ/pE8rCMCalob/7K08OLtFqS1SAI8ftrMrrB3yUxtobVI5/thc7l39Lwzr9ujmz91g8K3GC28uIsTgSnxuFqHLHJukdWFSLj6ymaNngohULuh3YtnApbluxJq1zfjcdHpsGY//MjM+uy5hPXWGKLWwPdnDg5CHTgNay9mQqY9yOFSQU4bGsKPFbBRgdYYP0c8n2W5GPTg7qja9UwtHls72D0ExQLWjVjz3XbLtVy5fJTJ9O6qnJ4ua/ACYdPTk7jBUr85z9f60dZWdkw0OsVuSGA87E6v7QJ71ypW7Lhs3yY8hHpc5acmk7qzLFB/RLR+nrlfD3ZyN+z+awIbe6mk7/a39dSfBVjavJ7U4oblNkE+mVwdSdPSobKRH5qCgoqDw8fU6OO8+oev3cycMfr5k/+BGL1etsnry2Um4rbD/oG9BWodoPe2AP/SrGAEkWeLaOW/ON7nJiVxPnv3vs4R/rvVAStKn1J4N2BqthQIbrhlD5OpduvjiEEGWWjQA4LN/zwScWJfpzifD+iIl7tfXkKpiOXWm0K7gafnbxX25V/o2oIHzRt1jlndD3L9rM9BjlW074tPzulZQJVH7+bgi+4adiSUppvAo/omZbWnfVhtU27K9foGQh51w1n6DFMUZ64lTup7a5ScvJk/9js9a9ka9Jcp3wmORJ3nRt0M/1CegggPP5cXg7cXkmL+QkQCZlcNjIc1x2USG6tU5+XQER+rNAWBfjgWv7Y65VgEMUeEAjPT/id3ZUG3HJV1tqxYLUeN2Muq13pBrwTftzuGgy/lRWUKW6VdB2F2QDQ2iyZ2m3ej1nJzIVa1MWDqc8G365BCa1uznk5Ta9PE4jJRV/kD/W1cboebok1N5J/JiT/G9PraFSB440g/ThYsOsV/cYF5e3LigCP8RVmAwMGwj4YypcOZFafxx34eAC3/faKj7ub2+3c7KiU3I8TZxt7dPRvWqMW8q7QdfRnn/za5smckvjcdjp2Pzb8+OiOTI8NkA7M6x8tzECZjP6xxakyRkk4nEcc2p3uM8PQMP8dmPWrbHC4/+DEBrk8pNJZsbjf1xSTitr33Amnzt7sp1ac7Pj3xIXq/ac6d+lVPVuOIEAoFAYP8W8tHR3sTVXQSAAjRaP5qIZ/Wr4dXcHL6Y05MV+zojHSt/CGT56Ub4Zx/Vza/ScL73apF9l9PcqaHTrKfiODGzbdGJIQXYNGc+zAEoPHo97EysbUafvWbvSc20kJa3vAWABWu7EIH+tpKGB+Jy4+66u7KHB73GaD2JvzM9CFp/ze4DvsWRMC2Go43msCtbZsI7E/BdbL9JRLeTPEKbwfTr2OmAlpo4aPlEIlfq/9sYImqzbP1PwBbbvomjjxcp5y6bkMddhqW6u3DXnOtqoqlJax3X3TyUsMS7C4HdDXYV5KwHW/NDr9m27c9T61D39eu6x578Pyl/bK/aY1rKXc72anq5UyqnfmjM4WYLgbzJCPD21cbUeibVrjG5vDDE3ZKfbZFmF3EsiLpXyx1PUcBXhqBNFZ/5VRzWuKI3eEkkPdaQl/20iUs708NRDjimsi7IxaX1WNN8OgouTH5pvEPFWOnUjO9efx+AcKMmxs2nTSD6C33mDJSXeSl1Ks+4rA26d3tAGxG+aLlJ6CxZl5mKedhVkL+YM4MaxvzshRWPd0ZNqEJTmyUJJ4MVq6rgG+eYIYph9XfasiryJiP8/U5H3M/ZV/SSYtLgLjOF9Ex9uxvkJtqU1LwWsud+fTMsysPwCfmDratnxuJjp/z04shrme5tNQcFF+p/O4E6DhTja/+KYdiUVTYhBqi3cTgRCw9hvaHfpJSCWE+coleddsWo86KfAAAgAElEQVQeW3xyPQCukjMfr+hBnVd3YZ8qu3SSR7QG4KPguQAcy/VE2qpvYoJdBNng6Yl1iSe1jK5cVzLp8tFzAATvqpxR6pIwhNdiWeQv/HCzOi5L9c//vR1jSDC1TYWF7vsbIXhvOWv3EesTM9tyezgij/DFYwplUOgxKaQsXGrvA4Cv7HKHko5DlrRpzACqznNCSiN5RAy/Tp0OgIILsQcG6D4JpDRyHmhFt6c2M847P8ul3sbhRIw+ZZe1NGyo6l1Nwa7zy01Ui6PyOwogSai9kwvtmjhvDME6Z97oLsgG32qkfuvN2rqLUZDpdWgYwdOrlhDnkdIywKH2Ep6sRT/3Zbbtq9ZMPnm3Lz6J9r3hMvq0KRI/LtgKtndI4k4Ye+TH1H9J94HUm6WUtj+Xx7fjcc8ZKBio+8dYohftdkiLLPOh1ux4S2sVA0y93IxqT2Y5LL0su0cr2ryzizera62+ehuHA9hfjMuAfPpSpfSe5AbR7G7xg237P1ejqTn/kO6+6C7IiUPrsrPRhwCMOx9LtZGZDrugysrlltrfv6/XB+zTFctDjWnChhHTgfz1CoYdH2xbtMVeFDcJpFtwU4e3gksj528/7UUz6Ot2nS+93KEME0r0QmrVCICXnv4WJ0mLF4b8ZtBticnSyHyoNR3e2I6CSuyBAQCaGJ9PtLttgOtPxLD4zemEGrUpwPU2PUH4KG2yjL3CFHfDjUFtMUvapIs/M93AAb9FcZx8tfA6I/+khGJN0/8a1VWQU4bGsGLyNPLy8479twEuifYPBZSbW13RLesbUtuOMULJaCT1tXR8ZG1u5vAz2vO85K72XQsZik4C0RYWqhqtnTzkyrnHinD2fm2d6ofctBb7U4mxeK456pAWmTL2Km/67yXJmonlJ222qeW8Y0IV8fNas6nHdIIMmhjX3/wE4SNOoqSnO8R+adyoIdtCR5N3D6BWygGH+2AI8Oft5svuXFAHdBNkg2817puymSCD1t1q//IEfJY6LvZVLhw0MmCoGcKGJt/bRqe3HNDW/43CvpVVRp82fB1mn4WD9KTmwPxpywvSasB1fRdYKi9Xstyxpti3pW6sWYMjUwOJbzSfOSnhfPtBd6p94Zj7RnZz4+SrjdnaYzr+t8S4wZbHqTP8RJVZh9qlS/73H/CduVJ8OPF0OAPc/7RtDzp1D1mP2CfXRBdBNoYEE/xrKlOr70NBYdKFjvj+av+FeipKeDNtNTGnNMeN2qzLdCfie/2XDiyOC7GFP1f44jFELKl6TwKpbsqPGR+4WRM1M8vhPhgiavPYwMJPBw51u068ny/Wq8klvKviZEUF8P0985GR+GhNNyIdJcZmM6ZV7sRFzCFv5baex3oR+qGhyoix2r4pKxvPASpHiPPYN+xDCoYadxwOJ+qqPmtX3E6FZ+oZQ4Lx/fkms2usB+CD5IYkjApHqcS4093yVJi2skytr8/coWTFUG9msPhGEABT9vdD3rAXecNeu9oEbbnN/zU+DN6GFBbicLtxL/gxxfeQbTEhAB9jBpKLfTM/3vnsU5qZFHZlq9Sde3dTd/Xg2LQm/BKhPQXkpCWTriNHQ7crSFv0XdayIlhcDLYwX1XCeN1+2cIVFuT0xiF8Fqq1LM5aMvnzpVhbov//Aictmai59m2xWq9c4ftB99Nh7xDUvV52tVUQ1yU76DheW/NYr0Xn7cH6rQ1ZvzV//YobdR0zSacg8T0KZ6EkWbP59cvOWM7Zb03m+M9b0tZsQEZm6qAnyjRxpaKozioGSeasJYMxI57CtHqXQwYvy4L5wg2Gn+lKvfUjqbd+JK5nKyemfd+hQQC03tuf1nv7E/G2fjPzbqfCUm9avYveIflLH5mwT1PeHlhVmZFHH8MlSd+VxYpD2XeEag9CNeLtbqsgrkt20G1JU6raQF5B6k7Tvv/nO7VkyaGmRK3aVymJ/wXpNeN5AmfZP10zV7UyJyUcdjp2wlTUmJ10G6M97syJ3Q61fbdYj8RzpR2Eo/UmK+uacH8ggW40xQetwrRnKNbhC9RXJeZERuGC/cVYUDqWS0kAHGoBkeyplBuv74me/BShPejz9cutqPHTabuna0aN/IcHaWFnK4L/JSS1DPOwJUm6Atg34FqYMFVVqws/hB/CD+HH/zU/iqNMgiwQCAQC+yHWQxYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqQpmeGOIsmVQzbvbypQhZpJOjZhd5JLTwQ/gh/BB+/K/7URxlEmQzbrSRupbPq3KwQ11T7H7hh/BD+CH8+F/3ozhEyEIgEAiqCEKQBQKBoIogBFkgEAiqCEKQBVUSY61QlA5Nif+sFd+c24LSqZlu5+5z5Ap/XNjHyW/1O6eg/KQ+1pYTi5rhtrE613+LxGl9EGd+bMSqxD38cWEfqxL3sCpxD72PJJM0sR0GH5/KdtlulGlQr7zIHh4AqFGhhM1NYH6NbQDUXvEk0Z9mIMWdQsnIKNe5DQH+HPsgBDf3LGKCT7PtQi3GRW1kcWJL0nOc2dZ0MQZJZmd2LiP3DwOwlcvDabU3AUtPYk26XLEP+j/OtX/FcLW1lVO9PwUgeuFYar2yTXc7ksmE7GLGmpJa5NiJWW1RXKx8fu8XRDulEmRwRcFMai0zPhv0sW9FxqoqxHX+nI8PRfLVggcIWXkJ6/EEfQzcAdnVFbVebQDOdfMiMyobgBfbrGaU1wWsqgKAQdLaS+Frh+O/yoTXsRuoe46ADk+KN9YK5UrnEHI8JMaNW8rc+FhSLnswpNV2diTX4kRCIH/fP1Oz7+TOfXG9eLHWKmLNOdT7YTzhU7ZX2AeAM2/F8Nvj0wk1uhQ+EAkKoKhW265RXqcZ9eLHNDdPJHj6Vl3s3wm5aX2OPuVaaJ+LZxYHY74utnzrPYPwf/Qiyo0b5bJnF0GWnJy5MLElN5tkIV13plfHfwCYHqh9iNxb11P8g/PgQai/aAJ1Xijfja9cSyHIz53mfucAuKfmcY5kBNPI5wIAky62QZZUFFXCKGsXukm20LnGCWRJ5c2ATbi2cqbbqdE4/Vl+QZZdXbnRvRFu5zIwpGYWOmb1ciH+STMA3vudCPqrsJ1jY/wY3GULU6vvo93ewVR7ML7cftwthqhwTjzhD8CIXn8zxucAZmkXRgxYb/0+64dO54lXOuhrt34UJ6ea8fO6ifdYb1QXE9Yj+Z83+u3j3PzWk2mnu7Oy7jIATuRmU33jBSw62M98qDWPe35E3Q1jcN3lSq/HN9Hr8U30eWo3ydb8VKivL7cn8a1InH/fpYPVfE6/HUPXbnv5MLj4Gzq3gNbmidHRLp9DF21fw4UTqPVqxSpJqUUDpv78JU2cQUZGQeHxlt8At7ar74G6AKZbPllZWfdXzSdgff/3iXWaQuRTOyrkB4ASmVFUjIEFqaEsT2rCgKB/GOJxsdCxwAfOIc00olr0uCKKIpvN3HiwCUmPZLOt4xy8ZHPh40goFF8pvhD9B195dag6giw1a8DlNy3sbvFxiWWy1VycJAPyrYiJEpJVbntqbg5uDyRw7C7KVr9VqmDZE6cMNHYut3kbx95tRFzf2UD+RZ5Hoe0eIL9063MXUyb3Tz/AfoJ8eVw7Ulpls7Xrh/gbCtb8piJlzZK+ES3Z1ZU6X51hRfA2FFTax07A+0QmBRM0rVeTcemWjNKxGVu+dKKj2cKj+/+F/6mjuvjgOekcLpIzAb+acPt5K7tmGgD4p9lwLrfx1Mo8cpE1DX6l8ZMh1PhdF7MAyA3r8tWjs2lh0n77XNVKrqrgJMmYJCduKlpLeXJiNwDW76/L/K5f0sachqukXaRv9v+Bha+GVciPLH9Xmtzhmv88tQ4jvYrvMQQYXHggZj8nK+SFhvM+N6KvjiP4tt6Px+pDKOkX+MGpFuZDuQD0db8KwKq6S6n3nn6t9DwMkXWIe7Eaz8b8wSivLbf2mostuybTlUBDGg2c8yU0Q83h/f88is/58leYugqy7ObGqZdkDrb4rtD+JKvWYvw+rQkLF3cjbPl1jk5wJ77HPAC8NxX/oe2N1KIB1Q2byVaNyLnKnd/gAHzicyt8jsQX26EWULmXn1hMA2etxxDltBOTZARci3+zHfH5y8TM4L8BiavWTLxOZyFt2Vds2ROPOtHenMuWbAPBz2Tq0joGeKrG3wA4pxQ+o7r3MNX3aq8vmdtBA50MFkA5dJTXho3gYntXPE8ruJ/LRNq6H7VdE642caX63LwbWWtdRbGLD2iAwduLVhuu8qrfASKdkzA0uB/r4btpgpTO65db8fP6tkTPvVL04PU0fvNpXWhX08XHmeq/G4At3zUnkIqHDULeK/4ceXejmpvDV/21Csr71yV0ddFCm//p9T0LptSusP2CpDWpTvwDn9i2rytZDIkfhPW9AMzbCzSSZAmMRnpujKeB82kA3ktuwLbudfBJrFjvRVdBPv5mI+Lazym0r/PB/pinaUF449rd1GQr2fe35N7GRwDouH8gAYuPYC1yNvsTNjeBIIML/U/0wLBuT4XOVXd+Cht6uNLJJT8W/vrlVrzlr3V5e8T1Jcg1jddDfqO20X4V0Jk323F45OxijjjZzebdYO3cnFmhHyPjgkGS6fLlc4RtKP7iPfdaO3Y8OB0ZF16OfwS3U/rGdk9aMjFdSqekKjjkr2R4TleTNuTN+wjZXHiftHU/1UvRNtWqkGrRuvXHcwIqLMam1bvoHdIKgAi2l3zvXckXakODaLp6HkZG5s9MNwJnOiaGC6Ac0HpH434bzrF+c+5QuvyYrltIsmYSYNC+6257RuD/0FFkzhX6jmQ3N07OC2OU158AfJ0Wwt8vdMSUWPHwlq6C7HI5v4t73+G+GN7zxWPDflRL/g1l8Pai0/ubeM73CBuznPEZmIS1nPGWipDdsxXza3yGVZXIftoXSKrQ+ayHj/FBRAM+uG1/b7QL38hZrgATaV/oeMrQGNb8dybushN/ZphxOZtaocrJ4lY1Wvq3kx7sjLvkhIJKg8/HUvs/e4sVxBsD27Ji5DR8ZBcuWzNwfl//EfXXz/dCOaRPCMQRXBnYkOWBWiWbphSNtzqCjFBPOpizUIC1qfWhxOrMfnietG9SmHHNboY/OgGLm5Gz3YyYrhVvL6V3Iw531CqG60oW86b3odpqfQa/dRXk0K9P0sIyEdkCAR9tBU4XCX2fnB/GMt+1AIz8awRRN3bq6cJdc6aPilVVeOh4T9RD9h9EKwmXqxauKRZMkpXjOTWxeLlwV5PeS8D7qIQFK0YMdyw76lwsAOuORhP1cRa5793gz3pLAchUc+g081mCdOiWAnh+t502/Z+Ard6ETd9a7O1sDAnmlXe+tA3ydNo6jtp/79bFfh4z6jVDtRbN7qiqGEOCWTX1ffJimTN+fJgwnX6Tu/ahVij3TFtv2948qw3e6J99cycCPtpKxvM5tni6PZA378MZiPij6DHJpI2z/Pre+4B2jbb7cQrhX+j3XegqyJZLSQTNKLmlee61duxuPwNwosfRh4mesKeEsUr7YgjwZ8P9swBX0mbVxMVy8Y7vsRc3ahoJMGg/9MKZD+K7rWI/ru/n28h6w4K7VFiQ12SaGP3ncCK/zbHtMx49C0Bk8m5k32qEuufHrxsvfZrIGfre+MF9jpR6/PwcL+53SQdgYVpNwv+To3s7TM3NuWOZ7EB3na2WD2PNGtT+9Qo+t0b5v70RRJ1vkxwe3rvSOYRnqv0CQIP1owj/xjFiLDk5IxlklCxt0D9PEAG+ON8BSHSIH3mcebEFAP4GbVD6cI6FyDcO63qNiokhAoFAUEWw/8QQ2cDZV9sAsH3UB5gkZy5aM7G+F4BsOWd388VxfkgEQQYXfkn3wX3t0UoZUAQwRNRm0FPawMC6TDPVfzikS23bd+h4rC8nc/ZwELWWa61e56vpRB0oHB4q+LmTe0azoqYWF7upZuP3j+Pq6jNvxQBwuNUcFGBJejUWvtUbzwP6pjUVh6F+FEfH+tC86UkGB2jfT13nbYCJlS3nsyc+mGfXDkKyaoGk0N8UTKv0zU0uidQ2IcwMXmbbnvFZP4LiHRuuALj/mc22FFX1ctH0SD3J7tmKi8OykY658drAH+njdpFmW0YC8E3rBbZwxXNhv/POvU9gdTFw6bEsXLa4kxZppe4rcVjT0nT3y1g7jD4Pa6OxBklGUa30X/wMdW7o21uwuyBffbI1B0bn5SQ7k6HmMHjKFNz/rHhSeVkxRNYB4PunPgCcee2nR6mV5vhYWB4ZkX484xMPyBzPCSx3MvntGNbtwbAOIjhj21ea0MtN6/PJmx+Sdzk0W/oMkV86qFvaqhGHR2gVgUGSualkMmfyQDxX2l+MZVdXnl/xMx3NFvblWHCVtFS4KKf8LBgrEtVCUri5z5ew1RkYDibYfTjL4OcLwKT/fG/bN/T0fdRYdMKhjYeUoVpFObX6bFvOfPTcK3bzIb1fG36bNUsTXdt8JAOHOiy89Tq/kRBrziH2q0+ZkxLOeO+T7G4FLUzQvs4gfHrqL8hHJwax1F+bHGNVJX7L8CLq04u6pWPmYVdBNjSIZuKkXwrti5k3hZo/Ob6WB7jZwA+Auk5aLW+PacFl4Waw0XahrxgaCxyuFD8s7s40vZXgnqZk4bvbMa1j2dWVq1Oz82c9qQoD4/thXumYgV4lI4N3Bw3hjepm3OIuo7po18Wxl92I77KA+xc/R53nt+FHPH5573GAX6fHRAPQ2+1P276TC6KpluTY6zU1ovDwcr01o4k+W/o4QEXI8pHLPGDX1uUkpyxZtDCZSbJmYl3mBxzX1S/ZbKZ7x73It4bbs1ULLyweSq0E/X8PuwmyZDIRtCCRIR4XyVC1gZRnzt9P2Mz9lZAwo+EyUZscoaDyclJLqJQhRTB4ajPC2o7Rcp9b7xpG4O7KEePb2ZXtRbWFjrnxz0xpyv5m+TM6+5zogdw3w6GtQHXXQUxQqKUjn9dahtX3OP76kN3c+OJfhWe5ttj1GMHfOn4A3LnJ9ULbYd8ZbANs9iDg93M0uu8JXEy5ZBzyIWCnFcUose6j/MkaJ3KzeXDpZMxJMr5HLLifSCWpfTXckqyYUnLxKyG3vSJc79uUmcFzbLq1PD2gwtPXS8Iugiy7uWFa5c68mqsA6HX4UQBcup2yh7m7whAVzr/raF3AbFVh04w2eGH/bnGxBGlrSHwQrPmTluROYOV4AsCJx+yXRlQSNwa1ZeOo6RScmpr1ciDS9eJn7v3/woVvQ2lRIEy7JcuJkCFnUbKzHeqHwdOTmY1+BLS1G5ak++Eaf0X3LnpBLOfOEzbgfKF9519qV2i7/9xniSgwu88K+NmxLSOZTDSYeKjQvgXnOyBjn/Evuwjy0Zn1iY/QpkXX2zCC6CmXAOz6Y96JzNo+NHbWUsEO5IDXokoSY0BJ0NLNeh/toy2gU5HEYx2oE6H9PjfVbMYtHUe4nSsqY61QLEOT8ZLNxOXm0u+7SQDU3lK5IaQ8LP4Vn75eHow1a/BSvcKLZ7zy0ijc0x1/rZ5ZWJMOZq01rCAz8+S9eCbosXpF2VAKTDDte6InIdMdO/Yku7oyr+bfhfZZ/+v/vyPIl8e342jPDwGZCYkdiHrqHJaryXqbKTOJXfJ/2bFHhuCjc5ypLOR0aQzA6rpztW5Q5UROkBvXBeC5WksAmJHckvBn7X/zWxYobKu7GJB4ePnTRL5cNYQ4j4iwJC5aM/A+cM1x4RPZQPyEmrYFdAD6n+iB+8+Oyei4nS6hJ2yvk6yZmD+sBrosJ3T3GOpH8fZji2zbKTNCcVEuOdSHy/3qApogPxTfCwAnnScrFURXQc7u0Yq5Uz5GRuasJZNTz0QhXd2vp4lyM+CBzbagvGWF/oH/u0Vq0YBX5i60bQ9J6E69Dys2Xbq8HBvtBcB9LtriT8s/64S/HWeBSU7OpCwLZUvdH1FQGZzQjajJuyurPiqR+wOOsDUrpNCyoPbG6O/Hkce06dF5q74lz6qFq1KxKf16sCfbX/dlSO+Gi/f40dvtOqcsWkvd9Xy6w6+V/k/lt47jEoIBiOKC3ezpOpx+fojFFv/q8fVzSFurhhgD9PHajYKKgop3QuV0SQFO9/bSUnbM2kDnxY/CHXrjF6Rxw9M0bnjaYfaOfdyUTU0WA5CqZHH660i7rWlbUV7c2s+h9m62yl9S80iumSO5ZlyXOD41NA9ZUpBv/evpepOLk9vd+U06ktWrNT8/Nw2A7psm0H3TBFQHD3yrMU0Y4LnXoTZ1E2TJyZl/NdJaVxetmdSaWjlrVNwNOZ53XufBbkgqMtKt/zLON6rGYkAWrMi59m1/dG9xwPa6zc9T8P2saoUq5MZ1kRvXZaDnflSLYwP7vs/lD3gfzwnkeE5lDvOComrrc2v/VF4e/T3GOrUcZt+QrRBqdOGmkk3EY3uJeMyxwghwpZkbNQosnt+xfjwd69u38aSfIBtknvPVchSryUZu9mul16l14V/7H7e9fuytlZXmR7a/1dZSVyotAbAodf8Yi998xwhkhwP9iXq9aqT5FUTKtiBlW3jmdB/qv+rYWaTPF1gJf+bcfsyc69gW+p3YmBaNJeG0w+w5r91Hw83D6fDJsw6zeSd2rW7IrtUN7WpDtxiyalWYdT2KAGMqUzf2od66k5U2Jbk4nJd7c2slTN7b2JMoKqcF/2HX/EGKTvsHU21X5X1PcZu0mYtEgO82+6+XfLJVFg/SAk9OVqGqKB/rMW0gKz3W8bZHfzSRDyfOY/yCMdSco12blRlbX3WkAR8Ea1OFz1oyOfJGI0w4Lo6sWizUGnjgzgXtiG9cFknWTC5YTTy+8GnC3tMG8+z5u+gnyLk5/N3QA/Agil1VSowBqn2xjQe/0FZrqiwxBpjf7X66b9JmL15O8MUr+cQd3mE/8pLbe7zaHN9KWE5RkE/grK38d1ZjarC1SgxyRj6+x7aWN+BQMa4qGNbtYUSoNoc71EG/i6SW4Qm2kiRdgQILJNifMFVVqws/hB/CD+HH/zU/iqNMgiwQCAQC+yHWQxYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqghBkgUAgqCIIQRYIBIIqQpmeGOIsmVQzbvbypQhZpJOjZhd52qTwQ/gh/BB+/K/7URxlEmQzbrSRupbPq3KwQ10j/BB+CD+EH/8n/SgOEbIQCASCKoIQZIFAIKgiCEEWCASCKkKZYsj/62T0aQPAhdj8+Hr7tkf4OmwjAMPOxJIUk6aLrRZ7FZKyPdmQEIH7Nld8D2djvJkDOw/qcn6B4P8S519ux+EJn/D21bp8+WfnUsuarsnU+M9WxzjmYBwuyFKLBlxt5onVJNHzyU0EOKWxsoGP3eydmNkWgJMD5wH7Si37ddhGutFUN9vzam5AqbkOuZOMgkKSNZt5ye1sx3/6sz1e8eC7YJtuNqsyxqBAVIsVJSWVxGdakt4oCzXbQEjNZAB+qv81D732HFebqxzv9wnf3Ahk1px+BHxs35tPblqf068YbNs96hzmYpYXLb3OMLlaAlZV4bcMd+bFxGC9mmxXXxzF9cdj2PnfuVhVBYCuhx/hyvpgyHsIvQS1vjoNgCXxgv0dUiFXtfKC72FeGHy41KIKChljczluceKVJ0Yhb9hrF5cMnp4c+ySc5R0+oa6TCYOkBRQO5GTRZ/NYAGa2WczLB/vwaoNVHMioyf4ewVguXiq3TbsIsjEokPOD6kCn6wR63GBJ9K+2Y07SbpwkA1ZVwSDJnMy9yUo62MONIoQvHlNou2DrOO94BNt1sbV7dBOadelAemQOg1vsBODf/vt4038vMloL/c3HtNfKWyr1NozAf7kZny3nsZw7r4sPd4sxMIBjz9a2bddYY8W0epcu587+sxY13FMA6OKzj1SrK8cyAnjNbzYtTVaSrNmkKNplWM1gYtN/PgJAQWawRyJ1Jn3COx/rV0kWRI1pwvFRRpZ0/oRGzk6kKVkArEgPJc0Szc7UWhxwP0IDJ2duKC6omVkVtnnutXbc//BO7vM6REJ2AFct7iw91Zjcf3xQjSA3SkW61YFz/tOTwRP+ZMEv3fDfYyHT18CutzUR7fngUNS9pQtXSVwdHcPXL80gV3W27furwS/QIL+MjMSXQ4O18haP/P2Swtw19xH17B7U3Jxy2S+OmjN207lTf9Y3+umOZWVk3GUTzZzhQjsXamzQzQ0b6X3bcKGXhWNdPgWcUVBRVCsA9ZycONrlc1vZ7m2+BqCv+1W6LIzA7YHy29VdkI1Bgbyw5Xfam7Sa96wlg+nJrQHYca0WZ3+vRc3Z+5Hc3ei5Lo4N16IA+7U6IiZpAtttUtMiYrtlZlu4Jcjhi8fYyurCzoOEaDrM7luh+m5dRgJweqRqK/Z007WM8j5BXKcFKJ0U6q4eS9TIiguy0qEpZ3q4FNn/bJ9lDPQ4WWifAQkXKf/mzB5kYcCJh8jtfLHCfrwT8SvRTpk4STIGJLJUK67eR0lVcrhihefP9aaacwYAJ9P8aOyTyNsBO23vv2TxqrAPxZF7bwu6z1rPap/jgBMAvZ+aBIDrkh1AOoYAN+as6MInIVt4dUsfotL/qbDdoE7n+SDw1udzOQXA634HoVXRsoktMwgxuFJtQDo9hp/A3+CK9dalk1rXA89yNgzvGb2dKCfnO5Yb5plY7P5n+sXz0L/v17W3oGZn49k3iYe9ewFwdEooVM8GwGe9GYDrnbPw9k5ne/PvdbNbHPGftuJwj49xkrReU4+jD3NuS40Sy7s1S7b5dEx5OJQAACAASURBVPm6B7VLLHlndBVkY1AgDVddor1JYcql1hzvF4J6PQXlVstCzb5ACBdQACmqFjWdNpPwVRS+OL7LntGnza0whhY71lWMS8Cwbg8A4evy963Eh5W0osZ2d+bV3MDgFjttAl4Wzr7RjmptL7GonlZbe8hb8JGLCrKGqcieRGsG36c249lqxzBJRpZF/kYPmpfZj9uZ/MZ4TGlWLCbtMxmzFbI9DbhetmDIsmJYv4frttLn2fBbJBQQ5LlPDcAZfVrreWR3b0Wrd/5hss9xAG6q2XScOYWgpYWvw7g3a7EiZB4zrkdSb/JxrDrYvnLTjUw1hxTFQsfVkxjcegeLD7egSeh59p+tQZPQ/Mo4b3v/2Rr8B/ix/XyaOht5+2pDvFceRimnDzuntoJ5Fatckh6Jwu9Tfe9bJT0dJT0dgIjJRcMkvgu0hgaLte0tWU6EzT2sy+8CYPDx4XK/uvzR7X2cJDM3lWy6HxxGtWdUwuJL/qyXx7eD5pCt5uK2uWITTnQV5CNTQ1nuvwqAlWtbEX6q5A9x9kEvurveYHpyeS+rirFpznzba70G8spN60Y86f8lCgorTjckmCNlPkXcqE9uxQNdAWi8fShZmUVbQbUWypiPFtPytVpRs7LYENyMFX/9UGb7JeH9ddFroKRqQvbw4P6Qo7btRWk1cdlxQrcbLo/EobmsCdgNwIzrkfz+VGeC1haOUysdmrLwvs9RUPl2fjcCUvSJY9cYkcTDjcdhWLeHKHaxG5kI9pIORHCF9AJl87YjuIKhenWObw6gqXMyP33fmZAb+sbVo5eMw79OMleveyCfMVO7zTkU8ge/Hw7axyiv07btek/EcX1FYIXipWXFGBKMx3tnbdtZqhPWlFRdzm3w9OTY1Gg+enAhtY1mDuRYGbB0MhGTtpd6/clubkQ/ql2zY84+gP+civ0uugnymbdiiO81G4NkoP2BR4h691iJH0T28OCx/mtIsmbicThZ9xvuTmjZFtoAX8fxo3Flh4M9yMfg7UXaW+m0MkkoyJhWlq+LXnfzUFRVIvzNLKSsHGqePYZqsRRbtvi9Ghld6pbLvh7Ev9WA5dXnoEUJJT5Y9Ag1r9thQO+cC5etGbRfMYWop3djtOwuUiTz1TQ6mi10PdxX10FFa/I1DOuulfl97ksU+rsnM/R0V0Ln6dcqBNiZLfH/2jvPwCiqrgE/W5JNIR0SAqRBGqEECC00RRRFAUWRIk2KFAFFkKLfq1h5X4oiBBDELiiiFDugiEovoRmqQEIJSYDQ0pPd2e/HJJsEQgJkZnbf77vPn+y0PSc7d86999xzzkQtvY504ARlW1/ZedqPsR2IW5NCXPHk6pOQjTzQYjSmn7QzyHkNA1kb+gEA58x5/GvmOMVm13ntojjQ+z1MOieuSPkMXTCZ8Heqvu+XH2/KkqDZ7Cs0cWBNDHVwEINsjcpBj46V2V54Pa/HknnrRqdzcaGl2yke/3soPsf+UUqFKikJeysZHTf4ejTha9R3VVTG+UGN2NlkHhJ6Oh3sc9cRFyF95HC66jyoend3/CakVOMbqolVXkEHOFFURNDGbFXE1H9pF8PeeJCInJ1YKzhuiApnTJjsVzp7qDbhpKiix+2S3actq0Lf44LFTOakILh6sFrf5378MjMuNeHlmnKbSTd7Ix04Uuk10oEjpFu8AGVGpHdDxpjSRdWd+UH4LVXOZeLzcgomnRPZUgED+z5L4LaqDau+aTRr355NTYMrPd4dT533qt9xK2aQa7jlMy0jjsM962A5d6LScy0rTLQwXcX7LTelxN8WYVPKN7o6f1X0OGrHqVnxHB2wAAk90y80x/eZ/EpHr2qj9/FmVfgPgDyV15p3eiyzff4luzHsqJ7huSWSxearrIgTr7nTr8ZFOic9QeSrd++rVQK9mxtv/HsprjpnOh8cjK8Cv4nl2Al2PRoOW2WDPPtEV7yo/Jm9kXb7+uO34UCFHZrSSPc0B+DbuIWUrH98md4GUG50nrGgAQOe68qJZZHU2la1oTeGBHHuDR01Da58n+ODV4oyT67I1BMIBAIHQbERcsCAdA45+2K5VHGoTAmGiPp8HvkFE84+giHplGajj4DtnuVijjuOHVUc3qQ9mcPjAdjYbzYSrnQ62EceHZ+r/LfTkg9+7kp9jaJfMp+Rf492LlsBeSFyyZoHCbVD9A3AgBg5qiNjV21Cs5LtogPIay3nRjfhXpctpFpy8XvdpNiI1JKazgMj5bh8v8QzdzwzKzAbFI1DrozU8UUAhDvJo+Pvc3ywDFQ2YrfGyh1cWwm1brPN5UYHsDFuHuDCjDkDqLlWmbaq2H9luV51pILexYVTb7vjojOQtCKGAIVXim/FjcZ48OlOdjPGxqB6DJ30IwCBBlemX2iOZ7eTdnVV3IgZCzVSbqt8a7XRN4vhm3/NBsBLLz9wrXcPJvQV7Y1x8lexAKzxWwoYCf/4vF3vS1FcBPsnLADgidcm47tbud/EWlSI6Se547md//F6/7Y0cd7CrWNklMdYO4DkBbVY0bIkCUOOF3/5mwGEnrVfdqvUsTnTF32Ml96FJ088TMAK5RZZNU2d1tf2Z2XrpWzL9yBgvjbG+MTctqwPKY03BvuGuRmWmW3hQxISvya0x9dOI8EbOT4uGIAPr9XHf5E298fi6kQ9Y/mHPOuaK7U1kV6KzmTil3YLAXDSuRK+fiRR51TyYVeBsX4oAN0W/m7b5/9Lst06B72bGy7D0gg1umHQ6bFYJeqNuKB6dNSZgQ04EJ9AiSEGGH32HsI/tG9HeWKYnvYuRZwx55E7rTa66wcU+25NDXJat7rUN8Kj64YSya6qL1CA9m1LY3qTZzUEsFuY2/X+bfkrfKEtdTpq1TgiPnYMY2ysV5eFveWRyPw13TVzFyT3crNFVgDsLHAidLn2Sxunp8URapT/5+NF+UQO26PJglVFnH9YTlke770aMxZavfs8gWn2K6ZzdG4jjscsRgJb+rDaXHk6nhXj3qHEhQXw+fW6pPf3w5x8WhMdbqSgm5xO+fcDciex7GprdDuTFJWhiUHWmeSp6NBxP5MlmYlamqNJY19/vrSYkD19xiXMfXshEhL3/t0XgOh/HdE8BvtW5MUE0sW1gAKrGdcMbdwVAJbaBeW2h6wfSeQGbTrrEoyBtdk2Yg4gp+j2TXiRwGrGk1aHfqN+tX3enm8i8DbiYdVAV5xeHRB0pYozlcVQ048RU7+zpXdnWPIAmPvZ49RNtt99Od1Dfi5MOnnEvn1EHEjKVm/UxCBb2sYAMN5nJ4uvRmFNvLuiKHdC2eQPe/qMoTj5Y4UfrUx7kdBT8E0AAJbrp+ym042cHyEbxjRLoWbuJENEfV5t/WO5fX57Dbc4Wz3ODKyPp96F3QXyMKHeDxl26yivDWjLi76LANmXP236s3gpVPDqTsl7SC7qtDn2/XL7h6Tcr0ihpYow+PiQvdyToZ5nAbhkyeOhRVMAqPsf+xnjcy+141DP9wDIlsy0X/IiQXuUn0WqbpANtWrRbr5sDM+Ys/lwbk/Va1fk9mpjS/5Qssbx3VLQIpyNTRYjoSfq27FEOHC5zYe2jqN+FWVKlSI7piYDPNJsDoukQiv+a45ragz1zWJYOVYeHQ9ZPg6A0ErqFqiqi4cH7kNLazh8dj0Er2V2TFyqYBqbYcnj+KfR+OWo8xudH9iQ3Y0TbNt9jwyyqyEGyH6yDbOGf2wrNvT48V4EvaWOTqobZJ3RQIcaxwDIt+rw36p+qnTZAvTJsxraNTUa4PEFG9CjJ8OSR+Qybdw1d4IxJIhXYn/mjDmXBnMtmul3qbERJ52BomKB+Vad5vWGT051ItLJhRRzLg3elWsS2Gt0fGpaYw43XMgZs1z97tPXe+Jhp9ExABV4rpZeaaNohlxZ9O7uuD6cYdtOuBKBx2jJrgt4ulZNeGfmIuJM8NalpgDon8xTrY2obpAPvx7EvS5yHGGLWZOpfVj93q7sQp69yRwez0ivBUhIdEscSZ3djvfGEMlDzkzbX+iMVUP98kKLKLJabIt6yzM7AupMhSsi+8k2/N1pAZlSIYMnv4hHg+JU7T3a+kxBXmep0VTujMae6gOAxwr7pvVXxPpZHVVzoVxfFcBfTVbatn+7GI3FTgt4IN8T3/fOEWeCZHM+G/7TEQDPTPXui6rL2cagenx2/1LyrIXkWQvxT8xVU5yNsjHHZUfL9iC/lg4nnQE9eur0cpyOoiwpT/jaRe74+PKvR9+1uLmm8tN6FGHEgB5Iu8eKZDIimezzVrOM4XHsaiFX2cueV4/sebeuv2tPMjpKWONjVfnu6cVp+yC/PSR5U6gqcm6X01Pj+Cz0NwAe+3Aynl/twPMrdTtJVQ1y8uBg2pskYr+ZQOw3E9Bv0cY32XHsKAaf7qR80fm7ofjVNFHfjrWvHpXg3Fz7ESHAlssNym17pGo3OTWGBLGjs+yrzLdaabCyEN3W/ei2atNGb8StZ2ldBte1u3Bdq22kSUU4ZZtxyjaTUKauyfEe75PSU50aNBMP9rF9brl4AsFv2M93LHVszs/DZwEQu30IQW9qo4uqw4H82hbW5bkRNUN+Q4VWvjm3NTvJWINir2OqDnVnbqP7zDgiHECXW2GR5H45x3pz/WQ1ObYuAsauI/oHubOK2rhfM/+1lHGR+xNH8EHTZQz9dArBf9p34ejbmM8BN1It2swib4eSFyr82ro2a9fEsrHxtxwstBC8vqCKK++Ouo8fojtxAATZMewQQGeWmHuxM9299xM2OUszP7aqBjli/E7mEw1cVFOMoJoEj7lI9KSxBK8rxMjNtYHVot6MbXSfEWdLEtJysVPKzyfwsSNMJ45gOz/8AJPO9mB/Wl0MuzyrXVNXaaTcXFwfTLYZSwN77ayR+ui2H+BYSzhGI0A7P7bOar39x0Cn011ES+0gxGq11hJ6CD2EHkKP/2t6VMQdGWSBQCAQqIeohywQCAQOgjDIAoFA4CAIgywQCAQOgjDIAoFA4CAIgywQCAQOgjDIAoFA4CAIgywQCAQOgjDIAoFA4CAIgywQCAQOgjDIAoFA4CAIgywQCAQOgjDIAoFA4CAIgywQCAQOgjDIAoFA4CAIgywQCAQOwh29McRZZ7K64K6WLjeRTw6F1oKb3lIq9BB6CD2EHv/telTEHRlkF9xpo+tyd1rdBTutGyvcL/QQegg9hB7/7XpUhHBZCAQCgYMgDLJAIBA4CMIgCwQCgYNwRz5kgeBuMEQ2IDfCt8JjV57JZk+rZQC8ezmaP/u1wHLomJbq2R2dyYS+hjv/TImiTccjLAv9A4Aiq4VDhWamDBiJbtsB7fRxcubYgliOd18MwJGiIqb0Go513yHbOdb4WIxHUrBcvaaZXv8fUN0gG8LDOPqqDwArOi7hmyutWZXUHACfLSZqfrBdcZmn34gHq7yoObDX70z1O4STzkCR1WI7J3b7EKRDnqCzUn/uUSxXriiuR26vNiyf9w7BxhrEH3iCGjM8cTpyBsulTMVl3Sm6lo05PqiGbbtO1AW2NF0NwMsZTdnfNQDp6jWsRYXVlnVyiD/7hsy75fGi4hefT/Q9yr4Pgrg2NgZp/+Fqy71TjCFBAEhe7hx91pOA4Mtsjv0agMafjCP0X8q31TOvtSPsnhTWRH4HrAegyCpPXCUkGjrryWjtTu1tiou+JakvtORo93lIxdsNnZzIDXHHdZ+8nfJWPElDFxD5yygiR+xRXL4xNJjCID/b9sneJgB86l8mMW4lFqus2dAz95IRf11R2TqjkX/mtORkn8VEfTyGBnOPkXVPBKldwOosy42LTmbvwQZM6fwjQc6ZJPR9AmvioSq++fZQ1SCnv9COKaO/ZoBHiQFyonXtfcyuLd/ZK51z6ZX6PKafdisi7/pTbXnp9c/p5paIZGtOICE/9GX37Yv/BOJBj55HO/bAONAVc+p5RfQAMDSKIuHd+QQaXCmyWvir6UpYIY8Ct1+uD8C5L+rj/0c6lhPJismtEL0Bg4+XbfP0yGj+PexTurlllTutxDC+7r8P9kPkz6OJHLkHrFZ19SvDxyHr6Nzkebz3qy9L6tjc9vnEICObH5oLQIDB1dZWpAqvVAZDVDjT+39FrxoXADhSKNF/zwj0ez0A2DtO7sR6PL2Z3e8ZVNSkFHOXOD4aU3HnafD24sTUGHYPehdwxtU7X3H5hoj6dFmzn/E+/1R4vKhMU3w2YBPTiVNUfl63Fhx/chEWKxweuhCGAvwm66aTO0qLVYL6pdfkf/UDH3V/AMvxk9WWr45B1ulIfy6ePybOwcfgZtvdfHc/pE2+XG9UxNf3L6K1yY2cACOmaopLm9SOTv0SGVwzgVhn2JTnxqrLLcudY9BZ2T+nGQB5T12ldeBpALp4H2ZN5He8ty6GH167D/dVO6upjUyRjyuNnOWft8BahJPOgB49E32Pgu9R+aTXYWZmI5at7Uz9OYewZOeAZKnkW+8cg48PJydGkzRsQZm9v9503vGiQvKt8kPf2FmHHj3HH15MD+d2WAsKqqWD8xUdH1yLZIjnYUw6x/CSXRoZz47pC8p10tyiJUZ/P5aGX11G2TsDlmMnmL6/B28eqIHrRSs+x/MJ/nMfBr9i9844hQVWgS6uEZ3e3U6s883H0vsW0Gv6Ndb4zweMpFnyqDvPSXEdjo7z57tbGGMtKBhz+Y6vecz9KosDPdEfr758xZ8OQ00/js4J5VTXRYBsjC9YcgCoNcsF3dZt1GkWg/P9yow9DH6+zBmzlHtcc4n+YSx+iQZ8juaj37zvpnM92CH//RpSivd9HNed3OW/MsH3MBvGNIRViqhF8hjZZXJNymdgr1FcbuxBdpCOaQNW0t8jw3beVL9DTB1+CIZD4y1DqT/sJFJOTvUV0BswhgZxfq4LSS0X3HT4mpTP5NSHANj1XRNCPz2FOS0dgJdOHqS9S1H1dSimzpxt/DLHm3kfPYfR1XzL8w7f8xEzM5vjmaL8yOtGnHKsJFyJYKyP7K9+6HBvLlyXXTi+y2vwW4L8m32VVZeGr5xUzc0U2vdgledsudAAk63FqoO1fTNmLltCQ2c9U9Pj2T6vFaYBcnvY2Phb/u70Ybnze786GZ/Nyrpwirq25MseC295fMalJny2pSOjOv0uD2w0ZGZmQyTkZ/p0nh/bV8fy9Zh3iHaq7nCyPIob5AuPRnKq6/u27Q4HH8c0S/YhG7cmAnD+Xm+amUxcsuRQI7V6D35h01BqG38GDPglGvBbemeNxJp4iIR3n6D/9Pk8G/wHH5Sdi9wtegON68nuj1fTu2Ddk4TPHvABVrwfy+tzgwGYGPcbI71SbJcldfiE9r3H4fNZNRu63sDZ/2nDgdEJNx26IuUzNfUhjs5rhOdXcgdVj22UmEmDny8uOuWMcVkih1fhb0yFL7Z0IGKzMrOUyvBavoONWxuzpvkDeO49j+l8GvWK/eVXB8Xbzpu1rDdBlzR04AJFMSHltrO/CVTVIOviGjFz2RKaODvR91RXch4uwDtrO3wuH194qAGPeyQRaHAF4FChGZ9PlfenpzxiJK7Yvh0qNNPr13EYrhlp8E02APojKURk7WTxJ52Y2PUoZ8wVLxQrxciznTg8rzEAXt/uLbOekkNwRDqZo1xR2qmluEHWW2Qfy8Y8Ey++/wx15u3Caj5lO57Vry0bJ80G3Ol7rD/O66u3KGDYtJdJQ8Yw7ePPKXj4Giy9S73R46S79ejtTtDpdcR6nwMgz+IElI74LJcyCR8kj7Z+qhnJkiE9CNiVx+fLE6hpcCXzgXx8Pque/IyxFRvj6Reas2lWOzy/2oFn8WzhRk5MiiLOJLs0DhUq83s4KuaUM7ilnOHG/3LnzPcpsup58sTDBL2lrTEGONmnAp+BSujd3bn6Vj4NnfX8XVhE9nMBWLPKL1D90sibPdu681HIr+wscOK10aNwQvnFvCc7yW0yzZLHy10HE/lP+bWlEtP3c+cEwMRLP/cn/Bbt+G7xnu5Ky1bjCHwyhex59fBcK3//jasoR8f5096k/AqD4nHIPp9up9VbY3n3yT4EvrMNq7l8c09vZ6WmoTiP/N+1FJGp/3Mf797bjXqDz971d0hI/M+SpxXRx2o2szypNQBbU8JueZ7lUiaB72xDv3kfTx0boIhs9AbyOmSX27Uhz51BKQ+wv0+4bVRcEZnPxPPbwNkA7CuU6Pf5C9X2H98p/mGZGMNCqj5RBYwhQRhDgiiyWpCQOHnZr+qLNGDmtA/w2eqLMTRY8e/W+3izupE8AmjkbCQ35OYaD+entOO9oJ+wWK0M/X40ThuUN8YAT3jLBnja2R5Y/jlV4TmXRsZT30n2XesLb6s8xB1h3f03/ou2Yel8Hte1uyo8x1ivLqt7li58PpvaHuPeE4rIV2WFpdb722/qUUCOPHjzwW8BeOjoIzj9eaDC8+4G89lzd31ti+GyH890Tflogv0dPuS+gc/htazynnxo0FZF5OldTCR1+MS2/X2OD7PfeKpYfuULFmMmrrFNS/v+9iyR05UdHRpDgjg8LbCSMxL5vemX3LfwKTJOt7btNeTqaTBJ2ZFQRRx53d/2+bS5kID5LqrLLMv5F9thcYWNPWcV75Hn7x1c8ukQup6ujcfiknJGUZnmc6k8NfIFzjxowOewjoDEs6XuqwjZfbf3+QQknGmx42nCJ6h3H37Laoyzx0HOzwjHxM2RVwZvL3qN24S+eBwZuTjtptmNFlzpEEQT59IFzQ17mhCZVbHxvlNEpp5AIBA4CJrGIB2d4s4Aj0x+ynVBN8EDyZyqpfgKyRjfjqWBs7hsAWOu8iPkAquZGqlVJ1fc55YCuFZbnpRfQORPo3mk+UHW/dmcyKWX8DpW9ajGGh9LM5ddgBz6VnO78k3DUsuLQz1ujvgoRZb9e9MvoWnp3mxrEW1dJhIxVr3FvquD4kns8k7xlolHP5lM8CaN/MetmzBm+Rq6uu7CoNOhL24HEhJJhVYGfTyB0IRDuGbvVWxGWRbndbsJXyd/Ljs6vn9N+WBw1589VZBeytZHItji1gTTsYrzEizRIUz1+x2A/qcexHJWubyB20HvIs+YGk5Isu2blN6a6IkHFVva08QgFzzSCoDVnRYAJmaceJgaB7UNW6mIK0/Hs3taAhImmnz2HGHLlVs59t7kAvdCllXCsGmvYt9bJZKFyJG7+QdowI7bjp3NC3QhwFBISaeQHaxD8TVsnQ4n3a0THG51zEdn4Nhji2h8RZ1sOYALnYtw08vT0DRLHnX/VD/07kbSLHLH3cBJDr8rssKw+eMJmrtN8RjoytA5OWP8MNeWnOGkM9D75IPUWpmkaqJMVW7Hc/eVZpamLgrHs0h9N1ZZjv9HzmP4MWiRbd93O1sQma+MuwK0SJ328+W9BfKoqJnJxBVLLs5zfYGKnfZakTG+HbunJeCkM9Bqb3/CXlb2Qfc9nHvb5+qbxeCiU8aHfLd4jD9LQLH/+JdcD8ISjipvBKzWcunrFVHpcZUSBi8Pi+f4gwso8eA9cXAYvlp2orv+5v2IcCAcANc/AwD4OvxH7XQoQ+oLLdkTXpo6faSwgKzJdSCr6phpNZk7TA6h+ivfGZ/fTmraSQFI7rLEkoy9tTk1iF6SpWgnpapB1ru7U/B1DZqZ5MWJK5Zcuk2biNd6bXu2GzHWrUO7wXuRkCiywtUkP8VHg/oiiWzp9iIUUrt446WXp0NhHyq/clwVxrAQhtXdZNueN6o/xsxExeXoT6bS+aXnCRxxiiOb67Pv6VvXt/gltyaz3iyNPLnY0oryeWEydYecKpex5/uWtot5N3LwYKj8IVx72RWlTo96fgKuO5QbBd4paZPaAdDZVW6Tb0wYjstFbfXJHB5P8iNyfkVJLY23Zg3C74CyAzlVDXLylFiOxpQO7++b+SL+y7WP67yRtJ4hrK7zHQBRa54l6rV9ik/FrLv/ptO8F4no+Q9wsdJzXe6Tj/c9+RDOh85q1vOXhJeFrMygp7tcXGlNji8uh8+psnptuXIF7y+2U/iDF2E5iTy5sCfHJobxax851G7uxc6c7CGHmlnNFrwvljZ2329cwMlJ8ftk8PMlxjMNgDXZxVEWO+w7EnTyz7OLXIO3F+3KpE432TwcgLDv7GeMAbIalG+N7juSNR8dr54+Gyh1mWRbC3DKVn7KpppBNtatw8t9VwKQWCD7xmr/cVlVH1RVFHSTfdmLp8wH5GIuEeN2qqZTnTnbyJlT+TmWe1uwusl8wJWzn4bje1EdH2lFZLaXQ9DW1llt2zf9ywEEp6vbaZaUbDSnpdNgcjozOj1oO1aSvn0jUn4+5Cvv1y2KCWG6v1xlbfY7/QCoiXb3oCJKwha1flbS+8Uwrab8bExNj6fBsBN20aMsejc3Rncsnb012fo0IZeSKrlCea4NaEtNfWmnlGct5LEj/SqN6b9b1DHIegPnF3ky2PMSlyw5TBssV0nRJ91cX0JLLo+SEyZinWVj/OKwMRjQ0Fd4AzqjkeSezgQUV4Qz5mlXVc0QHkbHiaVRC6uyazJ9ZT/C/p2olqvWIUlvUxrZErBVjtPWevTlCBgDa7P7lYVI6Pk+x4djwyKQco/YWy0uDIxloq+8BnXGnEfwXL2m1QcBWk7YV64o1p4CN5wfOK2KLFUMsq5FQ/YVFx1/YO9w/Cso9KM1hb+GkBizrHhLz4gZz+G3yb4jIXPHphztKxdTmZbeXpUe91YULTEzI6A04+rVVf0Ie6XihB61OZMt1zr5KGIFXd6cTOgrGt6X9lfRo+eSJQ/ddQWKOv0XYgwJImJ1GhJWJCTemj8Q/wP2dy0CZHcpvSc/ZDdGt127Qv0A1wa25e3AuZStBDj01xFEoo4bRxWD3PVT+WYuz/Ij8CXJ7iMO6Z7mbIj5kO9z5Af/xY39iF6hbgjP7XDqsdKaBSeeCgaqX0/1djDERDI8aL1t+4NroUQsUcdvfFt0GjyhOQAAAt5JREFUkcOdAlJd8Ym7iDEsBHOyOiOQshhq1WJyww1ISLT75QUizypTl7u6RP8+AoDD932gibzrLeows/ZqQE984kD8F6lf3Ol20Dk582bz7+wm3xAVTs8pm6ihk43x9IuNAIh5+7xqz4rimXpSh2b08ZQXRd7+oi+WwwoUCa0GRV1bMumjLwFImNCXhAl9iRyzCykrq4orteOMOQ9r2gXtBJot5EulMQtr05phSU3TTn4l/N70Sy51qKOJrJRREfT1SGNfgZ7oBMdpD9arzlivyp31Y0//qbq81Pvlv2mWPPxmuylek/tuyb8/ll7upen+uRZlS11Whe8nl5jqV+q2+XJdJ75c16laZRqqQvER8qneLtQz1mBFlg9hH52y36irmOznr9HZNZtkcyHuR2SjZ2+dbuSFlN5Y8y5pJi87xo/+Hhl8lSXHuzo954bF7Gi/ivrk1ZP/5xlnH0FKsn+iUgkNZxTPDh6HlcdbEMzfqsrT58uhlmrUOK4OT8zZUG572TddCEI7V0p0jfILzBH/kduImt2V4ga5/qoCzj2ezWsrniUkzf5+qKJfakEzGPH8C7gm2zd850Z8k3TQG+6reZT1xto3VcZTC9fvE3n2pU423y0O8lLR7nXl1/F4axTl4L/VwNAmXcl7NRA9FUd32IOSSJOedVupbowBGkzaQc9JrfCxc3SJI9Oz3aNYrtx9NcnbRfl6yJv3MTy4AyEa9mSV4b9gGz0XtMJVJSd8dfBbup3uS0veCaZhqq5k4UybHOD/5yJWCd5fbCfzC9Cj/AtuBdXnx0Y+/FjmnXlajo4BNjd1YTMtirfUN8YAOusdhJDodLqLgPqrLaWEWK3Wm4omCz2EHkIPocd/ux4VcUcGWSAQCATqIeohCwQCgYMgDLJAIBA4CMIgCwQCgYMgDLJAIBA4CMIgCwQCgYMgDLJAIBA4CMIgCwQCgYMgDLJAIBA4CMIgCwQCgYPwvxqs7RIgigSbAAAAAElFTkSuQmCC\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x7f6be2e500f0>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"show_images_by_digit(7) # Try looking at a few other digits"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"`4.` Now that you have had a chance to look through some of the data, you can try some different algorithms to see what works well to use the X matrix to predict the response well. If you would like to use the function I used in the video regarding random forests, you can run the code below, but you might also try any of the supervised techniques you learned in the previous course to see what works best.\n",
|
||
"\n",
|
||
"If you decide to put together your own classifier, remember the 4 steps to this process:\n",
|
||
"\n",
|
||
"**I.** Instantiate your model. (with all the hyperparameter values you care about)\n",
|
||
"\n",
|
||
"**II.** Fit your model. (to the training data)\n",
|
||
"\n",
|
||
"**III.** Predict using your fitted model. (on the test data)\n",
|
||
"\n",
|
||
"**IV.** Score your model. (comparing the predictions to the actual values on the test data)\n",
|
||
"\n",
|
||
"You can also try a grid search to see if you can improve on your initial predictions."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 25,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[[202 0 0 0 0 0 5 0 2 0]\n",
|
||
" [ 0 234 3 0 0 1 1 2 2 0]\n",
|
||
" [ 1 6 212 1 2 0 0 5 1 0]\n",
|
||
" [ 2 0 6 169 0 10 0 1 2 1]\n",
|
||
" [ 0 0 0 0 171 0 2 1 0 4]\n",
|
||
" [ 2 1 0 5 0 174 3 0 1 0]\n",
|
||
" [ 1 0 0 0 1 2 206 1 0 0]\n",
|
||
" [ 0 0 6 1 7 0 0 204 1 6]\n",
|
||
" [ 0 1 4 7 0 4 1 0 183 2]\n",
|
||
" [ 2 1 0 2 8 1 0 5 6 183]]\n",
|
||
"0.931283037001\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.93128303700144166"
|
||
]
|
||
},
|
||
"execution_count": 25,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Remove the tag to fit the RF model from the video, you can also try fitting your own!\n",
|
||
"fit_random_forest_classifier(X, y)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"`5.` Now for the purpose of this lesson, to look at PCA. In the video, I created a model just using two features. Replicate the process below. You can use the same `do_pca` function that was created in the previous video. Store your variables in **pca** and **X_pca**."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 42,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(6304, 11)"
|
||
]
|
||
},
|
||
"execution_count": 42,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"do_pca?\n",
|
||
"pca, X_pca = do_pca(11, X)\n",
|
||
"X_pca.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"`6.` The **X_pca** has reduced the original number of more than 700 features down to only 2 features that capture the majority of the variability in the pixel values. Use the space below to fit a model using these two features to predict the written value. You can use the random forest model by running `fit_random_forest_classifier` the same way as in the video. How well does it perform?"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 43,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[[189 0 2 0 1 7 7 0 1 2]\n",
|
||
" [ 0 231 2 0 0 0 3 0 7 0]\n",
|
||
" [ 2 2 207 3 3 1 4 3 3 0]\n",
|
||
" [ 1 0 12 157 0 6 1 2 11 1]\n",
|
||
" [ 0 0 2 0 147 1 4 3 1 20]\n",
|
||
" [ 7 0 4 7 3 150 1 0 8 6]\n",
|
||
" [ 6 0 1 0 2 1 200 0 1 0]\n",
|
||
" [ 1 2 4 1 3 1 1 195 5 12]\n",
|
||
" [ 2 2 3 7 3 10 0 1 173 1]\n",
|
||
" [ 3 0 1 2 31 0 0 18 6 147]]\n",
|
||
"0.863046612206\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.86304661220567036"
|
||
]
|
||
},
|
||
"execution_count": 43,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"fit_random_forest_classifier?\n",
|
||
"fit_random_forest_classifier(X_pca, y)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"`7.` Now you can look at the separation of the values using the `plot_components` function. If you plot all of the points (more than 40,000), you will likely not be able to see much of what is happening. I recommend plotting just a subset of the data. Which value(s) have some separation that are being predicted better than others based on these two components?"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 37,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x7f6be270c278>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Try plotting some of the numbers below - you can change the number\n",
|
||
"# of digits that are plotted, but it is probably best not to plot the \n",
|
||
"# entire dataset. Your visual will not be readable.\n",
|
||
"\n",
|
||
"plot_components(X_pca[:200], y[:200])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"`8.` See if you can find a reduced number of features that provides better separation to make predictions. Say you want to get separation that allows for accuracy of more than 90%, how many principal components are needed to obtain this level of accuracy? Were you able to substantially reduce the number of features needed in your final model?"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 44,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[[111 0 38 13 7 7 26 0 7 0]\n",
|
||
" [ 0 208 0 4 1 8 4 7 7 4]\n",
|
||
" [ 38 2 72 25 16 23 35 1 13 3]\n",
|
||
" [ 13 2 31 18 22 27 25 15 25 13]\n",
|
||
" [ 5 4 18 19 47 17 16 11 10 31]\n",
|
||
" [ 8 8 31 24 14 23 30 3 34 11]\n",
|
||
" [ 30 4 54 17 13 28 38 2 23 2]\n",
|
||
" [ 3 6 3 10 33 9 3 90 8 60]\n",
|
||
" [ 7 6 23 29 24 32 28 7 36 10]\n",
|
||
" [ 2 12 2 17 29 9 4 54 8 71]]\n",
|
||
"0.34310427679\n",
|
||
"[[157 0 6 2 1 11 18 1 13 0]\n",
|
||
" [ 0 224 1 4 2 5 5 0 2 0]\n",
|
||
" [ 18 3 122 30 5 3 38 0 8 1]\n",
|
||
" [ 3 3 59 54 6 15 27 4 17 3]\n",
|
||
" [ 6 0 2 4 95 15 1 13 16 26]\n",
|
||
" [ 7 0 8 17 22 63 27 7 29 6]\n",
|
||
" [ 17 8 18 15 2 10 128 0 13 0]\n",
|
||
" [ 0 2 0 4 24 9 1 120 8 57]\n",
|
||
" [ 15 2 6 29 27 40 36 2 44 1]\n",
|
||
" [ 2 2 1 2 45 4 1 55 8 88]]\n",
|
||
"0.526189332052\n",
|
||
"[[175 0 8 0 4 11 4 0 7 0]\n",
|
||
" [ 0 225 1 1 0 2 3 2 9 0]\n",
|
||
" [ 13 2 167 10 4 8 20 0 3 1]\n",
|
||
" [ 2 0 22 122 0 11 3 1 28 2]\n",
|
||
" [ 5 0 4 1 124 1 7 15 0 21]\n",
|
||
" [ 5 0 5 28 16 81 3 5 34 9]\n",
|
||
" [ 4 0 28 0 2 3 173 0 1 0]\n",
|
||
" [ 3 3 3 1 20 4 0 133 9 49]\n",
|
||
" [ 14 6 6 29 4 42 1 3 97 0]\n",
|
||
" [ 2 1 2 2 47 6 1 45 7 95]]\n",
|
||
"0.66890917828\n",
|
||
"[[176 0 9 0 4 6 5 1 7 1]\n",
|
||
" [ 0 229 2 1 0 2 2 2 4 1]\n",
|
||
" [ 14 2 176 10 5 8 11 1 1 0]\n",
|
||
" [ 1 0 24 119 0 13 1 2 29 2]\n",
|
||
" [ 3 0 1 0 120 1 10 6 1 36]\n",
|
||
" [ 9 1 10 23 3 93 2 9 31 5]\n",
|
||
" [ 3 0 17 0 3 0 187 0 1 0]\n",
|
||
" [ 2 2 5 3 9 6 0 172 4 22]\n",
|
||
" [ 14 2 3 19 4 49 2 3 105 1]\n",
|
||
" [ 2 1 2 1 50 8 1 24 4 115]]\n",
|
||
"0.716962998558\n",
|
||
"[[177 0 5 0 4 11 8 0 4 0]\n",
|
||
" [ 0 231 2 1 0 1 2 0 6 0]\n",
|
||
" [ 2 2 204 6 5 1 1 2 5 0]\n",
|
||
" [ 0 0 18 134 0 10 2 3 23 1]\n",
|
||
" [ 1 0 3 0 125 1 8 7 1 32]\n",
|
||
" [ 7 0 1 10 2 146 2 4 9 5]\n",
|
||
" [ 4 0 6 1 4 0 195 0 1 0]\n",
|
||
" [ 1 3 7 0 10 1 0 182 4 17]\n",
|
||
" [ 4 3 5 22 6 13 1 2 145 1]\n",
|
||
" [ 0 1 0 0 56 2 1 24 11 113]]\n",
|
||
"0.793849111004\n",
|
||
"[[178 0 4 0 4 10 8 0 5 0]\n",
|
||
" [ 0 231 2 2 0 0 2 0 5 1]\n",
|
||
" [ 2 2 205 6 4 0 3 2 4 0]\n",
|
||
" [ 0 1 15 132 0 10 2 5 25 1]\n",
|
||
" [ 0 0 2 0 132 1 4 7 5 27]\n",
|
||
" [ 10 1 2 11 5 141 0 5 9 2]\n",
|
||
" [ 3 0 5 1 4 0 196 0 2 0]\n",
|
||
" [ 1 2 6 0 8 2 1 180 7 18]\n",
|
||
" [ 1 2 4 15 2 13 0 2 161 2]\n",
|
||
" [ 1 0 0 1 52 1 1 28 10 114]]\n",
|
||
"0.802498798654\n",
|
||
"[[184 0 3 1 1 8 10 0 1 1]\n",
|
||
" [ 0 231 2 3 0 1 2 0 4 0]\n",
|
||
" [ 2 2 202 7 5 1 2 3 4 0]\n",
|
||
" [ 1 0 13 153 0 8 3 2 11 0]\n",
|
||
" [ 0 0 3 0 135 2 7 2 3 26]\n",
|
||
" [ 6 0 4 6 5 154 1 0 8 2]\n",
|
||
" [ 6 0 4 0 3 0 196 0 2 0]\n",
|
||
" [ 0 0 5 1 6 1 1 195 4 12]\n",
|
||
" [ 1 2 4 14 4 12 0 2 162 1]\n",
|
||
" [ 1 0 1 1 46 1 0 18 9 131]]\n",
|
||
"0.837578087458\n",
|
||
"[[187 0 2 1 1 8 8 0 1 1]\n",
|
||
" [ 0 234 3 0 0 0 2 0 4 0]\n",
|
||
" [ 1 2 205 6 4 0 6 3 1 0]\n",
|
||
" [ 1 0 12 152 0 10 0 3 11 2]\n",
|
||
" [ 0 0 3 0 135 1 5 2 2 30]\n",
|
||
" [ 7 0 2 4 3 159 0 0 7 4]\n",
|
||
" [ 4 0 2 0 2 0 202 0 1 0]\n",
|
||
" [ 1 2 5 1 6 0 1 191 6 12]\n",
|
||
" [ 2 2 2 10 3 13 0 0 169 1]\n",
|
||
" [ 2 0 0 1 45 2 1 18 8 131]]\n",
|
||
"0.848149927919\n",
|
||
"[[191 0 3 0 1 5 7 0 1 1]\n",
|
||
" [ 0 233 2 1 0 0 2 0 4 1]\n",
|
||
" [ 2 2 208 5 3 0 1 3 4 0]\n",
|
||
" [ 0 0 14 158 0 6 0 2 10 1]\n",
|
||
" [ 0 0 0 0 144 2 5 3 1 23]\n",
|
||
" [ 4 0 2 9 3 154 0 0 8 6]\n",
|
||
" [ 6 0 1 0 4 0 199 0 1 0]\n",
|
||
" [ 0 2 4 1 6 0 1 193 7 11]\n",
|
||
" [ 2 2 1 11 4 11 0 1 169 1]\n",
|
||
" [ 1 0 0 3 32 1 1 16 10 144]]\n",
|
||
"0.861604997597\n",
|
||
"[[189 0 4 0 0 6 8 0 1 1]\n",
|
||
" [ 0 232 2 2 0 0 2 0 4 1]\n",
|
||
" [ 1 2 206 4 3 1 4 3 4 0]\n",
|
||
" [ 1 0 10 159 0 7 0 2 12 0]\n",
|
||
" [ 0 0 1 0 143 1 6 2 0 25]\n",
|
||
" [ 6 0 2 9 4 153 1 0 6 5]\n",
|
||
" [ 5 0 2 0 3 0 200 0 1 0]\n",
|
||
" [ 0 1 4 1 6 0 1 193 6 13]\n",
|
||
" [ 2 2 2 8 3 10 0 1 172 2]\n",
|
||
" [ 2 2 0 2 31 0 1 17 8 145]]\n",
|
||
"0.861124459395\n",
|
||
"[[190 0 3 1 0 4 7 2 2 0]\n",
|
||
" [ 0 232 2 1 0 0 2 0 5 1]\n",
|
||
" [ 2 2 207 4 2 1 3 3 4 0]\n",
|
||
" [ 1 0 10 156 0 8 1 2 12 1]\n",
|
||
" [ 0 0 2 0 149 1 4 2 1 19]\n",
|
||
" [ 6 0 3 7 2 157 0 0 6 5]\n",
|
||
" [ 4 0 1 0 2 0 203 0 1 0]\n",
|
||
" [ 0 1 4 3 4 0 1 194 6 12]\n",
|
||
" [ 2 2 1 9 3 12 0 1 171 1]\n",
|
||
" [ 2 0 1 3 26 1 0 16 9 150]]\n",
|
||
"0.869293608842\n",
|
||
"[[191 0 4 0 0 4 8 1 1 0]\n",
|
||
" [ 0 233 2 0 0 0 2 0 5 1]\n",
|
||
" [ 3 3 207 4 3 0 3 2 3 0]\n",
|
||
" [ 1 0 13 158 0 6 0 2 9 2]\n",
|
||
" [ 0 0 2 0 145 1 6 1 1 22]\n",
|
||
" [ 2 0 2 8 4 158 3 0 5 4]\n",
|
||
" [ 5 0 1 0 2 0 201 1 1 0]\n",
|
||
" [ 1 2 4 2 2 0 1 197 6 10]\n",
|
||
" [ 2 1 1 9 4 13 0 0 171 1]\n",
|
||
" [ 2 0 1 2 32 0 0 17 8 146]]\n",
|
||
"0.868332532436\n",
|
||
"[[190 0 3 2 1 4 7 1 1 0]\n",
|
||
" [ 0 234 2 0 0 1 2 0 4 0]\n",
|
||
" [ 1 2 208 6 3 0 2 3 3 0]\n",
|
||
" [ 2 0 8 165 0 4 1 2 6 3]\n",
|
||
" [ 0 0 3 0 149 1 6 1 0 18]\n",
|
||
" [ 2 0 2 6 0 166 2 0 5 3]\n",
|
||
" [ 5 0 1 0 2 1 201 0 1 0]\n",
|
||
" [ 0 2 5 2 2 0 1 196 3 14]\n",
|
||
" [ 3 2 2 11 1 10 0 0 171 2]\n",
|
||
" [ 3 0 1 2 30 0 0 17 3 152]]\n",
|
||
"0.880345987506\n",
|
||
"[[191 0 3 0 0 4 8 1 1 1]\n",
|
||
" [ 0 233 2 0 0 0 2 0 5 1]\n",
|
||
" [ 2 2 206 5 3 1 3 4 2 0]\n",
|
||
" [ 0 0 8 163 0 8 1 2 8 1]\n",
|
||
" [ 0 0 2 0 158 0 4 1 0 13]\n",
|
||
" [ 2 0 4 5 3 161 2 0 5 4]\n",
|
||
" [ 6 0 1 0 2 2 199 0 1 0]\n",
|
||
" [ 1 2 5 3 2 0 1 197 2 12]\n",
|
||
" [ 3 2 3 13 1 10 1 0 166 3]\n",
|
||
" [ 3 0 1 2 23 0 0 15 2 162]]\n",
|
||
"0.882268140317\n",
|
||
"[[191 0 3 1 1 4 7 0 1 1]\n",
|
||
" [ 0 234 2 0 0 0 2 0 4 1]\n",
|
||
" [ 2 2 204 6 3 1 4 3 3 0]\n",
|
||
" [ 1 0 8 164 0 5 0 2 8 3]\n",
|
||
" [ 0 0 4 0 151 1 6 1 0 15]\n",
|
||
" [ 1 0 3 8 2 160 2 0 6 4]\n",
|
||
" [ 5 0 1 0 3 1 200 0 1 0]\n",
|
||
" [ 0 1 6 2 4 0 0 196 3 13]\n",
|
||
" [ 2 2 1 10 1 10 0 0 175 1]\n",
|
||
" [ 2 0 1 2 17 1 0 14 4 167]]\n",
|
||
"0.885151369534\n",
|
||
"[[190 0 3 1 1 4 8 0 1 1]\n",
|
||
" [ 0 233 2 0 0 1 2 0 4 1]\n",
|
||
" [ 3 2 204 6 2 0 4 3 4 0]\n",
|
||
" [ 1 0 8 164 0 5 0 2 9 2]\n",
|
||
" [ 0 0 4 0 154 1 6 1 0 12]\n",
|
||
" [ 1 0 3 7 1 164 0 0 7 3]\n",
|
||
" [ 3 0 1 0 4 2 200 0 1 0]\n",
|
||
" [ 0 1 6 3 2 0 2 193 2 16]\n",
|
||
" [ 2 2 1 10 1 8 0 0 176 2]\n",
|
||
" [ 2 0 1 3 13 0 0 15 2 172]]\n",
|
||
"0.888995675156\n",
|
||
"[[192 0 3 1 0 3 7 1 2 0]\n",
|
||
" [ 0 233 2 1 0 0 2 0 4 1]\n",
|
||
" [ 2 2 206 6 3 0 2 3 4 0]\n",
|
||
" [ 0 0 8 168 0 5 0 2 7 1]\n",
|
||
" [ 0 0 3 0 156 1 5 1 0 12]\n",
|
||
" [ 2 0 2 7 1 166 2 0 3 3]\n",
|
||
" [ 4 0 1 0 3 1 201 0 1 0]\n",
|
||
" [ 0 0 5 3 6 0 0 196 2 13]\n",
|
||
" [ 3 2 2 13 1 8 1 0 169 3]\n",
|
||
" [ 2 1 2 3 17 0 0 16 1 166]]\n",
|
||
"0.890437289765\n",
|
||
"[[194 0 3 0 0 2 8 0 1 1]\n",
|
||
" [ 0 233 2 0 0 2 2 0 4 0]\n",
|
||
" [ 2 2 207 5 2 0 2 3 3 2]\n",
|
||
" [ 0 0 8 161 0 8 1 2 10 1]\n",
|
||
" [ 0 0 3 0 156 1 4 1 0 13]\n",
|
||
" [ 2 0 4 5 2 164 1 0 5 3]\n",
|
||
" [ 5 0 1 0 4 1 199 0 1 0]\n",
|
||
" [ 1 1 6 3 5 0 0 195 3 11]\n",
|
||
" [ 3 2 1 11 2 8 0 0 174 1]\n",
|
||
" [ 1 0 1 3 13 0 0 14 1 175]]\n",
|
||
"0.892839980778\n",
|
||
"[[191 0 4 0 0 2 9 1 1 1]\n",
|
||
" [ 0 234 2 0 0 1 2 0 4 0]\n",
|
||
" [ 3 2 206 5 2 0 3 3 4 0]\n",
|
||
" [ 0 0 8 167 0 9 0 2 4 1]\n",
|
||
" [ 0 0 3 0 159 1 2 1 0 12]\n",
|
||
" [ 2 0 1 7 1 168 0 0 4 3]\n",
|
||
" [ 5 0 2 0 4 0 199 0 1 0]\n",
|
||
" [ 0 1 5 2 5 0 1 200 2 9]\n",
|
||
" [ 2 2 1 10 0 11 0 0 174 2]\n",
|
||
" [ 2 0 2 3 17 0 0 16 1 167]]\n",
|
||
"0.896203748198\n",
|
||
"[[194 0 3 0 0 1 8 1 1 1]\n",
|
||
" [ 0 234 2 1 0 0 2 0 3 1]\n",
|
||
" [ 2 2 209 5 2 0 3 2 3 0]\n",
|
||
" [ 0 0 9 165 0 4 1 2 9 1]\n",
|
||
" [ 0 0 3 0 155 1 4 1 0 14]\n",
|
||
" [ 1 0 1 7 2 166 0 0 6 3]\n",
|
||
" [ 5 0 1 0 2 2 201 0 0 0]\n",
|
||
" [ 2 0 6 3 4 0 1 193 2 14]\n",
|
||
" [ 3 2 1 11 1 4 0 0 178 2]\n",
|
||
" [ 2 0 2 3 14 0 0 14 1 172]]\n",
|
||
"0.897164824604\n",
|
||
"[[194 0 2 1 1 1 7 1 1 1]\n",
|
||
" [ 0 233 2 1 0 0 2 0 5 0]\n",
|
||
" [ 2 2 209 4 2 0 2 3 2 2]\n",
|
||
" [ 0 0 8 167 0 6 0 2 6 2]\n",
|
||
" [ 0 0 4 0 152 1 4 1 0 16]\n",
|
||
" [ 2 0 1 9 1 166 1 0 3 3]\n",
|
||
" [ 5 0 1 0 2 2 201 0 0 0]\n",
|
||
" [ 1 1 7 1 2 0 0 193 4 16]\n",
|
||
" [ 3 1 1 12 0 7 1 0 174 3]\n",
|
||
" [ 1 0 2 3 17 1 0 14 2 168]]\n",
|
||
"0.892359442576\n",
|
||
"[[190 0 3 1 2 1 8 2 1 1]\n",
|
||
" [ 0 234 2 0 0 0 2 0 4 1]\n",
|
||
" [ 2 2 209 3 2 0 3 4 3 0]\n",
|
||
" [ 0 0 7 167 0 5 1 2 8 1]\n",
|
||
" [ 1 0 4 0 155 1 5 1 0 11]\n",
|
||
" [ 2 0 3 7 1 163 3 0 4 3]\n",
|
||
" [ 4 0 1 0 2 2 201 0 1 0]\n",
|
||
" [ 1 2 6 1 5 0 0 196 2 12]\n",
|
||
" [ 3 1 1 12 2 6 1 0 174 2]\n",
|
||
" [ 2 0 2 3 15 0 0 12 2 172]]\n",
|
||
"0.894281595387\n",
|
||
"[[193 0 2 1 1 1 6 3 1 1]\n",
|
||
" [ 0 234 2 1 0 0 2 0 3 1]\n",
|
||
" [ 3 2 207 4 1 0 3 3 4 1]\n",
|
||
" [ 0 0 9 168 0 6 0 2 5 1]\n",
|
||
" [ 0 0 4 0 154 1 4 1 0 14]\n",
|
||
" [ 2 0 3 7 1 165 2 0 3 3]\n",
|
||
" [ 6 0 1 0 1 1 201 0 1 0]\n",
|
||
" [ 0 0 7 1 6 0 0 196 3 12]\n",
|
||
" [ 0 1 1 12 0 6 1 0 178 3]\n",
|
||
" [ 2 0 2 3 18 0 0 16 1 166]]\n",
|
||
"0.89476213359\n",
|
||
"[[191 0 4 1 1 1 7 1 1 2]\n",
|
||
" [ 0 234 2 0 0 1 2 0 3 1]\n",
|
||
" [ 2 2 208 3 2 0 4 3 4 0]\n",
|
||
" [ 0 0 8 169 0 5 0 2 7 0]\n",
|
||
" [ 0 0 3 0 157 1 3 1 0 13]\n",
|
||
" [ 1 0 3 7 2 166 1 0 2 4]\n",
|
||
" [ 2 0 2 0 3 2 202 0 0 0]\n",
|
||
" [ 0 1 7 1 4 0 0 194 2 16]\n",
|
||
" [ 0 1 1 12 1 5 0 1 181 0]\n",
|
||
" [ 1 0 1 2 14 1 0 14 2 173]]\n",
|
||
"0.901009130226\n",
|
||
"With only 25 components, a random forest acheived an accuracy of 0.9010091302258529.\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"for comp in range(2, 100):\n",
|
||
" pca, X_pca = do_pca(comp, X)\n",
|
||
" acc = fit_random_forest_classifier(X_pca, y)\n",
|
||
" if acc > .90:\n",
|
||
" print(\"With only {} components, a random forest acheived an accuracy of {}.\".format(comp, acc))\n",
|
||
" break"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"`9.` It is possible that extra features in the dataset even lead to overfitting or the [curse of dimensionality](https://stats.stackexchange.com/questions/65379/machine-learning-curse-of-dimensionality-explained). Do you have evidence of this happening for this dataset? Can you support your evidence with a visual or table? To avoid printing out all of the metric results, I created another function called `fit_random_forest_classifier2`. I ran through a significant number of components to create the visual for the solution, but I strongly recommend you look in the range below 100 principal components!"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# I would highly recommend not running the below code, as it had to run overnight to complete.\n",
|
||
"# Instead, you can run a smaller number of components that still allows you to see enough.\n",
|
||
"\n",
|
||
"\n",
|
||
"#accs = []\n",
|
||
"#comps = []\n",
|
||
"#for comp in range(2, 700):\n",
|
||
"# comps.append(comp)\n",
|
||
"# pca, X_pca = do_pca(comp, X)\n",
|
||
"# acc = fit_random_forest_classifier2(X_pca, y)\n",
|
||
"# accs.append(acc)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 45,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"ename": "NameError",
|
||
"evalue": "name 'comps' is not defined",
|
||
"output_type": "error",
|
||
"traceback": [
|
||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
|
||
"\u001b[0;32m<ipython-input-45-d11575a86762>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcomps\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maccs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'bo'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Number of Components'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mylabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Accuracy'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtitle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Number of Components by Accuracy'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
||
"\u001b[0;31mNameError\u001b[0m: name 'comps' is not defined"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"plt.plot(comps, accs, 'bo');\n",
|
||
"plt.xlabel('Number of Components');\n",
|
||
"plt.ylabel('Accuracy');\n",
|
||
"plt.title('Number of Components by Accuracy');"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"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.7.3"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|