diff --git a/docs/introduction-to-scikit-learn.ipynb b/docs/introduction-to-scikit-learn.ipynb
index 06e42ee16..dd8f935ab 100644
--- a/docs/introduction-to-scikit-learn.ipynb
+++ b/docs/introduction-to-scikit-learn.ipynb
@@ -15,14 +15,14 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Last updated: 2023-10-06 09:51:53.957505\n"
+ "Last updated: 2023-10-13 09:47:50.863667\n"
]
}
],
@@ -134,14 +134,14 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Using Scikit-Learn version: 1.3.0 (materials in this notebook require this version or newer).\n"
+ "Using Scikit-Learn version: 1.3.1 (materials in this notebook require this version or newer).\n"
]
}
],
@@ -192,7 +192,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {},
"outputs": [
{
@@ -364,7 +364,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {},
"outputs": [
{
@@ -522,7 +522,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {},
"outputs": [
{
@@ -569,7 +569,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
@@ -613,7 +613,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
@@ -632,7 +632,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
@@ -694,7 +694,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {},
"outputs": [
{
@@ -732,14 +732,14 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
- "/Users/daniel/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py:464: UserWarning: X does not have valid feature names, but RandomForestClassifier was fitted with feature names\n",
+ "/Users/daniel/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py:465: UserWarning: X does not have valid feature names, but RandomForestClassifier was fitted with feature names\n",
" warnings.warn(\n"
]
},
@@ -750,12 +750,12 @@
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[10], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# This doesn't work... incorrect shapes\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m y_label \u001b[38;5;241m=\u001b[39m \u001b[43mclf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpredict\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43marray\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m4\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/ensemble/_forest.py:823\u001b[0m, in \u001b[0;36mForestClassifier.predict\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 802\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpredict\u001b[39m(\u001b[38;5;28mself\u001b[39m, X):\n\u001b[1;32m 803\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 804\u001b[0m \u001b[38;5;124;03m Predict class for X.\u001b[39;00m\n\u001b[1;32m 805\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 821\u001b[0m \u001b[38;5;124;03m The predicted classes.\u001b[39;00m\n\u001b[1;32m 822\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 823\u001b[0m proba \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpredict_proba\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 825\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mn_outputs_ \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 826\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclasses_\u001b[38;5;241m.\u001b[39mtake(np\u001b[38;5;241m.\u001b[39margmax(proba, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m), axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/ensemble/_forest.py:865\u001b[0m, in \u001b[0;36mForestClassifier.predict_proba\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 863\u001b[0m check_is_fitted(\u001b[38;5;28mself\u001b[39m)\n\u001b[1;32m 864\u001b[0m \u001b[38;5;66;03m# Check data\u001b[39;00m\n\u001b[0;32m--> 865\u001b[0m X \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_X_predict\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 867\u001b[0m \u001b[38;5;66;03m# Assign chunk of trees to jobs\u001b[39;00m\n\u001b[1;32m 868\u001b[0m n_jobs, _, _ \u001b[38;5;241m=\u001b[39m _partition_estimators(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mn_estimators, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mn_jobs)\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/ensemble/_forest.py:599\u001b[0m, in \u001b[0;36mBaseForest._validate_X_predict\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 596\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 597\u001b[0m \u001b[38;5;124;03mValidate X whenever one tries to predict, apply, predict_proba.\"\"\"\u001b[39;00m\n\u001b[1;32m 598\u001b[0m check_is_fitted(\u001b[38;5;28mself\u001b[39m)\n\u001b[0;32m--> 599\u001b[0m X \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mDTYPE\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maccept_sparse\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcsr\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreset\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 600\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m issparse(X) \u001b[38;5;129;01mand\u001b[39;00m (X\u001b[38;5;241m.\u001b[39mindices\u001b[38;5;241m.\u001b[39mdtype \u001b[38;5;241m!=\u001b[39m np\u001b[38;5;241m.\u001b[39mintc \u001b[38;5;129;01mor\u001b[39;00m X\u001b[38;5;241m.\u001b[39mindptr\u001b[38;5;241m.\u001b[39mdtype \u001b[38;5;241m!=\u001b[39m np\u001b[38;5;241m.\u001b[39mintc):\n\u001b[1;32m 601\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo support for np.int64 index based sparse matrices\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py:604\u001b[0m, in \u001b[0;36mBaseEstimator._validate_data\u001b[0;34m(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)\u001b[0m\n\u001b[1;32m 602\u001b[0m out \u001b[38;5;241m=\u001b[39m X, y\n\u001b[1;32m 603\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m no_val_X \u001b[38;5;129;01mand\u001b[39;00m no_val_y:\n\u001b[0;32m--> 604\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[43mcheck_array\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minput_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mX\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mcheck_params\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 605\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m no_val_X \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m no_val_y:\n\u001b[1;32m 606\u001b[0m out \u001b[38;5;241m=\u001b[39m _check_y(y, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mcheck_params)\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py:940\u001b[0m, in \u001b[0;36mcheck_array\u001b[0;34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\u001b[0m\n\u001b[1;32m 938\u001b[0m \u001b[38;5;66;03m# If input is 1D raise error\u001b[39;00m\n\u001b[1;32m 939\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m array\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m--> 940\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 941\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpected 2D array, got 1D array instead:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124marray=\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 942\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mReshape your data either using array.reshape(-1, 1) if \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 943\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124myour data has a single feature or array.reshape(1, -1) \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 944\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mif it contains a single sample.\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(array)\n\u001b[1;32m 945\u001b[0m )\n\u001b[1;32m 947\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m dtype_numeric \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(array\u001b[38;5;241m.\u001b[39mdtype, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mkind\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m array\u001b[38;5;241m.\u001b[39mdtype\u001b[38;5;241m.\u001b[39mkind \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUSV\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 948\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 949\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdtype=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnumeric\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m is not compatible with arrays of bytes/strings.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 950\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConvert your data to numeric values explicitly instead.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 951\u001b[0m )\n",
+ "\u001b[1;32m/Users/daniel/code/zero-to-mastery-ml/section-2-data-science-and-ml-tools/introduction-to-scikit-learn.ipynb Cell 24\u001b[0m line \u001b[0;36m2\n\u001b[1;32m 1\u001b[0m \u001b[39m# This doesn't work... incorrect shapes\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m y_label \u001b[39m=\u001b[39m clf\u001b[39m.\u001b[39;49mpredict(np\u001b[39m.\u001b[39;49marray([\u001b[39m0\u001b[39;49m, \u001b[39m2\u001b[39;49m, \u001b[39m3\u001b[39;49m, \u001b[39m4\u001b[39;49m]))\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/ensemble/_forest.py:823\u001b[0m, in \u001b[0;36mForestClassifier.predict\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 802\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mpredict\u001b[39m(\u001b[39mself\u001b[39m, X):\n\u001b[1;32m 803\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 804\u001b[0m \u001b[39m Predict class for X.\u001b[39;00m\n\u001b[1;32m 805\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 821\u001b[0m \u001b[39m The predicted classes.\u001b[39;00m\n\u001b[1;32m 822\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 823\u001b[0m proba \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mpredict_proba(X)\n\u001b[1;32m 825\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mn_outputs_ \u001b[39m==\u001b[39m \u001b[39m1\u001b[39m:\n\u001b[1;32m 826\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mclasses_\u001b[39m.\u001b[39mtake(np\u001b[39m.\u001b[39margmax(proba, axis\u001b[39m=\u001b[39m\u001b[39m1\u001b[39m), axis\u001b[39m=\u001b[39m\u001b[39m0\u001b[39m)\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/ensemble/_forest.py:865\u001b[0m, in \u001b[0;36mForestClassifier.predict_proba\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 863\u001b[0m check_is_fitted(\u001b[39mself\u001b[39m)\n\u001b[1;32m 864\u001b[0m \u001b[39m# Check data\u001b[39;00m\n\u001b[0;32m--> 865\u001b[0m X \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_validate_X_predict(X)\n\u001b[1;32m 867\u001b[0m \u001b[39m# Assign chunk of trees to jobs\u001b[39;00m\n\u001b[1;32m 868\u001b[0m n_jobs, _, _ \u001b[39m=\u001b[39m _partition_estimators(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mn_estimators, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mn_jobs)\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/ensemble/_forest.py:599\u001b[0m, in \u001b[0;36mBaseForest._validate_X_predict\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 596\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 597\u001b[0m \u001b[39mValidate X whenever one tries to predict, apply, predict_proba.\"\"\"\u001b[39;00m\n\u001b[1;32m 598\u001b[0m check_is_fitted(\u001b[39mself\u001b[39m)\n\u001b[0;32m--> 599\u001b[0m X \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_validate_data(X, dtype\u001b[39m=\u001b[39;49mDTYPE, accept_sparse\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mcsr\u001b[39;49m\u001b[39m\"\u001b[39;49m, reset\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m)\n\u001b[1;32m 600\u001b[0m \u001b[39mif\u001b[39;00m issparse(X) \u001b[39mand\u001b[39;00m (X\u001b[39m.\u001b[39mindices\u001b[39m.\u001b[39mdtype \u001b[39m!=\u001b[39m np\u001b[39m.\u001b[39mintc \u001b[39mor\u001b[39;00m X\u001b[39m.\u001b[39mindptr\u001b[39m.\u001b[39mdtype \u001b[39m!=\u001b[39m np\u001b[39m.\u001b[39mintc):\n\u001b[1;32m 601\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mNo support for np.int64 index based sparse matrices\u001b[39m\u001b[39m\"\u001b[39m)\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py:605\u001b[0m, in \u001b[0;36mBaseEstimator._validate_data\u001b[0;34m(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)\u001b[0m\n\u001b[1;32m 603\u001b[0m out \u001b[39m=\u001b[39m X, y\n\u001b[1;32m 604\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39mnot\u001b[39;00m no_val_X \u001b[39mand\u001b[39;00m no_val_y:\n\u001b[0;32m--> 605\u001b[0m out \u001b[39m=\u001b[39m check_array(X, input_name\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mX\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mcheck_params)\n\u001b[1;32m 606\u001b[0m \u001b[39melif\u001b[39;00m no_val_X \u001b[39mand\u001b[39;00m \u001b[39mnot\u001b[39;00m no_val_y:\n\u001b[1;32m 607\u001b[0m out \u001b[39m=\u001b[39m _check_y(y, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mcheck_params)\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py:938\u001b[0m, in \u001b[0;36mcheck_array\u001b[0;34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\u001b[0m\n\u001b[1;32m 936\u001b[0m \u001b[39m# If input is 1D raise error\u001b[39;00m\n\u001b[1;32m 937\u001b[0m \u001b[39mif\u001b[39;00m array\u001b[39m.\u001b[39mndim \u001b[39m==\u001b[39m \u001b[39m1\u001b[39m:\n\u001b[0;32m--> 938\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\n\u001b[1;32m 939\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mExpected 2D array, got 1D array instead:\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39marray=\u001b[39m\u001b[39m{}\u001b[39;00m\u001b[39m.\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[1;32m 940\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mReshape your data either using array.reshape(-1, 1) if \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 941\u001b[0m \u001b[39m\"\u001b[39m\u001b[39myour data has a single feature or array.reshape(1, -1) \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 942\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mif it contains a single sample.\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m.\u001b[39mformat(array)\n\u001b[1;32m 943\u001b[0m )\n\u001b[1;32m 945\u001b[0m \u001b[39mif\u001b[39;00m dtype_numeric \u001b[39mand\u001b[39;00m \u001b[39mhasattr\u001b[39m(array\u001b[39m.\u001b[39mdtype, \u001b[39m\"\u001b[39m\u001b[39mkind\u001b[39m\u001b[39m\"\u001b[39m) \u001b[39mand\u001b[39;00m array\u001b[39m.\u001b[39mdtype\u001b[39m.\u001b[39mkind \u001b[39min\u001b[39;00m \u001b[39m\"\u001b[39m\u001b[39mUSV\u001b[39m\u001b[39m\"\u001b[39m:\n\u001b[1;32m 946\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\n\u001b[1;32m 947\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mdtype=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mnumeric\u001b[39m\u001b[39m'\u001b[39m\u001b[39m is not compatible with arrays of bytes/strings.\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 948\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mConvert your data to numeric values explicitly instead.\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 949\u001b[0m )\n",
"\u001b[0;31mValueError\u001b[0m: Expected 2D array, got 1D array instead:\narray=[0. 2. 3. 4.].\nReshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample."
]
}
@@ -776,7 +776,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {},
"outputs": [
{
@@ -817,84 +817,84 @@
" \n",
"
\n",
" \n",
- " 257 | \n",
- " 50 | \n",
- " 1 | \n",
+ " 298 | \n",
+ " 57 | \n",
" 0 | \n",
- " 144 | \n",
- " 200 | \n",
" 0 | \n",
+ " 140 | \n",
+ " 241 | \n",
" 0 | \n",
- " 126 | \n",
" 1 | \n",
- " 0.9 | \n",
+ " 123 | \n",
+ " 1 | \n",
+ " 0.2 | \n",
" 1 | \n",
" 0 | \n",
" 3 | \n",
"
\n",
" \n",
- " 39 | \n",
- " 65 | \n",
- " 0 | \n",
- " 2 | \n",
- " 160 | \n",
- " 360 | \n",
+ " 102 | \n",
+ " 63 | \n",
" 0 | \n",
+ " 1 | \n",
+ " 140 | \n",
+ " 195 | \n",
" 0 | \n",
- " 151 | \n",
+ " 1 | \n",
+ " 179 | \n",
" 0 | \n",
- " 0.8 | \n",
+ " 0.0 | \n",
+ " 2 | \n",
" 2 | \n",
- " 0 | \n",
" 2 | \n",
"
\n",
" \n",
- " 154 | \n",
- " 39 | \n",
+ " 254 | \n",
+ " 59 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 160 | \n",
+ " 273 | \n",
" 0 | \n",
- " 2 | \n",
- " 138 | \n",
- " 220 | \n",
" 0 | \n",
- " 1 | \n",
- " 152 | \n",
+ " 125 | \n",
" 0 | \n",
" 0.0 | \n",
- " 1 | \n",
+ " 2 | \n",
" 0 | \n",
" 2 | \n",
"
\n",
" \n",
- " 36 | \n",
- " 54 | \n",
- " 0 | \n",
- " 2 | \n",
- " 135 | \n",
- " 304 | \n",
+ " 171 | \n",
+ " 48 | \n",
+ " 1 | \n",
" 1 | \n",
+ " 110 | \n",
+ " 229 | \n",
+ " 0 | \n",
" 1 | \n",
- " 170 | \n",
+ " 168 | \n",
" 0 | \n",
- " 0.0 | \n",
- " 2 | \n",
+ " 1.0 | \n",
" 0 | \n",
- " 2 | \n",
+ " 0 | \n",
+ " 3 | \n",
"
\n",
" \n",
- " 71 | \n",
- " 51 | \n",
+ " 163 | \n",
+ " 38 | \n",
" 1 | \n",
" 2 | \n",
- " 94 | \n",
- " 227 | \n",
+ " 138 | \n",
+ " 175 | \n",
" 0 | \n",
" 1 | \n",
- " 154 | \n",
- " 1 | \n",
+ " 173 | \n",
+ " 0 | \n",
" 0.0 | \n",
" 2 | \n",
- " 1 | \n",
- " 3 | \n",
+ " 4 | \n",
+ " 2 | \n",
"
\n",
" \n",
"\n",
@@ -902,18 +902,18 @@
],
"text/plain": [
" age sex cp trestbps chol fbs restecg thalach exang oldpeak \\\n",
- "257 50 1 0 144 200 0 0 126 1 0.9 \n",
- "39 65 0 2 160 360 0 0 151 0 0.8 \n",
- "154 39 0 2 138 220 0 1 152 0 0.0 \n",
- "36 54 0 2 135 304 1 1 170 0 0.0 \n",
- "71 51 1 2 94 227 0 1 154 1 0.0 \n",
+ "298 57 0 0 140 241 0 1 123 1 0.2 \n",
+ "102 63 0 1 140 195 0 1 179 0 0.0 \n",
+ "254 59 1 3 160 273 0 0 125 0 0.0 \n",
+ "171 48 1 1 110 229 0 1 168 0 1.0 \n",
+ "163 38 1 2 138 175 0 1 173 0 0.0 \n",
"\n",
" slope ca thal \n",
- "257 1 0 3 \n",
- "39 2 0 2 \n",
- "154 1 0 2 \n",
- "36 2 0 2 \n",
- "71 2 1 3 "
+ "298 1 0 3 \n",
+ "102 2 2 2 \n",
+ "254 2 0 2 \n",
+ "171 0 0 3 \n",
+ "163 2 4 2 "
]
},
"execution_count": 11,
@@ -928,7 +928,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
@@ -957,7 +957,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {},
"outputs": [
{
@@ -987,14 +987,14 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "The model's accuracy on the testing dataset is: 77.63%\n"
+ "The model's accuracy on the testing dataset is: 75.00%\n"
]
}
],
@@ -1024,7 +1024,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"metadata": {},
"outputs": [
{
@@ -1033,12 +1033,12 @@
"text": [
" precision recall f1-score support\n",
"\n",
- " 0 0.76 0.69 0.72 32\n",
- " 1 0.79 0.84 0.81 44\n",
+ " 0 0.81 0.60 0.69 35\n",
+ " 1 0.72 0.88 0.79 41\n",
"\n",
- " accuracy 0.78 76\n",
- " macro avg 0.77 0.76 0.77 76\n",
- "weighted avg 0.78 0.78 0.77 76\n",
+ " accuracy 0.75 76\n",
+ " macro avg 0.76 0.74 0.74 76\n",
+ "weighted avg 0.76 0.75 0.74 76\n",
"\n"
]
}
@@ -1052,14 +1052,14 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "array([[22, 10],\n",
- " [ 7, 37]])"
+ "array([[21, 14],\n",
+ " [ 5, 36]])"
]
},
"execution_count": 16,
@@ -1075,13 +1075,13 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "0.7763157894736842"
+ "0.75"
]
},
"execution_count": 17,
@@ -1142,7 +1142,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 18,
"metadata": {},
"outputs": [
{
@@ -1150,34 +1150,34 @@
"output_type": "stream",
"text": [
"Trying model with 100 estimators...\n",
- "Model accuracy on test set: 80.26%\n",
+ "Model accuracy on test set: 73.68%\n",
"\n",
"Trying model with 110 estimators...\n",
- "Model accuracy on test set: 78.95%\n",
+ "Model accuracy on test set: 73.68%\n",
"\n",
"Trying model with 120 estimators...\n",
- "Model accuracy on test set: 80.26%\n",
+ "Model accuracy on test set: 75.00%\n",
"\n",
"Trying model with 130 estimators...\n",
- "Model accuracy on test set: 78.95%\n",
+ "Model accuracy on test set: 72.37%\n",
"\n",
"Trying model with 140 estimators...\n",
- "Model accuracy on test set: 80.26%\n",
+ "Model accuracy on test set: 73.68%\n",
"\n",
"Trying model with 150 estimators...\n",
- "Model accuracy on test set: 80.26%\n",
+ "Model accuracy on test set: 73.68%\n",
"\n",
"Trying model with 160 estimators...\n",
- "Model accuracy on test set: 80.26%\n",
+ "Model accuracy on test set: 73.68%\n",
"\n",
"Trying model with 170 estimators...\n",
- "Model accuracy on test set: 78.95%\n",
+ "Model accuracy on test set: 75.00%\n",
"\n",
"Trying model with 180 estimators...\n",
- "Model accuracy on test set: 78.95%\n",
+ "Model accuracy on test set: 73.68%\n",
"\n",
"Trying model with 190 estimators...\n",
- "Model accuracy on test set: 77.63%\n",
+ "Model accuracy on test set: 75.00%\n",
"\n"
]
}
@@ -1207,7 +1207,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {},
"outputs": [
{
@@ -1215,43 +1215,43 @@
"output_type": "stream",
"text": [
"Trying model with 100 estimators...\n",
- "Model accuracy on single test set split: 80.26%\n",
+ "Model accuracy on single test set split: 73.68%\n",
"5-fold cross-validation score: 82.15%\n",
"\n",
"Trying model with 110 estimators...\n",
- "Model accuracy on single test set split: 81.58%\n",
+ "Model accuracy on single test set split: 73.68%\n",
"5-fold cross-validation score: 81.17%\n",
"\n",
"Trying model with 120 estimators...\n",
- "Model accuracy on single test set split: 77.63%\n",
+ "Model accuracy on single test set split: 75.00%\n",
"5-fold cross-validation score: 83.49%\n",
"\n",
"Trying model with 130 estimators...\n",
- "Model accuracy on single test set split: 80.26%\n",
+ "Model accuracy on single test set split: 72.37%\n",
"5-fold cross-validation score: 83.14%\n",
"\n",
"Trying model with 140 estimators...\n",
- "Model accuracy on single test set split: 77.63%\n",
+ "Model accuracy on single test set split: 73.68%\n",
"5-fold cross-validation score: 82.48%\n",
"\n",
"Trying model with 150 estimators...\n",
- "Model accuracy on single test set split: 78.95%\n",
+ "Model accuracy on single test set split: 73.68%\n",
"5-fold cross-validation score: 80.17%\n",
"\n",
"Trying model with 160 estimators...\n",
- "Model accuracy on single test set split: 78.95%\n",
+ "Model accuracy on single test set split: 71.05%\n",
"5-fold cross-validation score: 80.83%\n",
"\n",
"Trying model with 170 estimators...\n",
- "Model accuracy on single test set split: 78.95%\n",
+ "Model accuracy on single test set split: 73.68%\n",
"5-fold cross-validation score: 82.16%\n",
"\n",
"Trying model with 180 estimators...\n",
- "Model accuracy on single test set split: 78.95%\n",
+ "Model accuracy on single test set split: 72.37%\n",
"5-fold cross-validation score: 81.50%\n",
"\n",
"Trying model with 190 estimators...\n",
- "Model accuracy on single test set split: 78.95%\n",
+ "Model accuracy on single test set split: 72.37%\n",
"5-fold cross-validation score: 81.83%\n",
"\n"
]
@@ -1294,7 +1294,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"metadata": {},
"outputs": [
{
@@ -1339,7 +1339,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {},
"outputs": [
{
@@ -1371,14 +1371,14 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Best model score on single split of the data: 77.63%\n"
+ "Best model score on single split of the data: 75.00%\n"
]
}
],
@@ -1408,7 +1408,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
@@ -1420,14 +1420,14 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Loaded pickle model prediction score: 78.95%\n"
+ "Loaded pickle model prediction score: 72.37%\n"
]
}
],
@@ -1446,7 +1446,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 25,
"metadata": {},
"outputs": [
{
@@ -1469,14 +1469,14 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Loaded joblib model prediction score: 78.95%\n"
+ "Loaded joblib model prediction score: 72.37%\n"
]
}
],
@@ -1516,7 +1516,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 27,
"metadata": {},
"outputs": [
{
@@ -1674,7 +1674,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 28,
"metadata": {},
"outputs": [
{
@@ -1947,7 +1947,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 29,
"metadata": {},
"outputs": [
{
@@ -1988,7 +1988,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 30,
"metadata": {},
"outputs": [
{
@@ -2015,7 +2015,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 31,
"metadata": {},
"outputs": [
{
@@ -2036,7 +2036,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 32,
"metadata": {},
"outputs": [
{
@@ -2076,7 +2076,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 33,
"metadata": {},
"outputs": [
{
@@ -2238,7 +2238,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 34,
"metadata": {},
"outputs": [
{
@@ -2272,7 +2272,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
@@ -2292,7 +2292,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 36,
"metadata": {},
"outputs": [
{
@@ -2302,12 +2302,12 @@
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
- "\u001b[0;32m/var/folders/c4/qj4gdk190td18bqvjjh0p3p00000gn/T/ipykernel_27997/1044518071.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Try to predict with random forest on price column (doesn't work)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mensemble\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mRandomForestRegressor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mRandomForestRegressor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscore\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(estimator, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1147\u001b[0m skip_parameter_validation=(\n\u001b[1;32m 1148\u001b[0m \u001b[0mprefer_skip_nested_validation\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mglobal_skip_validation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1149\u001b[0m )\n\u001b[1;32m 1150\u001b[0m ):\n\u001b[0;32m-> 1151\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfit_method\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mestimator\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[0;32m/var/folders/c4/qj4gdk190td18bqvjjh0p3p00000gn/T/ipykernel_30502/1044518071.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Try to predict with random forest on price column (doesn't work)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mensemble\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mRandomForestRegressor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mRandomForestRegressor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscore\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(estimator, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1148\u001b[0m skip_parameter_validation=(\n\u001b[1;32m 1149\u001b[0m \u001b[0mprefer_skip_nested_validation\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mglobal_skip_validation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1150\u001b[0m )\n\u001b[1;32m 1151\u001b[0m ):\n\u001b[0;32m-> 1152\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfit_method\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mestimator\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/ensemble/_forest.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, X, y, sample_weight)\u001b[0m\n\u001b[1;32m 344\u001b[0m \"\"\"\n\u001b[1;32m 345\u001b[0m \u001b[0;31m# Validate or convert input data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 346\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0missparse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 347\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"sparse multilabel-indicator for y is not supported.\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 348\u001b[0;31m X, y = self._validate_data(\n\u001b[0m\u001b[1;32m 349\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmulti_output\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maccept_sparse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"csc\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mDTYPE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 350\u001b[0m )\n\u001b[1;32m 351\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msample_weight\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)\u001b[0m\n\u001b[1;32m 617\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m\"estimator\"\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mcheck_y_params\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 618\u001b[0m \u001b[0mcheck_y_params\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mdefault_check_params\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mcheck_y_params\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 619\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcheck_array\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_name\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"y\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mcheck_y_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 620\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 621\u001b[0;31m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcheck_X_y\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mcheck_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 622\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 623\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 624\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mno_val_X\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mcheck_params\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"ensure_2d\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator)\u001b[0m\n\u001b[1;32m 1143\u001b[0m raise ValueError(\n\u001b[1;32m 1144\u001b[0m \u001b[0;34mf\"{estimator_name} requires y to be passed, but the target y is None\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1145\u001b[0m )\n\u001b[1;32m 1146\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1147\u001b[0;31m X = check_array(\n\u001b[0m\u001b[1;32m 1148\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1149\u001b[0m \u001b[0maccept_sparse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maccept_sparse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1150\u001b[0m \u001b[0maccept_large_sparse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maccept_large_sparse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\u001b[0m\n\u001b[1;32m 914\u001b[0m )\n\u001b[1;32m 915\u001b[0m \u001b[0marray\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mxp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mastype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 916\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 917\u001b[0m \u001b[0marray\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_asarray_with_order\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morder\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0morder\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mxp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 918\u001b[0;31m \u001b[0;32mexcept\u001b[0m \u001b[0mComplexWarning\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mcomplex_warning\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 919\u001b[0m raise ValueError(\n\u001b[1;32m 920\u001b[0m \u001b[0;34m\"Complex data not supported\\n{}\\n\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 921\u001b[0m ) from complex_warning\n",
+ "\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)\u001b[0m\n\u001b[1;32m 618\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m\"estimator\"\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mcheck_y_params\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 619\u001b[0m \u001b[0mcheck_y_params\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mdefault_check_params\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mcheck_y_params\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 620\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcheck_array\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_name\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"y\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mcheck_y_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 621\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 622\u001b[0;31m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcheck_X_y\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mcheck_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 623\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 624\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 625\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mno_val_X\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mcheck_params\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"ensure_2d\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator)\u001b[0m\n\u001b[1;32m 1142\u001b[0m raise ValueError(\n\u001b[1;32m 1143\u001b[0m \u001b[0;34mf\"{estimator_name} requires y to be passed, but the target y is None\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1144\u001b[0m )\n\u001b[1;32m 1145\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1146\u001b[0;31m X = check_array(\n\u001b[0m\u001b[1;32m 1147\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1148\u001b[0m \u001b[0maccept_sparse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maccept_sparse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1149\u001b[0m \u001b[0maccept_large_sparse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maccept_large_sparse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\u001b[0m\n\u001b[1;32m 912\u001b[0m )\n\u001b[1;32m 913\u001b[0m \u001b[0marray\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mxp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mastype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 914\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 915\u001b[0m \u001b[0marray\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_asarray_with_order\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morder\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0morder\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mxp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 916\u001b[0;31m \u001b[0;32mexcept\u001b[0m \u001b[0mComplexWarning\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mcomplex_warning\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 917\u001b[0m raise ValueError(\n\u001b[1;32m 918\u001b[0m \u001b[0;34m\"Complex data not supported\\n{}\\n\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 919\u001b[0m ) from complex_warning\n",
"\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/_array_api.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(array, dtype, order, copy, xp)\u001b[0m\n\u001b[1;32m 376\u001b[0m \u001b[0;31m# Use NumPy API to support order\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 377\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcopy\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 378\u001b[0m \u001b[0marray\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morder\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0morder\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 379\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 380\u001b[0;31m \u001b[0marray\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morder\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0morder\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 381\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 382\u001b[0m \u001b[0;31m# At this point array is a NumPy ndarray. We convert it to an array\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 383\u001b[0m \u001b[0;31m# container that is consistent with the input's namespace.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, dtype)\u001b[0m\n\u001b[1;32m 2082\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__array__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnpt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDTypeLike\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2083\u001b[0m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_values\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2084\u001b[0;31m \u001b[0marr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2085\u001b[0m if (\n\u001b[1;32m 2086\u001b[0m \u001b[0mastype_is_view\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2087\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0musing_copy_on_write\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mValueError\u001b[0m: could not convert string to float: 'Honda'"
@@ -2370,7 +2370,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 37,
"metadata": {},
"outputs": [
{
@@ -2429,7 +2429,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 38,
"metadata": {},
"outputs": [
{
@@ -2528,7 +2528,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 39,
"metadata": {},
"outputs": [
{
@@ -2558,7 +2558,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 40,
"metadata": {},
"outputs": [
{
@@ -2598,7 +2598,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 41,
"metadata": {},
"outputs": [
{
@@ -2702,7 +2702,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 42,
"metadata": {},
"outputs": [
{
@@ -2948,7 +2948,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 43,
"metadata": {},
"outputs": [
{
@@ -3238,7 +3238,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 44,
"metadata": {},
"outputs": [
{
@@ -3294,7 +3294,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 45,
"metadata": {},
"outputs": [
{
@@ -3460,7 +3460,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 46,
"metadata": {},
"outputs": [
{
@@ -3495,7 +3495,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 47,
"metadata": {},
"outputs": [
{
@@ -3519,7 +3519,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 48,
"metadata": {},
"outputs": [
{
@@ -3545,7 +3545,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 49,
"metadata": {},
"outputs": [
{
@@ -3600,7 +3600,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 50,
"metadata": {},
"outputs": [
{
@@ -3610,14 +3610,14 @@
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[50], line 8\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# Fit and score a model\u001b[39;00m\n\u001b[1;32m 7\u001b[0m model \u001b[38;5;241m=\u001b[39m RandomForestRegressor()\n\u001b[0;32m----> 8\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_train\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m model\u001b[38;5;241m.\u001b[39mscore(X_test, y_test)\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py:1151\u001b[0m, in \u001b[0;36m_fit_context..decorator..wrapper\u001b[0;34m(estimator, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1144\u001b[0m estimator\u001b[38;5;241m.\u001b[39m_validate_params()\n\u001b[1;32m 1146\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m config_context(\n\u001b[1;32m 1147\u001b[0m skip_parameter_validation\u001b[38;5;241m=\u001b[39m(\n\u001b[1;32m 1148\u001b[0m prefer_skip_nested_validation \u001b[38;5;129;01mor\u001b[39;00m global_skip_validation\n\u001b[1;32m 1149\u001b[0m )\n\u001b[1;32m 1150\u001b[0m ):\n\u001b[0;32m-> 1151\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfit_method\u001b[49m\u001b[43m(\u001b[49m\u001b[43mestimator\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/ensemble/_forest.py:348\u001b[0m, in \u001b[0;36mBaseForest.fit\u001b[0;34m(self, X, y, sample_weight)\u001b[0m\n\u001b[1;32m 346\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m issparse(y):\n\u001b[1;32m 347\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msparse multilabel-indicator for y is not supported.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 348\u001b[0m X, y \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_data\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 349\u001b[0m \u001b[43m \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmulti_output\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maccept_sparse\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcsc\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mDTYPE\u001b[49m\n\u001b[1;32m 350\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 351\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m sample_weight \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 352\u001b[0m sample_weight \u001b[38;5;241m=\u001b[39m _check_sample_weight(sample_weight, X)\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py:621\u001b[0m, in \u001b[0;36mBaseEstimator._validate_data\u001b[0;34m(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)\u001b[0m\n\u001b[1;32m 619\u001b[0m y \u001b[38;5;241m=\u001b[39m check_array(y, input_name\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124my\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mcheck_y_params)\n\u001b[1;32m 620\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 621\u001b[0m X, y \u001b[38;5;241m=\u001b[39m \u001b[43mcheck_X_y\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mcheck_params\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 622\u001b[0m out \u001b[38;5;241m=\u001b[39m X, y\n\u001b[1;32m 624\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m no_val_X \u001b[38;5;129;01mand\u001b[39;00m check_params\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mensure_2d\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m):\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py:1147\u001b[0m, in \u001b[0;36mcheck_X_y\u001b[0;34m(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator)\u001b[0m\n\u001b[1;32m 1142\u001b[0m estimator_name \u001b[38;5;241m=\u001b[39m _check_estimator_name(estimator)\n\u001b[1;32m 1143\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 1144\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mestimator_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m requires y to be passed, but the target y is None\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1145\u001b[0m )\n\u001b[0;32m-> 1147\u001b[0m X \u001b[38;5;241m=\u001b[39m \u001b[43mcheck_array\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1148\u001b[0m \u001b[43m \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1149\u001b[0m \u001b[43m \u001b[49m\u001b[43maccept_sparse\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maccept_sparse\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1150\u001b[0m \u001b[43m \u001b[49m\u001b[43maccept_large_sparse\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maccept_large_sparse\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1151\u001b[0m \u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1152\u001b[0m \u001b[43m \u001b[49m\u001b[43morder\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43morder\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1153\u001b[0m \u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1154\u001b[0m \u001b[43m \u001b[49m\u001b[43mforce_all_finite\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mforce_all_finite\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1155\u001b[0m \u001b[43m \u001b[49m\u001b[43mensure_2d\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mensure_2d\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1156\u001b[0m \u001b[43m \u001b[49m\u001b[43mallow_nd\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mallow_nd\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1157\u001b[0m \u001b[43m \u001b[49m\u001b[43mensure_min_samples\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mensure_min_samples\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1158\u001b[0m \u001b[43m \u001b[49m\u001b[43mensure_min_features\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mensure_min_features\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1159\u001b[0m \u001b[43m \u001b[49m\u001b[43mestimator\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mestimator\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1160\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mX\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1161\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1163\u001b[0m y \u001b[38;5;241m=\u001b[39m _check_y(y, multi_output\u001b[38;5;241m=\u001b[39mmulti_output, y_numeric\u001b[38;5;241m=\u001b[39my_numeric, estimator\u001b[38;5;241m=\u001b[39mestimator)\n\u001b[1;32m 1165\u001b[0m check_consistent_length(X, y)\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py:959\u001b[0m, in \u001b[0;36mcheck_array\u001b[0;34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\u001b[0m\n\u001b[1;32m 953\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 954\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFound array with dim \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m. \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m expected <= 2.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 955\u001b[0m \u001b[38;5;241m%\u001b[39m (array\u001b[38;5;241m.\u001b[39mndim, estimator_name)\n\u001b[1;32m 956\u001b[0m )\n\u001b[1;32m 958\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m force_all_finite:\n\u001b[0;32m--> 959\u001b[0m \u001b[43m_assert_all_finite\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 960\u001b[0m \u001b[43m \u001b[49m\u001b[43marray\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 961\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 962\u001b[0m \u001b[43m \u001b[49m\u001b[43mestimator_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mestimator_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 963\u001b[0m \u001b[43m \u001b[49m\u001b[43mallow_nan\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mforce_all_finite\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mallow-nan\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 964\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 966\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ensure_min_samples \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 967\u001b[0m n_samples \u001b[38;5;241m=\u001b[39m _num_samples(array)\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py:124\u001b[0m, in \u001b[0;36m_assert_all_finite\u001b[0;34m(X, allow_nan, msg_dtype, estimator_name, input_name)\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m first_pass_isfinite:\n\u001b[1;32m 122\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[0;32m--> 124\u001b[0m \u001b[43m_assert_all_finite_element_wise\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 125\u001b[0m \u001b[43m \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 126\u001b[0m \u001b[43m \u001b[49m\u001b[43mxp\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mxp\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 127\u001b[0m \u001b[43m \u001b[49m\u001b[43mallow_nan\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mallow_nan\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 128\u001b[0m \u001b[43m \u001b[49m\u001b[43mmsg_dtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmsg_dtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 129\u001b[0m \u001b[43m \u001b[49m\u001b[43mestimator_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mestimator_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 130\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 131\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
- "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py:173\u001b[0m, in \u001b[0;36m_assert_all_finite_element_wise\u001b[0;34m(X, xp, allow_nan, msg_dtype, estimator_name, input_name)\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m estimator_name \u001b[38;5;129;01mand\u001b[39;00m input_name \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mX\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m has_nan_error:\n\u001b[1;32m 157\u001b[0m \u001b[38;5;66;03m# Improve the error message on how to handle missing values in\u001b[39;00m\n\u001b[1;32m 158\u001b[0m \u001b[38;5;66;03m# scikit-learn.\u001b[39;00m\n\u001b[1;32m 159\u001b[0m msg_err \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 160\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mestimator_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m does not accept missing values\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m encoded as NaN natively. For supervised learning, you might want\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m#estimators-that-handle-nan-values\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 172\u001b[0m )\n\u001b[0;32m--> 173\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(msg_err)\n",
+ "\u001b[1;32m/Users/daniel/code/zero-to-mastery-ml/section-2-data-science-and-ml-tools/introduction-to-scikit-learn.ipynb Cell 96\u001b[0m line \u001b[0;36m8\n\u001b[1;32m 6\u001b[0m \u001b[39m# Fit and score a model\u001b[39;00m\n\u001b[1;32m 7\u001b[0m model \u001b[39m=\u001b[39m RandomForestRegressor()\n\u001b[0;32m----> 8\u001b[0m model\u001b[39m.\u001b[39;49mfit(X_train, y_train)\n\u001b[1;32m 9\u001b[0m model\u001b[39m.\u001b[39mscore(X_test, y_test)\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py:1152\u001b[0m, in \u001b[0;36m_fit_context..decorator..wrapper\u001b[0;34m(estimator, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1145\u001b[0m estimator\u001b[39m.\u001b[39m_validate_params()\n\u001b[1;32m 1147\u001b[0m \u001b[39mwith\u001b[39;00m config_context(\n\u001b[1;32m 1148\u001b[0m skip_parameter_validation\u001b[39m=\u001b[39m(\n\u001b[1;32m 1149\u001b[0m prefer_skip_nested_validation \u001b[39mor\u001b[39;00m global_skip_validation\n\u001b[1;32m 1150\u001b[0m )\n\u001b[1;32m 1151\u001b[0m ):\n\u001b[0;32m-> 1152\u001b[0m \u001b[39mreturn\u001b[39;00m fit_method(estimator, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/ensemble/_forest.py:348\u001b[0m, in \u001b[0;36mBaseForest.fit\u001b[0;34m(self, X, y, sample_weight)\u001b[0m\n\u001b[1;32m 346\u001b[0m \u001b[39mif\u001b[39;00m issparse(y):\n\u001b[1;32m 347\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39msparse multilabel-indicator for y is not supported.\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 348\u001b[0m X, y \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_validate_data(\n\u001b[1;32m 349\u001b[0m X, y, multi_output\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m, accept_sparse\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mcsc\u001b[39;49m\u001b[39m\"\u001b[39;49m, dtype\u001b[39m=\u001b[39;49mDTYPE\n\u001b[1;32m 350\u001b[0m )\n\u001b[1;32m 351\u001b[0m \u001b[39mif\u001b[39;00m sample_weight \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 352\u001b[0m sample_weight \u001b[39m=\u001b[39m _check_sample_weight(sample_weight, X)\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/base.py:622\u001b[0m, in \u001b[0;36mBaseEstimator._validate_data\u001b[0;34m(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)\u001b[0m\n\u001b[1;32m 620\u001b[0m y \u001b[39m=\u001b[39m check_array(y, input_name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39my\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mcheck_y_params)\n\u001b[1;32m 621\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 622\u001b[0m X, y \u001b[39m=\u001b[39m check_X_y(X, y, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mcheck_params)\n\u001b[1;32m 623\u001b[0m out \u001b[39m=\u001b[39m X, y\n\u001b[1;32m 625\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m no_val_X \u001b[39mand\u001b[39;00m check_params\u001b[39m.\u001b[39mget(\u001b[39m\"\u001b[39m\u001b[39mensure_2d\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mTrue\u001b[39;00m):\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py:1146\u001b[0m, in \u001b[0;36mcheck_X_y\u001b[0;34m(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator)\u001b[0m\n\u001b[1;32m 1141\u001b[0m estimator_name \u001b[39m=\u001b[39m _check_estimator_name(estimator)\n\u001b[1;32m 1142\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\n\u001b[1;32m 1143\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m{\u001b[39;00mestimator_name\u001b[39m}\u001b[39;00m\u001b[39m requires y to be passed, but the target y is None\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 1144\u001b[0m )\n\u001b[0;32m-> 1146\u001b[0m X \u001b[39m=\u001b[39m check_array(\n\u001b[1;32m 1147\u001b[0m X,\n\u001b[1;32m 1148\u001b[0m accept_sparse\u001b[39m=\u001b[39;49maccept_sparse,\n\u001b[1;32m 1149\u001b[0m accept_large_sparse\u001b[39m=\u001b[39;49maccept_large_sparse,\n\u001b[1;32m 1150\u001b[0m dtype\u001b[39m=\u001b[39;49mdtype,\n\u001b[1;32m 1151\u001b[0m order\u001b[39m=\u001b[39;49morder,\n\u001b[1;32m 1152\u001b[0m copy\u001b[39m=\u001b[39;49mcopy,\n\u001b[1;32m 1153\u001b[0m force_all_finite\u001b[39m=\u001b[39;49mforce_all_finite,\n\u001b[1;32m 1154\u001b[0m ensure_2d\u001b[39m=\u001b[39;49mensure_2d,\n\u001b[1;32m 1155\u001b[0m allow_nd\u001b[39m=\u001b[39;49mallow_nd,\n\u001b[1;32m 1156\u001b[0m ensure_min_samples\u001b[39m=\u001b[39;49mensure_min_samples,\n\u001b[1;32m 1157\u001b[0m ensure_min_features\u001b[39m=\u001b[39;49mensure_min_features,\n\u001b[1;32m 1158\u001b[0m estimator\u001b[39m=\u001b[39;49mestimator,\n\u001b[1;32m 1159\u001b[0m input_name\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mX\u001b[39;49m\u001b[39m\"\u001b[39;49m,\n\u001b[1;32m 1160\u001b[0m )\n\u001b[1;32m 1162\u001b[0m y \u001b[39m=\u001b[39m _check_y(y, multi_output\u001b[39m=\u001b[39mmulti_output, y_numeric\u001b[39m=\u001b[39my_numeric, estimator\u001b[39m=\u001b[39mestimator)\n\u001b[1;32m 1164\u001b[0m check_consistent_length(X, y)\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py:957\u001b[0m, in \u001b[0;36mcheck_array\u001b[0;34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\u001b[0m\n\u001b[1;32m 951\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\n\u001b[1;32m 952\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mFound array with dim \u001b[39m\u001b[39m%d\u001b[39;00m\u001b[39m. \u001b[39m\u001b[39m%s\u001b[39;00m\u001b[39m expected <= 2.\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 953\u001b[0m \u001b[39m%\u001b[39m (array\u001b[39m.\u001b[39mndim, estimator_name)\n\u001b[1;32m 954\u001b[0m )\n\u001b[1;32m 956\u001b[0m \u001b[39mif\u001b[39;00m force_all_finite:\n\u001b[0;32m--> 957\u001b[0m _assert_all_finite(\n\u001b[1;32m 958\u001b[0m array,\n\u001b[1;32m 959\u001b[0m input_name\u001b[39m=\u001b[39;49minput_name,\n\u001b[1;32m 960\u001b[0m estimator_name\u001b[39m=\u001b[39;49mestimator_name,\n\u001b[1;32m 961\u001b[0m allow_nan\u001b[39m=\u001b[39;49mforce_all_finite \u001b[39m==\u001b[39;49m \u001b[39m\"\u001b[39;49m\u001b[39mallow-nan\u001b[39;49m\u001b[39m\"\u001b[39;49m,\n\u001b[1;32m 962\u001b[0m )\n\u001b[1;32m 964\u001b[0m \u001b[39mif\u001b[39;00m ensure_min_samples \u001b[39m>\u001b[39m \u001b[39m0\u001b[39m:\n\u001b[1;32m 965\u001b[0m n_samples \u001b[39m=\u001b[39m _num_samples(array)\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py:122\u001b[0m, in \u001b[0;36m_assert_all_finite\u001b[0;34m(X, allow_nan, msg_dtype, estimator_name, input_name)\u001b[0m\n\u001b[1;32m 119\u001b[0m \u001b[39mif\u001b[39;00m first_pass_isfinite:\n\u001b[1;32m 120\u001b[0m \u001b[39mreturn\u001b[39;00m\n\u001b[0;32m--> 122\u001b[0m _assert_all_finite_element_wise(\n\u001b[1;32m 123\u001b[0m X,\n\u001b[1;32m 124\u001b[0m xp\u001b[39m=\u001b[39;49mxp,\n\u001b[1;32m 125\u001b[0m allow_nan\u001b[39m=\u001b[39;49mallow_nan,\n\u001b[1;32m 126\u001b[0m msg_dtype\u001b[39m=\u001b[39;49mmsg_dtype,\n\u001b[1;32m 127\u001b[0m estimator_name\u001b[39m=\u001b[39;49mestimator_name,\n\u001b[1;32m 128\u001b[0m input_name\u001b[39m=\u001b[39;49minput_name,\n\u001b[1;32m 129\u001b[0m )\n",
+ "File \u001b[0;32m~/code/zero-to-mastery-ml/env/lib/python3.10/site-packages/sklearn/utils/validation.py:171\u001b[0m, in \u001b[0;36m_assert_all_finite_element_wise\u001b[0;34m(X, xp, allow_nan, msg_dtype, estimator_name, input_name)\u001b[0m\n\u001b[1;32m 154\u001b[0m \u001b[39mif\u001b[39;00m estimator_name \u001b[39mand\u001b[39;00m input_name \u001b[39m==\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mX\u001b[39m\u001b[39m\"\u001b[39m \u001b[39mand\u001b[39;00m has_nan_error:\n\u001b[1;32m 155\u001b[0m \u001b[39m# Improve the error message on how to handle missing values in\u001b[39;00m\n\u001b[1;32m 156\u001b[0m \u001b[39m# scikit-learn.\u001b[39;00m\n\u001b[1;32m 157\u001b[0m msg_err \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m (\n\u001b[1;32m 158\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39m{\u001b[39;00mestimator_name\u001b[39m}\u001b[39;00m\u001b[39m does not accept missing values\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 159\u001b[0m \u001b[39m\"\u001b[39m\u001b[39m encoded as NaN natively. For supervised learning, you might want\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[39m\"\u001b[39m\u001b[39m#estimators-that-handle-nan-values\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 170\u001b[0m )\n\u001b[0;32m--> 171\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(msg_err)\n",
"\u001b[0;31mValueError\u001b[0m: Input X contains NaN.\nRandomForestRegressor does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values"
]
}
@@ -3642,32 +3642,35 @@
"\n",
"When we try to fit it on a dataset with missing samples, Scikit-Learn produces the error:\n",
"\n",
- "```\n",
- "ValueError: Input X contains NaN.\n",
- "RandomForestRegressor does not accept missing values encoded as NaN natively...\n",
- "```\n",
+ "`ValueError: Input X contains NaN. RandomForestRegressor does not accept missing values encoded as NaN natively...`\n",
"\n",
"Looks like if we want to use `RandomForestRegressor`, we'll have to either fill or remove the missing values.\n",
"\n",
- "> **Note:** Scikit-Learn does have a [list of models which can handle NaNs or missing values directly](https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values). Such as, [`sklearn.ensemble.HistGradientBoostingClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.HistGradientBoostingClassifier.html) or [`sklearn.ensemble.HistGradientBoostingRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.HistGradientBoostingRegressor.html).\n",
- ">\n",
- "> As an experiment, you may want to try the following:\n",
- ">\n",
- "> ```python\n",
- "> from sklearn.ensemble import HistGradientBoostingRegressor\n",
- ">\n",
- "># Try a model that can handle NaNs natively\n",
- ">nan_model = HistGradientBoostingRegressor()\n",
- ">nan_model.fit(X_train, y_train)\n",
- ">nan_model.score(X_test, y_test)\n",
- ">```\n",
- "\n",
+ "\n",
+ " Note: Scikit-Learn does have a \n",
+ " list of models which can handle NaNs or missing values directly.\n",
+ "
\n",
+ " Such as, \n",
+ " sklearn.ensemble.HistGradientBoostingClassifier
\n",
+ " or \n",
+ " sklearn.ensemble.HistGradientBoostingRegressor
.\n",
+ "
\n",
+ " As an experiment, you may want to try the following:
\n",
+ " \n",
+ "from sklearn.ensemble import HistGradientBoostingRegressor\n",
+ "\n",
+ "\\# Try a model that can handle NaNs natively\n",
+ "nan_model = HistGradientBoostingRegressor()\n",
+ "nan_model.fit(X_train, y_train)\n",
+ "nan_model.score(X_test, y_test)\n",
+ "
\n",
+ " \n",
"Let's see what values are missing again."
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 51,
"metadata": {},
"outputs": [
{
@@ -3734,7 +3737,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
@@ -3751,7 +3754,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 53,
"metadata": {},
"outputs": [],
"source": [
@@ -3768,7 +3771,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 54,
"metadata": {},
"outputs": [
{
@@ -3802,7 +3805,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 55,
"metadata": {},
"outputs": [
{
@@ -3827,7 +3830,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
@@ -3844,7 +3847,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
@@ -3861,7 +3864,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 58,
"metadata": {},
"outputs": [
{
@@ -3898,7 +3901,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
@@ -3915,7 +3918,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 60,
"metadata": {},
"outputs": [
{
@@ -3948,7 +3951,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 61,
"metadata": {},
"outputs": [
{
@@ -3986,7 +3989,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 62,
"metadata": {},
"outputs": [
{
@@ -4015,7 +4018,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 63,
"metadata": {},
"outputs": [
{
@@ -4061,7 +4064,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 64,
"metadata": {},
"outputs": [
{
@@ -4118,7 +4121,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 65,
"metadata": {},
"outputs": [
{
@@ -4150,7 +4153,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 66,
"metadata": {},
"outputs": [
{
@@ -4184,7 +4187,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
@@ -4201,7 +4204,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 68,
"metadata": {},
"outputs": [
{
@@ -4235,7 +4238,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 69,
"metadata": {},
"outputs": [],
"source": [
@@ -4269,7 +4272,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 70,
"metadata": {},
"outputs": [],
"source": [
@@ -4300,7 +4303,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 71,
"metadata": {},
"outputs": [],
"source": [
@@ -4344,7 +4347,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 72,
"metadata": {},
"outputs": [],
"source": [
@@ -4383,7 +4386,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 73,
"metadata": {},
"outputs": [
{
@@ -4425,7 +4428,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 74,
"metadata": {},
"outputs": [
{
@@ -4464,7 +4467,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 75,
"metadata": {},
"outputs": [
{
@@ -4496,7 +4499,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 76,
"metadata": {},
"outputs": [
{
@@ -4535,7 +4538,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 77,
"metadata": {},
"outputs": [
{
@@ -4634,7 +4637,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 78,
"metadata": {},
"outputs": [
{
@@ -4692,7 +4695,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 79,
"metadata": {},
"outputs": [
{
@@ -4786,7 +4789,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 80,
"metadata": {},
"outputs": [],
"source": [
@@ -4805,7 +4808,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 81,
"metadata": {},
"outputs": [
{
@@ -4934,7 +4937,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 82,
"metadata": {},
"outputs": [
{
@@ -4980,7 +4983,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 83,
"metadata": {},
"outputs": [
{
@@ -5042,7 +5045,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 84,
"metadata": {},
"outputs": [
{
@@ -5109,7 +5112,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 85,
"metadata": {},
"outputs": [
{
@@ -5267,7 +5270,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 86,
"metadata": {},
"outputs": [
{
@@ -5307,7 +5310,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 87,
"metadata": {},
"outputs": [
{
@@ -5369,7 +5372,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 88,
"metadata": {},
"outputs": [
{
@@ -5497,7 +5500,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 89,
"metadata": {},
"outputs": [
{
@@ -5548,7 +5551,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 90,
"metadata": {},
"outputs": [
{
@@ -5706,7 +5709,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 91,
"metadata": {},
"outputs": [
{
@@ -5770,7 +5773,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 92,
"metadata": {},
"outputs": [
{
@@ -5804,7 +5807,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 93,
"metadata": {},
"outputs": [
{
@@ -5835,7 +5838,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 94,
"metadata": {},
"outputs": [
{
@@ -5863,7 +5866,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 95,
"metadata": {},
"outputs": [
{
@@ -5895,7 +5898,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 96,
"metadata": {},
"outputs": [
{
@@ -5925,7 +5928,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 97,
"metadata": {},
"outputs": [
{
@@ -5955,7 +5958,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 98,
"metadata": {},
"outputs": [
{
@@ -5989,7 +5992,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 99,
"metadata": {},
"outputs": [],
"source": [
@@ -6023,7 +6026,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 100,
"metadata": {},
"outputs": [
{
@@ -6086,7 +6089,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 101,
"metadata": {},
"outputs": [],
"source": [
@@ -6119,7 +6122,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 102,
"metadata": {},
"outputs": [
{
@@ -6164,7 +6167,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 103,
"metadata": {},
"outputs": [],
"source": [
@@ -6195,7 +6198,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 104,
"metadata": {},
"outputs": [
{
@@ -6248,7 +6251,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 105,
"metadata": {},
"outputs": [],
"source": [
@@ -6286,7 +6289,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 106,
"metadata": {},
"outputs": [
{
@@ -6307,7 +6310,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 107,
"metadata": {},
"outputs": [
{
@@ -6374,7 +6377,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 108,
"metadata": {},
"outputs": [
{
@@ -6404,7 +6407,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 109,
"metadata": {},
"outputs": [
{
@@ -6447,7 +6450,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 110,
"metadata": {},
"outputs": [
{
@@ -6500,7 +6503,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 111,
"metadata": {},
"outputs": [
{
@@ -6545,7 +6548,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 112,
"metadata": {},
"outputs": [
{
@@ -6585,7 +6588,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 113,
"metadata": {},
"outputs": [
{
@@ -6632,12 +6635,12 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 114,
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHFCAYAAAAOmtghAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB0d0lEQVR4nO3dd1QU198G8GfpTUBQKYKABcGOEAv2rigmloAl9l5iFI2J0Vii0WhssXcJdmOLLSr2XlBIjCU2rIAKShGk7O59/+Blf66AsggMLM/nnD26d6c8Myy7X+7cmZEJIQSIiIiItISO1AGIiIiI8hKLGyIiItIqLG6IiIhIq7C4ISIiIq3C4oaIiIi0CosbIiIi0iosboiIiEirsLghIiIircLihoiIiLQKixstEhgYCJlMpnro6enBzs4O3bp1w927d6WOBwBwdnZG3759pY6RSWJiIn755Rd4eHjAzMwMpqamqFWrFmbOnInExESp4+XYzJkzsWfPnkztJ0+ehEwmw8mTJws8U4YHDx5g5MiRcHV1hbGxMUxMTFC1alVMmjQJz549U03XtGlTVKtWTbKcn2Lz5s1YuHBhvi0/N78/58+fx9SpUxEbG5vptaZNm6Jp06Z5ki1DixYtMHToUNXzjPdexkNXVxelS5eGr68vQkJCslyGEAKbN29G8+bNUbJkSRgaGqJ8+fIYMWIEnjx5ku269+3bB19fX9jY2MDAwABWVlZo0aIFNm3ahLS0NADA69evYWlpmeXvyYfk9P1LhYQgrbF+/XoBQKxfv15cuHBBnDhxQsyYMUMYGxuLMmXKiFevXkkdUVy7dk3cu3dP6hhqoqKiRLVq1YSxsbH47rvvxJEjR8SRI0fE999/L4yNjUW1atVEVFSU1DFzxNTUVPTp0ydTe1xcnLhw4YKIi4sr+FBCiH379glTU1Ph5OQkfv31V3H06FFx7NgxsXDhQlGjRg1Rq1Yt1bRNmjQRVatWlSTnp2rfvr1wcnLKt+Xn5vfn119/FQBEeHh4ptdu3Lghbty4kUfphNizZ48wNDQUT58+VbWdOHFCABAzZ84UFy5cEKdPnxa//fabsLKyEiYmJuLOnTtqy1AoFMLf318AEN27dxd79uwRJ06cEL/99ptwcHAQlpaW4uzZs2rzKJVK0bdvXwFA+Pj4iI0bN4pTp06JvXv3ijFjxghzc3OxcOFC1fRTp04VFStWFCkpKTnaLk3ev1Q4sLjRIhnFzZUrV9Tap02bJgCIdevWSZRMWnK5XCQnJ2f7euvWrYWenp44c+ZMptfOnDkj9PT0RJs2bfIzYpY+ljsr2RU3Unrw4IEwNTUVHh4eIjY2NtPrSqVS7Ny5U/W8IIobpVIpkpKS8ny5+VXcfErWDxU3ea1OnTqiW7duam0Zxc0ff/yh1v77778LAGLy5Mlq7TNnzhQAxC+//JJp+VFRUcLJyUnY2NiI169fq9pnz54tAIhp06ZlmSsyMlLt9zsqKkro6emJTZs2fXSbNH3/forU1FSRlpaWJ8sq7ljcaJHsipsDBw4IAGLWrFlq7VeuXBG+vr6iZMmSwtDQUNSqVUts27Yt03KfPn0qBg0aJBwcHIS+vr6ws7MTXbp0UevNiIuLE2PHjhXOzs5CX19f2Nvbi2+++Ua8efNGbVlOTk6qL98XL14IfX19MWnSpEzrvHXrlgAgfvvtN1VbZGSkGDx4sChbtqzQ19cXzs7OYurUqWofBuHh4QKAmD17tpg+fbpwdnYWurq64q+//spyn125ckUAEEOGDMlmrwoxePBgAUCEhISo2gCIESNGiBUrVohKlSoJAwMD4e7uLrZs2ZJp/k/N/fbtWxEQECBq1qwpzM3NRcmSJUW9evXEnj171NYDINOjSZMmQoj/fcGcOHFCNX2fPn2EqampuHv3rmjXrp0wNTUVDg4OIiAgIFNR9eTJE9GlSxdhZmYmLCwsRI8ePcTly5dVPYUfMnLkSAFAXLhw4YPTZcgobi5fviwaNmwojI2NhYuLi5g1a5ZQKBSq6XK6XzL2zYgRI8Ty5cuFm5ub0NfXF8uXLxdCpP8VX6dOHVGyZElRokQJ4eHhIdasWSOUSmWm5WzatEnUq1dPmJqaClNTU1GzZk2xZs0aVe6sfgYZUlJSxPTp00XlypWFgYGBKFWqlOjbt6948eKF2jqcnJxE+/btxc6dO0WtWrWEoaGh+O6771SvvVu8KhQKMX36dOHq6iqMjIyEhYWFqF69uqqXYsqUKVlmyngfNGnSRPUeyZCcnCymTZsm3NzchKGhobCyshJNmzYV586d++DP7dq1awKAOHDggFp7dsXNjRs3Mv3upaSkiJIlSwp3d/cs978QQmzevFkAEHPnzhVCpBcEVlZWws3NLdt5stKuXTvRqFGjj06n6fv3/Z9Rhvf3dcZ+CQoKEgEBAcLe3l7IZDIRFhYmAKjeV+86ePCgACD+/PNPVdudO3dE9+7dRenSpYWBgYFwc3MTS5YsyVFWbaaXD0e6qJAJDw8HALi6uqraTpw4gbZt26Ju3bpYsWIFLCwssHXrVvj7+yMpKUl1XP/Zs2f47LPPkJaWhh9++AE1atRATEwMDh8+jNevX8PGxgZJSUlo0qQJnj59qprmxo0bmDx5Mq5fv46jR49CJpNlylW6dGl06NABv//+O6ZNmwYdnf8NAVu/fj0MDAzQs2dPAEBUVBTq1KkDHR0dTJ48GRUqVMCFCxcwY8YMPHz4EOvXr1db9qJFi+Dq6oq5c+fC3NwclSpVynLfBAcHAwC++OKLbPffF198gVWrViE4OBienp6q9r179+LEiRP46aefYGpqimXLlqF79+7Q09ND165d8yx3SkoKXr16hXHjxqFs2bJITU3F0aNH0blzZ6xfvx69e/cGAFy4cAHNmzdHs2bN8OOPPwIAzM3Ns90uAEhLS0PHjh0xYMAAjB07FqdPn8b06dNhYWGByZMnA0gfj9SsWTO8evUKs2fPRsWKFXHo0CH4+/t/cNkZjhw5AhsbG9SrVy9H02fst549e2Ls2LGYMmUKdu/ejQkTJsDe3l61vTndLxn27NmDM2fOYPLkybC1tUWZMmUAAA8fPsSQIUNQrlw5AMDFixfx9ddf49mzZ6p9AACTJ0/G9OnT0blzZ4wdOxYWFhb4999/8ejRIwDAsmXLMHjwYNy/fx+7d+9WW7dSqcTnn3+OM2fOYPz48fD29sajR48wZcoUNG3aFCEhITA2NlZNf+3aNdy6dQuTJk2Ci4sLTE1Ns9xPc+bMwdSpUzFp0iQ0btwYaWlpuH37tmp8zcCBA/Hq1SssXrwYu3btgp2dHQCgSpUqWS5PLpejXbt2OHPmDEaPHo3mzZtDLpfj4sWLePz4Mby9vbP9me3fvx+6urpo3LhxttO8K6vPpatXr+L169cYPHhwlp8ZAODr6wsdHR0EBwdj7NixCAkJwatXrzBo0KBs58lK06ZNMWHCBMTGxsLS0jLb6XLz/tXEhAkTUL9+faxYsQI6OjpwdHSEh4cH1q9fjwEDBqhNGxgYiDJlysDHxwcAcPPmTXh7e6NcuXKYN28ebG1tcfjwYYwaNQrR0dGYMmVKvmQuEqSurijvZPTcXLx4UaSlpYmEhARx6NAhYWtrKxo3bqzWU+Dm5iY8PDwydYF26NBB2NnZqf5C7t+/v9DX1xc3b97Mdr2zZs0SOjo6mXqMduzYIQCIgwcPqtre/6tm7969AoA4cuSIqk0ulwt7e3vRpUsXVduQIUOEmZmZePTokdo65s6dKwCoxg1k9IBUqFBBpKamfmyXiaFDhwoA4vbt29lOk9GLNGzYMFUbAGFsbKzWeyWXy4Wbm5uoWLFivuaWy+UiLS1NDBgwQHh4eKi9lt1hqex6bgCI7du3q03r4+MjKleurHq+dOlSASBT79eQIUNy1HNjZGQk6tWr98Fp3pXRA3Lp0iW19ipVqnzw8OCH9gsAYWFh8dFxZwqFQqSlpYmffvpJWFtbq3oCHjx4IHR1dUXPnj0/OH92h6W2bNkiAGQ6fJHRc7hs2TJVm5OTk9DV1RX//fdfpuW8//vToUOHj473+NBhqfd7E4KCggQAsXr16g8uMyvt2rUTbm5umdoz3nvbtm0TaWlpIikpSZw7d05UrlxZVKlSRe3w0tatWwUAsWLFig+uy8bGRri7u2s0z/uCg4OzfF+/T9P3r6Y9N40bN8407aJFiwQAtffAq1evhKGhoRg7dqyqrU2bNsLBwSHTWLqRI0cKIyOjQjHOUio8W0oL1atXD/r6+ihRogTatm2LkiVL4s8//4SeXnpH3b1793D79m1Vr4hcLlc9fHx8EBkZif/++w8A8Ndff6FZs2Zwd3fPdn379+9HtWrVUKtWLbVltWnT5qNn6LRr1w62trZqPRiHDx9GREQE+vfvr7aOZs2awd7eXm0d7dq1AwCcOnVKbbkdO3aEvr6+ZjsuG0IIAMj0V2GLFi1gY2Ojeq6rqwt/f3/cu3cPT58+zdPcf/zxBxo0aAAzMzPo6elBX18fa9euxa1btz5p22QyGXx9fdXaatSooeqNyMiY8V56V/fu3T9p3R9ia2uLOnXqfDAXoNl+yTjz5n3Hjx9Hy5YtYWFhAV1dXejr62Py5MmIiYnBixcvAKT38CkUCowYMSJX27N//35YWlrC19dX7X1Qq1Yt2NraZvodqVGjhlqPRnbq1KmDv//+G8OHD8fhw4cRHx+fq3wZ/vrrLxgZGan97uVURESEqjcsK/7+/tDX14eJiQkaNGiA+Ph4HDhw4IO9JtkRQmjUS5OVjKxSn+nUpUuXTG09e/aEoaEhAgMDVW1btmxBSkoK+vXrBwBITk7GsWPH0KlTJ5iYmGT6HE9OTsbFixcLajMKHRY3WigoKAhXrlzB8ePHMWTIENy6dUvti+j58+cAgHHjxkFfX1/tMXz4cABAdHQ0AODly5dwcHD44PqeP3+Of/75J9OySpQoASGEallZ0dPTQ69evbB7925VV3pgYCDs7OzQpk0btXXs27cv0zqqVq2qljdDRvf7x2QcisjoIs/Kw4cPAQCOjo5q7ba2tpmmzWiLiYnJs9y7du2Cn58fypYti40bN+LChQu4cuUK+vfvj+Tk5BxtZ3ZMTExgZGSk1mZoaKi23JiYGLUiLkNWbVkpV67cB/dvVqytrTO1GRoa4u3bt6rnmu6XrPbt5cuX0bp1awDA6tWrce7cOVy5cgUTJ04EANX6Xr58CQAf/V3IzvPnzxEbGwsDA4NM74WoqKhcv38nTJiAuXPn4uLFi2jXrh2sra3RokWLbE+x/piXL1/C3t5e7RBxTr19+zbTe+lds2fPxpUrV3Dq1ClMnDgRz58/xxdffIGUlBTVNDn5fUxMTER0dLTq9zEn82QlI+u776ms5Ob9q4msftZWVlbo2LEjgoKCoFAoAKR/LtapU0f12RETEwO5XI7Fixdnek9lHLb60GevtuOYGy3k7u4OLy8vAECzZs2gUCiwZs0a7NixA127dkWpUqUApH8wdu7cOctlVK5cGUD6uJiMXojslCpVCsbGxli3bl22r39Iv3798Ouvv6rG/OzduxejR4+Grq6u2jJq1KiBn3/+Octl2Nvbqz3P6V91rVq1wg8//IA9e/Zk6pnIkHE9jFatWqm1R0VFZZo2oy3jyzkvcm/cuBEuLi7Ytm2b2uvvfinkJ2tra1y+fDlTe1bbn5U2bdpg8eLFuHjxYp6OW9B0v2S1b7du3Qp9fX3s379f7Yv5/WuglC5dGgDw9OnTTEVuTpQqVQrW1tY4dOhQlq+XKFHio1mzoqenh4CAAAQEBCA2NhZHjx7FDz/8gDZt2uDJkycwMTHRKGfp0qVx9uxZKJVKjQucUqVK4dWrV9m+Xr58edXnUuPGjWFsbIxJkyZh8eLFGDduHADA09MTJUuWxN69ezFr1qws98PevXuhVCpVv49eXl6wsrLCn3/+me08WcnI+rHPJ03fv0ZGRlm+B6Ojo7NcV3Z5+/Xrhz/++APBwcEoV64crly5guXLl6teL1myJHR1ddGrV69sexRdXFw+mldrSXxYjPJQdmdLvXr1SnUGQsZYmkqVKgkfH5+PLjNjzM2HxqTMmDFDmJiYiAcPHnx0edkdj65bt66oU6eOWLJkSZZjYAYOHCjs7e0/egw5Y+zKr7/++tEsGTJOBX//2hlC/O9U8LZt26q14wNjbipUqJCnuTt37qw2BkaI9DOwzMzMxPu/wlZWVsLPzy/TMj50ttT7Ms6wyZAx5ubdsVNC5HzMTU5Opd21a5fqeXangvfp00dtPIsm+wX/f7bU+wICAoSZmZnaOKekpCRRrlw5tXEq4eHhQldXV/Tq1euD29q5c2dRpkyZTO0bN25UjYf7mIyzpbJ77WOn+i9cuFBtPFfG+I2sxs1lN+Zm7dq1H835vv79+wsrK6tM7dmdLZWamioqVqworK2tRXx8vKo941Tw2bNnZ1rW8+fPVaeCv/te+tip4M+fP8/0+71p0yYBQPz9998f3C5N379t2rQRVapUUZvmv//+E3p6elmOuXl/v2SQy+WibNmyws/PT4wbN04YGRllWn/Lli1FzZo1c3y9nuKExY0Wya64EUKIOXPmCABiw4YNQgghjh8/LgwNDUXr1q3F5s2bxalTp8Tu3bvFzJkzRdeuXVXzPX36VNjZ2YkyZcqIhQsXimPHjomdO3eKQYMGiVu3bgkhhHjz5o3w8PAQDg4OYt68eSI4OFgcPnxYrF69Wnz55ZdqH+jZfTivXLlSABAODg7C29s70+sRERHCyclJuLm5iWXLloljx46JAwcOiKVLl4r27duLJ0+eCCFyV9xkXMTPxMREfP/99yI4OFgEBweLCRMmCBMTkywv4gdAODo6iipVqogtW7aIvXv3irZt2woAYuvWrXmae926daoBzceOHROBgYGiQoUKolKlSpm+xJs0aSLKlCkj9u7dK65cuaIqEj+luHnz5o2oWLGisLKyEsuWLRNHjhwRY8aMEc7OzgKA+P333z+6j/ft2ydMTEyEs7OzmDt3rjh27Jg4duyYWLx4sfDw8MjRRfzeL2402S/ZFTfHjh0TAETXrl3FkSNHxJYtW4Snp6dqGe8Owv3xxx9V0+7cuVMcPXpULFq0SO06LRn7btmyZeLSpUuq30W5XC7atWsnrKysxLRp08Rff/0ljh49KgIDA0WfPn3Uvhw1KW46dOggvv/+e7Fjxw5x6tQpERQUJJydnYWTk5OqYMv42Q8ZMkScP39eXLlyRVVMvF/cpKWliWbNmgl9fX0xfvx48ddff4kDBw6IyZMnZ3mZg3dlFEbvD4T+0Jf49u3bBQAxffp0Vdu7F/Hr0aOH+PPPP8XJkyfFokWLhKOj40cv4te+fXuxadMmcfr0abFv3z7x7bffCgsLC7WL+AkhxNdff602aPxDNHn/ZhSyw4YNE0ePHhVr164VlStXFnZ2dhoVN0IIMWHCBGFoaChKly4tevToken1GzduiJIlS4o6deqI9evXixMnToi9e/eK+fPni2bNmn10u7QZixst8qHi5u3bt6JcuXKiUqVKQi6XCyGE+Pvvv4Wfn58oU6aM0NfXF7a2tqJ58+aZzjp48uSJ6N+/v7C1tVVdw8bPz088f/5cNc2bN2/EpEmTVNfwyLjexpgxY9QKg+yKm7i4OGFsbPzBMzVevnwpRo0aJVxcXIS+vr6wsrISnp6eYuLEiarr6eSmuMnIP3PmTFGrVi1hYmIiTExMRI0aNcSMGTMyXatHiP99WS5btkxUqFBB6OvrCzc3tywvCpYXuX/55Rfh7OwsDA0Nhbu7u1i9enWmIkQIIcLCwkSDBg2EiYlJjq9z876slvv48WPRuXNnYWZmJkqUKCG6dOmS5TU3PuT+/fti+PDhomLFisLQ0FAYGxuLKlWqiICAALUiIqfFjSb7JbviRoj0Iqly5crC0NBQlC9fXsyaNUusXbs2yzOMgoKCxGeffSaMjIyEmZmZ8PDwUOu5evXqlejatauwtLQUMplMLUdaWpqYO3euqFmzpmp+Nzc3MWTIEHH37l3VdJoUN/PmzRPe3t6iVKlSwsDAQJQrV04MGDBAPHz4UG2+CRMmCHt7e6Gjo/PR69y8fftWTJ48WXX9Jmtra9G8eXNx/vz5LDNliIuLE2ZmZmLOnDlq7R/7Eq9bt64oWbKkWq+EUqkUmzZtEk2bNhWWlpbCwMBAuLi4iGHDhmU68/Bdf/75p2jfvr0oXbq00NPTEyVLlhTNmjUTK1asUOvdUCqVwsnJSXz99dcf3KZ35fT9q1QqxZw5c0T58uWFkZGR8PLyEsePH8/2bKkPFTd37txRXZsoODg4y2nCw8NF//79VdfRKl26tPD29hYzZszI8bZpI5kQ/38qCBHlmEwmw4gRI7BkyRKpo0hm5syZmDRpEh4/fpzrgbakXb7++mscO3YMN27c+OSzmfLTsWPH0Lp1a9y4cQNubm5Sx6F8wAHFRPRRGUWcm5sb0tLScPz4cSxatAhfffUVCxtSmTRpEoKCgrBz507VhSwLoxkzZqB///4sbLQYixsi+igTExMsWLAADx8+REpKCsqVK4fvvvsOkyZNkjoaFSI2NjbYtGkTXr9+LXWUbL1+/RpNmjRRXfaCtBMPSxEREZFW4UX8iIiISKuwuCEiIiKtwuKGiIiItEqxG1CsVCoRERGBEiVKFOpTFYmIiOh/hBBISEjI0f3Pil1xExERkat7wxAREZH0njx58tFLUBS74ibjBnVPnjyBubm5xGmIiIgoJ+Lj4+Ho6JjpRrNZKXbFTcahKHNzcxY3RERERUxOhpRwQDERERFpFRY3REREpFVY3BAREZFWYXFDREREWoXFDREREWkVFjdERESkVVjcEBERkVZhcUNERERahcUNERERaRUWN0RERKRVJC1uTp8+DV9fX9jb20Mmk2HPnj0fnefUqVPw9PSEkZERypcvjxUrVuR/UCIiIioyJC1uEhMTUbNmTSxZsiRH04eHh8PHxweNGjVCaGgofvjhB4waNQo7d+7M56RERERUVEh648x27dqhXbt2OZ5+xYoVKFeuHBYuXAgAcHd3R0hICObOnYsuXbrkU0oiIvokyS8AxVupU1BBkukCJg6Srb5I3RX8woULaN26tVpbmzZtsHbtWqSlpUFfXz/TPCkpKUhJSVE9j4+Pz/ecRET0/x78DlzsK3UKKmjGdkCnCMlWX6SKm6ioKNjY2Ki12djYQC6XIzo6GnZ2dpnmmTVrFqZNm1ZQEYmI6F2vQtL/lekCOpn/ACXtkJisj5fxpnAuE5veoGMkaZ4iVdwAgEwmU3suhMiyPcOECRMQEBCgeh4fHw9HR8f8C0hERJlVmQDUnC51CsoH//77En5++6CjI8Ply1/BxET6IrZIFTe2traIiopSa3vx4gX09PRgbW2d5TyGhoYwNDQsiHhERETFhhAC69b9i5EjjyE5WQ57ezOEh8ehatVSUkcrWsVN/fr1sW/fPrW2I0eOwMvLK8vxNkRERJT3EhJSMWxYMDZtugUAaNvWGUFBPihd2kTiZOkkPRX8zZs3CAsLQ1hYGID0U73DwsLw+PFjAOmHlHr37q2afujQoXj06BECAgJw69YtrFu3DmvXrsW4ceOkiE9ERFTs/P33C3h5bcCmTbegqyvDL780woEDXQpNYQNI3HMTEhKCZs2aqZ5njI3p06cPAgMDERkZqSp0AMDFxQUHDx7EmDFjsHTpUtjb22PRokU8DZyIiKiAjB9/GnfuvIaDQwls3doBDRqUlTpSJjKRMSK3mIiPj4eFhQXi4uJgbm4udRwiIu0W8jVwZwlQdRIHFGuJZ88SMGHCGSxY0AzW1sYFtl5Nvr95bykiIiLK1tWrUfjll0uq52XLlkBQkE+BFjaaKlIDiomIiKhgCCGwZEkoxo07hdRUBapWLQVf3wpSx8oRFjckLXkS8O8MIDlS6iRElB+iL0qdgHLh9etkDBhwGLt33wUAfPFFRTRsWPjG1mSHxQ1JK/IwcHOW1CmIKL8ZlJQ6AeXQpUuR6NZtHx4+jIeBgS7mzm2CkSM9sr1YbmHE4oaklXEzPbMKQMVB0mYhovyhbwE4fyV1CsqB5cvDMGrUccjlSpQvb4Ht233h6WkrdSyNsbihwsHUGajyndQpiIiKtTJlTCCXK/Hll65YvboNLCyK5hX+WdwQEREVY4mJqTA1NQAAdOniitOnu6Fhw7JF6jDU+3gqOBERUTGkVAr88sslVKq0FhERb1TtjRo5FOnCBmBxQ0REVOy8fJmE9u13YsKEM4iMTERQ0A2pI+UpHpYiIiIqRk6ffoLu3Q8gIuINjIz0sGRJC/TvX03qWHmKxQ0REVExoFAoMWvWJUyZch5KpYC7uxW2b/dFtWqlpY6W51jcEBERFQMLF17Fjz+eAwD06VMVS5e2UA0k1jYcc0NERFQMDB1aE599ZovAwLYIDGyntYUNwJ4bIiIiraRQKLFp0y189VUV6OjIYGpqgIsXe0JHp2ifCZUTLG6IiIi0TETEG/TosR+nTj1FVFQixo+vAwDForABWNwQERFplcOHw/HVVwcRHf0WZmb6cHQsIXWkAsfihoiISAvI5Ur8+ONZ/PLLZQBAzZqlsX27L1xdrSROVvBY3BARERVxT58moHv3/Th79hkAYNiwmpg/vxmMjIrn13zx3GoiIiItEhWViEuXImFuboDVq1vDz89N6kiSYnFDRERUBAkhVPeA8vKyxcaNPvD0tEWFCpbSBisEeJ0bIiKiIubhwzg0a7YNoaHPVW1+fm4sbP4fixsiIqIiZM+eu/DwCMKpU08xZEgwhBBSRyp0WNwQEREVAampCowefRydOv2J2NgU1K1rh+3bfVWHpuh/OOaGiIiokHvwIBb+/vsQEpJ+GGrsWC/MnNkIBga6EicrnFjcEBERFWK3bsWgXr1NiI9PhZWVEX7/vR06dKggdaxCjcUNERFRIVa5shXq1bNHYmIatmxpD0dHc6kjFXosboiIiAqZe/dew97eDCYm+tDRkWHbtg4wNdWHvj4PQ+UEBxQTEREVIlu23IKHRxBGjTquarO0NGJhowH23BARERUCb9+mYdSo41iz5joA4O7d13j7Ng3GxvoSJyt6WNwQERFJ7NatGPj57cO//0ZDJgMmTaqHyZO9oafHAyy5weKGiIhIQkFBNzBsWDCSkuSwsTHBxo3t0bKlk9SxijQWN0RERBJ5/ToZAQEnkZQkR4sW5bBxY3vY2ppKHavIY3FDREQkkZIljRAU1A5Xrz7HDz/Uha4uD0PlBRY39OmEEkh6CiAX9zdJfpnncYiICishBNat+xelShnj888rAgB8fMrDx6e8xMm0C4sb+nSnOwHP9kqdgoioUEtISMWwYcHYtOkWLC0NceNGP9jbm0kdSyuxuKFP9+pK+r86BoAsF12qMn3AsXPeZiIiKkT+/vsF/Pz24c6d19DVleG77+pwbE0+YnFDeafNZaBkTalTEBEVGkIIrFz5N0aPPoGUFAUcHEpgy5b2aNjQQepoWo3FDRERUT6Qy5Xo2fMAtm//DwDQvn15/P57O1hbG0ucTPtxWDYREVE+0NPTQalSxtDT08HcuU2wd28nFjYFhD03REREeUQIgcTENJiZGQAA5s1riv79q8HT01biZMULe26IiIjywOvXyejSZS86dtwNhUIJADAy0mNhIwH23BAREX2iy5cj4e+/Dw8fxkNfXwdXrkShXj17qWMVW+y5ISIiyiUhBObPD0GDBlvw8GE8ype3wPnzPVjYSIw9N0RERLnw6tVb9O17CPv23QcAdO3qijVr2sDCwlDiZMTihoiIKBd69DiAw4cfwtBQFwsWNMPQoTUhk8mkjkVgcUNERJQrv/7aBFFRiQgMbIdatcpIHYfewTE3REREOfDyZRJ27bqjel69emlcu9abhU0hxOKGiIjoI06ffoJatYLg778fFy9GqNp1dHgYqjBicUNERJQNhUKJGTMuoFmz7YiIeIOKFS1hZqYvdSz6CI65ISIiysLz54no2fMAjh17DADo3bsKli5tqbr6MBVeLG6IiIjec/z4Y/TosR/PnyfBxEQPS5e2RN++1aSORTnE4oaIiOg916+/xPPnSaha1Rrbt/uiSpVSUkciDbC4ISIiQvrVhjOuUzNqVG3o6+ugb99qMDHhGJuihgOKiYio2Dty5CEaN96KhIRUAIBMJsPw4R4sbIooFjdERFRsyeVK/PDDGbRpswNnzz7DL79ckjoS5QEeliIiomLp6dMEdO++H2fPPgMADB1aEz/+WF/iVJQXJO+5WbZsGVxcXGBkZARPT0+cOXPmg9Nv2rQJNWvWhImJCezs7NCvXz/ExMQUUFoiItIGBw7cR61aQTh79hlKlDDAtm0dsHx5KxgZ8W9+bSBpcbNt2zaMHj0aEydORGhoKBo1aoR27drh8ePHWU5/9uxZ9O7dGwMGDMCNGzfwxx9/4MqVKxg4cGABJycioqJq3brr6NBhN2Ji3qJ2bRuEhvaGn5+b1LEoD0la3MyfPx8DBgzAwIED4e7ujoULF8LR0RHLly/PcvqLFy/C2dkZo0aNgouLCxo2bIghQ4YgJCSkgJMTEVFR1b59edjZmeLrrz1w/nx3VKhgKXUkymOSFTepqam4evUqWrdurdbeunVrnD9/Pst5vL298fTpUxw8eBBCCDx//hw7duxA+/bts11PSkoK4uPj1R5ERFS8hIW9UP3fxsYU//7bF4sWtYChIQ9DaSPJipvo6GgoFArY2NiotdvY2CAqKirLeby9vbFp0yb4+/vDwMAAtra2sLS0xOLFi7Ndz6xZs2BhYaF6ODo65ul2EBFR4ZWaqsDo0cfh4RGELVtuqdqtrIwlTEX5TfIBxRkXTMrw7kWU3nfz5k2MGjUKkydPxtWrV3Ho0CGEh4dj6NCh2S5/woQJiIuLUz2ePHmSp/mJiKhwevAgFg0abMZvv10DANy6xZNPigvJ+uNKlSoFXV3dTL00L168yNSbk2HWrFlo0KABvv32WwBAjRo1YGpqikaNGmHGjBmws7PLNI+hoSEMDQ3zfgOIiKjQ2rHjPwwYcBjx8akoWdIIv//eDr6+FaSORQVEsp4bAwMDeHp6Ijg4WK09ODgY3t7eWc6TlJQEHR31yLq6ugDSe3yIiKh4S06WY8SIo/jyy32Ij0+Ft7c9wsJ6s7ApZiQ9LBUQEIA1a9Zg3bp1uHXrFsaMGYPHjx+rDjNNmDABvXv3Vk3v6+uLXbt2Yfny5Xjw4AHOnTuHUaNGoU6dOrC3t5dqM4iIqJA4fz4Cy5aFAQC++64OTp70R7ly5tKGogIn6TBxf39/xMTE4KeffkJkZCSqVauGgwcPwsnJCQAQGRmpds2bvn37IiEhAUuWLMHYsWNhaWmJ5s2bY/bs2VJtAhERFSLNm5fDjBkNUbt2GbRrV17qOCQRmShmx3Pi4+NhYWGBuLg4mJuzms8Tu+2Bt5FAuzCgZE2p0xBRMfL2bRp++OEsRo+uDScnC6njUD7S5PubJ/gTEVGRdPt2DPz89uH69WhcuRKFM2e6ZXu2LRUvLG6IiKjICQq6gWHDgpGUJEeZMiaYOtWbhQ2psLghIqIiIzExFSNHHkNg4A0A6WNsNm70gZ2dmcTJqDBhcUNEREXCo0dx8PHZhZs3Y6CjI8OUKfUxcWI96OpKfj1aKmRY3BARUZFgY2MKfX0d2NmZYvPm9mjatJzUkaiQYnFDRESF1ps3qTA21oOurg6MjPSwa9fnMDPTR5kyplJHo0KMfXlERFQo/f33C3h6bsCMGRdVbeXLW7KwoY9icUNERIWKEAIrV/6NunU34c6d11i37joSE1OljkVFCA9LUbqUGED+JnfzKuV5m4WIiq34+BQMHnwE27b9BwDw8XHB77+3g6mpgcTJqChhcVPcpSUAoeOAe6ukTkJExdy1a8/h57cP9+/HQk9PB7NmNUJAgBd0dHj9GtIMi5viLOo4cKk/kPgo/bmuUe6XZV4FMHfLm1xEVOzEx6egefPtiItLQblyJbBtmy/q1eMNkSl3WNwUR/JEIPQ74O7S9OemzkC99YBNUylTEVExZm5uiF9/bYIDBx5g3bo2sLIyljoSFWG8cWZx8+IscLEv8OZ++vOKQwCPXwH9EpLGIqLi5/LlSMhkwGef2QFIH0gMgLdRoCxp8v3Ns6WKC/lb4NpY4Gjj9MLGxAFodhios4KFDREVKCEE5s8PQYMGW/Dll/vw+nUygPSihoUN5QUelioOoi+l99bE305/Xr4vUHsBYGApYSgiKo5evXqLvn0PYd++9N5jLy8bDhimPMfiRpspUoDr04BbswGhBIxsgbqrgbIdpE5GRMXQ+fPP0K3bfjx5kgADA10sWNAUw4bVYm8N5TkWN9rqVShwsQ8Qez39uVMPwGsxYGglbS4iKnaUSoG5c6/ghx/OQKEQqFjREtu3+8LDw0bqaKSlWNxoG2UacGMm8O8MQMgBw9Lp42ocO0udjIiKKZkMOHfuGRQKgW7d3LByZSuYmxtKHYu0GIsbbRJ7HbjQB3gdmv7csQvw2XLAqLS0uYioWBJCqAYJr1/fFvv23Ufv3lV5GIryHc+W0hb/LQYOeaYXNgZWgPcWoOEfLGyIqMAplQI//3wR/fodUp3ebWVljD59qrGwoQLBnhttETo2/ZBUWV+gzkrA2E7qRERUDD1/nohevQ4iODj9yud9+lRFs2blJE5FxQ2LG22hTEv/t+4awKiMtFmIqFg6fvwxevY8gKioRBgb62Hp0hZo2tRR6lhUDLG4ISKiT6JQKDF9+gX89NMFCAFUqWKNP/7wRZUqpaSORsUUixsiIvokvXodxJYt6RcJ7d+/GhYvbgETE32JU1FxxgHFRET0SQYMqA5zcwNs2OCDtWvbsrAhybHnhoiINCKXK3HjRjRq1kwf39eihRMePhyMkiWNJE5GlI49N0RElGNPnyagefPtaNRoK+7de61qZ2FDhQmLGyIiypGDBx+gVq0gnDnzFABw716stIGIssHDUkRE9EFpaQpMnHgWv/56BQBQu7YNtm3rgIoVS0qcjChrLG4Kk+SXgCJJ6hRERCqPH8ejW7f9uHAhAgAwcqQH5s5tAkNDfn1Q4cV3Z2HxcCtwvgcAIXUSIiKVVav+wYULEbCwMMTatW3QpYur1JGIPorFTWHx+ioAAch0AZ1cnkZZumH6XcCJiPLI5Mn1ER39Ft999xlcXCyljkOUIyxuChu3AMBjjtQpiKiYCg+PxZw5V7BoUXPo6+vCwEAXK1a0kjoWkUZydbaUXC7H0aNHsXLlSiQkJAAAIiIi8ObNmzwNR0REBWfnzjvw8NiAFSv+xowZF6WOQ5RrGvfcPHr0CG3btsXjx4+RkpKCVq1aoUSJEpgzZw6Sk5OxYsWK/MhJRET5JDlZjnHjTmLp0jAAQP369hgwoLq0oYg+gcY9N9988w28vLzw+vVrGBsbq9o7deqEY8eO5Wk4IiLKX/fuvYa392ZVYTN+/Gc4dcof5cqZSxuM6BNo3HNz9uxZnDt3DgYGBmrtTk5OePbsWZ4FIyKi/HXw4AN067YfCQmpsLY2RlBQO/j4lJc6FtEn07i4USqVUCgUmdqfPn2KEiVK5EkoIiLKfxUqWEKpFGjUyAGbN7eHgwM/w0k7aHxYqlWrVli4cKHquUwmw5s3bzBlyhT4+PjkZTYiIspjsbHJqv9XrmyFM2e64fhxPxY2pFU0Lm4WLFiAU6dOoUqVKkhOTkaPHj3g7OyMZ8+eYfbs2fmRkYiI8sDGjTfh5LQKp049UbV5eNhAT4+3GSTtovFhKXt7e4SFhWHr1q24evUqlEolBgwYgJ49e6oNMCYiosIhKSkNI0cew/r1/wJIv+pwkyaOEqciyj8aFzenT5+Gt7c3+vXrh379+qna5XI5Tp8+jcaNG+dpQCIiyr0bN6Lh57cPN2/GQCYDpkzxxqRJ9aSORZSvNC5umjVrhsjISJQpU0atPS4uDs2aNctysDERERUsIQQCA//FiBHH8PatHLa2pti8uT2aNSsndTSifKdxcSOEgEwmy9QeExMDU1PTPAlFRESf5sSJJ+jf/zAAoFUrJ2zc6IMyZfgZTcVDjoubzp07A0g/O6pv374wNDRUvaZQKPDPP//A29s77xMSEZHGmjVzRM+e7qhSxRrff18XOjqZ/ygl0lY5Lm4sLCwApPfclChRQm3wsIGBAerVq4dBgwblfUIiIvooIQQ2bLgJX98KKFnSCDKZDBs2+GTZ006k7XJc3Kxfvx4A4OzsjHHjxvEQFBFRIREfn4IhQ4KxdettdOpUCTt3doRMJmNhQ8WWxmNupkyZkh85iIgoF0JDn8PPbx/u3YuFrq4M9evbQQiAdQ0VZxoXNwCwY8cObN++HY8fP0Zqaqraa9euXcuTYERElD0hBJYtC0NAwEmkpipQrlwJbN3qi/r17aWORiQ5jS9LuWjRIvTr1w9lypRBaGgo6tSpA2trazx48ADt2rXLj4xERPSO2NhkfPnlXowceQypqQp07FgBoaG9WdgQ/T+Ni5tly5Zh1apVWLJkCQwMDDB+/HgEBwdj1KhRiIuLy4+MRET0DoVC4PLlKOjr62DBgmbYs+cLWFnxCvFEGTQ+LPX48WPVKd/GxsZISEgAAPTq1Qv16tXDkiVL8jYhERFBCAEg/XIc1tbG+OOPjtDRAT77zE7iZESFj8Y9N7a2toiJiQEAODk54eLFiwCA8PBw1S8fERHlnVev3uKLL/ao7g0FAHXr2rGwIcqGxsVN8+bNsW/fPgDAgAEDMGbMGLRq1Qr+/v7o1KlTngckIirOLlyIgIdHEPbuvY+xY08iPj5F6khEhZ7Gh6VWrVoFpVIJABg6dCisrKxw9uxZ+Pr6YujQoXkekIioOFIqBebNu4IffjgLuVyJChUssX27L8zNDT8+M1Exp3Fxo6OjAx2d/3X4+Pn5wc/PDwDw7NkzlC1bNu/SEREVQ9HRSejT5y8cPBgOAPD3r4xVq1qzsCHKIY0PS2UlKioKX3/9NSpWrKjxvMuWLYOLiwuMjIzg6emJM2fOfHD6lJQUTJw4EU5OTjA0NESFChWwbt263EYnIipU3rxJhafnBhw8GA5DQ12sXNkKW7Z0YGFDpIEcFzexsbHo2bMnSpcuDXt7eyxatAhKpRKTJ09G+fLlcfHiRY2LjG3btmH06NGYOHEiQkND0ahRI7Rr1w6PHz/Odh4/Pz8cO3YMa9euxX///YctW7bAzc1No/USERVWZmYG6NOnKipXtsLly19h8OCavI0CkYZkIoenOA0fPhz79u2Dv78/Dh06hFu3bqFNmzZITk7GlClT0KRJE41XXrduXdSuXRvLly9Xtbm7u+OLL77ArFmzMk1/6NAhdOvWDQ8ePICVlZXG6wOA+Ph4WFhYIC4uDubm5rlaRr4I/Ra4NRdw/xbwmCN1GiIqQC9eJCIpSQ5n5/QbFMvlSiQny2FmZiBxMqLCQ5Pv7xz33Bw4cADr16/H3LlzsXfvXggh4OrqiuPHj+eqsElNTcXVq1fRunVrtfbWrVvj/PnzWc6zd+9eeHl5Yc6cOShbtixcXV0xbtw4vH37Ntv1pKSkID4+Xu1BRFRYnDjxGDVrBqFLl71ISZEDAPT0dFjYEH2CHA8ojoiIQJUqVQAA5cuXh5GREQYOHJjrFUdHR0OhUMDGxkat3cbGBlFRUVnO8+DBA5w9exZGRkbYvXs3oqOjMXz4cLx69SrbQ2KzZs3CtGnTcp2TiCg/KBRKzJhxET/9dAFKpYCVlRFevEiCo2Mh6lEmKqJy3HOjVCqhr6+veq6rqwtTU9NPDvD+sWQhRLbHl5VKJWQyGTZt2oQ6derAx8cH8+fPR2BgYLa9NxMmTEBcXJzq8eTJk0/OTET0KSIj36B16x2YOvU8lEqBfv2q4fLlnixsiPJIjntuhBDo27cvDA3TR+wnJydj6NChmQqcXbt25Wh5pUqVgq6ubqZemhcvXmTqzclgZ2eHsmXLwsLCQtXm7u4OIQSePn2KSpUqZZrH0NBQlZmISGrBwQ/x1VcH8eJFEkxN9bF8eUv06lVV6lhEWiXHPTd9+vRBmTJlYGFhAQsLC3z11Vewt7dXPc945JSBgQE8PT0RHBys1h4cHKy6d9X7GjRogIiICLx580bVdufOHejo6MDBwSHH6yYikoIQApMnn8OLF0moXr0UQkK+YmFDlA9y3HOzfv36PF95QEAAevXqBS8vL9SvXx+rVq3C48ePVVc6njBhAp49e4agoCAAQI8ePTB9+nT069cP06ZNQ3R0NL799lv0798fxsa8Iy4RFW4ymQybN7fHb79dw6xZjWBsrP/xmYhIYxpfoTgv+fv7IyYmBj/99BMiIyNRrVo1HDx4EE5OTgCAyMhItWvemJmZITg4GF9//TW8vLxgbW0NPz8/zJgxQ6pNICL6oL/+eoC//36J77+vCwBwcbHEwoXNJU5FpN1yfJ0bbcHr3BBRQUhLU2DSpLOYM+cKAODkSX80aeIocSqiokuT729Je26IiLTR48fx6NZtPy5ciAAAjBhRC3Xr2kmciqj4YHFDRJSH9u69h759D+H162RYWBhi7do26NLFVepYRMUKixsiojwyadJZ/PzzRQDAZ5/ZYuvWDihf3lLaUETFUK7uCr5hwwY0aNAA9vb2ePToEQBg4cKF+PPPP/M0HBFRUVK5ckkAwOjRnjh7tjsLGyKJaFzcLF++HAEBAfDx8UFsbCwUCgUAwNLSEgsXLszrfEREhdrr18mq//fqVRVXr/bCggXNYGCgK2EqouJN4+Jm8eLFWL16NSZOnAhd3f/98np5eeH69et5Go6IqLBKSZHj66+PoXr1QLx8maRqr1076yusE1HB0bi4CQ8Ph4eHR6Z2Q0NDJCYm5kkoIqLC7N691/D23oIlS0Lx7NkbHDjwQOpIRPQOjYsbFxcXhIWFZWr/66+/VHcNJyLSVtu330bt2htw7dpzWFsbY//+Tujbt5rUsYjoHRqfLfXtt99ixIgRSE5OhhACly9fxpYtWzBr1iysWbMmPzISEUnu7ds0jBlzEitX/g0AaNiwLLZs6QAHhxISJyOi92lc3PTr1w9yuRzjx49HUlISevTogbJly+K3335Dt27d8iMjEZHkfvrpAlau/BsyGTBhQl1Mm9YAenq5OuGUiPJZrq5zM2jQIAwaNAjR0dFQKpUoU6ZMXuciIipUvv++Lk6deoqpU73RurWz1HGI6AM0/rNj2rRpuH//PgCgVKlSLGyISCslJaVh+fIwZNx+z8LCEOfOdWdhQ1QEaFzc7Ny5E66urqhXrx6WLFmCly9f5kcuIiLJ3LwZjTp1NmL48KNYtixM1S6TyaQLRUQ5pnFx888//+Cff/5B8+bNMX/+fJQtWxY+Pj7YvHkzkpKSPr4AIqJCLDDwX3z22UbcuBEDW1tTuLtbSx2JiDSUq9FwVatWxcyZM/HgwQOcOHECLi4uGD16NGxtbfM6HxFRgXjzJhV9+hxEv36HkJQkR8uWTggL643mzctJHY2INPTJN840NTWFsbExDAwMkJCQkBeZiIgK1PXrL+Hntw+3b7+Cjo4MP/3UABMm1IWODg9DERVFueq5CQ8Px88//4wqVarAy8sL165dw9SpUxEVFZXX+YiI8l1cXAru3n0Ne3sznDjhh4kT67GwISrCNO65qV+/Pi5fvozq1aujX79+quvcEBEVJUII1QDhhg0dsHVrBzRp4ojSpU0kTkZEn0rj4qZZs2ZYs2YNqlatmh95iIjyXWjoc/TvfxibNvmgSpVSAICuXStLnIqI8orGh6VmzpzJwoaIiiQhBJYtC0W9epsRFvYCY8eelDoSEeWDHPXcBAQEYPr06TA1NUVAQMAHp50/f36eBCMiyktxcSkYOPAwduy4AwDw9a2A9evbSpyKiPJDjoqb0NBQpKWlqf5PRFSUhIREwc9vH8LD46Cvr4PZsxtj9GhPXpSPSEvlqLg5ceJElv8nIirsLlyIQJMmW5GWpoSzszm2bfNFnTp2Uscionyk8Zib/v37Z3k9m8TERPTv3z9PQhER5ZXPPrNFvXr26Ny5EkJDe7OwISoGNC5ufv/9d7x9+zZT+9u3bxEUFJQnoYiIPsW1a8+RkiIHAOjp6eDAgc7YsaMjLC2NJE5GRAUhx8VNfHw84uLiIIRAQkIC4uPjVY/Xr1/j4MGDvEM4EUlKqRSYO/cK6tbdhPHjT6vaS5Qw4PgaomIkx9e5sbS0hEwmg0wmg6ura6bXZTIZpk2blqfhiIhyKjo6CX37HsKBAw8AAM+fJ0KhUEJXN1cXYieiIizHxc2JEycghEDz5s2xc+dOWFlZqV4zMDCAk5MT7O3t8yUkEdGHnD37FN267cezZ29gaKiL335rjsGDa7C3hqiYynFx06RJEwDp95UqV64cPzSISHJKpcDs2Zfx449noVAIuLqWxPbtvqhZk4fIiYqzHBU3//zzD6pVqwYdHR3ExcXh+vXr2U5bo0aNPAtHRPQhERFv8Msvl6BQCPTs6Y7ly1uhRAkDqWMRkcRyVNzUqlULUVFRKFOmDGrVqgWZTAYhRKbpZDIZFApFnockIsqKg0MJBAa2w+vXyejXrxp7lIkIQA6Lm/DwcJQuXVr1fyIiKSgUSsyceQl16tiiTRsXAECnTpUkTkVEhU2OihsnJ6cs/09EVFCiohLRs+cBHD/+GKVKGePOnQEoWZLXrSGizHJ1Eb8DBw6ono8fPx6Wlpbw9vbGo0eP8jQcEREAHD36CDVr/o7jxx/D1FQf8+c3ZWFDRNnSuLiZOXMmjI2NAQAXLlzAkiVLMGfOHJQqVQpjxozJ84BEVHzJ5Ur8+ONZtG79B168SEL16qUQEvIVevWqKnU0IirEcnwqeIYnT56gYsWKAIA9e/aga9euGDx4MBo0aICmTZvmdT4iKqaSktLQrt1OnD79FAAweHANLFzYDMbG+hInI6LCTuOeGzMzM8TExAAAjhw5gpYtWwIAjIyMsrznFBFRbpiY6MPFxQJmZvrYsqUDVq5szcKGiHJE456bVq1aYeDAgfDw8MCdO3fQvn17AMCNGzfg7Oyc1/mIqBhJS1MgKUkOCwtDAMDSpS0waVI9VKxYUuJkRFSUaNxzs3TpUtSvXx8vX77Ezp07YW1tDQC4evUqunfvnucBiah4ePIkHk2bbkP37vuhVKZfR8vU1ICFDRFpTOOeG0tLSyxZsiRTO2+aSUS5tW/fffTt+xdevUqGubkB7tx5BTc3a6ljEVERpXFxAwCxsbFYu3Ytbt26BZlMBnd3dwwYMAAWFhZ5nY+ItFhqqgITJpzG/PlXAQBeXjbYts0X5ctbShuMiIo0jQ9LhYSEoEKFCliwYAFevXqF6OhoLFiwABUqVMC1a9fyIyMRaaGHD+PQqNEWVWEzerQnzp7tzsKGiD6Zxj03Y8aMQceOHbF69Wro6aXPLpfLMXDgQIwePRqnT5/O85BEpF2EEOjadS+uXn0OS0tDBAa2w+efV5Q6FhFpiVz13Hz33XeqwgYA9PT0MH78eISEhORpOCLSTjKZDCtWtELjxg4IC+vNwoaI8pTGxY25uTkeP36cqf3JkycoUaJEnoQiIu1z/34sduz4T/Xcy8sWJ0/6w8mJY/WIKG9pfFjK398fAwYMwNy5c+Ht7Q2ZTIazZ8/i22+/5angRJSlP/74DwMHHkZysgIVKljCw8MGQHoPDhFRXtO4uJk7dy5kMhl69+4NuVwOANDX18ewYcPwyy+/5HnAIkWRAiRH5W7e1Li8zUJUCCQnyxEQcALLl/8NAGjYsCxKlzaROBURaTuZEELkZsakpCTcv38fQghUrFgRJiZF4wMrPj4eFhYWiIuLg7m5ed4tWJkG7KsMJIZ/2nLcvwU85uRNJiIJ3bnzCn5++/D33y8hkwETJtTFtGkNoKen8dFwIiKNvr9z3HOTlJSEb7/9Fnv27EFaWhpatmyJRYsWoVSpUp8cWCukxPyvsNE1yt0y9EoAdm3zLhORRDZvvoXBg48gMTENpUsbY+PG9mjd2lnqWERUTOS4uJkyZQoCAwPRs2dPGBkZYcuWLRg2bBj++OOP/MxX9Mh0AH/eQJSKt4cP45CYmIamTR2xaVN72NubSR2JiIqRHBc3u3btwtq1a9GtWzcAwFdffYUGDRpAoVBAV1c33wISUdGgVAro6KQPEP7++7qwtzdDr15VoKvLw1BEVLBy/Knz5MkTNGrUSPW8Tp060NPTQ0RERL4EI6Ki4/ff/4W392YkJaUBAHR0ZOjbtxoLGyKSRI4/eRQKBQwMDNTa9PT0VGdMEVHxk5iYij59DqJv30O4dCkSK1f+LXUkIqKcH5YSQqBv374wNDRUtSUnJ2Po0KEwNTVVte3atStvExJRoXT9+kv4+e3D7duvoKMjw08/NcCoUbWljkVElPPipk+fPpnavvrqqzwNQ0SFnxACa9dex9dfH0dyshz29mbYsqU9Gjd2lDoaEREADYqb9evX52cOIioifvnlMn744QwAoF07F/z+eztemI+IChXJR/stW7YMLi4uMDIygqenJ86cOZOj+c6dOwc9PT3UqlUrfwMSkZpevarA1tYUs2c3xv79nVnYEFGhI2lxs23bNowePRoTJ05EaGgoGjVqhHbt2mV5Y853xcXFoXfv3mjRokUBJSUqvoQQOHfumeq5g0MJ3L07AOPH11Gd+k1EVJhIWtzMnz8fAwYMwMCBA+Hu7o6FCxfC0dERy5cv/+B8Q4YMQY8ePVC/fv0CSkpUPMXFpcDPbx8aNtyCP/+8p2o3MzP4wFxERNKSrLhJTU3F1atX0bp1a7X21q1b4/z589nOt379ety/fx9TpkzJ74hExVpISBRq1w7Cjh13oK+vg8jIN1JHIiLKEY3vCp5XoqOjoVAoYGNjo9ZuY2ODqKis76x99+5dfP/99zhz5gz09HIWPSUlBSkpKarn8fHxuQ9NVAwIIbBo0TV8++0ppKUp4exsjm3bfFGnjp3U0YiIciRXPTcbNmxAgwYNYG9vj0ePHgEAFi5ciD///FPjZclk6sfshRCZ2oD0iwj26NED06ZNg6ura46XP2vWLFhYWKgejo48XZUoO69fJ6Nz5z8xevQJpKUp0blzJYSG9mZhQ0RFisbFzfLlyxEQEAAfHx/ExsZCoVAAACwtLbFw4cIcL6dUqVLQ1dXN1Evz4sWLTL05AJCQkICQkBCMHDkSenp60NPTw08//YS///4benp6OH78eJbrmTBhAuLi4lSPJ0+e5HxjiYqZ06efYs+eezAw0MXixc2xY0dHWFrm8i73REQS0bi4Wbx4MVavXo2JEyeq3TDTy8sL169fz/FyDAwM4OnpieDgYLX24OBgeHt7Z5re3Nwc169fR1hYmOoxdOhQVK5cGWFhYahbt26W6zE0NIS5ubnag4iy9vnnFTFjRkOcP98dI0fWzrIXlYiosNN4zE14eDg8PDwytRsaGiIxMVGjZQUEBKBXr17w8vJC/fr1sWrVKjx+/BhDhw4FkN7r8uzZMwQFBUFHRwfVqlVTm79MmTIwMjLK1E5EORMT8xZjx57ErFmNYGdnBgCYOLGetKGIiD6RxsWNi4sLwsLC4OTkpNb+119/oUqVKhoty9/fHzExMfjpp58QGRmJatWq4eDBg6plR0ZGfvSaN0SUO+fOPUO3bvvx9GkCXrxIwsGDXaSORESUJ2RCCKHJDOvXr8ePP/6IefPmYcCAAVizZg3u37+PWbNmYc2aNejWrVt+Zc0T8fHxsLCwQFxcXN4eonobBey2A2Q6QHdF3i2XKI8plQJz5lzGpElnoVAIuLqWxPbtvqhZs4zU0YiIsqXJ97fGPTf9+vWDXC7H+PHjkZSUhB49eqBs2bL47bffCn1hQ1TcvXyZhN69D+LQoYcAgJ493bF8eSuUKMGL8hGR9tC45+Zd0dHRUCqVKFOm6PzFx54bKq7+/fcl2rTZiYiINzA21sOSJS3Qr181DhomoiIhX3tu3lWqVKlPmZ2ICpCzswXMzQ1gYWGF7dt9Ua1aaakjERHli1wNKP7QX3oPHjz4pEBElHdiYt6iZEkj6OjIYGZmgIMHO6NMGROYmvIwFBFpL42Lm9GjR6s9T0tLQ2hoKA4dOoRvv/02r3IR0Sc6duwRevY8gHHjPsO4cZ8BAFxcLKUNRURUADQubr755pss25cuXYqQkJBPDkREn0ahUGLatPOYMeMihAA2b76F0aM9oacn2X1yiYgKVJ592rVr1w47d+7Mq8URUS5ERLxBixbbMX16emEzaFANnDvXnYUNERUreXZX8B07dsDKyiqvFkdEGjp8OBxffXUQ0dFvYWamj1WrWqN7d3epYxERFTiNixsPDw+1AcVCCERFReHly5dYtmxZnoYjopyJjHyDzz/fg5QUBWrVKoNt2zrA1ZV/bBBR8aRxcfPFF1+oPdfR0UHp0qXRtGlTuLm55VUuItKAnZ0ZZs9ujDt3XmPevKYwMsqzTlkioiJHo09AuVwOZ2dntGnTBra2tvmViYhy4MCB+yhbtgRq1Uq/iOY333hKnIiIqHDQaJShnp4ehg0bhpSUlPzKQ0QfkZqqwLhxJ9Ghw274+e1DQkKq1JGIiAoVjfuu69ati9DQ0Ex3BSei/PfwYRy6dduPS5ciAQDt25eHgQHPhCIiepfGxc3w4cMxduxYPH36FJ6enjA1NVV7vUaNGnkWjoj+Z8+eu+jX7xBiY1NgaWmIwMB2+PzzilLHIiIqdHJc3PTv3x8LFy6Ev78/AGDUqFGq12QyGYQQkMlkUCh400iivJSWpsC4caewaNE1AEC9enbYurUDnJwsJE5GRFQ45bi4+f333/HLL78gPDw8P/MQ0Xt0dGS4eTMGADBunBdmzmwEfX1diVMRERVeOS5uhBAAwLE2RAVEqRTQ0ZFBV1cHGzf64OrV5/DxKS91LCKiQk+jkYgfuhs4EeWN5GQ5hg8PxrBhwao2GxtTFjZERDmk0YBiV1fXjxY4r169+qRARMXZ3buv4ee3D2FhLwAAI0Z4oEaN0hKnIiIqWjQqbqZNmwYLCw5iJMoPW7bcwuDBR/DmTRpKlzbGhg0+LGyIiHJBo+KmW7duKFOmTH5lISqW3r5Nw6hRx7FmzXUAQNOmjti0qT3s7c0kTkZEVDTluLjheBuivCeEgI/PLpw8+QQyGfDjj/UxeXJ96OrywnxERLml8dlSRJR3ZDIZxo3zwn//vcLGje3RvHk5qSMRERV5OS5ulEplfuYgKjYSE1Nx69YreHml33y2ffsKuHt3AExNDSRORkSkHdj3TVSA/v33JT77bCNat96BR4/iVO0sbIiI8g6LG6ICIITA2rXXUafOJty69QrGxnp4/jxJ6lhERFpJ4xtnEpFmEhJSMWxYMDZtugUAaNvWGUFBPihd2kTiZERE2onFDVE+Cgt7AX//fbhz5zV0dWX4+eeG+PbbOtDR4dmHRET5hcUNUT5au/Y67tx5DQeHEti6tQMaNCgrdSQiIq3H4oYoH/36axPo6+tg4sR6sLY2ljoOEVGxwAHFRHno6tUoDBhwCApF+qUTjIz0MH9+MxY2REQFiD03RHlACIElS0IxbtwppKYqULVqKQQEeEkdi4ioWGJxQ/SJXr9OxoABh7F7910AwBdfVES/ftUkTkVEVHyxuCH6BJcvR8Lffx8ePoyHgYEu5s5tgpEjPXgvNiIiCbG4IcqloKAbGDDgMORyJcqXt8D27b7w9LSVOhYRUbHH4oYol2rVKgM9PR107lwJq1a1hoWFodSRiIgILG6INPLiRSLKlDEFANSoURrXrvWCm5sVD0MRERUiPBWcKAeUSoHZsy/B2Xk1Ll2KVLW7u1uzsCEiKmRY3BB9xMuXSWjffie+//4M3r6VY8eO/6SOREREH8DDUkQfcPr0E3TvfgAREW9gZKSHJUtaoH9/nuZNRFSYsbghyoJCocSsWZcwZcp5KJUC7u5W2L7dF9WqlZY6GhERfQSLG6Is7Nx5Bz/+eA4A0KdPVSxd2gKmpgYSpyIiopxgcUOUhS+/rIw9e+6hTRtn9OnDw1BEREUJBxQTIf0w1IIFIUhISAUAyGQybN7cgYUNEVERxOKGir2IiDdo0WI7AgJOYtiwYKnjEBHRJ+JhKSrWDh8OR69eB/Hy5VuYmenDx6e81JGIiOgTsbihYkkuV+LHH8/il18uAwBq1iyN7dt94epqJXEyIiL6VCxuqNh59iwB/v77ce7cMwDA8OG1MG9eUxgZ8deBiEgb8NOcih1dXR3cu/ca5uYGWLOmDb78srLUkYiIKA+xuKFiQaFQQlc3ffy8ra0pdu36HDY2pqhQwVLaYERElOd4thRpvYcP49CgwRZs23Zb1ebtXZaFDRGRlmJxQ1ptz5678PAIwqVLkRg//hRSUxVSRyIionzG4oa0UmqqAqNHH0enTn8iNjYFderY4tSpbjAw0JU6GhER5TOOuSGt8+BBLPz99yEk5DkAYOxYL8yc2YiFDRFRMcHihrTKixeJqF17A+LiUmBlZYTAwHbw9a0gdSwiIipALG5Iq5QpY4oBA6rh4sVIbN3aAY6O5lJHIiKiAib5mJtly5bBxcUFRkZG8PT0xJkzZ7KddteuXWjVqhVKly4Nc3Nz1K9fH4cPHy7AtFQY3b37Go8fx6ue//JLY5w86c/ChoiomJK0uNm2bRtGjx6NiRMnIjQ0FI0aNUK7du3w+PHjLKc/ffo0WrVqhYMHD+Lq1ato1qwZfH19ERoaWsDJqbDYsuUWatcOQvfu+5GWln4mlL6+LvT1Ob6GiKi4kgkhhFQrr1u3LmrXro3ly5er2tzd3fHFF19g1qxZOVpG1apV4e/vj8mTJ+do+vj4eFhYWCAuLg7m5nn4l/3bKGC3HSDTAbrzdOP89vZtGr755gRWr/4HANCkiQN27focVlbGEicjIqL8oMn3t2Q9N6mpqbh69Spat26t1t66dWucP38+R8tQKpVISEiAlRVvdlic3L4dgzp1NmH16n8gkwE//lgPR4/6sbAhIiIAEg4ojo6OhkKhgI2NjVq7jY0NoqKicrSMefPmITExEX5+ftlOk5KSgpSUFNXz+Pj4bKelwi8o6AaGDQtGUpIcNjYm2LixPVq2dJI6FhERFSKSDyiWyWRqz4UQmdqysmXLFkydOhXbtm1DmTJlsp1u1qxZsLCwUD0cHR0/OTNJIzVVgXnzQpCUJEeLFuUQFtaHhQ0REWUiWXFTqlQp6OrqZuqlefHiRabenPdt27YNAwYMwPbt29GyZcsPTjthwgTExcWpHk+ePPnk7CQNAwNdbN/ui59/bojDh7vC1tZU6khERFQISVbcGBgYwNPTE8HBwWrtwcHB8Pb2zna+LVu2oG/fvti8eTPat2//0fUYGhrC3Nxc7UFFgxACa9dex5w5l1VtlStb4Ycf6qnu8E1ERPQ+SS/iFxAQgF69esHLywv169fHqlWr8PjxYwwdOhRAeq/Ls2fPEBQUBCC9sOnduzd+++031KtXT9XrY2xsDAsLC8m2g/JeQkIqhg0LxqZNt6CjI0PLlk6oXfvDPXpERESAxMWNv78/YmJi8NNPPyEyMhLVqlXDwYMH4eSUPo4iMjJS7Zo3K1euhFwux4gRIzBixAhVe58+fRAYGFjQ8Smf/P33C/j57cOdO6+hqyvDjBkNUatW9uOqiIiI3iXpdW6kwOvcFF5CCKxa9Q+++eY4UlIUcHAogS1b2qNhQwepoxERkcQ0+f7mvaWo0Ojf/xACA28AADp0KI/AwHawtua1a4iISDMclUmFRr169tDT08HcuU2wd28nFjZERJQr7LkhyQgh8Px5kuqU7sGDa6BpU0dUrswrThMRUe6x54Yk8fp1Mrp02Yv69TchNjYZQPoFHVnYEBHRp2JxQwXu0qVI1K4dhN277+LZszc4d+6Z1JGIiEiLsLihAiOEwPz5IWjYcAsePoxH+fIWOH++B9q3ryB1NCIi0iIcc0MFIibmLfr2/Qv79z8AAHTt6oo1a9rAwsJQ4mRERKRtWNxQgfj++9PYv/8BDA11sWBBMwwdWjNHN0glIiLSFIsbKhC//NIY4eFxmDu3Ka82TERE+YpjbihfvHyZhAULQpBxAWxra2McPerHwoaIiPIde24oz50+/QTdux9ARMQbWFgYon//6lJHIiKiYoQ9N5RnFAolZsy4gGbNtiMi4g3c3Kzw2We2UsciIqJihj03lCeeP0/EV18dxNGjjwAAvXtXwdKlLWFmZiBxMiIiKm5Y3NAnO3nyMbp124/nz5NgYqKHpUtbom/falLHIiKiYorFDX0yuVzgxYskVK1qje3bfVGlSimpIxERUTHG4oZyRS5XQk8vfchWy5ZO2L37C7Rq5QQTE32JkxERUXHHAcWkscOHw+Huvg7378eq2j7/vCILGyIiKhRY3FCOyeVK/PDDGbRtuxP37sXip5/OSx2JiIgoEx6Wohx5+jQB3bvvx9mz6XfwHjq0JubPbyptKCIioiywuKGPOnDgPvr0OYSYmLcoUcIAa9a0hp+fm9SxiIiIssTihj5o//778PXdDQCoXdsG27Z1QMWKJSVORURElD0WN/RBrVs7o04dW9Sta4dff20CQ0O+ZYiIqHDjNxVlcuLEYzRsWBb6+rowMNDFqVPdYGTEtwoRERUNPFuKVFJTFRg9+jiaN9+OKVP+dyYUCxsiIipK+K1FAIAHD2Lh778PISHPAQBpaQoIISCTySRORkSkGaVSidTUVKljUC4YGBhAR+fT+11Y3BB27PgPAwYcRnx8KqysjBAY2A6+vhWkjkVEpLHU1FSEh4dDqVRKHYVyQUdHBy4uLjAw+LSbLrO4KcaSk+UYO/Ykli0LAwB4e9tjy5YOKFfOXNJcRES5IYRAZGQkdHV14ejomCc9AFRwlEolIiIiEBkZiXLlyn3SkQMWN8XYkycJ+P33GwCA776rg+nTG0BfX1fiVEREuSOXy5GUlAR7e3uYmJhIHYdyoXTp0oiIiIBcLoe+fu5v6cPiphirVKkk1q1rgxIlDNCuXXmp4xARfRKFQgEAn3xIg6ST8bNTKBSfVNywz64Yefs2DUOHBuP06SeqNj8/NxY2RKRVeCJE0ZVXPzsWN8XE7dsxqFt3E1au/Bs9ex5EcrJc6khERET5gsVNMRAUdAOenhtw/Xo0ypQxwbp1bXjtGiKiQqRv376QyWSQyWTQ09NDuXLlMGzYMLx+/VptuvPnz8PHxwclS5aEkZERqlevjnnz5qkOyb3rxIkT8PHxgbW1NUxMTFClShWMHTsWz549K6jNkgyLGy2WmJiKfv3+Qp8+fyEpSY7mzcshLKw3WrVyljoaERG9p23btoiMjMTDhw+xZs0a7Nu3D8OHD1e9vnv3bjRp0gQODg44ceIEbt++jW+++QY///wzunXrBiGEatqVK1eiZcuWsLW1xc6dO3Hz5k2sWLECcXFxmDdvnhSbV6D457uWevXqLRo12oqbN2OgoyPDlCn1MXFiPejqsp4lIiqMDA0NYWtrCwBwcHCAv78/AgMDAQCJiYkYNGgQOnbsiFWrVqnmGThwIGxsbNCxY0ds374d/v7+ePr0KUaNGoVRo0ZhwYIFqmmdnZ3RuHFjxMbGFuRmSYLFjZYqWdIIVata4/XrZGze3B5Nm5aTOhIRUcESAlAkSbNuXRPgEwbHPnjwAIcOHVKdMXTkyBHExMRg3Lhxmab19fWFq6srtmzZAn9/f/zxxx9ITU3F+PHjs1y2paVlrnMVFSxutMibN6lQKAQsLAwhk8mwenUbpKTIUaaMqdTRiIgKniIJ2G4mzbr93gB6mn327t+/H2ZmZlAoFEhOTgYAzJ8/HwBw584dAIC7u3uW87q5uammuXv3LszNzWFnZ5fb9EUej1Foib//fgFPzw0YMOCQ6rirhYUhCxsioiKiWbNmCAsLw6VLl/D111+jTZs2+Prrr9WmeXdczfvtGadR876A7Lkp8oQQWLXqH3zzzXGkpCiQmJiGyMhE2NtL9NcKEVFhoWuS3oMi1bo1ZGpqiooVKwIAFi1ahGbNmmHatGmYPn06XF1dAQC3bt2Ct7d3pnlv376NKlWqAABcXV0RFxeHyMjIYtt7w56bIiw+PgXdu+/H0KHBSElRoH378ggL683ChogISB/zomcqzSMPek6mTJmCuXPnIiIiAq1bt4aVlVWWZzrt3bsXd+/eRffu3QEAXbt2hYGBAebMmZPlcovDgGIWN0XUtWvPUbv2Bmzb9h/09HTw669NsHdvJ5QqxfupEBFpg6ZNm6Jq1aqYOXMmTE1NsXLlSvz5558YPHgw/vnnHzx8+BBr165F37590bVrV/j5+QEAHB0dsWDBAvz2228YMGAATp06hUePHuHcuXMYMmQIpk+fLvGW5T8WN0WQXK6En98+3L8fi3LlSuDMmW4YN+4z6OgU72OsRETaJiAgAKtXr8aTJ0/QtWtXnDhxAk+ePEHjxo1RuXJlzJ8/HxMnTsTWrVvVxtkMHz4cR44cwbNnz9CpUye4ublh4MCBMDc3z/KMK20jE9mNTtJS8fHxsLCwQFxcHMzNzfNuwW+jgN12gEwH6J75SpF57ezZp1i48CpWrWoNKyvjfF8fEVFhl5ycjPDwcLi4uMDIyEjqOJQLH/oZavL9zQHFRcTly5F4/DgeXbtWBgA0bOiAhg0dJE5FRERU+LC4KeSEEFi48Cq+++409PV1UKWKNapUKSV1LCIiokKLxU0h9urVW/Ttewj79t0HAHTsWIFnQhEREX0Ei5tC6vz5Z+jWbT+ePEmAgYEuFixoimHDahX7CzMRERF9DIubQmju3Cv4/vvTUCgEKla0xPbtvvDwsJE6FhERUZHA4qYQio1NgUIh0K2bG1aubAVzc0OpIxERERUZLG4KCblcCT299MsOTZ3qDU9PG3zxRUUehiIiItIQL+InMaVS4OefL6Jhwy1ISZEDAPT0dNCpUyUWNkRERLnAnhsJPX+eiF69DiI4+BEA4I8/7uCrr6pInIqIiKhoY8+NRI4ff4xatYIQHPwIxsZ6WLeuDXr2dJc6FhERUZamTp2KWrVqSR0jR1jcFDCFQompU8+hZcvtiIpKRJUq1ggJ+Qr9+lXnYSgiomIsKioK33zzDSpWrAgjIyPY2NigYcOGWLFiBZKSkqSOh3HjxuHYsWNSx8gRHpYqYAEBJ7Fo0TUAQP/+1bB4cQuYmOhLnIqIiKT04MEDNGjQAJaWlpg5cyaqV68OuVyOO3fuYN26dbC3t0fHjh0lzWhmZgYzs6JxIVn23BSwb76pjbJlzbBhgw/Wrm3LwoaIiDB8+HDo6ekhJCQEfn5+cHd3R/Xq1dGlSxccOHAAvr6+ePjwIWQyGcLCwlTzxcbGQiaT4eTJk6q2mzdvwsfHB2ZmZrCxsUGvXr0QHR2ten3Hjh2oXr06jI2NYW1tjZYtWyIxMREAcPLkSdSpUwempqawtLREgwYN8OhR+rjQ9w9L9e3bF1988QXmzp0LOzs7WFtbY8SIEUhLS1NNExkZifbt28PY2BguLi7YvHkznJ2dsXDhwnzZjxnYc5PP5HIlTpx4jFatnAEA5ctb4v79gTA05K4nIioIiYmp2b6mq6sDIyO9HE2royODsbH+R6c1NTXQKF9MTAyOHDmCmTNnwtTUNMtpcjpsITIyEk2aNMGgQYMwf/58vH37Ft999x38/Pxw/PhxREZGonv37pgzZw46deqEhIQEnDlzBkIIyOVyfPHFFxg0aBC2bNmC1NRUXL58+YPrPnHiBOzs7HDixAncu3cP/v7+qFWrFgYNGgQA6N27N6Kjo3Hy5Eno6+sjICAAL1680Gj/5Aa/YfPR06cJ6NHjAM6efYpDh7qidWtnAGBhQ0RUgMzMFmX7mo+PCw4c6KJ6XqbMMiQlybOctkkTB5w82U313Nl5NaKj32aaTohxGuW7d+8ehBCoXLmyWnupUqWQnJwMABgxYgSGDRv20WUtX74ctWvXxsyZM1Vt69atg6OjI+7cuYM3b95ALpejc+fOcHJyAgBUr14dAPDq1SvExcWhQ4cOqFChAgDA3f3DJ7qULFkSS5Ysga6uLtzc3NC+fXscO3YMgwYNwu3bt3H06FFcuXIFXl5eAIA1a9agUqVKOdwzuSf5Yally5bBxcUFRkZG8PT0xJkzZz44/alTp+Dp6QkjIyOUL18eK1asKKCkmjl48AFq1QrCmTNPYWZmgMTEtI/PRERExdb7PSSXL19GWFgYqlatipSUlBwt4+rVqzhx4oRqfIyZmRnc3NwAAPfv30fNmjXRokULVK9eHV9++SVWr16N169fAwCsrKzQt29ftGnTBr6+vvjtt98QGRn5wfVVrVoVurq6qud2dnaqnpn//vsPenp6qF27tur1ihUromTJkjnalk8haRfCtm3bMHr0aCxbtgwNGjTAypUr0a5dO9y8eRPlypXLNH14eDh8fHwwaNAgbNy4EefOncPw4cNRunRpdOnSJYs1FLw0uQ4mjj+FX3+9AgCoXdsG27Z1QMWK+f/DJCKizN68GZXta7q66n/jv3gxPNtpdXTUi4+HDwd9WrD/V7Fi+tXob9++rdZevnx5AICxsfH/rz89qxBCNc2741sAQKlUwtfXF7Nnz860Hjs7O+jq6iI4OBjnz5/HkSNHsHjxYkycOBGXLl2Ci4sL1q9fj1GjRuHQoUPYtm0bJk2ahODgYNSrVy/L7Pr66uNGZTIZlEplppzvyq49L0naczN//nwMGDAAAwcOhLu7OxYuXAhHR0csX748y+lXrFiBcuXKYeHChXB3d8fAgQPRv39/zJ07t4CTZ+3RS0s0/mmoqrD5+msPnD/fnYUNEZGETE0Nsn28O97mY9O+O97mQ9NqytraGq1atcKSJUtUA3uzUrp0aQBQ6015d3AxANSuXRs3btyAs7MzKlasqPbIGM8jk8nQoEEDTJs2DaGhoTAwMMDu3btVy/Dw8MCECRNw/vx5VKtWDZs3b9Z4mwDAzc0NcrkcoaGhqrZ79+4hNjY2V8vThGTFTWpqKq5evYrWrVurtbdu3Rrnz5/Pcp4LFy5kmr5NmzYICQnJVL1mSElJQXx8vNojv5y+XR4X7znBwsIQO3d2xKJFLTi+hoiIPmrZsmWQy+Xw8vLCtm3bcOvWLfz333/YuHEjbt++DV1dXRgbG6NevXr45ZdfcPPmTZw+fRqTJk1SW86IESPw6tUrdO/eHZcvX8aDBw9w5MgR9O/fHwqFApcuXcLMmTMREhKCx48fY9euXXj58iXc3d0RHh6OCRMm4MKFC3j06BGOHDmCO3fufHTcTXbc3NzQsmVLDB48GJcvX0ZoaCgGDx4MY2PjfL+um2TfvNHR0VAoFLCxsVFrt7GxQVRUVJbzREVFZTm9XC5HdHQ07OzsMs0za9YsTJs2Le+Cf0CvpjfxNPYous3cChcXywJZJxERFX0VKlRAaGgoZs6ciQkTJuDp06cwNDRElSpVMG7cOAwfnn64bN26dejfvz+8vLxQuXJlzJkzR+2Pfnt7e5w7dw7fffcd2rRpg5SUFDg5OaFt27bQ0dGBubk5Tp8+jYULFyI+Ph5OTk6YN28e2rVrh+fPn+P27dv4/fffERMTAzs7O4wcORJDhgzJ9XYFBQVhwIABaNy4MWxtbTFr1izcuHEDRkZGn7zPPkQmCuLgVxYiIiJQtmxZnD9/HvXr11e1//zzz9iwYUOmY48A4Orqin79+mHChAmqtnPnzqFhw4aIjIyEra1tpnlSUlLUBmLFx8fD0dERcXFxMDc3z+OtIiIiqSQnJyM8PFx1kgoVPk+fPoWjoyOOHj2KFi1aZHr9Qz/D+Ph4WFhY5Oj7W7Kem1KlSkFXVzdTL82LFy8y9c5ksLW1zXJ6PT09WFtbZzmPoaEhDA0N8yY0ERER5djx48fx5s0bVK9eHZGRkRg/fjycnZ3RuHHjfF2vZGNuDAwM4OnpieDgYLX24OBgeHt7ZzlP/fr1M01/5MgReHl5ZRqxTURERNJKS0vDDz/8gKpVq6JTp04oXbq06oJ++UnS0a4BAQHo1asXvLy8UL9+faxatQqPHz/G0KFDAQATJkzAs2fPEBQUBAAYOnQolixZgoCAAAwaNAgXLlzA2rVrsWXLFik3g4iIiLLQpk0btGnTpsDXK2lx4+/vj5iYGPz000+IjIxEtWrVcPDgQdVVEyMjI/H48WPV9C4uLjh48CDGjBmDpUuXwt7eHosWLSo017ghIiIi6Uk2oFgqmgxIIiKiooMDiou+vBpQLPntF4iIiPJSMfubXavk1c+OxQ0REWmFjHscpaZmf2dvKtwyfnbv3q8qN3j5XCIi0gp6enowMTHBy5cvoa+vr7oXExUNSqUSL1++hImJCfT0Pq08YXFDRERaQSaTwc7ODuHh4Xj06JHUcSgXdHR0UK5cuU++PQOLGyIi0hoGBgaoVKkSD00VUQYGBnnS48bihoiItIqOjg7PlirmeECSiIiItAqLGyIiItIqLG6IiIhIqxS7MTcZFwiKj4+XOAkRERHlVMb3dk4u9FfsipuEhAQAgKOjo8RJiIiISFMJCQmwsLD44DTF7t5SSqUSERERKFGixCefR/+++Ph4ODo64smTJ7xvVT7ifi4Y3M8Fg/u54HBfF4z82s9CCCQkJMDe3v6jp4sXu54bHR0dODg45Os6zM3N+YtTALifCwb3c8Hgfi443NcFIz/288d6bDJwQDERERFpFRY3REREpFVY3OQhQ0NDTJkyBYaGhlJH0WrczwWD+7lgcD8XHO7rglEY9nOxG1BMRERE2o09N0RERKRVWNwQERGRVmFxQ0RERFqFxQ0RERFpFRY3Glq2bBlcXFxgZGQET09PnDlz5oPTnzp1Cp6enjAyMkL58uWxYsWKAkpatGmyn3ft2oVWrVqhdOnSMDc3R/369XH48OECTFt0afp+znDu3Dno6emhVq1a+RtQS2i6n1NSUjBx4kQ4OTnB0NAQFSpUwLp16woobdGl6X7etGkTatasCRMTE9jZ2aFfv36IiYkpoLRF0+nTp+Hr6wt7e3vIZDLs2bPno/NI8j0oKMe2bt0q9PX1xerVq8XNmzfFN998I0xNTcWjR4+ynP7BgwfCxMREfPPNN+LmzZti9erVQl9fX+zYsaOAkxctmu7nb775RsyePVtcvnxZ3LlzR0yYMEHo6+uLa9euFXDyokXT/ZwhNjZWlC9fXrRu3VrUrFmzYMIWYbnZzx07dhR169YVwcHBIjw8XFy6dEmcO3euAFMXPZru5zNnzggdHR3x22+/iQcPHogzZ86IqlWrii+++KKAkxctBw8eFBMnThQ7d+4UAMTu3bs/OL1U34MsbjRQp04dMXToULU2Nzc38f3332c5/fjx44Wbm5ta25AhQ0S9evXyLaM20HQ/Z6VKlSpi2rRpeR1Nq+R2P/v7+4tJkyaJKVOmsLjJAU33819//SUsLCxETExMQcTTGpru519//VWUL19erW3RokXCwcEh3zJqm5wUN1J9D/KwVA6lpqbi6tWraN26tVp769atcf78+SznuXDhQqbp27Rpg5CQEKSlpeVb1qIsN/v5fUqlEgkJCbCyssqPiFoht/t5/fr1uH//PqZMmZLfEbVCbvbz3r174eXlhTlz5qBs2bJwdXXFuHHj8Pbt24KIXCTlZj97e3vj6dOnOHjwIIQQeP78OXbs2IH27dsXRORiQ6rvwWJ348zcio6OhkKhgI2NjVq7jY0NoqKispwnKioqy+nlcjmio6NhZ2eXb3mLqtzs5/fNmzcPiYmJ8PPzy4+IWiE3+/nu3bv4/vvvcebMGejp8aMjJ3Kznx88eICzZ8/CyMgIu3fvRnR0NIYPH45Xr15x3E02crOfvb29sWnTJvj7+yM5ORlyuRwdO3bE4sWLCyJysSHV9yB7bjQkk8nUngshMrV9bPqs2kmdpvs5w5YtWzB16lRs27YNZcqUya94WiOn+1mhUKBHjx6YNm0aXF1dCyqe1tDk/axUKiGTybBp0ybUqVMHPj4+mD9/PgIDA9l78xGa7OebN29i1KhRmDx5Mq5evYpDhw4hPDwcQ4cOLYioxYoU34P88yuHSpUqBV1d3Ux/Bbx48SJTVZrB1tY2y+n19PRgbW2db1mLstzs5wzbtm3DgAED8Mcff6Bly5b5GbPI03Q/JyQkICQkBKGhoRg5ciSA9C9hIQT09PRw5MgRNG/evECyFyW5eT/b2dmhbNmysLCwULW5u7tDCIGnT5+iUqVK+Zq5KMrNfp41axYaNGiAb7/9FgBQo0YNmJqaolGjRpgxYwZ71vOIVN+D7LnJIQMDA3h6eiI4OFitPTg4GN7e3lnOU79+/UzTHzlyBF5eXtDX18+3rEVZbvYzkN5j07dvX2zevJnHzHNA0/1sbm6O69evIywsTPUYOnQoKleujLCwMNStW7egohcpuXk/N2jQABEREXjz5o2q7c6dO9DR0YGDg0O+5i2qcrOfk5KSoKOj/hWoq6sL4H89C/TpJPsezNfhylom41TDtWvXips3b4rRo0cLU1NT8fDhQyGEEN9//73o1auXavqMU+DGjBkjbt68KdauXctTwXNA0/28efNmoaenJ5YuXSoiIyNVj9jYWKk2oUjQdD+/j2dL5Yym+zkhIUE4ODiIrl27ihs3bohTp06JSpUqiYEDB0q1CUWCpvt5/fr1Qk9PTyxbtkzcv39fnD17Vnh5eYk6depItQlFQkJCgggNDRWhoaECgJg/f74IDQ1VnXJfWL4HWdxoaOnSpcLJyUkYGBiI2rVri1OnTqle69Onj2jSpIna9CdPnhQeHh7CwMBAODs7i+XLlxdw4qJJk/3cpEkTASDTo0+fPgUfvIjR9P38LhY3Oafpfr5165Zo2bKlMDY2Fg4ODiIgIEAkJSUVcOqiR9P9vGjRIlGlShVhbGws7OzsRM+ePcXTp08LOHXRcuLEiQ9+3haW70GZEOx/IyIiIu3BMTdERESkVVjcEBERkVZhcUNERERahcUNERERaRUWN0RERKRVWNwQERGRVmFxQ0RERFqFxQ0RqQkMDISlpaXUMXLN2dkZCxcu/OA0U6dORa1atQokDxEVPBY3RFqob9++kMlkmR737t2TOhoCAwPVMtnZ2cHPzw/h4eF5svwrV65g8ODBqucymQx79uxRm2bcuHE4duxYnqwvO+9vp42NDXx9fXHjxg2Nl1OUi00iKbC4IdJSbdu2RWRkpNrDxcVF6lgA0m/EGRkZiYiICGzevBlhYWHo2LEjFArFJy+7dOnSMDEx+eA0ZmZm+XpH4gzvbueBAweQmJiI9u3bIzU1Nd/XTVScsbgh0lKGhoawtbVVe+jq6mL+/PmoXr06TE1N4ejoiOHDh6vdgfp9f//9N5o1a4YSJUrA3Nwcnp6eCAkJUb1+/vx5NG7cGMbGxnB0dMSoUaOQmJj4wWwymQy2traws7NDs2bNMGXKFPz777+qnqXly5ejQoUKMDAwQOXKlbFhwwa1+adOnYpy5crB0NAQ9vb2GDVqlOq1dw9LOTs7AwA6deoEmUymev7uYanDhw/DyMgIsbGxausYNWoUmjRpkmfb6eXlhTFjxuDRo0f477//VNN86Odx8uRJ9OvXD3FxcaoeoKlTpwIAUlNTMX78eJQtWxampqaoW7cuTp48+cE8RMUFixuiYkZHRweLFi3Cv//+i99//x3Hjx/H+PHjs52+Z8+ecHBwwJUrV3D16lV8//330NfXBwBcv34dbdq0QefOnfHPP/9g27ZtOHv2LEaOHKlRJmNjYwBAWloadu/ejW+++QZjx47Fv//+iyFDhqBfv344ceIEAGDHjh1YsGABVq5cibt372LPnj2oXr16lsu9cuUKAGD9+vWIjIxUPX9Xy5YtYWlpiZ07d6raFAoFtm/fjp49e+bZdsbGxmLz5s0AoNp/wId/Ht7e3li4cKGqBygyMhLjxo0DAPTr1w/nzp3D1q1b8c8//+DLL79E27Ztcffu3RxnItJa+X5rTiIqcH369BG6urrC1NRU9ejatWuW027fvl1YW1urnq9fv15YWFionpcoUUIEBgZmOW+vXr3E4MGD1drOnDkjdHR0xNu3b7Oc5/3lP3nyRNSrV084ODiIlJQU4e3tLQYNGqQ2z5dffil8fHyEEELMmzdPuLq6itTU1CyX7+TkJBYsWKB6DkDs3r1bbZr372g+atQo0bx5c9Xzw4cPCwMDA/Hq1atP2k4AwtTUVJiYmKjuntyxY8csp8/wsZ+HEELcu3dPyGQy8ezZM7X2Fi1aiAkTJnxw+UTFgZ60pRUR5ZdmzZph+fLlquempqYAgBMnTmDmzJm4efMm4uPjIZfLkZycjMTERNU07woICMDAgQOxYcMGtGzZEl9++SUqVKgAALh69Sru3buHTZs2qaYXQkCpVCI8PBzu7u5ZZouLi4OZmRmEEEhKSkLt2rWxa9cuGBgY4NatW2oDggGgQYMG+O233wAAX375JRYuXIjy5cujbdu28PHxga+vL/T0cv9x1rNnT9SvXx8RERGwt7fHpk2b4OPjg5IlS37SdpYoUQLXrl2DXC7HqVOn8Ouvv2LFihVq02j68wCAa9euQQgBV1dXtfaUlJQCGUtEVNixuCHSUqampqhYsaJa26NHj+Dj44OhQ4di+vTpsLKywtmzZzFgwACkpaVluZypU6eiR48eOHDgAP766y9MmTIFW7duRadOnaBUKjFkyBC1MS8ZypUrl222jC99HR0d2NjYZPoSl8lkas+FEKo2R0dH/PfffwgODsbRo0cxfPhw/Prrrzh16pTa4R5N1KlTBxUqVMDWrVsxbNgw7N69G+vXr1e9ntvt1NHRUf0M3NzcEBUVBX9/f5w+fRpA7n4eGXl0dXVx9epV6Orqqr1mZmam0bYTaSMWN0TFSEhICORyOebNmwcdnfQhd9u3b//ofK6urnB1dcWYMWPQvXt3rF+/Hp06dULt2rVx48aNTEXUx7z7pf8+d3d3nD17Fr1791a1nT9/Xq13xNjYGB07dkTHjh0xYsQIuLm54fr166hdu3am5enr6+foLKwePXpg06ZNcHBwgI6ODtq3b696Lbfb+b4xY8Zg/vz52L17Nzp16pSjn4eBgUGm/B4eHlAoFHjx4gUaNWr0SZmItBEHFBMVIxUqVIBcLsfixYvx4MEDbNiwIdNhkne9ffsWI0eOxMmTJ/Ho0SOcO3cOV65cURUa3333HS5cuIARI0YgLCwMd+/exd69e/H111/nOuO3336LwMBArFixAnfv3sX8+fOxa9cu1UDawMBArF27Fv/++69qG4yNjeHk5JTl8pydnXHs2DFERUXh9evX2a63Z8+euHbtGn7++Wd07doVRkZGqtfyajvNzc0xcOBATJkyBUKIHP08nJ2d8ebNGxw7dgzR0dFISkqCq6srevbsid69e2PXrl0IDw/HlStXMHv2bBw8eFCjTERaScoBP0SUP/r06SM+//zzLF+bP3++sLOzE8bGxqJNmzYiKChIABCvX78WQqgPYE1JSRHdunUTjo6OwsDAQNjb24uRI0eqDaK9fPmyaNWqlTAzMxOmpqaiRo0a4ueff842W1YDZN+3bNkyUb58eaGvry9cXV1FUFCQ6rXdu3eLunXrCnNzc2Fqairq1asnjh49qnr9/QHFe/fuFRUrVhR6enrCyclJCJF5QHGGzz77TAAQx48fz/RaXm3no0ePhJ6enti2bZsQ4uM/DyGEGDp0qLC2thYAxJQpU4QQQqSmporJkycLZ2dnoa+vL2xtbUWnTp3EP//8k20mouJCJoQQ0pZXRERERHmHh6WIiIhIq7C4ISIiIq3C4oaIiIi0CosbIiIi0iosboiIiEirsLghIiIircLihoiIiLQKixsiIiLSKixuiIiISKuwuCEiIiKtwuKGiIiItAqLGyIiItIq/wd3Da/D/yH8+wAAAABJRU5ErkJggg==",
+ "image/png": "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",
"text/plain": [
"