diff --git a/02_activities/assignments/assignment_2.ipynb b/02_activities/assignments/assignment_2.ipynb index 29d661c57..3b0097d99 100644 --- a/02_activities/assignments/assignment_2.ipynb +++ b/02_activities/assignments/assignment_2.ipynb @@ -97,20 +97,62 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 236, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The dotenv extension is already loaded. To reload it, use:\n", + " %reload_ext dotenv\n" + ] + } + ], "source": [ - "# Load the libraries as required." + "# Load the libraries as required.\n", + "\n", + "%load_ext dotenv\n", + "%dotenv \n", + "\n", + "import pandas as pd\n", + "import numpy as np" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 237, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 517 entries, 0 to 516\n", + "Data columns (total 13 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 coord_x 517 non-null int64 \n", + " 1 coord_y 517 non-null int64 \n", + " 2 month 517 non-null object \n", + " 3 day 517 non-null object \n", + " 4 ffmc 517 non-null float64\n", + " 5 dmc 517 non-null float64\n", + " 6 dc 517 non-null float64\n", + " 7 isi 517 non-null float64\n", + " 8 temp 517 non-null float64\n", + " 9 rh 517 non-null int64 \n", + " 10 wind 517 non-null float64\n", + " 11 rain 517 non-null float64\n", + " 12 area 517 non-null float64\n", + "dtypes: float64(8), int64(3), object(2)\n", + "memory usage: 52.6+ KB\n" + ] + } + ], "source": [ - "# Load data\n", + "# Load data from csv file into a dataframe\n", "columns = [\n", " 'coord_x', 'coord_y', 'month', 'day', 'ffmc', 'dmc', 'dc', 'isi', 'temp', 'rh', 'wind', 'rain', 'area' \n", "]\n", @@ -129,17 +171,76 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 238, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " coord_x coord_y month day ffmc dmc dc isi temp rh wind \\\n", + "0 7 5 mar fri 86.2 26.2 94.3 5.1 8.2 51 6.7 \n", + "1 7 4 oct tue 90.6 35.4 669.1 6.7 18.0 33 0.9 \n", + "2 7 4 oct sat 90.6 43.7 686.9 6.7 14.6 33 1.3 \n", + "3 8 6 mar fri 91.7 33.3 77.5 9.0 8.3 97 4.0 \n", + "4 8 6 mar sun 89.3 51.3 102.2 9.6 11.4 99 1.8 \n", + ".. ... ... ... ... ... ... ... ... ... .. ... \n", + "512 4 3 aug sun 81.6 56.7 665.6 1.9 27.8 32 2.7 \n", + "513 2 4 aug sun 81.6 56.7 665.6 1.9 21.9 71 5.8 \n", + "514 7 4 aug sun 81.6 56.7 665.6 1.9 21.2 70 6.7 \n", + "515 1 4 aug sat 94.4 146.0 614.7 11.3 25.6 42 4.0 \n", + "516 6 3 nov tue 79.5 3.0 106.7 1.1 11.8 31 4.5 \n", + "\n", + " rain \n", + "0 0.0 \n", + "1 0.0 \n", + "2 0.0 \n", + "3 0.2 \n", + "4 0.0 \n", + ".. ... \n", + "512 0.0 \n", + "513 0.0 \n", + "514 0.0 \n", + "515 0.0 \n", + "516 0.0 \n", + "\n", + "[517 rows x 12 columns]\n" + ] + } + ], + "source": [ + "X = fires_dt.drop(columns = 'area')\n", + "print(X)" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 239, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 0.00\n", + "1 0.00\n", + "2 0.00\n", + "3 0.00\n", + "4 0.00\n", + " ... \n", + "512 6.44\n", + "513 54.29\n", + "514 11.16\n", + "515 0.00\n", + "516 0.00\n", + "Name: area, Length: 517, dtype: float64\n" + ] + } + ], + "source": [ + "Y = fires_dt['area']\n", + "print(Y)" + ] }, { "cell_type": "markdown", @@ -180,10 +281,44 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 240, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ColumnTransformer(transformers=[('num_transform', StandardScaler(),\n", + " Index(['coord_x', 'coord_y', 'ffmc', 'dmc', 'dc', 'isi', 'temp', 'rh', 'wind',\n", + " 'rain'],\n", + " dtype='object')),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " Index(['month', 'day'], dtype='object'))])\n" + ] + } + ], + "source": [ + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "\n", + "# Create a StandardScaler object\n", + "std_scaler = StandardScaler()\n", + "\n", + "# Detect numeric and categorical columns \n", + "numeric_features = X.select_dtypes(include=['int64', 'float64']).columns\n", + "categorical_features = X.select_dtypes(include=['object', 'category']).columns\n", + "\n", + "# create the column transformer\n", + "preproc1 = ColumnTransformer(\n", + " transformers=[\n", + " ('num_transform', std_scaler, numeric_features),\n", + " ('cat_transform', OneHotEncoder(drop='if_binary', handle_unknown='ignore'), categorical_features)\n", + " ], remainder='drop') \n", + "\n", + "print(preproc1)" + ] }, { "cell_type": "markdown", @@ -199,10 +334,49 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 241, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ColumnTransformer(transformers=[('num_transform', StandardScaler(),\n", + " ['coord_x', 'coord_y', 'ffmc', 'isi', 'temp',\n", + " 'rh', 'wind', 'rain']),\n", + " ('log_transform',\n", + " FunctionTransformer(func=,\n", + " validate=True),\n", + " ['dc', 'dmc']),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " ['month', 'day'])])\n" + ] + } + ], + "source": [ + "from sklearn.preprocessing import FunctionTransformer\n", + "\n", + "# Create a StandardScaler object\n", + "std_scaler = StandardScaler()\n", + "log_scaler = FunctionTransformer(np.log1p, validate=True)\n", + "\n", + "# Detect numeric and catergorical columns \n", + "linear_features = ['coord_x', 'coord_y', 'ffmc', 'isi', 'temp', 'rh', 'wind', 'rain']\n", + "nonlinear_features = ['dc', 'dmc']\n", + "categorical_features = ['month', 'day']\n", + "\n", + "# create the column transformer\n", + "preproc2 = ColumnTransformer(\n", + " transformers=[\n", + " ('num_transform', std_scaler, linear_features),\n", + " ('log_transform', log_scaler, nonlinear_features),\n", + " ('cat_transform', OneHotEncoder(drop='if_binary', handle_unknown='ignore'), categorical_features)\n", + " ], remainder='drop') \n", + "\n", + "print(preproc2)" + ] }, { "cell_type": "markdown", @@ -227,40 +401,4126 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 242, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
Pipeline(steps=[('preproc',\n",
+       "                 ColumnTransformer(transformers=[('num_transform',\n",
+       "                                                  StandardScaler(),\n",
+       "                                                  Index(['coord_x', 'coord_y', 'ffmc', 'dmc', 'dc', 'isi', 'temp', 'rh', 'wind',\n",
+       "       'rain'],\n",
+       "      dtype='object')),\n",
+       "                                                 ('cat_transform',\n",
+       "                                                  OneHotEncoder(drop='if_binary',\n",
+       "                                                                handle_unknown='ignore'),\n",
+       "                                                  Index(['month', 'day'], dtype='object'))])),\n",
+       "                ('linear', LinearRegression())])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "Pipeline(steps=[('preproc',\n", + " ColumnTransformer(transformers=[('num_transform',\n", + " StandardScaler(),\n", + " Index(['coord_x', 'coord_y', 'ffmc', 'dmc', 'dc', 'isi', 'temp', 'rh', 'wind',\n", + " 'rain'],\n", + " dtype='object')),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " Index(['month', 'day'], dtype='object'))])),\n", + " ('linear', LinearRegression())])" + ] + }, + "execution_count": 242, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Pipeline A = preproc1 + baseline\n" + "# Load pipeline, gridsearch, train and test split, and linear regression. \n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.linear_model import LinearRegression\n", + "\n", + "# Pipeline A = preproc1 + baseline\n", + "Pipeline_A = Pipeline(\n", + " [\n", + " ('preproc', preproc1), \n", + " ('linear', LinearRegression())\n", + " ]\n", + ")\n", + "Pipeline_A \n", + "\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 243, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
Pipeline(steps=[('preproc',\n",
+       "                 ColumnTransformer(transformers=[('num_transform',\n",
+       "                                                  StandardScaler(),\n",
+       "                                                  ['coord_x', 'coord_y', 'ffmc',\n",
+       "                                                   'isi', 'temp', 'rh', 'wind',\n",
+       "                                                   'rain']),\n",
+       "                                                 ('log_transform',\n",
+       "                                                  FunctionTransformer(func=<ufunc 'log1p'>,\n",
+       "                                                                      validate=True),\n",
+       "                                                  ['dc', 'dmc']),\n",
+       "                                                 ('cat_transform',\n",
+       "                                                  OneHotEncoder(drop='if_binary',\n",
+       "                                                                handle_unknown='ignore'),\n",
+       "                                                  ['month', 'day'])])),\n",
+       "                ('linear', LinearRegression())])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "Pipeline(steps=[('preproc',\n", + " ColumnTransformer(transformers=[('num_transform',\n", + " StandardScaler(),\n", + " ['coord_x', 'coord_y', 'ffmc',\n", + " 'isi', 'temp', 'rh', 'wind',\n", + " 'rain']),\n", + " ('log_transform',\n", + " FunctionTransformer(func=,\n", + " validate=True),\n", + " ['dc', 'dmc']),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " ['month', 'day'])])),\n", + " ('linear', LinearRegression())])" + ] + }, + "execution_count": 243, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Pipeline B = preproc2 + baseline\n" + "# Pipeline B = preproc2 + baseline\n", + "Pipeline_B = Pipeline(\n", + " [\n", + " ('preproc', preproc2), \n", + " ('linear', LinearRegression())\n", + " ]\n", + ")\n", + "Pipeline_B \n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 244, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
Pipeline(steps=[('preproc',\n",
+       "                 ColumnTransformer(transformers=[('num_transform',\n",
+       "                                                  StandardScaler(),\n",
+       "                                                  Index(['coord_x', 'coord_y', 'ffmc', 'dmc', 'dc', 'isi', 'temp', 'rh', 'wind',\n",
+       "       'rain'],\n",
+       "      dtype='object')),\n",
+       "                                                 ('cat_transform',\n",
+       "                                                  OneHotEncoder(drop='if_binary',\n",
+       "                                                                handle_unknown='ignore'),\n",
+       "                                                  Index(['month', 'day'], dtype='object'))])),\n",
+       "                ('boosting', GradientBoostingRegressor())])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "Pipeline(steps=[('preproc',\n", + " ColumnTransformer(transformers=[('num_transform',\n", + " StandardScaler(),\n", + " Index(['coord_x', 'coord_y', 'ffmc', 'dmc', 'dc', 'isi', 'temp', 'rh', 'wind',\n", + " 'rain'],\n", + " dtype='object')),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " Index(['month', 'day'], dtype='object'))])),\n", + " ('boosting', GradientBoostingRegressor())])" + ] + }, + "execution_count": 244, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Pipeline C = preproc1 + advanced model\n" + "from sklearn.ensemble import GradientBoostingRegressor\n", + "\n", + "# Pipeline C = preproc1 + advanced model\n", + "Pipeline_C = Pipeline(\n", + " [\n", + " ('preproc', preproc1), \n", + " ('boosting', GradientBoostingRegressor())\n", + " ]\n", + ")\n", + "Pipeline_C\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 245, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
Pipeline(steps=[('preproc',\n",
+       "                 ColumnTransformer(transformers=[('num_transform',\n",
+       "                                                  StandardScaler(),\n",
+       "                                                  ['coord_x', 'coord_y', 'ffmc',\n",
+       "                                                   'isi', 'temp', 'rh', 'wind',\n",
+       "                                                   'rain']),\n",
+       "                                                 ('log_transform',\n",
+       "                                                  FunctionTransformer(func=<ufunc 'log1p'>,\n",
+       "                                                                      validate=True),\n",
+       "                                                  ['dc', 'dmc']),\n",
+       "                                                 ('cat_transform',\n",
+       "                                                  OneHotEncoder(drop='if_binary',\n",
+       "                                                                handle_unknown='ignore'),\n",
+       "                                                  ['month', 'day'])])),\n",
+       "                ('boosting', GradientBoostingRegressor())])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "Pipeline(steps=[('preproc',\n", + " ColumnTransformer(transformers=[('num_transform',\n", + " StandardScaler(),\n", + " ['coord_x', 'coord_y', 'ffmc',\n", + " 'isi', 'temp', 'rh', 'wind',\n", + " 'rain']),\n", + " ('log_transform',\n", + " FunctionTransformer(func=,\n", + " validate=True),\n", + " ['dc', 'dmc']),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " ['month', 'day'])])),\n", + " ('boosting', GradientBoostingRegressor())])" + ] + }, + "execution_count": 245, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Pipeline D = preproc2 + advanced model\n", - "\n", - " " + "Pipeline_D = Pipeline(\n", + " [\n", + " ('preproc', preproc2), \n", + " ('boosting', GradientBoostingRegressor())\n", + " ]\n", + ")\n", + "Pipeline_D" ] }, { @@ -276,46 +4536,5071 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 246, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "text/html": [ + "
GridSearchCV(cv=5,\n",
+       "             estimator=Pipeline(steps=[('preproc',\n",
+       "                                        ColumnTransformer(transformers=[('num_transform',\n",
+       "                                                                         StandardScaler(),\n",
+       "                                                                         Index(['coord_x', 'coord_y', 'ffmc', 'dmc', 'dc', 'isi', 'temp', 'rh', 'wind',\n",
+       "       'rain'],\n",
+       "      dtype='object')),\n",
+       "                                                                        ('cat_transform',\n",
+       "                                                                         OneHotEncoder(drop='if_binary',\n",
+       "                                                                                       handle_unknown='ignore'),\n",
+       "                                                                         Index(['month', 'day'], dtype='object'))])),\n",
+       "                                       ('linear', LinearRegression())]),\n",
+       "             param_grid={'linear__fit_intercept': [True, False],\n",
+       "                         'linear__tol': [1e-08, 1e-06, 1e-05, 0.0001]},\n",
+       "             refit='neg_mean_squared_error',\n",
+       "             scoring=['neg_mean_squared_error', 'neg_mean_absolute_error',\n",
+       "                      'r2'])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "GridSearchCV(cv=5,\n", + " estimator=Pipeline(steps=[('preproc',\n", + " ColumnTransformer(transformers=[('num_transform',\n", + " StandardScaler(),\n", + " Index(['coord_x', 'coord_y', 'ffmc', 'dmc', 'dc', 'isi', 'temp', 'rh', 'wind',\n", + " 'rain'],\n", + " dtype='object')),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " Index(['month', 'day'], dtype='object'))])),\n", + " ('linear', LinearRegression())]),\n", + " param_grid={'linear__fit_intercept': [True, False],\n", + " 'linear__tol': [1e-08, 1e-06, 1e-05, 0.0001]},\n", + " refit='neg_mean_squared_error',\n", + " scoring=['neg_mean_squared_error', 'neg_mean_absolute_error',\n", + " 'r2'])" + ] + }, + "execution_count": 246, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Set up splitting strategy into train and test data \n", + "# this only needs to be done once and can be used for all four pipelines\n", + "X = fires_dt.drop(columns = 'area')\n", + "Y = fires_dt[['area']]\n", + "\n", + "scoring = ['neg_mean_squared_error', 'neg_mean_absolute_error', 'r2']\n", + "\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 42)\n", + "\n", + "# Run parameter grid using two hyperparameters \n", + "param_grid = {\n", + " 'linear__fit_intercept': [True, False],\n", + " 'linear__tol': [1e-8, 1e-6, 1e-5, 1e-4],\n", + " }\n", + "\n", + "# Run grid search using 5 fold cross validation \n", + "grid_cv_Pipeline_A = GridSearchCV(\n", + " estimator=Pipeline_A, \n", + " param_grid=param_grid, \n", + " scoring = scoring, \n", + " cv = 5, \n", + " refit = \"neg_mean_squared_error\")\n", + "grid_cv_Pipeline_A.fit(X_train, Y_train)" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 247, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "text/html": [ + "
GridSearchCV(cv=5,\n",
+       "             estimator=Pipeline(steps=[('preproc',\n",
+       "                                        ColumnTransformer(transformers=[('num_transform',\n",
+       "                                                                         StandardScaler(),\n",
+       "                                                                         ['coord_x',\n",
+       "                                                                          'coord_y',\n",
+       "                                                                          'ffmc',\n",
+       "                                                                          'isi',\n",
+       "                                                                          'temp',\n",
+       "                                                                          'rh',\n",
+       "                                                                          'wind',\n",
+       "                                                                          'rain']),\n",
+       "                                                                        ('log_transform',\n",
+       "                                                                         FunctionTransformer(func=<ufunc 'log1p'>,\n",
+       "                                                                                             validate=True),\n",
+       "                                                                         ['dc',\n",
+       "                                                                          'dmc']),\n",
+       "                                                                        ('cat_transform',\n",
+       "                                                                         OneHotEncoder(drop='if_binary',\n",
+       "                                                                                       handle_unknown='ignore'),\n",
+       "                                                                         ['month',\n",
+       "                                                                          'day'])])),\n",
+       "                                       ('linear', LinearRegression())]),\n",
+       "             param_grid={'linear__fit_intercept': [True, False],\n",
+       "                         'linear__tol': [1e-08, 1e-06, 1e-05, 0.0001]},\n",
+       "             refit='neg_mean_squared_error',\n",
+       "             scoring=['neg_mean_squared_error', 'neg_mean_absolute_error',\n",
+       "                      'r2'])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "GridSearchCV(cv=5,\n", + " estimator=Pipeline(steps=[('preproc',\n", + " ColumnTransformer(transformers=[('num_transform',\n", + " StandardScaler(),\n", + " ['coord_x',\n", + " 'coord_y',\n", + " 'ffmc',\n", + " 'isi',\n", + " 'temp',\n", + " 'rh',\n", + " 'wind',\n", + " 'rain']),\n", + " ('log_transform',\n", + " FunctionTransformer(func=,\n", + " validate=True),\n", + " ['dc',\n", + " 'dmc']),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " ['month',\n", + " 'day'])])),\n", + " ('linear', LinearRegression())]),\n", + " param_grid={'linear__fit_intercept': [True, False],\n", + " 'linear__tol': [1e-08, 1e-06, 1e-05, 0.0001]},\n", + " refit='neg_mean_squared_error',\n", + " scoring=['neg_mean_squared_error', 'neg_mean_absolute_error',\n", + " 'r2'])" + ] + }, + "execution_count": 247, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Run parameter grid using two hyperparameters \n", + "param_grid = {\n", + " 'linear__fit_intercept': [True, False],\n", + " 'linear__tol': [1e-8, 1e-6, 1e-5, 1e-4],\n", + " }\n", + "\n", + "# Run grid search using 5 fold cross validation \n", + "grid_cv_Pipeline_B = GridSearchCV(\n", + " estimator=Pipeline_B, \n", + " param_grid=param_grid, \n", + " scoring = scoring, \n", + " cv = 5, \n", + " refit = \"neg_mean_squared_error\")\n", + "grid_cv_Pipeline_B.fit(X_train, Y_train)" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 248, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n" + ] + }, + { + "data": { + "text/html": [ + "
GridSearchCV(cv=5,\n",
+       "             estimator=Pipeline(steps=[('preproc',\n",
+       "                                        ColumnTransformer(transformers=[('num_transform',\n",
+       "                                                                         StandardScaler(),\n",
+       "                                                                         Index(['coord_x', 'coord_y', 'ffmc', 'dmc', 'dc', 'isi', 'temp', 'rh', 'wind',\n",
+       "       'rain'],\n",
+       "      dtype='object')),\n",
+       "                                                                        ('cat_transform',\n",
+       "                                                                         OneHotEncoder(drop='if_binary',\n",
+       "                                                                                       handle_unknown='ignore'),\n",
+       "                                                                         Index(['month', 'day'], dtype='object'))])),\n",
+       "                                       ('boosting',\n",
+       "                                        GradientBoostingRegressor())]),\n",
+       "             param_grid={'boosting__learning_rate': [0.1, 0.005, 0.3, 0.25],\n",
+       "                         'boosting__loss': ['squared_error', 'absolute_error',\n",
+       "                                            'huber', 'quantile']},\n",
+       "             refit='neg_mean_squared_error',\n",
+       "             scoring=['neg_mean_squared_error', 'neg_mean_absolute_error',\n",
+       "                      'r2'])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "GridSearchCV(cv=5,\n", + " estimator=Pipeline(steps=[('preproc',\n", + " ColumnTransformer(transformers=[('num_transform',\n", + " StandardScaler(),\n", + " Index(['coord_x', 'coord_y', 'ffmc', 'dmc', 'dc', 'isi', 'temp', 'rh', 'wind',\n", + " 'rain'],\n", + " dtype='object')),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " Index(['month', 'day'], dtype='object'))])),\n", + " ('boosting',\n", + " GradientBoostingRegressor())]),\n", + " param_grid={'boosting__learning_rate': [0.1, 0.005, 0.3, 0.25],\n", + " 'boosting__loss': ['squared_error', 'absolute_error',\n", + " 'huber', 'quantile']},\n", + " refit='neg_mean_squared_error',\n", + " scoring=['neg_mean_squared_error', 'neg_mean_absolute_error',\n", + " 'r2'])" + ] + }, + "execution_count": 248, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Run parameter grid using two hyperparameters \n", + "param_grid = {\n", + " 'boosting__loss': ['squared_error', 'absolute_error', 'huber', 'quantile'],\n", + " 'boosting__learning_rate': [0.1, 0.005, 0.3, 0.25],\n", + " }\n", + "\n", + "# Run grid search using 5 fold cross validation \n", + "grid_cv_Pipeline_C = GridSearchCV(\n", + " estimator=Pipeline_C, \n", + " param_grid=param_grid, \n", + " scoring = scoring, \n", + " cv = 5, \n", + " refit = \"neg_mean_squared_error\")\n", + "grid_cv_Pipeline_C.fit(X_train, Y_train)" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 249, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:246: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\samka\\Documents\\GitHub\\production\\production-env\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:672: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n" + ] + }, + { + "data": { + "text/html": [ + "
GridSearchCV(cv=5,\n",
+       "             estimator=Pipeline(steps=[('preproc',\n",
+       "                                        ColumnTransformer(transformers=[('num_transform',\n",
+       "                                                                         StandardScaler(),\n",
+       "                                                                         ['coord_x',\n",
+       "                                                                          'coord_y',\n",
+       "                                                                          'ffmc',\n",
+       "                                                                          'isi',\n",
+       "                                                                          'temp',\n",
+       "                                                                          'rh',\n",
+       "                                                                          'wind',\n",
+       "                                                                          'rain']),\n",
+       "                                                                        ('log_transform',\n",
+       "                                                                         FunctionTransformer(func=<ufunc 'log1p'>,\n",
+       "                                                                                             validate=True),\n",
+       "                                                                         ['dc',\n",
+       "                                                                          'dmc']),\n",
+       "                                                                        ('cat_transform',\n",
+       "                                                                         OneHotEncoder(drop='if_binary',\n",
+       "                                                                                       handle_unknown='ignore'),\n",
+       "                                                                         ['month',\n",
+       "                                                                          'day'])])),\n",
+       "                                       ('boosting',\n",
+       "                                        GradientBoostingRegressor())]),\n",
+       "             param_grid={'boosting__learning_rate': [0.1, 0.005, 0.3, 0.25],\n",
+       "                         'boosting__loss': ['squared_error', 'absolute_error',\n",
+       "                                            'huber', 'quantile']},\n",
+       "             refit='neg_mean_squared_error',\n",
+       "             scoring=['neg_mean_squared_error', 'neg_mean_absolute_error',\n",
+       "                      'r2'])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "GridSearchCV(cv=5,\n", + " estimator=Pipeline(steps=[('preproc',\n", + " ColumnTransformer(transformers=[('num_transform',\n", + " StandardScaler(),\n", + " ['coord_x',\n", + " 'coord_y',\n", + " 'ffmc',\n", + " 'isi',\n", + " 'temp',\n", + " 'rh',\n", + " 'wind',\n", + " 'rain']),\n", + " ('log_transform',\n", + " FunctionTransformer(func=,\n", + " validate=True),\n", + " ['dc',\n", + " 'dmc']),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " ['month',\n", + " 'day'])])),\n", + " ('boosting',\n", + " GradientBoostingRegressor())]),\n", + " param_grid={'boosting__learning_rate': [0.1, 0.005, 0.3, 0.25],\n", + " 'boosting__loss': ['squared_error', 'absolute_error',\n", + " 'huber', 'quantile']},\n", + " refit='neg_mean_squared_error',\n", + " scoring=['neg_mean_squared_error', 'neg_mean_absolute_error',\n", + " 'r2'])" + ] + }, + "execution_count": 249, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Run parameter grid using two hyperparameters \n", + "param_grid = {\n", + " 'boosting__loss': ['squared_error', 'absolute_error', 'huber', 'quantile'],\n", + " 'boosting__learning_rate': [0.1, 0.005, 0.3, 0.25],\n", + " }\n", + "\n", + "# Run grid search using 5 fold cross validation \n", + "grid_cv_Pipeline_D = GridSearchCV(\n", + " estimator=Pipeline_D, \n", + " param_grid=param_grid, \n", + " scoring = scoring, \n", + " cv = 5, \n", + " refit = \"neg_mean_squared_error\")\n", + "grid_cv_Pipeline_D.fit(X_train, Y_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Evaluate\n", + "\n", + "+ Which model has the best performance?" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 250, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Grid 1:\n", + "Best score: -2230.3742278594045\n", + "Best parameters: {'linear__fit_intercept': False, 'linear__tol': 1e-08}\n", + "----------------------------------------\n", + "Grid 2:\n", + "Best score: -2255.997953896639\n", + "Best parameters: {'linear__fit_intercept': True, 'linear__tol': 1e-08}\n", + "----------------------------------------\n", + "Grid 3:\n", + "Best score: -2168.8063680319324\n", + "Best parameters: {'boosting__learning_rate': 0.005, 'boosting__loss': 'huber'}\n", + "----------------------------------------\n", + "Grid 4:\n", + "Best score: -2168.782464582061\n", + "Best parameters: {'boosting__learning_rate': 0.005, 'boosting__loss': 'huber'}\n", + "----------------------------------------\n" + ] + } + ], + "source": [ + "# List the grid search results for each pipeline\n", + "grid_list = [grid_cv_Pipeline_A, grid_cv_Pipeline_B, grid_cv_Pipeline_C, grid_cv_Pipeline_D]\n", + "\n", + "# Evaluate the grid search results for each pipeline for the best score and best parameters\n", + "for i, grid in enumerate(grid_list, 1):\n", + " print(f\"Grid {i}:\")\n", + " print(\"Best score:\", grid.best_score_)\n", + " print(\"Best parameters:\", grid.best_params_)\n", + " print(\"-\"*40)" + ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Evaluate\n", - "\n", - "+ Which model has the best performance?" + "From comparing the grid search results from each pipeline, the model that has the best performance is Pipeline D because it has the lowest negative mean squared error. " ] }, { @@ -329,17 +9614,53 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 258, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "# Use a pickle file to store the best performing model - Pipeline D. \n", + "import pickle\n", + "import os\n", + "\n", + "os.makedirs(\"./models\", exist_ok=True)\n", + "with open('./models/forest_fire_areas_grid_search.pkl', 'wb') as f:\n", + " pickle.dump(grid_cv_Pipeline_D.best_estimator_, f)" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 259, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pipeline(steps=[('preproc',\n", + " ColumnTransformer(transformers=[('num_transform',\n", + " StandardScaler(),\n", + " ['coord_x', 'coord_y', 'ffmc',\n", + " 'isi', 'temp', 'rh', 'wind',\n", + " 'rain']),\n", + " ('log_transform',\n", + " FunctionTransformer(func=,\n", + " validate=True),\n", + " ['dc', 'dmc']),\n", + " ('cat_transform',\n", + " OneHotEncoder(drop='if_binary',\n", + " handle_unknown='ignore'),\n", + " ['month', 'day'])])),\n", + " ('boosting',\n", + " GradientBoostingRegressor(learning_rate=0.005, loss='huber'))])\n" + ] + } + ], + "source": [ + "with open('./models/forest_fire_areas_grid_search.pkl', 'rb') as f:\n", + " Pipeline_D = pickle.load(f)\n", + " \n", + "print(Pipeline_D)" + ] }, { "cell_type": "markdown", @@ -358,23 +9679,144 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 260, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ".values =\n", + "array([[ 0. , 0.00032685, 0.00066614, ..., 0. ,\n", + " 0. , 0. ],\n", + " [ 0. , 0.00032685, 0.00066614, ..., 0. ,\n", + " 0. , 0. ],\n", + " [ 0. , -0.00016343, 0.00066614, ..., 0. ,\n", + " 0. , 0. ],\n", + " ...,\n", + " [ 0. , 0.00032685, 0.00066614, ..., 0. ,\n", + " 0. , 0. ],\n", + " [ 0. , 0.00032685, -0.00133228, ..., 0. ,\n", + " 0. , 0. ],\n", + " [ 0. , 0.00032685, 0.00066614, ..., 0. ,\n", + " 0. , 0. ]], shape=(104, 29))\n", + "\n", + ".base_values =\n", + "array([2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939, 2.32796939,\n", + " 2.32796939, 2.32796939, 2.32796939, 2.32796939])\n", + "\n", + ".data =\n", + "array([[ 0.58434072, 0.56146622, -0.91378881, ..., 0. ,\n", + " 0. , 0. ],\n", + " [ 1.02074708, 0.56146622, 0.93618559, ..., 0. ,\n", + " 1. , 0. ],\n", + " [ 1.45715343, 1.38962889, 0.26346763, ..., 0. ,\n", + " 0. , 0. ],\n", + " ...,\n", + " [ 0.14793436, -0.26669645, 0.07847019, ..., 0. ,\n", + " 0. , 0. ],\n", + " [-1.16128472, -0.26669645, -1.50241703, ..., 0. ,\n", + " 0. , 0. ],\n", + " [ 0.58434072, -1.09485913, 0.38119327, ..., 1. ,\n", + " 0. , 0. ]], shape=(104, 29))\n" + ] + } + ], + "source": [ + "import shap\n", + "\n", + "# One-hot encoded categorical features\n", + "categorical_features = Pipeline_D.named_steps['preproc'].named_transformers_['cat_transform'].get_feature_names_out()\n", + "\n", + "# Combine all feature names\n", + "all_features = linear_features + nonlinear_features + list(categorical_features)\n", + "\n", + "data_transform = Pipeline_D.named_steps['preproc'].transform(X_test)\n", + "\n", + "# explain the full dataset\n", + "explainer = shap.TreeExplainer(\n", + " Pipeline_D.named_steps['boosting'], \n", + " data_transform,\n", + " feature_names = all_features)\n", + "\n", + "shap_values = explainer(data_transform)\n", + "print(shap_values)" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 261, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzoAAAJYCAYAAACq+pNRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAozFJREFUeJzt3Qd4VGXWwPEzqYSE3nvvvUpRQUSliBVRFAXruoq6Ylm7YltXv117L6CyWLArCqiIqNjoLfTeewuQer/nvHHCzGQymbS5M3P/v+cJSe7cufedmSTcM+e853VZlmUJAAAAAESRGLsHAAAAAACljUAHAAAAQNQh0AEAAAAQdQh0AAAAAEQdAh0AAAAAUYdABwAAAEDUIdABAAAAEHUIdAAAAABEHQIdAAAAAFGHQAcAAABA1CHQAQAAABB1CHQAAEDEy8nJkUcffVSaNWsm8fHx5vOTTz4prVu3NrcV1SuvvCINGzaU9PT0MhkvgLLnsizLCsF5AAAAyswLL7wgN998s9x2223SsWNHqVSpklx55ZXyf//3f+ZzUR0/flwaN24s99xzjzluWdu1a5esWrVKtm/fLocPH5bExESpVauWdO/eXSpXrlyq992zZ4/MnTtXdu7cKVlZWVKxYkVp06aNtG/fPm+fzMxMWbRokTn27t27TcDXr18/adWqVZk8fqAskNEBAAARb8KECXLGGWfIU089JZdffrmsW7fOXMSPHDmyWMcrV66cjB49Wv773/9KKN4T1qBi/fr1UrduXenTp48JPDRw+eSTT2Tfvn2ldt8tW7bIZ599ZgK5Ll26mP01c3XkyBGv/fT2+fPny4EDB6Rq1apl8piBskZGBwAARDS9KE9JSZHx48fLvffea7Z16tTJZHbefffdYh933rx5Jivy/fffy4ABA6Qs7dixQ2rUqCGxsbF52w4ePCgfffSRNGnSJOD5g71vRkaGfPDBBybbo0Ghy+Uq8JjZ2dkmi1O+fHmT0fn000/J6CDikNEBAAAR6+qrr5akpCRzYX7fffeZi/c6derI4sWLZeDAgfn237p1q8nWXHXVVV7bv/vuOzO359Zbb83b1q1bN5PN+Pzzz8v8cdSuXdsrUFFaflelShWTVSmN+65Zs0aOHTsmPXr0MM+TlqcV9H63Hk+DHCCSxdk9AAAAgOK67LLLTIDy6quvyrPPPmsCk7Vr18pDDz0kXbt2zbd/vXr15JprrpHXXntNHnzwQWnUqJGsWLFCLrroIhk8eLD85z//8dpfj/HLL78EHIM2O9BsSTB0/kygTIonDUI0MNGApaj83VeDPH2u0tLSZMaMGSbrExcXJy1atJDevXubr4Fowk80AACIWFqWpaVlycnJMnbsWImJiZH777/f3KZlW/7cfffd8sYbb8i///1veeSRR+Tss882jQfee+89c39PTZs2LbT8TUvHvvrqq6DGq3OGKlSoENS+moHRoEQzS0Xl774a2GgApEGOlqD17NlTtm3bJsuWLTOB2umnn17k8wDhjEAHAABENC1Ta9euXV6QsnfvXpOd0Hk7/mhW59prr5XXX3/dTLjXzMePP/5ogiVfmhHR248ePVpgKVe1atVkyJAhQY1Vy+yCoSVnP//8s5lP07Jly6DuU9h9tVRNGzRos4K+ffvmBYOakUpNTTXzkbTkDYgWBDoAACCiadexs846q0j3uf32201Lag2SfvrpJxP8+OOewxKo3EzL0erXry+lRYOqb775RhISEsw8I98sU3Hv6y5Na968udd99HsNdLTdNIEOogmBDgAAiFiavdi8ebN06NDBK8OimQtdU6agMrHHHnvMfNb9ArVP3r9/v8nkBMrEuDuUBUMbIQQKXLSETAMV/XzOOef4zTIV9776OPTx+D4W9/csjopoQ6ADAAAilmZklLaSdmvdurX5rGvLeG5307V2dI6OZnTuuOMOE/To9/7oMbTUKxDNhJTGHB0NuqZNm2bm0gwdOrRITQiCua+2oNaGBDp3x3MhUf2+KGV1QKQg0AEAABFdtqY8AxrtIKbmzp2bL9DRxTLvuusu04TgxhtvlNWrV8tLL71k1t/x17xA5/BoZ7dASmOOjs6T0aYKGjRpGZ7OrykooNHFPTUzpB9Fua82Vli4cKGsXLnSq1RPu86523ID0YQFQwEAQMTSpgJarrVlyxav7VrKph+TJ0/2WgD01FNPlQsvvFDeeecds027jmkAMGrUqHxZHfeCobrGTll3JJszZ44sXbpUGjZsKM2aNct3u7aAdo9Xs0fa9lrHVpT7Km26oIGOPmYNbLZv3y7r1q2Tzp07my5snvSYWgan836WL19uOtNVr17d3Na+fXszDwgIZ2R0AABARJeu+StP0wVBH3jgAdMxTbMoGggNGzZMunTpYrqt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IQAIEQIdAADgGEuXLrV7CABChEAHAAA4RlZWlt1DALwdSBO57mWRGmNEkkeKnPaAyPy1do8qKjgm0KlRo4Z06NBBwqnry0UXXSTVq1eXmJgYMz4AAFC2KleubPcQgBNyckSGPioy+SeRsYNFnrxCZNdBkf4PiKzeZvfonBXozJ07V6655hpp1aqVVKxYUcqVK2f60d94441y4MABv/f5888/pU+fPpKcnCyJiYnSrl07+fDDD6Us3HnnnfKvf/1LIsFtt90mH330kZx11lnyxBNPyGOPPVam53vttdfkuuuuK9NzAAAQ7vQNRiBk+t8vMub5gm//6FeROStFJo4VefBikRsHi8x6WCQ2RuTBD0I50qgUV5Sdn3vuOROknHzyyXLBBRdIQkKC/Pjjj/LSSy/J1KlTZcmSJVKhQoW8/RcuXCinnXaaxMbGylVXXWXeRZk0aZKMHDlSsrOzzefSNGHCBKldu7bcfffdEu5++uknadiwofzvf/8Lyfk++eQTmT59ugl4AABwqjVr1kjnzp3tHgZwItCpVVnkgl4nttWoJDKij8ik2SLpmSKJ8XaO0DkZncsvv1w2b94s3333ncmcjB8/XmbNmiVXXnmlbNy4MV825ZZbbpGjR4/KZ599Js8//7w88sgjMn/+fKlSpYrJaORoui4KZWZmFrog2b59+0xWLBro67h//367hwEAABBZFqwX6dpUJMbnkrxnC5Gj6SKrKF8LWaBzxhln+J1LotkatWzZsrxtWso2Z84cMy9GszpuGuTo3JTt27fLjBkzgjqvZiHatGljSt+0XE6/9s1MaF/8PXv2mG4q+rX7w7e7yh9//CE9e/Y0xylfvryccsopsm7dunzn3L17twnsNEMUHx9vgpIBAwbIokWLvPbT4E7P895778nf//53qVWrljn2iy++6PexuPfX43uO1bOs7Ntvv5W+ffua7Jieu27duqY8MCMjw+tY06ZNk0GDBkmdOnW8nptXXnnFaz99DTSb436e3B/uwFRv9/e6usfnOTYtt3Pf97777pP69eubc//zn//0yvy1bdvWjEdva9mypd/nQzNw7du3N49Ts4NaTqDZQi2RBACgLDRu3NjuIQAnbN8vUqdK/u3ubdv2hXxIji1dK8jatbmdIWrWrJm37ZdffjGdTbp165Zvfw0u9GL8559/Nhfqgdx///3y6KOPmov966+/Pu9i+29/+5sJlh588EGz7amnnpKHH37YXDTfeuuteffXC3E3DYTOPPNM6d+/vwwePNgELV988YUMHz7cZJrcNAjp2rWr+XzOOeeYeUXbtm2T999/34z9119/Nds83XPPPebxXnzxxVKpUiXp2LGj38czZMgQE7z4jlWDL/fFvwYWGmCNGTNGqlWrJr/99pu8/PLLpjRw9uzZecfS4Gr9+vXmsegfbn18H3/8sQm4NJM2btw4s5+W8ukcoOXLl5vnyTNwLS4NNN0NFTTQcv/HoUGvPgZ93W+++WZTtqhljWPHjjWvl76WSsd59dVXm/I9fbwaAG/dutWU9GmA1b1792KPDQCAgqSlpdGQAGUjM0vk4NH827T8bI9PpU/VlNwszrEMkUQ/l+PlEnI/6+0oPquEMjIyrFatWlkxMTHWH3/8kbf9xRdftPTw999/f777zJkzx9w2evTogMfevn27lZiYaNWqVcvavXt33nb9umbNmua2HTt25G2vXr261b59e7/H0tv0nM8++6zX9vPPP99s9xz7RRddZMXHx1uzZs3y2nfp0qVWuXLlrLPOOitv2+OPP27uX6dOHevgwYMBH4/veHzHevjwYatSpUpW27ZtrfT0dK/bbr/9dnOeKVOm5G3bv39/vuPqGHQs9erV89quYy7o5dZx6Hh8LVmyxNzn2muvzdum59dtycnJ1oYNG7z2/+677wp8XXv37m2euz179pjvL774YrOv7zGKau/evdbx48e9nsNDhw7lfa/Po/ucbtu2bQv4vf7c5eTkcA7OwTk4B+eIwnMsWLAgKh4H5yjlc8xbY1lyfqEfu6b9VvA5flgS1DHMx/qdufdJHmmlXfJk/scxdW7uftPmh99zZRXvHHYocaBz4YUXmgvWsWPHem3/97//bbY/+uij+e6zcOFCc5sGFIFoUKL73XXXXfluu/POO81tL7zwQtCBTpUqVfJtdwdkb775pvk+OzvbSklJsbp27Wpt3rw530eXLl2sypUr5wt07rjjjoCPxd94fMf6xhtvmGM99thj+c6rgVig4FADnC1btph9zz33XLOvZ3BY2oGOv9fukksusVwulxmr7/j150DvN2nSJLPvddddlxcI+wZ1AACUFXegA3gJMtAx+xVk32HL+nah90fHf1jWmePzbz/217VP8xssa/Aj+Y/1xre551tc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mdLHqc0IdJu+xkUtqyPQAQAAQERyBym6QOWkSZPy3a4Xzr4laf4yOtrEwDdboHNNtMuXlqVdddVVedsfeugh00JagxnPNso1atSQUaNGmc5qjz/+uMm6uM2bN0/27dtnskDhYu/eveazBhL6UdQmDvr8aLCn82p0HR0tHdT5NT179jQtpotzHg2a9DnS52vZsmUmMNKyO20tra9lURHoAAAAICK5y84mTJhgPny98847QQU6vtkcNw1wHnjggbwyLS1Te+SRR+T666+X6667zu8Com+++aZpc33vvffmbZ8yZYrJaGgr63AxbNiwoPbTRTz9PVbtgKYfpXUet5o1a8rgwYOlNLisos7qAQAAACLMmDFjZObMmaaETLu0ec4BKYhOntfMxZNPPilXX311sc6rWQnNcNx1111yyy23eN2mmRCd/6LHf+qpp0xmSrMiKB3BN8kGAAAAIpjO9dASs5NPPjmo/XVy/J133mmCEHfnr6LSTJPOV9EskC/N/Oh49PgofWR0AAAAEPV0Lsm2bdvM17pOS0k6tZVm4KXzXNz69euXN4kfJUegAwAAACDqULoGAAAAIOoQ6AAAAACIOgQ6AAAAAKIOgQ4AAACAqEOgAwAAACDqEOgAAAAAiDoEOgAAAACiDoEOAAAAgKhDoAMAAABAos3/A+UUehAcSUWdAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Display waterfall plot\n", + "shap.plots.waterfall(shap_values[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 262, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2QAAAHxCAYAAAAC3H8RAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhLdJREFUeJzt3Qd4U9X7wPE33VD23rIVUJQhQxkKCMoUBEFEBJWhIi5UhJ8Cjr8giKiggCgOHOBWQIYKAg6mMpQ9ZM9CKbR03v/zHk1ImpTQ0DZp8/08T2hzcnvvyW0a8t73nPfYLMuyBAAAAACQ40Jy/pAAAAAAAEVABgAAAAB+QkAGAAAAAH5CQAYAAAAAfkJABgAAAAB+QkAGAAAAAH5CQAYAAAAAfkJABgAAAAB+QkAGAAAAAH5CQAYAAAAgIIwePVoKFCjg9bE9e/aIzWaTzz//PFP79/XnslOYvzsAAAAAAJlRtmxZ+e2336RmzZqS2xGQAQAAAMhVIiMjpUmTJpIXMGQRAAAAQK6yx8PQw6SkJBk6dKgUK1ZMihQpIoMGDZKPP/7YbKfbOzt37pwMGTJEihYtarJtw4YNk5SUFD88EwIyAAAAAAEmJSXF7ZaWlnbBnxk+fLhMmzZNnnrqKZk9e7bZXts8GTlypISEhMicOXNk8ODB8sorr8iMGTPEHxiyCCCgJCcny8yZM833/fv3l/DwcH93CQAA+MrWzXO79WWGP3L27NkM//+Pjo722B4TEyNvvfWW/O9//zMBmWrXrp20adNG9u3b57Z948aN5fXXXzff33TTTbJkyRKTbdPgLKcRkAEAAAAIGPny5ZNly5a5tU+fPt0MQfRk48aNZhhi586dXdq7dOkiP/74o9v2bdu2dblfu3Zt+emnn8QfCMgAAAAAZBNbpn8iJCREGjZs6NY+d+7cDH/m0KFD5mvJkiVd2kuVKuVxe51j5iwiIsIEdP7AHDIAAAAAuVrZsmXN12PHjrm0Hz16VAIdARkAAACAbMyQebplrSuvvFKioqLkm2++cWn/+uuvJdAxZBEAAABANsn64MuT4sWLy/333y8vvviiCcyuueYa+eyzz2Tbtm2OYZCBKnB7BgAAAAAXaezYsTJw4EB56aWXpEePHqZys73sfeHChSVQ2SzLsvzdCQCwo+w9AAB5iO12z+3WnBw5/F133SUrVqyQ3bt3S6BiyCIAAACAXO/nn3+WX375RRo0aGAWhdaqjB999JFMnDhRAhkBGQAAAIBcr0CBAiYIGzdunCQkJEiVKlVMMPbII49IICMgAwAAAJCri3oozYz9+uuvkttQ1AMAAAAA/IQMGQAAAIBcnyHLrQjIAAAAAGQTAjJvGLIIAAAAAH5ChgwAAABANiFD5g0ZMgAAAADwEzJkAAAAALIJGTJvCMgAAAAAZBMCMm8YsggAAAAAfkKGDAAAAEC2sDLIkJE3O48MGQAAAAD4CQEZAL9asjdNbpydIrd8kSJ/Hknzd3cAAAByFEMWAfjN5HWp8tBPluP+gt1p8l5bv3YJAABkKQYnekOGDIDfPLb0fDBmd89ikTSLN28AABAcCMgA+E2yhxGKGoztSC3tj+4AAIBsKOrh6YbzCMgABJxwSfV3FwAAAHIEc8gABBhLqoQd83cnAABAliAb5g0BGQAAAIBsQkDmDUMWAQAAAMBPyJABAAAAyBYU8PCODBkAAAAA+AkZMgAAAADZhAyZN2TIkOtNmzZNGjZsKAcPHvR3VwAAAODEyuCG8wjIkCusWbPGBF5xcXH+7gpywInU/P7uAgAAQI4gIEOusHbtWnn77bcJyIKCTVYmV/d3JwAAyFmJySKpqZI3hyx6usGOgAxAwKkSetTfXQAAIGfEnhXp/rJI9B0iJfqJjP3S3z1CDiMgg8N3331n5mKtWrXKZKM6duwo119/vdx9992yceNGR6bq3nvvlWbNmkm7du1kxowZbvtZunSp3HPPPWab5s2bm++1Lb1OnTrJwIEDZc+ePfLwww9LixYtpGXLlvLkk0/K8ePHHduNHj3a9Ed17tzZ9FFvOoTRWVJSkkyZMkXat28vTZs2lTvuuENWrFjh07nQ/etxV69eLf379zfnQff73nvvmcdPnz4tzz33nNx0003msUceeUSOHTvmsg+9/+qrr0rv3r3lxhtvlOuuu0569Ohh9pHqdAVsyZIl5nhfffWVx77cfvvtcuutt4plBcuIa0tqhR/2dycAAMgZj70n8sXvIqlpIqfOijw9S2TuGslLZe893XAeVRbhZvLkySZg6NWrl6SkpMisWbNkyJAhMmbMGHn++eela9eucsstt8jixYtl6tSpUq5cOROsqM8++0zGjRsnlStXlvvuu8+0zZ07V4YNGyYjRoyQbt26uQUtgwYNkhtuuEGGDh0q27dvly+//FLOnj1rgiulP6P3NXB57LHHpEiRIqa9Ro0aLvvSACosLEz69OkjycnJ8sknn5jj6v60j5m1detWWb58uXm+HTp0MM9Xz01kZKR5TrpPDSj37dsns2fPllGjRsmbb77p+Hl9LtpnfW4VKlQw5/K3334z+zhw4ICMHDnSbKdBa/HixeXbb781x3KmgfCuXbvkgQceEJuNNy8AAPKceWvd2zQg69hQ8gY+v3hlAf/59ttvrQYNGli9e/e2kpKSHO1Lly417Y0aNbL++usvR7tu07ZtW6tfv37mfmxsrNWsWTOrS5cuVlxcnGM7/b5z585W8+bNrdOnTzvaO3bsaPa7aNEil36MHTvWtO/evdvRNnXqVNN24MABt37bH3v44YettLQ0R/umTZtM+xtvvJHpc6E/17BhQ2vjxo1uz1fbX375ZZftX3nlFbc+JyQkuPTH7n//+5917bXXWseOHXO0TZ482fz8zp07XbZ9/vnnzXk/evSoFQhOnDhhnTt3zuV36/w7TUxMtI4fP+7yMwcPHszwvoxP9nBLsmbOnGlNmzbNnPNLPYY6dOiQy+8iq58Hx+AYHINjcAyO4esxEq95xLKkq8stecynWXoMf0qSAR5vOI8hi3DTvXt3CQ8Pd9yvV6+e+XrllVdK7dq1He26TZ06dWTv3r3m/sqVKyUhIcFk1goUKODYTr/Xtvj4eLONs5IlS5phf850+J7SzFNm6DGcs0jat/z58zv6l1lXXXWVec7pn6/GEXosZ/Zz5NznqKgoR380YxcbGyunTp0ywynT0tLk77//dmyrQxJ122+++cbRpudSs3I61FHPUyAoVqyYyRA6/24LFizouB8REWGyfc7Kli17wfue6PDTrDxGmTJlXF4b2fE8OAbH4Bgcg2NwDF+OETG2r0iE06C1amUk7MH2WXoMf2LIoncMWYSb8uXLu9wvVKiQ+epp2J8+poGG0mF4qmrVqm7b2dvs22R0LFW4cGHz1b7fi6XDAj3tK7P7uVDfMjoX9jdK52PpEEWdLzZ//nwTqKWfA6bz0JyP1ahRI7PtQw89ZIZeajCmQzW7dOniU/8BAEAu0K6eyN+vi3z5u0jRaJGezUQK5vN3r5CDCMjgJiTEc+I0NDQ0x46lMlvEIqN9+VoM40LPN6PHnI+lBT10bplmALWwSdGiRU2gtWXLFnnjjTfc+qXzx4YPHy4///yztG7d2mTL9AqYFkcBAAB5WLUyIk/cKnkT2TBvCMiQZewZKi1CodkeZ7t3784w63QxcmNBC8121a9fX1566SWX9oyGYmrxDx0KoYFYtWrVZP369abCpQZxAAAAuRHDE71jDhmyTOPGjSVfvnwmK6RD7ez0e23T+VxNmjTxad/6s+mH+QU6zdilz4LpvLCPP/7Y4/YaeOlSA7///rujzD/DFQEAAPI2Lr0jy+g8Ki1dr2Xv+/XrZ4ILpSXiNSukZe+di31khr24xuuvv25K7uuEVs0iVa9eXQKVDjvUkvtPP/20yRieOHHCrPVmnyPniQ5b/PDDD2XhwoUmu1apUqUc7TMAAAByFgEZspQufFyiRAkTVNizPDVr1pQJEyaYIXm+uuaaa0yxCw1wXnjhBbNO2oABAwI6INM106Kjo01xDp0XVrp0aRNwaaVKXVfMk4oVK5oqk7ogNdkxAACAvM+mte/93QkA52mWUReE/v77703p/LzMNiHFQ6sl0wrNNN/179/fZQkGAACQu5yzeb4IHWW9meN9CVTMIQMCiA7t1DlkOiwzrwdjAAAgGNgyuMGOIYsIGidPnjRDHb0VD7EXEMlJmzZtMpUoP/30U5MR6tOnT473AQAAADmPgAxBo2/fvnLo0KELbqPz0gYNGiQ57fPPP5d58+aZZQGef/55j4twAwAA5DaUvfeOOWQIGn/++ackJiZecBsNiOzrqSH7MYcMAIC8LcE2xGN7PmtyjvclUJEhQ9DQSo0IfFxHAwAgL+F/dm8o6gHAb5qUcW+7+TJ/9AQAAGTXkEVPN5xHQAbAb5b0CpX6pc7fb1ZO5IvO/uwRAABAzmLIIgC/iQqzydq+YXIm6d9rZdERNklOTvZ3twAAAHIMARkAvysQwdAFAADyIoYneseQRQAAAADwEzJkAAAAALIJGTJvyJABAAAAgJ+QIQMAAACQLZhD5h0BGQC/i/10ixx9fJmknYiXyBsrSVhbS1KieQMHACC3IyDzjiGLAPwqYe0ROXzHPLEOxoktMVWSFuyWmq9R+h4AAAQHAjIAfrX56VXm2lmq2CRZQsUSkZL/JIotVb8DAADI2xiyCMCvDu84LaUkUtIkVGximcAsWs5JSqq/ewYAAJD9yJAB8KuzqSHmjShCUkRCLYmSFEmQSJcR5ykbDsrpepPkVL6RcrrxZEndftyPPQYAAJmZQ+bphvPIkAHwq3KxZ+Xbay+Xybc0lpgC+aTptn0yavYSCbFSzONWYoqcafiayH/TytJW7ZO4ehOl8OkXxBbCNSUAAAIbwZc3fJoB4Ff/lCoqY3rcICcK5hfLZpNfL68kI3q3kRDr3zlkSe+sdARjDmdTJPm7v/3SXwAAgKxEQAbArz5rUkvE5nr1bG21cpIc8m9b6sLNHn7KJmk/bs2hHgIAAF8xZNE7hiwC8Ku4iDAJT0mVtn9tk7Kn4uSnWtVkV/Fi5zdISvT4c1YqpfEBAEDuR0AGwK9a/7VThixaIfX3HTL3R8xbKiNvaSVhN6eZ+ylWuLmSptfT7NLEJqlpvH0BABDoyIZ5x5BFIJM6deokAwcO9Hc38owO27c7gjEValkyeuFSxxt4moRJokRKqoSYkEy/JkmkWFxPAgAgF7BlcIMdn2gA+FV8eIQUSdcWmZrqyIdp+KXZsSSJcjweIikSYkvK0X4CAABkBzJkAPxqY7Eybm2JEi4p/5W0D7VZkk/OmDyZBmL6NZ/EcW0NAIBcwMrghvPIkAHwq3+KFJZ/oorLT/Ury9HC0XLt9v2yoUAJKZ3y7zDGEEkVrXtfQBL/ewu3SZqEis3SdgAAgNyNgAzIwOHDh2XSpEny22+/mfv169eXxx9/3OO2DRs2lI4dO0qHDh3kzTfflG3btknhwoXl9ttvl379+snp06fNvpYvXy7x8fFy7bXXysiRI6VkyZIu+zlz5oy8//77smTJEjl48KDky5dPKleubPbTrl07yYuuOHFE7hzaQ/aVLPxvQyuRm3/bKu/sryM9Y9OknCSYmWPnM2LWv0MWLc/VFwEAQOCgqId3BGSAB3FxcaZwx5EjR6Rbt25StWpVWbdunQwaNEgSEz0HAlu3bjUBV9euXU1gtnjxYpk8ebJERkbK3LlzpVy5cmaf+/btk9mzZ8uoUaNM8OZ8zHvvvVd27dolrVu3lu7du0tqaqrZ74oVK/JsQLa+SsXzwdh/fr+qksSdSpJpvyfLGM2GpfsZvR/y3zplAAAgkPH/tTfMIQM8+OCDD0yGSrNYTz31lPTo0UNeeukladWqlZw6dcrjz+zYsUNee+01GTJkiAmmNBgrXry4TJw4Ua655hoZP3682c9jjz0mPXv2lFWrVsmePXscPz9lyhQTjI0YMULGjRsnvXr1kjvvvFOee+45GTNmjASCmJgYl4BUM3oaSNolJSXJiRMnXH7m0KFDF7y/u3Rxt+PE5o8Sy2aTw6ctOZcaatpskiyhck5skmKutyVL5EUfQ7OdlmVl6/PgGByDY3AMjsExAvUYCGw2y/kVAMDQwEmHGc6fP19CQ/8NCNTx48fl5ptvNsMXp0+f7jJksW7duvLuu++67EeDr2XLlslXX30lFStWdLTrkMQnnnhCXn31VWnevLmkpaVJmzZtTAD32WefSTB5tMef8lqjOiYAsytxPE6OJ4l83S9KWg//UKK+X2GKedglS5QkDe4k0W9191OvAQDAxThhG+Gxvbj1fznel0BFhgzw4MCBAyaAcg7GVIkSJaRgwYIef6Z8+fJubYUKFTJfdbiiM/s+YmNjzVfNumkAWLNmzSx7DrlF5cPH3KotxeSLlJ7F1kn7WmESmqbVFRPFklCzJpl+1UxZqFOABgAAkFsRkAFZJH3wdjGPkaAW2VG0kIhTdsyICpOWRXaab202raYYLpaEm2mv/34NF5uNcwcAQG4o6uHphvMIyIAMsl1afEOLajjTIYvO47izSpEiRUw2bfv27RJsLMv9bahI/Dmxpf0bcFmWBrPpA9pQU2sRAAAgt+MTDeBBy5YtzYTZefPmubRrSfrsEBISYqooalGPr7/+OqgyaTds2y1Vjp7UCa0Slppm2h74YaWkhv739pQ+e/YfG29fAAAgD6DsPeBB3759ZcGCBfLiiy/K5s2bpVq1arJ27VrZsGGDyWZlh/vvv19Wr14tL7zwgqxcuVKuvvpq065l71NSUuT555+XvKhk3FmZ8MmPEhsZLZGJKRJXMEIa7Nwta3v9+/aUJjZJNfPGzmcrUyVMUvNujAoAQJ7B8ETvCMgAD3T44IwZM0zJeq20qLSy4rRp00zglF3HnDlzpqnUqFUY9RYdHS1VqlQxZfLzqj1Fi0ip3WelaMJxc7+siOwsX0ZCrGPmfpoVKrFSWqLlpIRJkqRIhJyRohLN2xcAAMgDKHsPwK+mX/291Nhw2KUtOTxUdrx6TgYM7C8p3WfI6W/d11MpPLSORL2WdwNVAADygqO2Zzy2l7Ly5sgfXzAJA4BfRab8O2/MWWhKqoT8d6koql01M2jRWYguC31jlZzqIgAA8JktgxvsCMgA+NXa6qUlLd378uEyhR1ttntvlMIRB83aYypMEqRw9FGxdW7oh94CAABkLQIyAH4VGSqy7cpycqZApBmqeLRMITlQrbjTBuESuWa0lKifJqXy7ZDijUMk4o/ntTSlP7sNAAAugpXBDecxKx6AX5WJi5fY4tHm5mBZpgy+w1WXiaydwAAHAACQ53CJGYBf1ToXq6UUXdryJSRIKNEXAAB5ouy9pxvOIyAD4FeV+tSUq3fskojEJAlJSZXiJ2Ol9v79IuG8WQMAkNsRkHnHkEUAflXr3hqyd94+afHT3xKZnCzHiheRbX0iJURS/N01AACAbEdABsCvQsNC5JZvWsuetQ3l9LFEqVevgOz49iN/dwsAAGQJsmHeEJAB8DubzSZVGhYx3ycnJ/u7OwAAADmGgAwAAABAtmC+mHcEZAAAAACyBWuOeUeVRQAAAADwEzJkAAAAALIFQxa9I0MGIGD8eiBN2n8l8vrZm+SflGL+7g4AALhktgxusCNDBiAgfLApVe5eYP33Jl1R/oqvIA12inS7wt89AwAAyD5kyAAEhAGL0k/7tUmf7/3UGQAAkGVDFj3dcB4BGYCAkJTm3paQ6o+eAAAA5ByGLAIAAADIFpS9946ADAAAAEC2YHiidwxZBAAAAAA/IUMGAAAAIFuQIfOODBkAAAAA+AkZMgAAAADZhAyZNwRkAAAAALIFVRa9Y8gi8rRp06ZJw4YN5eDBg3nqWAAAAMgbCMiQ661Zs8YEQ3Fxcf7uCgAAANIV9fB0w3kEZMj11q5dK2+//TYBGfzvXJJIWtq/3yen/HtLSBSxGLABAAA8Yw4ZgIB2IM6S8gUD/Era4ZMi/SeLLPxTpGQhkdoVRH7d9m9ApsFY5ZIir90r0rmRv3sKAECOIhvmHQEZLsp3330nY8aMkTfffFPWr18v33zzjZw8eVKqV68uw4YNk6uuuspkqvTxrVu3SnR0tPTo0UPuu+8+l/0sXbpUPvjgA9m2bZvYbDapUaOG9O3bV2644QaX7Tp16iRly5aVESNGyKuvvip//PGH2b5x48by5JNPSokSJcx2o0ePlrlz55rvO3fu7Pj5AQMGyKBBgxz3k5KSZMqUKTJv3jzT78qVK8uDDz4ozZo1y/S5SEtLk/fff1+++uorOX78uFSoUEH69++f4fa6jWbwVqxYISdOnJAiRYpI8+bN5f7775dixYq5bHvmzBmz7yVLlpi5aPny5TN9vf3226Vdu3YSfGzSf0GaLOoRKgFtwFsiC/749/ujsf/enO05JtJjgsieqSJlXX/nAADkZQRk3hGQIVMmT54sqamp0qtXL0lJSZFZs2bJkCFDTLD2/PPPS9euXeWWW26RxYsXy9SpU6VcuXLSvn1787OfffaZjBs3zgQY9kBNgykN6DTw6tatm8uxjh07ZoIqDdaGDh0q27dvly+//FLOnj1rgiulP6P3NYB57LHHTLCjNNBzpoFbWFiY9OnTR5KTk+WTTz4xx9X9aR8zQwNE/fn69etL7969JSYmxjyv8uXLu217+PBhE6zpMbt06WKCt3379skXX3xh5r59+OGHUqBAAbOtDrm89957ZdeuXdK6dWvp3r27Odca4GowF5wBmcjifyxJTLEkMixA39A1AzZ/nfftklJEFq8X6XtjTvQKAADkFhZwEb799lurQYMGVu/eva2kpCRH+9KlS017o0aNrL/++svRrtu0bdvW6tevn7kfGxtrNWvWzOrSpYsVFxfn2E6/79y5s9W8eXPr9OnTjvaOHTua/S5atMilH2PHjjXtu3fvdrRNnTrVtB04cMCt3/bHHn74YSstLc3RvmnTJtP+xhtvZOo86HEbNmxoDR482EpJSXG0b9682bSn78ejjz5qtWnTxjp8+LDLfvRc6TnT/tm99NJL5ue/+OILt+OmpqZageDEiRPWuXPnXH5/zr+3xMRE6/jx4y4/c/DgwQveP3TokPndyPhkj7cyU5Ks2NisOUa2PY/LBlqWdPV6OztvZWA/D47BMTgGx+AYefIY/rRNXvZ4w3kU9UCmaNYmPDzccb9evXrm65VXXim1a9d2tOs2derUkb1795r7K1eulISEBJNZs2eElH6vbfHx8WYbZyVLlpSbbrrJpU3LyivNMmWGHkOHPNpp3/Lnz+/o38X6+eef9SKG3HnnnRIaen4Y3RVXXGGGU6YffqiZrRYtWkhkZKScOnXKcdOsnGbL7M9Zh0EuWrRIqlSp4pYpVCEhgfGnqkMs9bk4//4KFizouB8RESHFixd3+Rkdenqh+2XKlHH53biy5KUWoVKoUNYeI8ufx0t99Jd0/n6oh99X+/qSv32jwH4eHINjcAyOwTHy5DEQ2BiyiExJPyyvUKFC5qunYX/6WGzsv3NpDhw4YL5WrVrVbTt7m32bjI6lChcubL7a93uxNPjxtK/M7sfeRx12mZ4GU7///rvj/p49e0ygpfPt9OaJ/TlqkHb69Glp2rRppvoTDPpdGRjB6AXd0Vyk7mUi360RKV9MpGUdkW9Wiew6IhIVLtKohkjna/3dSwAA/CBApxwEEAIyZEpGmRrnbFF2H0tplior9pXZ/fhC59R17NjR42POV8CQy9Wp9O/N7qEO/uwNAAABgaIe3hGQIUfYM1RasKJRI9fS37t3784wI3YxMh7ulvXsfdTsV/qsm/152Onj2jctfpJ+OGN6WoxEM4pauAQAAADBIxeMBUJeoAGJlnCfPXu2qYpop99rm87natKkiU/71p9VOuQvu7Vs2dIEWR999JGpgGi3ZcsWWbVqlVuQdf3118tPP/0kGzdu9Jid0xL89gyeVlHUgPXrr7/2uC0AAEBuzJB5uuE8MmTIEToZVUvXa3n4fv36OYbwadl7LdChZe+di31khhYUUa+//roZHqiTXatVq2bWSMtqOndM11ebM2eOWUesVatWpuy93tdS+1qi3tnw4cNNiX9dF61Dhw5y+eWXm3llOhdt2bJlZkkA+3ppur/Vq1fLCy+8YIp9XH311aZd96lZNl1WAAAAAHkLARlyjAYyuqCzrr2lCyWrmjVryoQJE9wWhs6Ma665Rh566CGzppgGM5q50gAoOwIypeuXaXUjXRj6tddek4oVK8pTTz1lKjamD8i0cpKu1aaLPWuFxu+//94EjKVLlzaLQztXkdQhizNnzpR3333XrKumN11gW4uF9OzZM1ueCwAAQHZijI93Nq19fxHbAUC2sk1I8dBqiTXs/DILAAAgd9lse9Vjey3r0RzvS6BiDhkAAAAA+AlDFgERU1zDuUhHRsVD7AVEAAAA4B0FPLwjIANEpG/fvnLo0KELbqPz0uwFOAAAAICsQEAGiJgKhomJiRfcxtd10gAAAIIVxSq8IyAD/qvUCP8KtYmkWu5tAAAg92LIoncU9QAQEJ681r1tzHX+6AkAAEDOISADEBD+r0WYTLrRJmXzW1LEdkbujFwhTzb0d68AAMClZsg83XAeARmAgPFwg1D5Z4DIuIJzpEXkNn93BwAAINsxhwwAAABAtqCoh3cEZAAAAACyBcMTvWPIIgAAAAD4CRkyAAAAANmCDJl3ZMgABJTUM8kSfpIR5wAAIDiQIQMQMPb0XignPt0hdS2R1PyWJF5/SsLrlPR3twAAgI+4xOodGTIAAeHI6+vl6Ce7JNEKlSQJlbT4MNne5Ct/dwsAAFwC1iHzjoAMQEA4MGqVHCscJUVs8VJczkpKfktOJ3BdDQAA5G0EZAACwn4JkxqxMRJm/RuElYqPl3MFQ/3dLQAAcElsGdxgxxwyAAEhNcK9rfKpWH90BQAAZBGGJ3pHhgxAQCiUlOLvLgAAAOQ4MmQAAkJSWIgp5nFGoiRVQiRKkiRKkv3dLQAAcAmYDe4dARmAgBCZkizHpJBjaEOihEtiSKK/uwUAAJCtGLIIICAUPn3ObZz5uTQPE8sAAECuQdl77wjIAASEo0UKurUlh1FlEQCA3D5k0dMN5xGQAQgIPze4XM5Eh8mJ0uFytFyknC4SLjuqlfF3twAAALIVARmC0tatW2XatGly8OBBf3cF/zmWL0pii0dKQlSUJIVHyOnCUZIWyRwyAAByszSxebzhPAIyBKVt27bJ22+/TUAWQBrs3CmWzfUtqeiphBztQ2KKJUfPMpACAADkHKosAggI5eJOyGlbKZe28LScK3v/8I8p8sYf/45rLxYpsvyOEKldgmtWAABcCgp4eEdAhqCjQxU1O6YGDx7saO/YsaOMHj1akpKSZNasWbJgwQLZv3+/RERESL169WTQoEFyxRVXOLZfs2aN+flRo0bJuXPn5JNPPpHDhw9LxYoVZciQIdK8eXPZsWOHvPbaa7JhwwYJCwuTm2++WR599FHzvd3AgQPl0KFD8tZbb8nEiRNl7dq1pv3aa6+VRx55RCpUqCDBoEj8WTlYLEwKJJ5fIPpY8VA5EZsqxQtnb3GPb3ekyut/nL8fkyjS8MM0iX+UgAwAgEvBuBPvCMgQdFq1aiXHjx+Xr776Svr37y9VqlQx7Rr4pKSkyEMPPWQCqPbt28vtt98uZ86cMdvee++9JpCrXbu2y/4+++wzOX36tNx6660meJs9e7YMGzZMxo0bJy+88IK0a9dOWrZsKStXrjSPFS1aVO677z6XfSQkJJiA78orrzTB3N69e+Xzzz+XjRs3ykcffSQlSpSQvO7zetfJJ02vkjYbdknRs+dkbdWysqViCSnw81np17lQth77sSXu/10kpIocP5sqJaKp9AgAALIPl38RdGrUqCF169Y13zdu3NgEXnrTNg2YNEOlmapnnnlGunfvLv369TNBUZEiRWTSpElu+zt27JjJqOl2vXv3lgkTJkhqaqo88cQTMmLECPNV9zN+/HiTYdMALr1Tp06ZQFGDuB49esjjjz8u//d//ycnTpyQ6dOnS6CIiYmRxMTzhTY0WI2Li3Pc1+yi9tmZZv8udF+zipZlydEi+SWmYH6Zc/2VMq1tQ1lTvbycjYiQIycSs+wYGT2PhOQ0j883Mc3KsmNk5bniGByDY3AMjsExMnMMf2IdMu9slvMrAAgS3333nYwZM0amTp0qDRs2dLT36dPHDD+cMWOG28+8/vrrMm/ePPn5558lKirKMWRRs2wPPvigy7aaEYuOjpb58+e7tGuw9umnn8qyZcskf/78jiGL69atM0Mk02fCbrvtNvNGvHDhQsnrHrhliUxt1Uws2/k36TInzsi3faLk2jpR2XrsSWtS5NGlrm2hNpGUxxlEAADApfjF9u80kfSutwbkeF8CFZ82ACe7d+82V6XatGmT4TaazSpT5vz6WOXLl3fbplChQlK6dGm39oIF/138ODY21hGQ2ds9DUvU4ZRLly41Qxrz5csneVm1Q3Hyv0+XyTtt68vxQvmkxaa90u2XzXLtS12y/diPNAyTL7enyPID54OxL7pw9Q4AgEtFNsw7AjIgnerVq5vCGxnROWDOQkM9zzEKCcl4RDCJaXfVD5ySUscPyy3rdjraPA8kzB7L7giTXacs2XvaksZlbZIvnP9AAAC4VHnpE8+BAwfMKKejR4+aUUxaf0CnqeiF9sKFC2f4mdAbAjIEJZvTsDhnWiHx5MmTpsLhhQKqrKZjw7XQSPosmWbsihUrluezY8oKDxeRcy5tcQVz9nlXLWIzNwAAAOcL6Tq/f/LkyaYAnH6OvOqqq0xAplNLKleuLM8995ypju0LinogKNkDHK2O6KxDhw5moqwW8fAk/STarPT++++73F+yZIn8888/Zj5aMLBFJcnhUoUd95PCQmV7zbJ+7RMAALg0eaGox/jx480yRlpFe/HixS4jnTQz1q1bN/niiy983j8ZMgSlOnXqmAzYu+++a4IyDdB0Ltgdd9xhytPrH93q1atNpkyLc2gFJL2vZe11HbOsphUcf/rpJ1OxsUGDBo6y98WLFzfl8INBg4MbZEWx68xAxVBJk6SQCKl+5B9/dwsAAAS5t99+W/r27euogJ2eVur+/vvvfd4/ARmCkhblePbZZ01WauzYsSb9bF8YWkvbazCkFRLtwVfJkiVNEKfbZAcNCO0LQ2s6XK+8NG3a1MxlC4Y1yNTh0LJS59B+iZBUc79Q0jmJOXK+8AkAAMh9cls2zJN9+/bJddfpRWPP9OJ9+lFXmUFAhqClwZWnACssLEx69eplbhei5fK19H1GZfU90WxXRhkvHYesAVmwircVkoJyxnFf374LJbvOKQMAALlLXijqUapUKROUZUTXsK1UqZLP+2cOGYCAkC/NPfgKy9E6iwAAAO50jpiuXbtr1y63AnGLFi2S9957T3r06CG+IiADEBCikuPd2pJ5iwIAIFfLC0U9xowZI2XLlpVrrrnGzCXTYGzcuHHSrFkzueWWW8wcshEjRvi8fz7tAAgI51Lyy+oqleWVru1k1J23yuxm10pMeAF/dwsAAAS5woULy++//y5PPvmkWYssKipKfv75Zzl16pSMGjVKli9fLvnz+z7v3WaxQi2AADCv+PvyTqcbxQo5f9Wszs798sLPTf3aLwAA4LufbDM9trey+ud4XwIVRT0ABIRd1cq6BGNqS2XWIQMAIDfLbcMT/YGADEBAKNGwuEi6uh4FziX6qzsAAADGPffcI97ovLJ33nlHfEFABiAgdBx7tfwweKfERJ0fg921Wbhf+wQAAC5NXsiQ/fTTT46qinapqaly6NAh81XXq9W1yHxFQAYgIBQsFCaTpleXBbMPybpVO6RolaPSfnBXf3cLAAAEuT179nhsT05OlmnTpsmkSZNk8eLFPu+fKosAAkbBAqFya9/SUqXBNilS7JS/uwMAAC5RWga3vCA8PFyGDBkibdu2NV99RUAGAAAAIFtowS5Pt7zk6quvlmXLlvn88wRkAAAAAOAjHa54KeuQMYcMAAAAQLaw8kAy7LnnnvPYrgtDa2Zs3bp1Mnz4cJ/3T0AGAAAAABkYPXq0x/aiRYtKtWrVZOrUqTJgwADxFQEZgMCSmCz15u2R8n/HiO1gMbGe7iK2SMrfAwCQG+WF+WJpadlbhoQ5ZAACSmrNEVL12yQJ3VFMYsf8LklVn/B3lwAAgI+sEM83nEeGDEDASFu4XmIOFZAISZF8ck6SJEJOHIySMgv+lJCbr/F39wAAQBDYu3evTz9XqVIln36OgAxAwIh7eYVES4KESaq5r0FZuIRK3PhfpDABGQAAuY4VmvuGLFauXFlstsz3OzX1388vmUVABiBgpJxIkqj/gjE7Dc7OnUjyW58AAEBweffdd30KyHxFQAYgYKSGpnhuD/HcDgAAAltaLizq0a9fvxw9HlPqAASMM7aick6iXNr0/hlbEb/1CQAA+I6iHt6RIQMQMAqmnpaTUlTyS7yES7IkS7jES34pnBLn764BAIAg98svv5hFoGNjY91K4esQx2eeecan/RKQAQgYx6KKiSUnxZIQCRFL0sQmSRImx/IXlZL+7hwAAAjKdchiYmKkQ4cOsmrVKrEsywRf+lXZv7+UgIyEIYCAcbxgcROMaRCW/N9XvX+sYHF/dw0AAASpJ554QjZs2CAff/yx7Nq1ywRgCxculG3btsngwYPlmmuukYMHD/q8fwIyAAEjOcQmIbYUiZQkkyEzX20pkpIHrq4BABCMLJvnW24yf/58GTRokPTs2VMKFixo2kJCQqR69eoyZcoUUyb/kUce8Xn/BGSABwcOHJDHH39c2rRpIw0bNpTRo0fLuXPnZPz48SZl3ahRI+nUqZO/u5nnVDx6UkItS5IlQlJNlizC3K94JMbfXQMAAD4OWfR0y01OnTolderUMd8XKFDAfD1z5ozj8bZt25qMma+YQwZ4MGbMGNm+fbvcc889Urx4calQoYK8//77Mnv2bLnrrrvMFZHo6Gh/dzPPibQSJV5CXdrSJFTyC+uQAQAA/yhXrpwcPnzYfB8ZGSmlSpWS9evXS5cuXRwX8i9l3TICMiCdpKQk+eOPP+T22283wZfdpEmTTCD28MMP+7V/edm5SM8r3CdGeG4HAACBLS13JcM8atGihSxevFhGjhxp7uvQxZdffllCQ0NNtUX9jNiuXTvxFQEZ4KGSjk7WLFSokEv7iRMnpHTp0n7rV173yeY0iUuJlHqRSVIg8fxC0OfCQ6VIWqJf+wYAAHyT24YnevLYY4+ZgCwxMdFkyHQqy19//eWoqqgB2xtvvCG+sln2mo0AzB/Y3LlzL2rbAQMGmAmeOpesbNmyMmzYMHOFZOPGjRIVFSXt27eXhx56SFJTU+Wtt94yY4t13QodgzxixAipUqWKy/6Sk5NN9R7d7p9//pGwsDCpVKmSdOzY0VyJycu2n7Sk1rup0uvXlfJzjZoy45NZUufIPvmrVEV58Pae8ty6X6X3T9393U0AAJBJn5f+1GN79yO9JLc7deqUyZLZC334igwZ4KRbt25Ss2ZNmThxotx4443mpuOCNeDSYKtIkSJmXpmqUaOG4+eOHj0qDz74oNx0003SqlUrWblypXz00Ufmj1TLo+oVlbvvvtsEZB9++KEpGPL555+bCj32YGzIkCGydu1aadKkidxyyy0SEREhO3bskCVLluT5gGzBbktSLZE/K5STt755R9rt/dO0V9h3UF6bd04+vKaV9PZ3JwEAQKbltoqKnvz9999Su3Ztt3b9XJgVqLIIOKlbt67ccMMN5nudL6ZZLs2EaZYqX758UqxYMdOmN+eAbP/+/fLUU0/Jk08+Kd27dzfVGK+44goTfGnQ9eabb0qvXr1MRk0Dr71795qgzU4zYxqM9e/fXyZPnmzmrmkQpmOV9WcDaTinBpd2WmEoLi7OZf6dDu10dujQoQve10myFf+7sFT9yBHpuOXfYMyuw5b10tDpZ3w9hvNggOx6HhyDY3AMjsExOEYgHgOX5sorrzSfEf/v//7PXCzPagxZBNLRhf06d+7sGJJoZx+aOH36dJfttV2HJeoaFc4mTJggn376qVmfonHjxo72LVu2SJ8+fcwig/bM1x133CFHjhyR77//3oxNDjYpaZa0mpMqd7zwkdz/1/duj29p1EquWDnQL30DAAC+m1N2tsf22w/lntE/06ZNkzlz5sjPP/9sgmddCFovtGsBuMsuu+yS90+GDMiicqjp2ccTly9f3qXdXixEhy/aacZMFxUMxmBMhYXY5MceoRJRuqzESz6Xx/T+jsIV/NY3AABwaVUWPd1yk0GDBsmPP/5oprG89tprZumj4cOHS9WqVaVp06amTS/o+4qADMgC9rlgmXmM5LSr8FCbVE+Jl4/qdZVNZWpKbFQB81XvFzzHOmQAAMC/tNq2Tj1ZtmyZuZj+yiuvmPXHtDbApWTKKOoBBAD9I96zZ48ZF67FPIJVii1CtleqINsrVXZpr3pqv9/6BAAAgrvsvSc6jUUrZ9eqVUs2bdokZ8+eFV+RIQMCwM033yynT5+Wd955J6gzaeFhyTqxVSrvPyINN203X/W+tgMAAPiTfibT6teDBw82AZl+fvvmm2/MfLJFixb5vF8yZEAA0KIey5cvNwGZllbVIiA6n0xL5uuaZIFUaTE7XXbioFQ4HCrTmtWVv8qXkjoHjsl9v6yXy0IP+LtrAAAgSMveL1++3BT10CWLdKkjrQdw6623muJsbdq0MWvHXgoCMiAAhIeHm3L3s2bNMgtDawCmQxd1YWit4hgsEkOi5LlO18vxgtHm/oZKpeW5otdLu0VH/d01AADgA8uW+yOyli1bSoECBcxnMg3CNDOWlVNMKHsPIGB81m2B3N6wlVv7p2uWSM8v2/mlTwAAwHcfVfrMY/ude3vkeF989cUXX0iHDh0kKioqW/ZPhgxAwCh+9vzCl+EpqZIcFmq+L3n2tB97BQAAfJXbStx7ctttt0l2IiADEDBKn0qQh376RfKlRsrZ/PkkOj5BEkITpXRcgr+7BgAAkC0IyAAEDCslRM5FF5cdpYo52iocjZG0GIp6AACQG+WFOWTZjbL3AALGoUplZL9TMKb0/uFKZfzWJwAAcGlVFj3dcB4BGYCAUfLeOhm0187xvgAAAOQEAjIAAePqDmWkfPwZlza9f3XHsn7rEwAA8F2azebxhvMIyAAEDJvNJv/3emWpZdslZeNj5KaKyTL+reqmHQAAwF9Onz4tY8eOlXbt2km9evVk1apVpj0mJkYmTpwoO3bs8HnfFPUAEFCKFAqVyxtuMd/3799fwsN5mwIAILfKC/PF9u/fbxaH3rdvn9SoUUO2bNkiZ878O6KnWLFiMm3aNPnnn3/ktdde82n/fNIBAAAAkC3yQpXFJ554QuLi4uTPP/+UUqVKmZuzW2+9VebOnevz/hmyCAAAAAAZWLRokQwdOlRq167tcRpF1apVTfbMV2TIAAAAAGSLvJAhS0hIkJIlS2b4uGbPLgUZMgAAAADIgGbGli1bltHD8vXXX5tCH74iIAMQcFItm5xMyy9plr97AgAAgn1h6EceeUQ+/fRTGTdunMTGxpq2tLQ0U1nxrrvukt9++00effRRn/dvsyyLjzwAAsa0P5LlwR/TJFVCJSrUko87hEjXmqH+7hYAAPDB9Cu+9tg+cMutkpu8+OKLMnr0aNHQSYOxkJAQ871+feGFF+Spp57yed8EZAACxon4NCnxZqq+Nbm0n3skVCLDctnlNAAAkGcCMrV371754osvTGZMg7Jq1apJt27dTFGPS0FRDwAB4/Gf09yCMfXqmlQZ3oS3KwAAcpvcXtQjPj5emjdvLgMGDJDBgwdf0tDEjDCHDEDA+DWDirHL9+d0TwAAAETy588vu3fv9ljuPqsQkAEIGKkZDKBO1cQZAADIdawQm8dbbnLzzTfLwoULs23/BGQAAkZGE1qZ6AoAQC6lmSVPt1zkmWeekW3btpmKiitWrJADBw5ITEyM281XTMoAEPhy1/s2AADIQ+rUqWO+/v333/Lxxx9nuF1qqhYmyzwCMgABI6MLZjZSZAAA5Eq5bXiiJ88++2y2ziEjIAMQ+HL/ezkAAMilRo8ena37JyADEDBIhAEAkLfk9rL3OYGADAGhU6dOUrZsWZk+fbq/u4IARKAGAEDuZNlyfw3B5557zus2OqRRi3/4goAMQMDj2hoAAAjEIYsaiFmWdUkBWe4PWQHk+VQYGTIAAHKnvLAOWVpamtstJSVFdu7cKY8++qg0bNhQjh496vP+CcgABAwrg8gr9Ex8TncFAAAgQyEhIVKlShWZMGGC1KhRQx566CHxFQEZctThw4dl+PDh0rJlS3PTqwr79+/3uO2iRYvM4x06dJCmTZtK69at5fHHH5ft27e7bHfHHXeYbfRqRXo//PCDuWoxd+7ci+7jwYMHzc9MmzZNFi9eLL1795brr79ebr31Vvn2228dz+PJJ5+UVq1aSYsWLUyK+uzZs2770r4OGzbM9P26666THj16yPvvv++2ToWmwvWYZ86ckZdeekluuukms/0999wjmzZtkmBR8Pgxj+0lFqwU+XN3jvcHAABcelEPT7e8pEWLFjJ//nyff56ADDkmLi5OBg4cKEuWLJH27dvLkCFDJCoqSgYNGiQJCQlu28+ZM8dcfejatas89dRT5uuff/4p9957r+zdu9exnQZKR44ckZUrV7rt45tvvpECBQpImzZtMt1fXYldr3rceOONMnToUMmfP7+Z1Pn999/LfffdJ9HR0fLAAw+YfWvbxIkTXX5eFw/s37+/rFmzRrp162b2UapUKXnjjTdk1KhRHo+p50RT3rr/fv36mVT4ww8/7DHYy4vCj5/22F7u5AmRl7/O8f4AAIBLZMvgloesWbPGfGb1FQEZcswHH3xgsk8jR440AZZmizQbpFmmU6dOuW2vgcsrr7xighMNujRYmTFjhiQnJ7uskq7BXWRkpAm+nGkWS4O0m2++2QR+mbV792557733ZMCAAdKzZ0+ZMmWKREREmMUBe/XqZYKq7t27m/satM2bN0/i488PrdNgTvv69ttvy4MPPmh+ZvLkySaAW7BggaxatcrtmFdccYW8+uqr5ngavGrmLTY21mwfCGJiYiQxMdFxXzN6GmjbJSUlyYkTJ1x+5tChQxe8r78nnQyrOv61xn3comVJ6x0bRQ6dzJJj5MTz4Bgcg2NwDI7BMQLpGLj0z7Cebq+//rr5LPjOO++Yr76yWc6vACAbaQB2+vRpk9INDQ11tB8/ftwETfXr1/dY9l5fopoh0smTavDgwRIWFiazZs1yGfK3cOFCk6kqUqSIadNASIcdfvjhh1KrVq2L7qcGjZ07dzZ9euGFF9yGR+7atUuWL19ugjO7jz76yARSn376qVSvXt28mbZt29YEauPHj3fZx7Zt28wwSD0fGpja+6/DKr/88kupVKmSY1sNVDWA69OnjzzyyCOS193bb4m8e2Vzt/aps9+UQX2riTzUwS/9AgAAvnn92kUe24eubiu5RcgFsl8lSpQwyQO9QO9LAkBR9h455sCBA1K7dm2XYMz+Qi5YsKDb9lu2bJGpU6fK2rVr3YY0li9f3uW+DmfUgEaDPQ12NIj77rvvpGbNmpkKxi50DKX91P46B2OqUKFC5qtms+xBnapatarbPnQCqP5h6/nwdkx7cGnfb173S/1rRZLc21c3ayyDHrzWH10CAACXILdVVMxo1FR6Wua+aNGiHj/DZhYBGQKSpu91yJ7O09I5Y5UrVzZXHfTFr8MY0wdoV199tVSrVs0MW9SATIcDalCkhTey+mrIha6SXGrCOX2wmlX7zS2SIqPcAzLLkn1NG+iJ91OvAABAMLPZbFKyZEnJly+fx8f1c+mxY8dcRjllBp9wkGM0+7Nv3z63CoM6ZNF5bLTSwh86H+v55583xS1uuOEGadKkiTRu3DjDbJFmybQIhlYl1MBM55Xdcsst4g/lypUzX3V4Y3p79uwxFSE9ZeCCnc3TO1Ieq8QEAEAwyQtVFqtUqSJfffVVho9rFW7dxlcEZMgxWuZeJ6Fq8QtnWgY+oyxU+syQ/jGkn8iavriHzhlbunSpKRaSFWlkXxQrVkzq1q0ry5Ytkx07djja9fnMnDnTfK/zy+DKcl+5wMhdb9sAACAvsbyMVNIibpdSZZEhi8gxffv2NdUCX3zxRdm8ebMZYqjzwzZs2OCYK2Wn635plUWdIHn77bebwGr9+vXy66+/SoUKFdyybPZ5XBqEaWEP1aVLF/EnXX9Mh11qlUYt4FG8eHFTSv+3334zBUMaNWrk1/7lKkRkAADkSrktG2anheicq4BrQsB52SU73UaLupUtW1Z8RYYMOUYDJi1br5kyLb6hAde5c+dMJcT0Y3I16NJSojr0TzNKWi5e/zB0W13LKyO63peqWLGiNGjQQPxJC5i8++67pnrk559/LpMmTTJlaHUl9zFjxvi1b7lOcEyhAwAgz8mtQxZfffVVMwxRbzqHTKtd2+873+rVq2c+12oVcF9R9h55is4f0zlnuu6XLsqM3KXKtBTZ4zqd0Gh3mciCHiT0AQDIbSZe95PH9sd+bSWB7LfffjMjszRU0iJxuvSRXmR3poGaFqDTJEDDhg19PhafcJCnzJkzx6xR1qlTJ393BT7IsDIul40AAMiVckM2zJOmTZuam9L1cG+77Ta58sorJTsQkCHX01KjWjxDKxrq/DGttqhrhaWn1Ry9KVCggM+L+uHSZRh35c73cgAAkAeMGjUqW/dPQIZc7+TJkzJy5EjJnz+/tG7dWoYOHepxOy2kcTF/cGTX/CejAdQZVV8EAACBLbdmyDz55ZdfZN26dWYJJl3CKP3wxWeeeUZ8QUCGXE8Lf6xZs8brdlOmTPG6jVZ+hP+EZlBmiDWhAQDInfJCQBYTEyMdOnSQVatWmTllGnzZy3DYvycgAy6CLiqNwFanhMhOD+t+1yvtj94AAACIPPHEE2aZpo8//th8nqxataosXLjQVFnUaoxaAMS+7JIvuO4MIGBMvFHfktzHLT7ZiLcqAAByIyvE5vGWm8yfP18GDRokPXv2NGvjKl0Iunr16mYEVuXKlU1ZfF/xKQdAwKhWJESGXKPf/TcMQCx54XqRIlG8VQEAAP/QxZ/r1KnjKACnzpw543i8bdu2JmPmKz7lAAgoE1uKjC/wiTyWf74cHiQysikjqwEAyK1y68LQ6esVHD582HwfGRkppUqVkvXr1zseP3DggJlD5is+6QAIOIVCzkmhkMNSlBUIAADI1XJb8OVJixYtZPHixaaqt9Khiy+//LKEhoaaaouTJk2Sdu3aia8IyAAAAAAgA4899pgJyBITE02GbPTo0fLXX385qipqwPbGG2+IrwjIAAAAAGSLvJAhu+qqq8zNrmjRovLDDz+YuWWaJbMX+vAVARkAAAAAZFKRIkUkK1DUAwAAAEC2yAtFPdTevXtl8ODBcvnll0uxYsVk2bJlpv348eMydOhQ+eOPP8RXZMgABJbkFLni531SbmuM2EJ/FunfShf78HevAACAD3Jj8JXe33//Lc2bNzcFPHRh6B07dkhKSop5rESJErJixQo5e/asvPPOO+ILAjIAASW03pPSYtshswqZ3DdVrGmLxbZqnL+7BQAAgtSTTz5phif+/vvvpry9lr131qFDB5k9e7bP++eyM4CAYX3/h4RsOyIi4f9dLwoXWb1brI3/+LtrAAAgSIcsLlu2TO6//34pWbKkx/XGKlWqZNYi8xUBGYCAYU2crzkylzabhIg1eZHf+gQAAIJbWlqa5M+fP8PHjx07Zsrh+4qADEDAsI6e9tBqE+vIGT/0BgAAXCrL5vmWm9SvX1/mzZvn8TGdS/bpp59KkyZNfN4/ARmAAGO53bdC0vzUFwAAEOxDFp9++mlZsGCBGba4adMm03bkyBGzFlnbtm1l8+bNMnz4cJ/3T1EPAAFErxGlphu2mCo2i2tHAADAP2655RZ577335OGHH5bp06ebtj59+ohlWVKoUCH54IMPpEWLFj7vn4AMQACxxDLBmAZlGoRpZizUQ9YMAADkBrktG5aRu+66S7p16yaLFi0yZe91Xlm1atWkXbt2UrBgQbkUBGQAAodlSapESZqpsvhvQBYiyTqLzN89AwAAQWTEiBHSq1cvqVu3rqMtOjpaunbtmuXHYhwQgIBhSZikSYTTW1OIuW/ZuHYEAEBulGazebwFurFjxzrmi6kTJ05IaGio/PTTT1l+LAIywE86deokAwcO9Hc3Aoy+Qad/k9ZyTH7qDgAAuCSWGefifsuNLCt7PpAQkAEIGDZbqscqi5onAwAAyIsIyAAEjBhbmIRIkktbiCTKcct1sWgAAJA75IWy99mNiRkAAsahuDApIiESKnEmFLNJmqRKpGw9ESal/N05AAAQVPbs2SPr1q0z38fGxpqv27dvlyJFimS4gLQvCMiAbHb48GGZNGmS/Pbbb44/1scffzzD7desWSMffvihmUiakJAgJUuWlAYNGsjQoUMzfAPIK46HFpBQSZAQU/b+vJjESL/1CQAA+C43Z8OeeeYZc3P2wAMPuG2nc8tsNpukprp+frlYBGRANoqLizOFO3Q1d127omrVquZKy6BBgyQxMdFt+y+++MJU9SlVqpTcdtttUrZsWRPQLV++3OwjrwdkseFRcjYiXF5r2lHWlK8ijffvlKG/LZJ8h8/5u2sAACCIArKZM2fm2LEIyIBspCu3Hzx4UJ599lnp3LmzaevRo4e88sor8sknn7hsqwHXhAkTpHLlyvLuu++6LDJ4//33mwUI87rTUeFyS99h8stll5v739RqID9WrS0P/bjG310DAABB5O67786xY1HUA8hGS5culeLFi0uHDh28/pH/8MMPkpycLAMGDPC44ntIiP//XGNiYlwye2fOnDFZQLukpCSzToezQ4cOXfC+ZgDtZWTn17rKEYzZ/VjtSll8xeVZdoyceB4cg2NwDI7BMThGIB3Dnyyb5xvOs1nZVVAfgFx33XVSu3ZtmTFjhttjN954o9SoUUOmT59u7utQxc8//9wMW7zsssskGHXvt0r2RhWQN+Z9IPUP7pHfK1aTBzr2l4ZnY2TmzEb+7h4AAMikEZ3+8Nj+f9/Vy/G+BCr/X3IHgP/UOHpKvv/gZTN3LDwtVZr/s03mfzheKp496++uAQAAH6TZbB5vOI+ADMhG5cuXl3379rlV3Tl+/LjL8ANVqVIl83Xbtm0SrO7ct16KJ7gGXxVPx0jPmO1+6xMAAPAd65B5R0AGZKOWLVuacd7z5s1zaX///ffdtm3durWEh4fL22+/bcaLpxcMo4ur21yDVKXPunoB94qUAAAAeQFVFoFs1LdvX1mwYIG8+OKLsnnzZqlWrZqsXbtWNmzY4FbCvnTp0mZ9snHjxkmvXr1MIRAte3/06FH5+eefTaXGyy93LXiR1+gFsyRbpERY5wOwJFuUWSIaAADkPmTDvCMgA7JRoUKFTEGPiRMnyvz58x0LQ0+bNs2Usk+ve/fuUqFCBVMu/9NPPzVVF3Vh6GuvvdYEbHldiFhiWfkkxYRgqWJJmNisCLFseT87CABAXsR8Me8IyIBsVqZMGXn55Zfd2r/77juP2zdp0sTcgpKJu0IlTfK7NIfwXg4AAPIoAjIAAcMyEZnenCMwS9Is16IoAAAgd2DNMe8o6gEgYCTaosUmKfZUmfmqQxeTJNrPPQMAAMgeZMgABAydKhYqySKSLJaZR5b23wP+7hkAAPCFXlrFhRGQAQgYYbZEx9u2Ixgzb1RJfusTAADwHUU9vGPIIoCAEVlU35LSV1S0JLIwb1UAACBv4lMOgIBhG9xaLDNk8fwcMr1vG9jKzz0DAAC+rkPm6YbzCMgABI5e14utVAERSRCRc+ZrSOUSIk3z9oLYAAAgeBGQAQgoKZsnyoabKsuRqoUl7eluIn+/4u8uAQAAH5Eh846iHgACS8F8srJ7TfNt//49JDQ83N89AgAAPkoj9vKKDBkAAAAA+AkZMgAAAADZguGJ3pEhAwAAAAA/IUMGAAAAIFukCRkybwjIAAQey5Lws5ZYVvpFogEAQG7CkEXvGLIIIKAkfLVNikyIkGOflJP518yR+G+3+btLAAAA2YaADEDASD2TKDPGbZcr9x6Xnms2Sc2dh2TamL8lLSHZ310DAAA+lr33dMN5BGQAAsamKRul67q/JTrp3wBMv3b5Y7Nsfecvf3cNAAAgWxCQAQgYsb8ecntTCrUsOb7ioJ96BAAALkWazebxhvMo6gEgYOQ/k2i+pthskhISImFpaRJmWZL/TJK/uwYAAHxAUQ/vyJABCBgpoaGSEBZmgrCo1FTzNT4sXFIiwv3dNQAAgGxBhgxAwCiYcE6SQsJkTcVKkhgeLlHJSVL38AEpFB/v764BAAAfUMDDOwIyAAHjUJHC8k/5cJGQf5P35yIiZXWFynJZkUJSy9+dAwAAyAYEZAACxj9Fi4qEnHNps0JCZF/hon7rEwAA8J0lpMi8ISADEDCiEpPFNRz7V75EinoAAJAbUVHRO4p6AFmsU6dOMnDgQH93I1c6ExUhNstyadP7Z/JH+q1PAAAA2YmADEDAKJ4QL3WP7ZSwtH8XhtavdY/ukuLxnvJmAAAg0LEOmXcMWQQQMMJTk6R+3Cqpe2atxEYUksJJsWZh6P1WQ393DQAAIFsQkAGZkJKSIqmpqRIZyRC67HAsLkZCJE0irDQpmXjC0b7/XJxf+wUAAHxD2XvvGLKIgJacnCzvv/++9O7dW66//npp2bKl3HXXXTJ79myX7Q4ePCjPPPOMtG3bVpo2bSpdunSRKVOmyLlz7kPdLnbbadOmScOGDWXnzp0yceJEad++vVx33XWyceNG8/jhw4dl+PDhpk96e/TRR2X//v0+Pc877rhDOnToIGlpaW6P/fDDD6Yfc+fOlbyu6PGTYrlVZxIpcvB8cAYAAHKPNLF5vOE8MmQI6GBsyJAhsnbtWmnSpInccsstEhERITt27JAlS5ZIz549zXaHDh2Su+++W86cOSPdu3eXSpUqmZ+ZOXOmrF+/Xt58800JCwvL9LZ2GrxpRuzOO+8Um80mJUqUkLi4OFO448iRI9KtWzepWrWqrFu3TgYNGiSJiYmZfq633nqrjB8/XlauXGmCRGfffPONFChQQNq0aSN5XaXDh93eovV+hX8IyAAAQN5EhgwB6+OPPzbBUv/+/WXy5MkmM6ZB2MiRI03gZKfZrZMnT5qA5vHHH5cePXrI2LFjzfYaJDlnljKzrZ0GQ2+//bYJyDRTV7lyZfnggw9Mpk378tRTT5n9vPTSS9KqVSs5depUpp+rZt806NPgy5lm4TRIu/nmmyUqKkr8LSYmxiXg1MBWg1O7pKQkOXHCNXjSIPhC9/U5Wv9VViyc6PncRSUmZNkxcuJ5cAyOwTE4BsfgGIF0DH+ybDaPN5xns5xfAUAA0WF8moH6/vvvM5yzpUP8brjhBqlYsaJ89NFHLo/FxsbKTTfdZIYZTpo0KVPb2ocsaiA2YcIE83PONAA7ffq0zJ8/X0JDQx3tx48fN8FT/fr1Zfr06Zl6vqNHj5aFCxea51ukSBHTpsfXfnz44YdSq1Ytyeu2lXpMah7b49b+x2XXSL09z/qlTwAAwHc9+/3jsX32e5fleF8CFRkyBKy9e/eabNSFCmhotis+Pt4MGUyvcOHCZnjhgQMHMr2tMx3WmJ5up4GdczCmdB8FCxYUX3Tt2tUM09QgT+m1ku+++05q1qwZFMGYOlmojMf2c/8FqAAAIPcV9fB0w3kEZIAXOTVU8Oqrr5Zq1ao5hi2uWrXKDIvU+WXB4lT5KpIi4S5tyRIpCeUq+61PAADAd6xD5h0BGQLWZZddJnv27DFjpTNStGhRiY6Oll27drk9pkMKdQhh+fLlM72tN7rdvn37TAl8Z7oP53HevmTJtKrjpk2bTGCm2UEtZhIs1tatKX8XqCcJUkhSJUzipbBsLFRf1l3pntUEAADICwjIELB0LpYGSu+8847bY/apjyEhIdK8eXPZunWr/Prrry7bvPfee455Y5nd1hstc68TaufNm+fSriX6L4W9uIfOGVu6dKkpEuLrEMjcKLZAfunT/05ZVup62RreSJaVvl769LtDzuRj3TcAAHIjyt57R9l7BHRRj+XLl5uA7O+//5bGjRubYEUzXP/884+j0uKDDz5oKhEOGzbMlLLXuV1aMXHx4sWmuEbHjh0d+8zMthfSt29fWbBggbz44ouyefNmM9RQK0Ju2LDBUZDDF4UKFTJBmBb2ULpGWjCJSkqW7r/tkf0Fi5ub6vH7FolsdXGZSwAAgNyGgAwBKzw83JS7nzVrlqk+qAGYrkOmRTY6derk2K5s2bImwzV16lQTyOiQwdKlS5ty+ffee6/LumKZ2dZb4DRjxgyzYLS9CIcGdFoR8f7777+k563rmmnfNFhs0KCBBJO6+47IqZOuQz4rnTgtJQ/ovLLgKGwCAEBekkoyzCvK3gMBRueP9evXz2TzNFAMJu/2/12s5Qfd2iNvqih93rrWL30CAAC+63jffo/tc2dUyPG+BCrmkAEBZs6cOSZT55wFDBbHCueTnaWLurRtK1tMjhXK57c+AQAAZCeGLALZSBec1rXFvJXV1/XMli1bZubH6XBFrbaoa5oFm/o79slt7W6QDmu3S43DJ2Rb2eIyv34N+XbDchG50t/dAwAAmcSaY94RkAHZ6IknnjBFQy5EC4kMHDhQRo4cKfnz55fWrVvL0KFDJRjlT0yVEd8uk+Kx5yTEEqkYc1rq7zsoEYxqAAAAeRQBGZCNHn30UVO6/0JKliwp5cqVkzVr1kiwiykYLaV2xYr134KRGpSVOJUgJ68IvmwhAAB5ASXuvSMgA7JRrVpUBsyM1OsrirXBNYC1bCFiXVfRb30CAAC+S/3vIisyRlEPAAGjbf/Kkr7sa5qItLmLgAwAAORNBGQAAkb+YpFS85lrJCX036tpqeEhctWLDSWqUIS/uwYAAHws6uHphvMYsgggoDTtXVG2xP0gqTGh0ufh3pK/MCXvAQDIrVKZQ+YVGTIAgUcTYmVSJTw/14wAAEDexqcdAAAAANkilQSZV2TIAAAAAMBPyJABAAAAyBZplL33ioAMAAAAQLZgHTLvCMgABJT4ZJHP4hvItrRysusXkTHNLIkM480cAADkTcwhAxBQrnrrnPyQcrXsTSsp49bYpM6Us/7uEgAA8FFKBjecR0AGIGB8uilF9qVFubTtTIqUH3bx1g0AAPImAjIAAWPWT8dF0o81t9nk4x+P+6tLAADgEueQebrhPOaQAQgYe6z8GbTny/G+AACAS5dC7OUVGTIAASMpzPM1osRQrh0BAIC8iU85AAJGvpQkEYlwb09K9kt/AADApUkRUmTekCEDEDCKxHuoqGhZUjAp3h/dAQAAyHYEZAACRsmzp90bbTYpGR/nj+4AAIBLlGzzfMN5DFkEEDBi8hXIoD06x/sCAAAuXTIVFb0iQwYgYLTY9ZfH9ma7N+d4XwAAAHICARkCXqdOnWTgwIH+7gZywNbSFTy2/1W6Uo73BQAAXLrkDG44j4AMQMDYXMpzQLa1VLkc7wsAAEBOICADEDBu2rbBY3ub7ZtyvC8AAODSxdtsHm84j6IeAALGiXzREp2YIGcj8znaip6Nk0MFCvu1XwAAwDcJxF5ekSFDwDh8+LAMHz5cWrZsaW6PPvqo7N+/3+O2ixYtMo936NBBmjZtKq1bt5bHH39ctm/f7rLdHXfcYbZJS0tz28cPP/wgDRs2lLlz52aqn7p937595YYbbpBmzZpJly5d5H//+5+cPHnS67y3NWvWmGN+9913jjb9XttWr14tH374odmfPqdu3bplum+53S9Vr5DIFNeR5WFpabKh3GV+6xMAAEB2IkOGgBAXF2cCmCNHjphApGrVqrJu3ToZNGiQJCYmum0/Z84cKVy4sHTt2lVKlChhArevvvpK7r33Xpk1a5ZUqvRvEYhbb71Vxo8fLytXrjRBjrNvvvlGChQoIG3atLnofs6bN09Gjx4t9erVk8GDB0tkZKTp8y+//CIxMTFStGhRn8/BlClTzHPV5x8RESGff/65OVaFChXkmmuukWBQKCFetkW7nsNjBQrJtfExIkLpewAAcpskIUXmDRkyBIQPPvhADh48KCNHjpSnnnpKevToIS+99JK0atVKTp065bb9G2+8Ia+88orcd999JugaMmSIzJgxQ5KTk+Xjjz92bNe+fXsTNGnwlT4bp0HazTffLFFRURfdz6VLl0p0dLS89dZb0qtXLxMQamCmma1q1apd0jlISkoy5+Huu+82mT09Rnh4uAk+A4UGnc4B8pkzZ0ww7fwcTpw44fIzhw4duuB9/V1YlmW+PxFdyP2gNpscyl8oy46RE8+DY3AMjsExOAbHCKRjILDZLOdXAOAnGoCdPn1a5s+fL6GhoY7248ePm6Cpfv36Mn36dLef05fv2bNnJSUlxdzX4CgsLMxkyew0y7Rw4UL5/vvvpUiRIqbt7bfflmnTpplAqlatWhfdzzFjxpg+jhs3zgyrtGUwKVWHLJYtW9atzzpkUfs4atQos419yKLuV4NRDfCc9ezZ02TLtJ/BoMrURNlz5vzv365BSZE1d5PQBwAgt7E9qqNc3FmvFsvxvgQqPuEgIBw4cEBq167tEowpHY5YsGBBt+23bNkiU6dOlbVr10pCQoLLY+XLl3e5r0GOzsXSQKp3794miNMgqGbNmpkKxlT//v3NUMphw4aZIZMaKF5//fVy0003mczZpUjfb6XH0CtnwaLSyeOyJ7y0h3Y9B55L4gMAgABGRUWvCMiQ62iAovPNNADSOWOVK1c2ww41W6XDGNMHaFdffbUZTqjDFjUgW7VqlRke+eSTT2b62Do37bPPPjP70CIcGpy98MILJtumWTed76UyypylpqZmuO+QEM8jiIMpiV3u9EmR4u4BWemzp/3SHwAAgOxGQIaAoNmhffv2mYAl/ZBF53HTasmSJRIfHy8TJ0401QmdxcbGmiF+6WmWbMKECbJp0yYTmOm8sltuucWnvur+tbqi3tSKFSvkkUcekY8++sjMf1OFChUyQzA9ZQKRsT1FS7o3WpbsK1TcH90BAADIdhT1QEDQ+Vg6QVWrGDp7//33M8wkpc8caZXF9JNc0xf30LlYWphDi4V4GgrpjacCI1dccYUjGHTOpO3Zs0eOHj3qMglXs2vIWGJYuHujzSap6YayAgAA5BVkyBAQdF2vBQsWyIsvviibN282Qwx1ftiGDRschTjsdM6WVll89tln5fbbbzeB1fr16+XXX381QwY9DQvUjJUGYVrYQ+laX7548MEHzfG07H3p0qVN9k7no+kQRQ367LRfulbaAw88ILfddpup/qhz2DJT0TEYJWng5b5knCSFEJABAJArMYfMKzJkCAgaMGnZes2UaeCiAde5c+fM3Kx8+fK5bKtB1+uvvy7lypWTmTNnyuTJk83wQN22VKlSGR5D1/dSFStWlAYNGvjUz+7du5sM3Zdffiljx4411RzLlCljStTbhzAqXTdMqzvqgtSvvfaaWVNMh0hqQIeMnQ2PMkMUXViWxOZjDTIAAHIlWwY3OFD2HkFD54/169fPBEVaLRGBp96rJ+XPVPehpG0KnJbFgymPCwBAbmMb5j7dQ1kTXEdABTMyZAgausCyrlFmX/8LgafB/p0e268++E+O9wUAAGQFUmTeMIcMeZqWwF+2bJns2rXLzB/Taou6tll6Ws3RmwIFCjAHLJsleyreYVlyOjK/P7oDAACQ7QjIkKedPHlSRo4cKfnz55fWrVvL0KFDPW538803e93XqFGjyK5ls+PRHipf2mySEO6h+iIAAAh8JMO8IiBDnqaFP9asWeN1uylTpnjdRis/IptFuxZwsQvJ7762HAAAyAUIyLwiIANEpHHjxv7uAkSkQ4OCMn+te3unJkX90R0AAIBsR1EPAAFjUMuCEmWluLQVkGTp3pCy9wAA5E4U9fCGgAxAwAgNscn6/qFyedoBKZgaLzeWSpItgyL93S0AAIBsw5BFAAGlSmGRx4osNN/3v6O/hIdz3QgAgFyLZJhXBGQAAAAAsgkRmTdcegYAAAAAPyFDBgAAACB7kCDzioAMAAAAQPYgIPOKIYsAAk5ISpoUPBYvkuxaAh8AACCvISADEFD+nrNB3tjZRgbIfXLdM/tlx9cb/d0lAADgM9Yh84YhiwACRkrMWbl2Xx1JLvvvW9OaslXkqs1JEn9TotiiWY8MAADkPWTIAASMybP3SXKY63Wic+ER8smXe/3WJwAAcAlIkHlFQAYgYMyOL+6xfc7pQjneFwAAkAVsNs83OBCQAQgYR/MX9Nh+MLpwjvcFAAAgJxCQAQgYqSFhmWoHAADI7QjIAASM6MQEj+35khNzvC8AAAA5gYAMQMBoumeLx/bmO//K8b4AAIAsQFEPrxgHBCBg/F3uMil5Jlb+98MX0mD/bvn9shryYutusql8ZX93DQAA+IToyxsCMgABo+iZ07J4+hS5+tA/5v71/2yV6/dslbeG3CcipfzdPQAAgCzHkEUPDhw4II8//ri0adNGGjZsKKNHj5a8qFOnTjJw4EAJFOfOnZPx48dLhw4dpFGjRqZ/CC4ND+x2BGN2TfZul8uPHPZbnwAAwCVgyGLWZ8j2798v77//vqxbt04OHz4sERERUrx4calTp475AK0BTG43ZswY2b59u9xzzz3muVWoUCHDbf/55x/5/vvv5ffffzfnJikpyWzfunVr6d27t+TLl8/tZ/bs2SNvvPGGOYfJyclyxRVXyKBBg+Taa6/N8ufy8ccfS8GCBXNFcKOvq9mzZ8tdd90l1atXl+jo6Gw93tKlS2Xr1q3m3CMwbC9ZzmP7jhJlc7wvAAAAAReQ/f333yajEhYWZrIYVatWlcTERNm3b58JSPLnz5/rAzINqP744w+5/fbbTWDgzbfffiufffaZtGjRQm6++WZzbtauXStvvfWW/PDDDzJz5kyJiopybK9B27333iuhoaHSt29fKVCggHz11VcyZMgQef3116Vx48ZZ+nw++eQTKVu2bK4IyFauXGkCsYcffjhHjqcB2dy5cwnIAsivlWrKH+UqS72Dexxtv1xWUzaUYw4ZAAC5EtmwrA3I3n77bTOsTLMuNWvWdHv8+PHjktvFxMSIZVlSqFChi9peM2H9+/c3gZVd9+7dpWLFivLuu+/KN998Iz179nQ8NnnyZImLi5MPP/xQLr/8ctOmwa0GgOPGjZMvvvhCbHlw9fLU1FSTDXQOTtM7ceKElC5dWvICfQ0lJCSYixS4eJbY5K6eD8rHn7wuVWKOyfYSZaRfzwekkOXvngEAAN/kvc+1fp1DtnfvXilcuLDHYEyVKFHC8f3BgwdNtmzatGlu22mbPqbb2Ok8LW07deqU+V4DHc066Vwue6D35ZdfmmDnuuuuk9tuu81kOC6W7lcDHg1+mjRpYr7qfW137kPHjh0dwaf2R29r1qzJcL+1a9d2Ccbs2rZta77u3LnT0aYf0JctWyYNGjRwBGNKP7Tfeuut5vz+9dfFlffW565DKps1aybNmzc336c/H9r3Q4cOmaGR9ueS/rzbh1BqVkrPd8uWLeXJJ5/0GFyfOXPGZPG0r02bNjVz7EaMGGGyfs6+++47cxzNeM2YMUO6dOlifmeLFy/2+Fzs2+vcPee+Or92NDs7bNgw87rQY3fr1k3eeecdSUlJcdnXpk2bzO9RH7/++uvNc9Jzs2TJEpftNNOr2TH7ebLftC/2xz1lFT29rvX1Yf/ZOXPmSI8ePczz1aDbbtGiRSYzqv3Rft19990mg5reihUrzLH1eep2+jp94oknzNDYYFA8PlbmfDRJ6h7eJwWTzkn9g3vkk49fl6Ln4vzdNQAAAP9nyHRulH4w/Omnn6RVq1bZ0qGhQ4dKqVKlZPDgwWYopM4p0g+kN954oxnapx/udd6atj/11FMmSCtfvvwF96mBhH4o1/117tzZzNnSuUOff/65rF692sxd0vlK+iFeg82JEyea4+lNValSJdPP48iRI+arzkGz03lpOiTyqquuctv+yiuvdAQe9u8zokMkNZisXLmy3HefVp8TE1xowKIBkj4P9dxzz5nnUqRIEfP87YoWLer4/tixY2bI3g033GDOvfZRz+nZs2dlypQpbudQ5w3qOdThqhq06Tns16+fCT50aKSz1157zQRMXbt2Nef3sssu8/h86tWr57GvNWrUcAQp+hrQrGOfPn1M9nLjxo0mKNq2bZs5F3YalGqAqcGi9ic2NtacG/35F154wQwrVXoMzWLp8FQ9tl3dunXlUoaH6vE0YNXfuz3b9+abb5psqQZp+roOCQkxAeLw4cNN8KvZUaVDXR977DGpVq2aI+uq53jVqlXmtZvR+ctLOmz+Q2ofPeDS1nD/Lmm1baOItPBbvwAAgI9IkHlnZcL69eutxo0bWw0aNLC6du1qjR492vrss8+sXbt2uW174MABs93UqVPdHtM2fUy3sRs1apRpGzt2rMu2r7zyimlv3769FRcX52jftm2baX/jjTe89nvy5Mlm2zlz5ri0z54927S/+eabF9Xvi5WSkmL179/fatSokbV7925H+w8//GD2recsvZ07d5rHtK8XEhsbazVr1szq0qWLy/nQ7zt37mw1b97cOn36tKO9Y8eO1oABAzzuSx/TYy5atMilXX8H2u7c9/Hjx1vXXXedtXXrVpdtDx48aLVo0cL8/uy+/fZbx2skISHhgs8nfX/S9/XcuXNW27Ztrfvuu89KTk52eWzWrFnmOKtXr3a0xcfHu+1X+6B96d69u0u7/TXnifZD+5Oep9eHHl/bbrzxRuvEiRMu22/evDnD3+tjjz1mzt2ZM2dcXuvp9xFItG/6O3F+3Tm/3hITE63jx4+7vUYudP/QoUNWWlqa+X7UvQssS7q63Z5/5KcsO0ZOPA+OwTE4BsfgGBwjkI7hT/JsvMcbzsvUkEXNHsyaNcsM69OMiQ7RGjt2rBmiNWDAALeha76444473LInSoduOQ8N1OyJZl10mJ83mjXRrJBmapxpJknb0w9nu1SvvPKKbNiwwWRDNItlp/PvVHh4uNvPaNbPeZuM6DBAHfrYq1cvl/Oh32tbfHy82eZilSxZUm666SaXNnthFs3KKP1b0kqS+rvQ7KUO87TftIqkZvS0qEt6Orz0QnPGLoY+F51bpsMH9TXnfGwd0mffxs65qqWeS91Ov2oFy927d5t9ZBd9jRYrVsylTc+bzgnUx5z7rjcdvqiZSM32KfvvUzPQ6YdiBgp9fpGRkY772met4mlnr7rqLH3mNP39MmXKOOZN/lD9Klle+XJ5pt3t0nLwKHm+dTdZXP0qWVf58iw7Rk48D47BMTgGx+AYHCOQjoE8VvZeq+DZ1+XS+Uk6zEoLV+jQL53vpQGbp4DjYqUffmh/AZYr514OW4eu6RAxb3TeT61atUwFRGd6v1KlSrJlyxbJKlpdUecRafCnw86c2YMTLW6Rng5ldN4mIzrPSumQwfTsbfZtLoan4Z46T1DZz+3JkyfN9xp06VBAT3QYXnp6bi+VBlHKeVhhehqwORdl0d/Bzz//bL5PTwMyT3P+soKn56v914BWg1Nv/dehi9pvvcihyyJcffXVZphju3btXIaZ5mk2m7S8f4xY/72ellWrI7a0NOmWlvsLBgEAEJQYspj1AVn66FuzZXr1X+cyrV+/3hSluOaaay5YKVAr7mVEy8Fnpl0/7AYKndOkhSY0m6NzuTxlo9TRo0fdHrO32bfJKZ4CqfTn1v5VF2vWYhQX61KzY87H1qIjGRWTsZ8z3VaXD9AgSLOF9oIr+hw1m7tgwQJJS0u7qONm9Pq90Gs3o+er+9JiKBmda50zpnT+3AcffGAubmjWT7/qvDp9Xel8vEuZ35ZbJIeGipWu1pAGZylhrGEPAADypksKyJw/cOqwNQ3I7IGFvWz86dOn3bbPTAYnK2gWSIuR6DAw5yyZ3tchj96KglwM/dCslRk1QH3mmWc8fqDX7KKmme1D1NJXB1QaRFyIfZHqXbt2mQDJUzbJ+flkRQl9zc5oplKH12X1OmkXm3XSoYjejq0FSbTIhw6fTb+22Ndff+22/YXOjb5+PWVOM/va1UIkv/76qxmOcDHFYfTCg73io/05aSETDfQ1KMvrIjTg9XDtJSSALrwAAIBMyIPLOWW1TF121iFrnua26Bwd+xwi+7A5nd+l41u1iqFzFkvnmWWmXH1W0FLuOuwu/Ydyva/t9mqKvtJATG/t27eXZ599NsNMiJa31xL1OsxTAwc7nfelfdHgo06dOhc8lgYlGpxolUkNkOz0e23TY2hZfzvd1lNQnBn6fLQ6oWY/PZVqV56GB2YFLXGvY6nfe+89j8NT9bVnPw/2854+a7pjxw6Przn7fDNP+9WKhrpfe6CsNLuma/Blhr4mlFas9JRdcx5u6bwEg53OQdTM26X+DnOL+PDzY+adxUacnxsIAAAQtBkyHT6lH161GIFme/SDopZ316FgmmnSoYvabqdzYnQ+j5ZT16BIS3jrwsc6REvLu+cUHWb3448/yssvv2zK3esaYPpV577pB+++ffv6vG+dL6bZMc2AaMZKz4UzDSacAyQdUqdBqn7t3bu3CVy1nL+Wn580aZLXjJZmqvR8aql3LTdvXzdNS7trEQ4dKuk8R0pL7Ovz1N+DZmh0//r7cy5+cTEefPBBkwF9+umnzbnU/epcQZ1H+Msvv5g5eva5hVlJ+zlmzBhT0l/XntOS+5p10sW1tby9FmQZP368ySjp89MLAjrsTwM1/d3q61LL+OvrcvPmzS771uegvz+ds6XruWn2VDO9mmHUOYA6H1LL5evwR32u+rwvNGTREw2wdV2x6dOnm9+3zsHTIZb6t6D90XNnv5ihZfk1w6xBtw4HTkxMNGu3aWCof1vB4ET+QiIe6q6cypc98/4AAAByVUCmayRp0YE///zTVIKzF0jQD7sa9KRfSFfbdJv58+ebrJB+YNbhfPpBNCcDMu2jDvnSwEkXZv72229N9k4/4OvQNg2KfGV/Hro+l6eApH79+i4BmQYT2hct2qBZHy3woeui6Ryjix0OqFUtdRFuXftLM3NK51dNmDDBrCfm7IEHHjBBtK5dpkGMZo/0+Wc2INNzqGtpaZCiQYKeRx1ep1UXdc6grr2VXTRLpmvF6U2rFmpWU4cU6vDNO++807FemfZHh/VpYKsBqlaj1OBffy+akUwfkGmxDA3MddFmDbY0AzZq1CgTkOlNz6euITZ16lRT6ESzXRoQXqhAhycakOlQ1E8//dSsVab90kBd+6aBpp3uX+e6zZs3zzxHfV1qgKnBty4UHQyik+I1l+zWXvCctv87DBoAAOQijFj0yqa1771vBgDZr+5rsbIx2f0CSesCZ+SHwUX80icAAOA723Oel3Synr304m95BaXLAASMwiYT5q5Iwvn5kgAAILelyDzdYEdABiBgRCYnemyPSHVfuw8AACAvICADEDB2FC/rsX1byUtfmgIAAPgBCTKvCMgABAxbSAYLwLOGCQAAyKMIyAAEjJpFPbfXLp7TPQEAAMgZBGQAAsak1poJcy/8OrYFb1UAAORKDFn0ik85AAJGreKhcrtZVs4elFky4CqR8gV5qwIAAHlTphaGBoDsNqu9SN0Zn8mu1FIysndLqVqMtykAAJB38UkHQMApGXrG3CoWbOnvrgAAgEtBYS6vGAcEAAAAAH5ChgwAAABA9iBB5hUZMgAAAADwEwIyAAAAAPAThiwCAAAAyB4MWfSKDBkAAAAA+AkZMgAAAADZhBSZNwRkAAAAALIH8ZhXDFkEAAAAAD8hIAMAAAAAPyEgAwAAAAA/YQ4ZAAAAgOzBHDKvyJABAAAAgJ8QkAEAAACAnzBkEQAAAED2YMiiV2TIAAAAAMBPCMgAAAAABITRo0dLgQIFJJgwZBEAAABA9rAxZtEbMmQAAAAA4CcEZAAAAACyhy2Dm482btwo7dq1k+joaClcuLB0795d9u7d63j83nvvlebNmzvuHz9+XEJCQuTaa691tJ05c0bCw8Pls88+k0DAkEUAF8WyLImLi8v24yQnJ0tCQoL5/vTp0+YNEwAAXJqCBQuKLZcPH9y3b5+0aNFCqlWrJrNmzZJz587JyJEjpWXLlrJhwwbzHPXxjz76yDwWFRUly5Ytk8jISPnjjz/M5xjd5tdff5WUlBSzbSAgIANwUfRNTK9E5aRHHnkkR48HAEBeFRsbK4UKFcrx41rDsi7cePXVV82F20WLFkmxYsVMW7169aR27dry3nvvyUMPPWSCrMTERFm5cqUJ1DQg69q1q/mZX375RW6++WbTVrNmTSldurQEAgIyABdFryjpm3lO0KEEHTp0kHnz5gVdpSVPOB/ncS5ccT7O41y44nycx7k4//94brd8+XJp1aqVIxhTV1xxhVx99dWyYsUKE5BVqVJFKlSoYIIue0A2ePBgM/rm559/dgRkgZIdUwRkAC6KDnPIqStrOtY7NDTUHC+Y//O043ycx7lwxfk4j3PhivNxHuci7zh58qRcc801bu2a6YqJiXHctwdiOvVh/fr1Jvg6e/asfP755yZ7tmrVKhkwYIAECop6AAAAAAh4xYoVk6NHj7q1HzlyxCVrpgHYb7/9JkuXLpUSJUqYLJq2rV69WpYsWWKCMufCH/5GQAYAAAAg4DVr1kx+/PFHkymz27p1qynooY/Z2TNiEydOdAxN1Mxavnz5ZOzYsVKxYkWpXLmyBAqGLAIIOBEREWYogX4F58MZ58IV5+M8zoUrzsd5nIvcJzU11QwvTO/hhx+WmTNnStu2bU11Ra2k+L///U8qVaok/fr1c2ynGbFSpUqZOWOvv/66adNhq9dff718//33cuedd0ogsVlayxoAAAAA/Gz06NEyZswYj499+OGHUrduXRk2bJipmKhB1k033WQyYZdddpnLtj169DBB3Z9//mmKfqhx48bJ8OHDZdq0aTJw4EAJFARkAAAAAOAnzCEDAAAAAD8hIAMAAAAAP6GoB4CAsmfPHnn55ZdNxaTo6Ghp3769PPDAAxIeHi7B5IcffpD58+fLli1bzDoqOmG5Z8+e0rlzZ7MmXDCLj4+X7t27m9LHH3zwgdSuXVuC0dy5c+Xjjz82fzNaOaxOnTrmbycqKkqCiU7af/fdd2X37t3mPNSrV0+GDBliFobN6/bt22fm1GzatEl27txp5tDMmTPHbbuvv/7a/K0cPnzYbKPvqYFU8jsnzoUuDv3RRx+ZeUd79+41BT70b+bBBx+U6tWr+7XvABkyAAFDA4/BgwdLSkqKjB8/3nxo+Oqrr8xk3WCjHxz0g/Ujjzwir776qlx33XXy4osvyttvvy3BbsaMGaYCVzB75513zN+IVhp74403ZMSIEVKuXDlJS0uTYLJmzRp54oknpGrVquZ8PP7447Jt2zYTkGn1tbxOAw8NMDT4rFKlisdtFi5caN47tPCBVpu76qqrTEGEjRs3SjCdCw1Gv/zyS2nSpIkpe64V+jRI08p8GswDfqVFPQAgELz77rtWs2bNrFOnTjnavvjiC6tRo0bW0aNHrWBy8uRJt7YXXnjBatGihZWammoFq927d5vXyOeff241aNDA+uuvv6xgPAf6N7FixQor2L344otW586drbS0NEfb6tWrzWtj3bp1Vl7n/F4watQoq0ePHm7bdO3a1RoxYoRLW//+/a2HHnrICqZzER8fbyUkJLi0nT171mrVqpU1bty4HOsn4AkZMgAB49dff5VGjRpJ4cKFHW16VVev+v/+++8STIoUKeLWdvnll5uFLhMSEiRY6ZC82267za28cTD57rvvpHz58mY9nWCn2fT8+fO7DOMtUKCA+RoMRaRDQi78MW7//v1meJ6+jzrTzOrq1aslKSlJguVc6HDW9MN59bWjGbVjx45lc++ACyMgAxAwdC5M5cqVXdoKFiwoJUqUMI8FO11LRRe61Ll1wUjn1emwpPvuu0+CmQ41q1atmhm6qR+0dQjWPffcY+bOBJtOnTrJrl275LPPPjPDzzQAmTJlirl4YV93KJjZ3zfTv6/q/eTkZDl48KAEs7i4OPOektFwTyCnEJABCKg5ZBqApadt+liwB2OLFi2SPn36SDDS+UA6l07nFdozIMHqxIkTsnLlSlP05amnnpIJEyaYDJEWJ4iJiZFgogU89PlPnjxZbrjhBrn11lvN+dG5UrpgbLDTgEOl/5spVKiQ+RobGyvBTF8n+rejWXfAnwjIACDAHTlyRJ5++mlp2LCh9OrVS4K1iEXx4sVNlclgp0PxtNLkuHHjpE2bNtKsWTNH4RtPFfbysvXr18uzzz5rArGpU6eaYg16frQYTjAU9YDvvv32W1M0Si9qlC5d2t/dQZCj7D2AgKFXbXXYkaervPYrusFGn/vQoUPNvDqdP+VtnkRedOjQIZk1a5apomd/fdjn0WlgojedCxIsNGOsr4caNWo42vS+DtPT4VfBRLNjeqHi0UcfdbRpFcGOHTuaDGK3bt0kmNlHHOjfjQ79trOPOHCerxtMtBqjVp7U4c/6WgH8jYAMQMDQeQ3p54rpB4njx4+7zYEIBnqFX6/06zmYOXNm0A7VO3DggJnvouciPV0m4corr5T33ntPgoWWeNe5Up7kpSINF0Pnj7Vs2dKlTbMdWhQno3MUTOzvm+nn5+p9XdtRi8ME4xxMzYppIKbvH0AgICADEDB0rS0NPDQrZL+yq4UcNCukhQuCrXqcDlPUD0669pgW8whWmvnR4WjOdK0pHaan50gXdw0muqCvVlrcunWrOTfq1KlTZhHx3r17SzApW7ased7pM6p6PnRdtmCnFQR1Ufkff/zRzLGzW7x4sVx77bUmKAu2AF4v7Ohz1/cOIFAQkAEIGDqxevbs2WZxV60ad/ToUXnttdfMsKOSJUtKMNH5QcuXLzcfHrTUvfMirvohPCIiQoKFBuc6LM2TWrVqyRVXXCHBRD9Y165d21zl1yInkZGRJkOoH667d+8uwfae8corr5ihixqoapEKnW9YrFgxM78uGLLoK1ascASi+l6hF7FUgwYNpGjRojJw4EB55plnTHCmbRqMaUXOvLbIvLdzoXMLH3roIfP3ohcuNm/e7PhZrVyrmWfAX2y6GJnfjg4A6ezevdvMFdLJ+vqfZIcOHcyHzmC7kqvlvPVDRUaT0YP96v+aNWvMcKMPPvjABCfBRjNAGoho0K7DObXa4GOPPRZ0Hyr1I8wXX3xhbjpEUecS1q1b11ScDIZhzlq2PqNCN5pVtl/I+Prrr+X999+Xw4cPmzX89PxoABtM50JlNESxfv36Mn369GztH3AhBGQAAAAA4CfBV64LAAAAAAIEARkAAAAA+AkBGQAAAAD4CQEZAAAAAPgJARkAAAAA+AkBGQAAAAD4CQEZAAAAAPgJARkAAAAA+AkBGQAg4PTr109sNpsEgk2bNklYWJgsXrzY0bZ06VLTv/fee8+vfYP/6WtAXwv6mvAFryXP/vzzTwkJCZGff/7Z310Bsh0BGQDkkF27dsnAgQPliiuukPz580vRokWlVq1acvfdd8uSJUtctq1cubJceeWVXgOW48ePe3x88+bN5nG9LV++PMP92Lex36KioqRGjRry2GOPSUxMzCU827xDz8X1118vN910kwSDPXv2yOjRo80HYgSHU6dOmd+5r0FldrzWrrnmGrn11lvl8ccfF8uycrRfQE4Ly/EjAkAQWrNmjbRs2VLCw8Olb9++UqdOHUlISJDt27fLokWLpGDBgnLjjTdm2fHeeecds898+fLJu+++K82bN89wW/3gox96lAZh8+fPl1dffdVkhNauXSsRERESrH777TdzHr7++muX9hYtWpjfn/4+8xr9kDxmzBhzUUBfGwiOgEx/5+qGG24ImNfaI488Yt439T2pQ4cOOdYvIKcRkAFADtAPHfHx8eZK8NVXX+32+OHDh7PsWMnJyfLhhx9Kjx49pHDhwjJ9+nR5/fXXTYDmSfny5aVPnz6O+0OHDpVOnTrJ3Llz5ZtvvjH7CVZvvvmmlChRQtq3b+/SrkOpNJsIIPvohSQN1qZOnUpAhjyNIYsAkAM0E1a8eHGPwZgqU6ZMlh3ru+++k6NHj5qhkDq08ezZszJ79uxM7aNdu3bm644dOzLc5q233jLDHL/99lu3x9LS0qRChQouV701E9izZ0+pWrWqydwVKVJE2rZte9FzRPTKvX4483SVXfuhQ5+c6TAn7WODBg3MENECBQqYLGT64aEZSUlJMZmxNm3auGXCPM37cW7TQO7yyy83QdtVV11lglu1ceNGufnmm6VQoULm9aDBrwbQnp6nDnHt0qWLCap1+65du5q29Of5xRdfNBk7fQ1pNrNSpUpy//33y4kTJzw+ry+++MIcQ8+/nhftp/YjKSnJ9N2eqe3fv79jKOvFZE3093DXXXdJ6dKlJTIyUqpVqyYjRowwFyKc6e9J97l161bzuL5OdHv929BMSGbmbf3444/y3HPPyWWXXWZeU40bN5bff//dbKOvq2bNmkl0dLSULVtWnn/+eY/70t+xDknV7fQ1ot/rhQhP3n77bTPkWPtbvXp1mTRpUobD6WJjY+Wpp54y2+n2JUuWlDvuuMPtd5hZF3ueLzQPU9v1cfvrtkqVKo4LR/bfuf1vzfnv65NPPpG6deua17W+zrRN/058+Tu9mNea3tf3ogULFsiZM2cu6bwBgYwMGQDkAP3QpB9Av/zyS+nWrdtF/UxqamqGc8QSExMvOFxRP2Dp1WX9QFOvXj0zbPG+++7LVACpNDuUkV69esmjjz4qH3zwgXTu3NnlMf2gfODAAcdQSPsHMB0SqUM29UO4Pj5jxgxp3bq1CZIuNKzSF/qhVT9Adu/e3Xzg03P20Ucfmblg+ntI3+f0dLimfghs1KhRpo47ZcoUOXnypDnf+sFVs5MaTH322WcyYMAA86Fc58ZogPrGG29IqVKl5H//+5/LPjSI1g+mGmC89NJL5vehQZ4GG3/88YcjgNcgavz48XLbbbeZ4E2DitWrV5vXwIoVK9yGnI4cOVL+7//+T2rXrm1+dxqo7Ny50wRpGthoYKcf7nUbne9o/53oh/8L+eeff8x50iDkgQceMPMQ9YO+9v2XX34xrwctjOJMLxhooDts2DDzPDS40fOybds2jx/oPRk+fLj5O3n44YfNPl555RUT5Otr8t577zXP4c4775Q5c+bIs88+a/4unLPBek4ffPBBE2Tp4/bXqfZj2rRp5ufttH96zjRw1POjAdCECRPM7y89PQ/XXXed7N27V+655x4zRPnQoUPmePo71SHMGkRmli/n2Rudx6pDlPW56evU/v6kwakzvfCiwaSeL3396X0N4LRPM2fOzPRzudjXWtOmTc3vQl/PejEDyJMsAEC2+/XXX63w8HC9lG7VqFHD6t+/v/Xmm29af//9t8ftL7vsMrOtt9uxY8dcfu7AgQNWaGioNWrUKEfbpEmTzLaejqXtbdu2NfvR27Zt26yJEyeavhYuXNg6cuTIBZ9X9+7drcjISCsmJsalvU+fPlZYWJjLz585c8bt5w8fPmwVL17cuuWWW1za7777btM3Zy1btjTnJb3du3ebbZ2f85dffmnapk2b5rJtcnKy1aBBA6ty5cpWWlraBZ/bu+++a/bxzTffuD22ZMkS89jMmTPd2sqVK2edOnXK0b5+/XrTbrPZrC+++MJlP/Xr17fKlCnj9jx1+4cfftil3f6cBg0a5GjT5xAfH+/WvxkzZphtZ8+e7WhbuXKlabvxxhuthIQEl+11P/bz4em5edO7d2/zM/PmzXNpHzZsmGnX/tjp70nbOnTo4PI7WLVqlWkfPny41+Np33TbevXqWYmJiY52/V1pu772Vq9e7WjXbfQ8N2nSxNGmr9no6GirWrVqVmxsrKNdv69atapVoEAB6+TJk6ZNv+bPn9+qVauWdfbsWce2+/btM/vQY+p5sxs6dKgVFRVl/fnnny793rNnj1WwYEHz+rbLzPnOzHn29Ddkp+3OffD0N5T+sZCQEGvt2rWOdv3d3Xrrreax3377zae/04t57suXLzfbTJgwIcNtgNyOIYsAkAP0Kq9mKzQroFe39YqyXuHWTIVeKfY0jEmzBFpQwtNNswCe6NV9HcamWSg7zRBoJkKzZJ5opkaHU+mtZs2apqqg9kvbPV39d6bPRzNPzkMiNav01VdfmavZzj+v2RvnbXRIXWhoqMkYrFy5UrLSrFmzzJw5zXRoltF+0+IFOj9Oh0/Zs4AZOXbsmPlarFixTB1bh4LpMEM7HeKlQw7LlSvnlh3VIXU6f9DTcCzN/jjT7IUOL3QuMKIZUB2qpzRTpM9Pn2erVq1Mm/N51eyg0mxK+vlv9uFivtDXm2ZLNBObfq7d008/bebb6eshPc1qOR/z2muvNVkZb78XZzo00zkDaM+y6GuqYcOGjnbdRjNLzvvWvyPNROpwTf392On32qa/kx9++MG06d+CZsQ0O6TDPO0006t/X8403tFzrX/XOj/T+fWnfwNNmjQx+8up85xVNLNcv359x3393T355JPm++w8rg7tVToMG8irGLIIADlE5xLZ5xzpMB+d46JD9rQsvQ43Sz+8TD+86fyljAKO9PSDoAZdGgDohzfn+V86L0YLfeiH8fRDmvTD6wsvvGC+1zkpOpRK54dcDHvQpUPEBg8ebNp0+Jt+0HUOCpUOjdMhcwsXLjSBg7OsXnNMy/7HxcVdcKjdkSNHTACaEXufMltyW+fIpadLHFSsWNFju9Lg1HmImM7v8jSvUIeXaUCm59ce4OpwPB2qp0MZ089H06GTdhqM6HPKaB6jrzRw1eBFh+Wlp8GsDov0dMHB03nSD98ZzX3zJP0+7OfTPicq/WPO+969e7f56qnf9jZ7v+1fdWhjenrxIv350OPYL3R4osFTTp3nrKKvvYyee3Ye1/73FyjrEgLZgYAMAPxAgx4NWHSek17V1/kfq1atMhkTX2mAp0GP0rklnmhxCc0aOdN5YhkFft5ocNe7d28zv0YDQC1goMGZfvh1nqOlHyQ1Y6CBhJay1uBUM1j6wVSDxJ9++snrsTL6QJa+qID9Q5x+GP74448z3N+F1nlT9g/TmV2PTbN+mWlXvq6zpHPhtFCKZn9ee+01E/Rp9kuzZRosa2CeVZmwrJbR+cjMufDlXGc3e//1b0qLevhLZv5eAvm49r+/jIJbIC8gIAMAP9IPL5qh0oBMi1xcCs2OaYZLAyJPV+AHDRpkij2kD8gulQ5b1IBMj6tFK7TIgE7S177YabGBgwcPmj5qgQ1n6QtaZESzAJpFTM/T1XkNSLU4hA4PS1+c4GLZA7bMDKHLKppB1KGM6bNkmvnTjKQ9O6ZZTw3AtCiK81C6LVu2uO1Ts4Hff/+9rF+//oKFSjIbsOkHZQ2u//rrL7fHNEOnxSwCcT0ze3ZN+62FZZz9/fffLtvYv+p5zWhb5/OhGc7Tp0/7fKEjK86zfaitBjTOw249/b1czO9cX3vppT9Pmf07vZjj2jP93i6gALkZc8gAIAfofBVPV4h1cWH7fJL0Q58yQ+elff7552Zu2e23324qC6a/acZKP5DrB7espB8CdZikDqPUAEGzMhqkecpYpM9+6HO/2PljGlDoMETNJNrpsbRCXHqafdTHdG5NRsMVvdG5OjqfyF5GPaeNHTvW5b7O09FKnc4BtZ5X/VDrnAnTc2wfgupMM5lKK9tpRcL07L8bewB7sZlBDf51Xp4OmdTy5Omfg/ZN578FGp0TpYGtVrrU15Wdfq9teh50G/u2OldPK2g6l5ffv3+/WxZWz4fOK9PXqf5NeuLLfKjMnmf7cFz7PDg7Hd6a3sX8zvU9bN26dS6vl5dfftl87/yazMzf6cUcV//+NBOvw66BvIoMGQDkAC0prfNKNCjS4Xqazdi3b5/5MKeZHA0gtN1XWt5dgzstf54RfUznsL3//vtuBSMulQZgWuJ+3Lhx5gOZZqac6VBMzfboNlpQQ4sh6CLZGsDp89b1ubzRrJt+mNQPnVoQQufb6QdeT4GuvdT95MmTzYfIjh07mqGZ+gH6t99+M1fdvc170WBHi3DonC0tXOKc8ctu2lcdjqhZRS1/by97r3PinNdb0+epc/a0iIe+hnQOmfY3/ZpUSrNiOoROf0danEGHOurvROdS6XnUD9Ca2dELA5qJ0ePp61TbNCtnLxTiiZYu1w/s+sFci9Xo0NVly5aZYi86VDV9gB4I9HlpQKGFOjRLbV+XS/9G9PWhpdbtxVl0CK6uY6Yl+rWcvZ5rPce6YLFmYzVIcqZrw2nWWy+O6E3/HvT1qnNHda01XRvPeQ27i5WZ86zLK2jwrX83mtnTzJUGcp6W0tC5e7qvTz/91CzRoa8zDVY1ALTTuYf6GtDzpfPVdK02DfZ02LUWLfLl79Tba02DPu2zDr/1NdMN5Ar+LvMIAMFg4cKF1gMPPGDVrVvXlHnX0vTFihWzbrjhBuudd96xUlNTXbbXstF16tTJcH/2ktb2svcNGzY0pb7Tl593du7cOVNyu2bNmo42e/nxS6Xl6/X4ur8XXnjB4zZa/r1du3ZWkSJFTElxLY+9bNkyj+W5MyrZreW+r776aisiIsIqW7as9eSTT1pbtmzJsGT3Bx98YDVr1sw8by3Pr+e1a9eu1qeffnpRz8teKv7zzz+/6LL3nkp463H1+aZnLwGvJcHTlw3fuXOn1blzZ9N3PV/6/fbt2932MX36dFOOXZ+flnYfMGCAdeLECbfS5nYff/yxdd1115l9ain3yy+/3JTYdy4fr+dZS8rrPnU/nvqe3q5du8xyByVLljTLJlSpUsV6+umnXcrEZ/ScvZ2njMreO5eat8voeWf0mtLlBJo2bWrOhd70+6+++srjcadOnWr+fvT1p+XyX331VcfyCOn7os/7ueees6688kpTAl/P9xVXXGHdd9991u+//+7YLrPLDFzseVZ6HP1d6+9R33f0taEl/D2dI32t67Z6DvRxe+l653L1+tq56qqrzPOvUKGC9cwzz1hJSUmX9Hd6odfa0qVLTdvcuXMv6twAuZVN//F3UAgAQKDSq/NajESrYeYEzYhpFlFvgL/p61CrVo4aNcolO5sTNMumIwl0sfNAKUYDZAfmkAEAcAE6/EqHOfqydhQA3+gwUB0WqX9/BGPI65hDBgDABei6T9ldKhyAe1Gd9Ms2AHkVGTIAAAAA8BPmkAEAAACAn5AhAwAAAAA/ISADAAAAAD8hIAMAAAAAPyEgAwAAAAA/ISADAAAAAD8hIAMAAAAAPyEgAwAAAAA/ISADAAAAAPGP/we0Fe++6asJGQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Display beeswarm plot \n", + "shap.plots.beeswarm(shap_values)" + ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "*(Answer here.)*" + "*(Answer here.)*\n", + "\n", + "Based on the observation in the test set, the most important features are dmh, month_may, month_dec and temp. Dmc had a positive SHAP value which increased the prediction. Whereas the month_may, month_dec, and temp had negative SHAP values which decreased the prediction. These features had the largest impact on shifting the prediction from the base value. While the other remaining features had minimal influence on the prediction from their near zero-SHAP values.\n", + "\n", + "The most important features across from the dataset according to the beeswarm plot are month_may, dmc, month_dec and temp. Month_may has a wide SHAP spread and strong influence depending on the value. While dmc consistently has high impact across samples. Month_dec and temp have moderate but consistent influence. These features show high variability and strong predictive power across the dataset. \n", + "\n", + "The least important features are day_mon, day_sun, coord_y, rain, and sum of 20 other features because they have tightly clustered SHAP values near zero. As a result, these features have minimal contribution to predictions. \n", + "\n", + "I would remove low-impact categorical features such as day_mon, day_sun, and other one-hot coded days. As well as redundant numerical features such as coord_y, rain, and the sum of the 20 other features. These features have minimal predictive power, can increase model complexity and training time, and can introduce noise or overfitting. To test that these features are actually enhancing model performance, I would retrain the model without these features and compare the scoring variables/performance metrics such as Negative Root Mean Squared Error (RMSE), Negative Mean Absolute Error (MAE), or Coefficient of Determination through cross validation or test sets. Then I would recompute the SHAP values to confirm that the remaining features retrain or improve interpretability. If the performance is stable or improved, then we can conclude that the removed features were not enhancing model performance. " ] }, { @@ -423,7 +9865,7 @@ ], "metadata": { "kernelspec": { - "display_name": "env", + "display_name": "production-env", "language": "python", "name": "python3" }, @@ -437,7 +9879,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.11.14" } }, "nbformat": 4,