diff --git a/mlops/mpg-pred-end-to-end-ml/models/.keep b/mlops/mpg-pred-end-to-end-ml/models/.keep new file mode 100644 index 0000000..e69de29 diff --git a/mlops/mpg-pred-end-to-end-ml/notebooks/02-Model-Fitting-Hyperparamater-Tuning.ipynb b/mlops/mpg-pred-end-to-end-ml/notebooks/02-Model-Fitting-Hyperparamater-Tuning.ipynb new file mode 100644 index 0000000..0ed13eb --- /dev/null +++ b/mlops/mpg-pred-end-to-end-ml/notebooks/02-Model-Fitting-Hyperparamater-Tuning.ipynb @@ -0,0 +1 @@ +{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"02-Model-Fitting-Hyperparamater-Tuning.ipynb","provenance":[],"collapsed_sections":[],"mount_file_id":"1j5D8yr24c72vbQI_QBLaSDbGy6HEg-sM","authorship_tag":"ABX9TyML/e4Kkr+Wk+kXzXl2Xblk"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","metadata":{"id":"k9edgunRbcAo"},"source":["# **`Model Fitting and Hyperparameter Tuning`**\n","\n","1. Train few regression algorithm (with default hyperparams)\n","2. Evaluate their crossvalidation errors (**RMSE**)\n","3. Choose the best model with the lowest error\n","4. Tune the hyperparameters of the best model\n","5. Evaluate on the test data\n","6. Retrain the model on the whole data\n","7. Save the model by pickling it. "]},{"cell_type":"markdown","metadata":{"id":"sOUkSHMqdlmr"},"source":["## Autoreload modules"]},{"cell_type":"code","metadata":{"id":"fkia0MC6doQx","executionInfo":{"status":"ok","timestamp":1625250521971,"user_tz":-330,"elapsed":535,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["%load_ext autoreload\n","%autoreload 2"],"execution_count":1,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"rq4unIwSdfrz"},"source":["## Change project directory"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":0},"id":"9iojknmIbjeD","executionInfo":{"status":"ok","timestamp":1625250522723,"user_tz":-330,"elapsed":7,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"f83c727f-3265-494d-dfd8-8144b7372446"},"source":["import os\n","os.chdir('/content/drive/MyDrive/projects/data-science-explorations/mlops/mpg-pred-end-to-end-ml/notebooks')\n","os.listdir('../')"],"execution_count":2,"outputs":[{"output_type":"execute_result","data":{"text/plain":["['notebooks',\n"," 'README.md',\n"," 'data',\n"," 'src',\n"," 'venv-hpx360-win',\n"," 'requirements.txt',\n"," 'scripts',\n"," 'reports',\n"," 'src.egg-info',\n"," 'setup.py',\n"," '.gitignore']"]},"metadata":{"tags":[]},"execution_count":2}]},{"cell_type":"code","metadata":{"id":"h29i_1N1djzn","executionInfo":{"status":"ok","timestamp":1625250531065,"user_tz":-330,"elapsed":472,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["!pip install -e ../."],"execution_count":4,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"HT1n0JzaeQeW"},"source":["## Some imports"]},{"cell_type":"code","metadata":{"id":"nB77f4YleP48","executionInfo":{"status":"ok","timestamp":1625251610405,"user_tz":-330,"elapsed":1741,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["import numpy as np\n","import pandas as pd\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","import src"],"execution_count":19,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"_kWyxnAMeaFH"},"source":["## Load Data"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":202},"id":"NsxfAugeeYL0","executionInfo":{"status":"ok","timestamp":1625250538675,"user_tz":-330,"elapsed":3646,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"d7ab7a86-0db9-45d2-ce5a-57fe3bb1ae45"},"source":["from src.project import load_data\n","df = load_data()\n","df.head()"],"execution_count":6,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
mpgcylinderdisplacementhorsepowerweightaccelerationmodel_yearorigin
018.08307.0130.03504.012.0701
115.08350.0165.03693.011.5701
218.08318.0150.03436.011.0701
316.08304.0150.03433.012.0701
417.08302.0140.03449.010.5701
\n","
"],"text/plain":[" mpg cylinder displacement ... acceleration model_year origin\n","0 18.0 8 307.0 ... 12.0 70 1\n","1 15.0 8 350.0 ... 11.5 70 1\n","2 18.0 8 318.0 ... 11.0 70 1\n","3 16.0 8 304.0 ... 12.0 70 1\n","4 17.0 8 302.0 ... 10.5 70 1\n","\n","[5 rows x 8 columns]"]},"metadata":{"tags":[]},"execution_count":6}]},{"cell_type":"markdown","metadata":{"id":"L78N5qADjWWn"},"source":["## Split into train and test sets"]},{"cell_type":"code","metadata":{"id":"acTw7VDDjVtI","executionInfo":{"status":"ok","timestamp":1625252070335,"user_tz":-330,"elapsed":480,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["from src.project.utils import split_into_train_and_test\n","dfX_train, dfy_train, dfX_test, dfy_test = split_into_train_and_test(df) # default stratify by cylinder"],"execution_count":28,"outputs":[]},{"cell_type":"code","metadata":{"id":"lpYgHcxbrnXh","executionInfo":{"status":"ok","timestamp":1625253933234,"user_tz":-330,"elapsed":734,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["y_train, y_test = dfy_train.to_numpy().ravel(), dfy_test.to_numpy().ravel()"],"execution_count":71,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"5Ag2UElvfIlp"},"source":["## Import the preprocessing pipeline"]},{"cell_type":"code","metadata":{"id":"qoqAj9SieqMs","executionInfo":{"status":"ok","timestamp":1625252851381,"user_tz":-330,"elapsed":785,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["from src.project.preprocess import preprocessor, PREPROCESSED_COLUMNS"],"execution_count":54,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":434},"id":"HCkt-r5NfPGW","executionInfo":{"status":"ok","timestamp":1625252851385,"user_tz":-330,"elapsed":21,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"406f8daf-79a0-45b9-d410-3d936edd23e1"},"source":["pd.DataFrame(preprocessor.fit_transform(dfX_train), columns=PREPROCESSED_COLUMNS)"],"execution_count":55,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
cylinderdisplacementhorsepowerweightaccelerationmodel_yeardisplacement_on_horsepowerweight_on_cylinderacceleration_on_horsepoweracceleration_on_cylinderorigin_1origin_2origin_3
0-0.856578-1.078045-1.147090-1.1722031.215869-0.544364-1.284523-0.4822432.073644-0.7298611.9494101.2014181.483644
1-0.856578-1.117458-0.985534-1.1758130.130698-0.544364-1.2845232.073644-0.482243-0.1897101.5173741.2085461.662800
2-0.856578-0.358749-0.312382-0.471828-0.4118871.6365200.778499-0.482243-0.4822430.180942-0.2770370.5295670.031415
30.3226070.567467-0.4200870.194851-0.411887-1.3621950.778499-0.482243-0.482243-1.159033-0.849319-0.641330-0.927575
4-0.856578-0.930244-0.366234-0.856914-0.050164-0.816974-1.2845232.073644-0.4822430.9160850.7908450.5949250.901569
..........................................
313-0.856578-1.009071-0.770125-1.045847-0.050164-0.544364-1.2845232.073644-0.4822430.1789561.0210600.9647101.208442
3141.5017932.0454721.7878512.034839-1.497058-0.2717530.778499-0.482243-0.4822430.327827-1.328285-1.484094-1.310549
315-0.856578-0.565670-0.527791-0.820812-1.4608861.6365200.778499-0.482243-0.4822430.360307-0.3920351.0451660.355917
316-0.856578-0.782444-0.231604-0.728151-0.231025-1.634806-1.284523-0.4822432.0736440.9720370.3745970.2452280.403785
3170.322607-0.4572830.441547-0.056658-0.6650941.363910-1.284523-0.4822432.0736441.132546-0.2512980.0052160.147115
\n","

318 rows × 13 columns

\n","
"],"text/plain":[" cylinder displacement horsepower ... origin_1 origin_2 origin_3\n","0 -0.856578 -1.078045 -1.147090 ... 1.949410 1.201418 1.483644\n","1 -0.856578 -1.117458 -0.985534 ... 1.517374 1.208546 1.662800\n","2 -0.856578 -0.358749 -0.312382 ... -0.277037 0.529567 0.031415\n","3 0.322607 0.567467 -0.420087 ... -0.849319 -0.641330 -0.927575\n","4 -0.856578 -0.930244 -0.366234 ... 0.790845 0.594925 0.901569\n",".. ... ... ... ... ... ... ...\n","313 -0.856578 -1.009071 -0.770125 ... 1.021060 0.964710 1.208442\n","314 1.501793 2.045472 1.787851 ... -1.328285 -1.484094 -1.310549\n","315 -0.856578 -0.565670 -0.527791 ... -0.392035 1.045166 0.355917\n","316 -0.856578 -0.782444 -0.231604 ... 0.374597 0.245228 0.403785\n","317 0.322607 -0.457283 0.441547 ... -0.251298 0.005216 0.147115\n","\n","[318 rows x 13 columns]"]},"metadata":{"tags":[]},"execution_count":55}]},{"cell_type":"markdown","metadata":{"id":"O2O-h9GFn57a"},"source":["## Add ML Model to Pipeline"]},{"cell_type":"code","metadata":{"id":"jNwvOIlHoAgw","executionInfo":{"status":"ok","timestamp":1625253475527,"user_tz":-330,"elapsed":504,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["from sklearn.pipeline import Pipeline\n","\n","from sklearn.linear_model import LinearRegression, Ridge, Lasso\n","from sklearn.tree import DecisionTreeRegressor\n","from sklearn.ensemble import RandomForestRegressor, AdaBoostRegressor, ExtraTreesRegressor\n","from sklearn.svm import SVR\n","\n","model = Pipeline([\n"," ('preprocess', preprocessor),\n"," ('reg', LinearRegression())\n","])"],"execution_count":66,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"CDUeR8T2qLXt"},"source":["## Find the best ML model"]},{"cell_type":"code","metadata":{"id":"F2luYwcuqCHc","executionInfo":{"status":"ok","timestamp":1625253858460,"user_tz":-330,"elapsed":466,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["from sklearn.model_selection import GridSearchCV\n","\n","\n","param_grid = {'reg': [LinearRegression(), Ridge(), Lasso(), DecisionTreeRegressor(),\n"," RandomForestRegressor(), AdaBoostRegressor(), ExtraTreesRegressor(), SVR()]}\n"," \n","grid_search = GridSearchCV(model, param_grid, scoring = 'neg_mean_squared_error', n_jobs=-1, return_train_score=True, cv=5)\n"],"execution_count":69,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"UeGE_CChrSNK","executionInfo":{"status":"ok","timestamp":1625253947294,"user_tz":-330,"elapsed":5385,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"91e5be5e-1e00-4ebe-8ef1-5fd357447cb0"},"source":["%%time\n","grid_search.fit(dfX_train, y_train)"],"execution_count":72,"outputs":[{"output_type":"stream","text":["CPU times: user 560 ms, sys: 46.8 ms, total: 607 ms\n","Wall time: 5.03 s\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["GridSearchCV(cv=5, error_score=nan,\n"," estimator=Pipeline(memory=None,\n"," steps=[('preprocess',\n"," Pipeline(memory=None,\n"," steps=[('feature_union',\n"," FeatureUnion(n_jobs=None,\n"," transformer_list=[('imputer',\n"," Pipeline(memory=None,\n"," steps=[('drop_cols',\n"," ColumnTransformer(n_jobs=None,\n"," remainder='passthrough',\n"," sparse_threshold=0.3,\n"," transformer_weights=None,\n"," transformers=[('drop_col...\n"," min_weight_fraction_leaf=0.0,\n"," n_estimators=100,\n"," n_jobs=None,\n"," oob_score=False,\n"," random_state=None,\n"," verbose=0,\n"," warm_start=False),\n"," SVR(C=1.0, cache_size=200, coef0=0.0, degree=3,\n"," epsilon=0.1, gamma='scale', kernel='rbf',\n"," max_iter=-1, shrinking=True, tol=0.001,\n"," verbose=False)]},\n"," pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n"," scoring='neg_mean_squared_error', verbose=0)"]},"metadata":{"tags":[]},"execution_count":72}]},{"cell_type":"markdown","metadata":{"id":"L634VIRIsQ4q"},"source":["## See the best performing `ML` Model"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"yLwjkdJnrzpM","executionInfo":{"status":"ok","timestamp":1625254040811,"user_tz":-330,"elapsed":475,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"14c55f82-7db4-4826-ab41-b36e3a2e551d"},"source":["print('Best ML Model:', grid_search.best_params_['reg'].__class__.__name__)\n","print('Lowest MSE: ', -grid_search.best_score_)"],"execution_count":76,"outputs":[{"output_type":"stream","text":["Best ML Model: ExtraTreesRegressor\n","Lowest MSE: 6.578075227430553\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"Js2qCbC6sUT-"},"source":["## Analyze the `GridSearchCV` results"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":447},"id":"KnPUhe3wsPKv","executionInfo":{"status":"ok","timestamp":1625254127053,"user_tz":-330,"elapsed":506,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"a2c142b5-6ec1-4114-ab15-6cf488aa2e76"},"source":["gsdf = pd.DataFrame(grid_search.cv_results_)\n","gsdf"],"execution_count":77,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
mean_fit_timestd_fit_timemean_score_timestd_score_timeparam_regparamssplit0_test_scoresplit1_test_scoresplit2_test_scoresplit3_test_scoresplit4_test_scoremean_test_scorestd_test_scorerank_test_scoresplit0_train_scoresplit1_train_scoresplit2_train_scoresplit3_train_scoresplit4_train_scoremean_train_scorestd_train_score
00.0427750.0038600.0102950.003850LinearRegression(copy_X=True, fit_intercept=Tr...{'reg': LinearRegression(copy_X=True, fit_inte...-9.148538-9.892453-5.941754-9.525043-10.178172-8.9371921.5372345-8.003644-7.668819-8.718574-7.806587e+00-7.615852e+00-7.9626950.401014
10.0463870.0056310.0084950.002541Ridge(alpha=1.0, copy_X=True, fit_intercept=Tr...{'reg': Ridge(alpha=1.0, copy_X=True, fit_inte...-8.772302-9.929682-5.898450-9.534427-10.323222-8.8916171.5819964-8.060098-7.702680-8.752713-7.835012e+00-7.645924e+00-7.9992850.402784
20.0444130.0070120.0072890.000728Lasso(alpha=1.0, copy_X=True, fit_intercept=Tr...{'reg': Lasso(alpha=1.0, copy_X=True, fit_inte...-8.543044-13.537515-8.031968-11.138491-12.760255-10.8022552.2003187-10.691018-9.787256-10.966681-1.007835e+01-9.891770e+00-10.2830150.463595
30.0431770.0044250.0068700.000450DecisionTreeRegressor(ccp_alpha=0.0, criterion...{'reg': DecisionTreeRegressor(ccp_alpha=0.0, c...-10.784687-14.423125-12.994687-15.381270-14.628413-13.6424371.6242838-0.000000-0.000000-0.000000-0.000000e+00-0.000000e+000.0000000.000000
40.4071440.0301900.0231720.006669RandomForestRegressor(bootstrap=True, ccp_alph...{'reg': RandomForestRegressor(bootstrap=True, ...-5.598824-8.192295-6.643304-7.762367-10.399665-7.7192911.6164232-1.193800-1.059778-1.123613-1.012244e+00-1.047338e+00-1.0873550.064263
50.1782200.0104100.0133620.000791AdaBoostRegressor(base_estimator=None, learnin...{'reg': AdaBoostRegressor(base_estimator=None,...-7.396537-9.040666-7.267819-8.040868-8.802777-8.1097330.7168203-4.406702-3.946609-4.000836-4.051303e+00-4.196235e+00-4.1203370.165525
60.2846930.0062680.0212410.000564ExtraTreesRegressor(bootstrap=False, ccp_alpha...{'reg': ExtraTreesRegressor(bootstrap=False, c...-5.545804-5.725714-4.730465-6.270181-10.618212-6.5780752.0795801-0.000002-0.000010-0.000020-1.960784e-07-7.843137e-07-0.0000070.000008
70.0401600.0062970.0075040.001579SVR(C=1.0, cache_size=200, coef0=0.0, degree=3...{'reg': SVR(C=1.0, cache_size=200, coef0=0.0, ...-6.168240-12.187406-9.972687-11.595085-13.949680-10.7746192.6310446-10.318638-9.280431-9.888359-9.698993e+00-8.772959e+00-9.5918760.528239
\n","
"],"text/plain":[" mean_fit_time std_fit_time ... mean_train_score std_train_score\n","0 0.042775 0.003860 ... -7.962695 0.401014\n","1 0.046387 0.005631 ... -7.999285 0.402784\n","2 0.044413 0.007012 ... -10.283015 0.463595\n","3 0.043177 0.004425 ... 0.000000 0.000000\n","4 0.407144 0.030190 ... -1.087355 0.064263\n","5 0.178220 0.010410 ... -4.120337 0.165525\n","6 0.284693 0.006268 ... -0.000007 0.000008\n","7 0.040160 0.006297 ... -9.591876 0.528239\n","\n","[8 rows x 21 columns]"]},"metadata":{"tags":[]},"execution_count":77}]},{"cell_type":"code","metadata":{"id":"3-YJ0yeXs0Oh","executionInfo":{"status":"ok","timestamp":1625255245973,"user_tz":-330,"elapsed":534,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["model_compdf = gsdf[['param_reg', 'rank_test_score', 'mean_fit_time', 'mean_train_score', 'mean_test_score', 'std_train_score', 'std_test_score']].copy()\n","model_compdf['mean_train_mse'] = -model_compdf['mean_train_score']\n","model_compdf['mean_test_mse'] = -model_compdf['mean_test_score']\n","model_compdf['param_reg_name'] = model_compdf['param_reg'].apply(lambda m: m.__class__.__name__)"],"execution_count":97,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":427},"id":"sRnlxfc7tiHg","executionInfo":{"status":"ok","timestamp":1625255248257,"user_tz":-330,"elapsed":33,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"d7e2b9f7-13dd-43be-942e-8291db8e0f3a"},"source":["model_compdf"],"execution_count":98,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
param_regrank_test_scoremean_fit_timemean_train_scoremean_test_scorestd_train_scorestd_test_scoremean_train_msemean_test_mseparam_reg_name
0LinearRegression(copy_X=True, fit_intercept=Tr...50.042775-7.962695-8.9371920.4010141.5372347.9626958.937192LinearRegression
1Ridge(alpha=1.0, copy_X=True, fit_intercept=Tr...40.046387-7.999285-8.8916170.4027841.5819967.9992858.891617Ridge
2Lasso(alpha=1.0, copy_X=True, fit_intercept=Tr...70.044413-10.283015-10.8022550.4635952.20031810.28301510.802255Lasso
3DecisionTreeRegressor(ccp_alpha=0.0, criterion...80.0431770.000000-13.6424370.0000001.624283-0.00000013.642437DecisionTreeRegressor
4RandomForestRegressor(bootstrap=True, ccp_alph...20.407144-1.087355-7.7192910.0642631.6164231.0873557.719291RandomForestRegressor
5AdaBoostRegressor(base_estimator=None, learnin...30.178220-4.120337-8.1097330.1655250.7168204.1203378.109733AdaBoostRegressor
6ExtraTreesRegressor(bootstrap=False, ccp_alpha...10.284693-0.000007-6.5780750.0000082.0795800.0000076.578075ExtraTreesRegressor
7SVR(C=1.0, cache_size=200, coef0=0.0, degree=3...60.040160-9.591876-10.7746190.5282392.6310449.59187610.774619SVR
\n","
"],"text/plain":[" param_reg ... param_reg_name\n","0 LinearRegression(copy_X=True, fit_intercept=Tr... ... LinearRegression\n","1 Ridge(alpha=1.0, copy_X=True, fit_intercept=Tr... ... Ridge\n","2 Lasso(alpha=1.0, copy_X=True, fit_intercept=Tr... ... Lasso\n","3 DecisionTreeRegressor(ccp_alpha=0.0, criterion... ... DecisionTreeRegressor\n","4 RandomForestRegressor(bootstrap=True, ccp_alph... ... RandomForestRegressor\n","5 AdaBoostRegressor(base_estimator=None, learnin... ... AdaBoostRegressor\n","6 ExtraTreesRegressor(bootstrap=False, ccp_alpha... ... ExtraTreesRegressor\n","7 SVR(C=1.0, cache_size=200, coef0=0.0, degree=3... ... SVR\n","\n","[8 rows x 10 columns]"]},"metadata":{"tags":[]},"execution_count":98}]},{"cell_type":"markdown","metadata":{"id":"_dI8mpDG1MOq"},"source":["> [StackOverflow: grouped barplot with error bars](https://stackoverflow.com/questions/42017049/seaborn-how-to-add-error-bars-on-a-grouped-barplot)"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":383},"id":"C__nZF0MtJpD","executionInfo":{"status":"ok","timestamp":1625258275504,"user_tz":-330,"elapsed":619,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"70bdd64a-16fc-436e-f100-8eceddfa901c"},"source":["model_compdf.sort_values('rank_test_score').plot(x='param_reg_name', y=['mean_train_mse', 'mean_test_mse'],\n"," kind='bar', figsize=(12, 4))\n","plt.xticks(rotation=45);\n","plt.title('ML Model Comparison', fontdict=dict(size=20, weight='bold'))\n","plt.xlabel('Regression ML Model')\n","plt.savefig('../reports/mlmodel_comparison.jpg')"],"execution_count":154,"outputs":[{"output_type":"display_data","data":{"image/png":"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CxYAMHDgQFq1akXbtm0566yzAJgxYwYHH3wwnTt3pnPnzrz00ksFeBVEREREqo6C4GTKlCmceeaZTJo0iUmTJnH33Xfz4osvctVVV3H55Zdz2WWX0aNHD0aNGsXIkSM5++yzmTt3LhtttBFPP/00Y8aM4d577+XUU09dss2xY8cyZMgQJkyYwH//+9/lBounnnoqm222GSNHjmTkyJEAzJ07lx122IHx48ez8847M2DAAF5//XXefvttvvvuOx599NFlbqtRo0aMGTOGE088kauuumqFz/n999/nueeeY8SIERx55JF0796dt956i7XWWovHHnuMmTNn8tBDD/HOO+/w5ptvcsEFFwBw2mmnccYZZ/D666/zwAMPcMIJJ1Rkl4uIiIiUTLXLCS6VZs2a0aZNGwBat25Nz549MTPatGnD1KlTmT59OiNGjFgSWM6bN49p06ax2WabMWDAAMaNG0fdunWZPHnykm126dKFJk2aANC+fXumTp3KzjvvvErtqVu3LgcffPCS6yNHjuTKK6/k22+/5csvv6R169bsu+++P7rfQQcdBMD222/Pgw8+uMLH2Guvvahfvz5t2rRh0aJF9O7dG2DJc+7Tpw9lZWUcf/zx9OnThz59+gDwzDPPMGHChCXb+eabb5gzZw5rr732Kj03ERERkVJTEJysueaaS/6vU6fOkut16tRh4cKF1K1blwceeIDmzZsvdb9Bgwax8cYbM378eBYvXkxZWdkyt1m3bl0WLly4yu0pKyujbt26QATcJ510EqNHj2bzzTdn0KBBy63BW/6Yq/J4uc+xfv36S8qalT/nevXqMWrUKJ599lmGDRvGddddx3PPPcfixYt59dVXl3quIiIiIjWJ0iFWUa9evRg6dOiSXNyxY8cCMGvWLDbddFPq1KnDHXfcscJBbCuyzjrrMHv27GXeVh7wNmrUiDlz5izJAS62OXPmMGvWLPbee2+uvvpqxo8fD8Cee+7J0KFDl6w3bty4KmmPiIiISKFUu57g6lrS7MILL+T000+nbdu2LF68mGbNmvHoo49y0kkncfDBB3P77bfTu3dvGjZsWKHt9+/fn969ey/JDc613nrr8atf/YrtttuOTTbZhM6dOxfiKa3U7Nmz2X///Zk3bx7uzuDBg4EYyHfyySfTtm1bFi5cyC677MKNN95YJW0SERERKQRbXsWCYujUqZOPHj16qWUTJ06kZcuWVdYGqTp6bUVERGqhGlIn2MzecPdOy7td6RAiIiIikjnVLh2itjvwwAP54IMPllp2xRVX0KtXr6I83i233MI111yz1LKuXbty/fXXF+XxRERERGoCBcFV7KGHHqrSxzv22GM59thjq/QxRURERKo7pUOIiIiISOYoCBYRERGRzFEQLCIiIiKZoyC4mhgyZAjffvtthe778MMPLzWNsYiIiIisWPUbGFfo2nNFqDtXDEOGDOHII4+kQYMGq33fhx9+mD59+tCqVasitExERESk9lFPMDB16lRatGhBv3792Hbbbenbty/PPPMMXbt2ZZtttmHUqFHMnTuX4447ji5dutChQweGDx++5L7dunWjY8eOdOzYkZdffhmA559/nt12241DDjmEFi1a0LdvX5Y3Mcm1117Lxx9/TPfu3enevTsATz31FDvttBMdO3bk0EMPZc6cOQAMHDiQVq1a0bZtW8466yxefvllRowYwdlnn0379u15//33l/kYu+22G2eccQadOnWiZcuWvP766xx00EFss802XHDBBQDMnTuXffbZh3bt2rHddttx7733AvDGG2+w6667sv3229OrVy8++eSTwu18ERERkRKofj3BJTJlyhTuv/9+br75Zjp37szdd9/Niy++yIgRI7j88stp1aoVPXr04Oabb+brr7+mS5cu7L777my00UY8/fTTlJWV8d5773HEEUdQPive2LFjeeedd9hss83o2rUrL730EjvvvPOPHvvUU09l8ODBjBw5kkaNGvHFF19w6aWX8swzz9CwYUOuuOIKBg8ezMknn8xDDz3EpEmTMDO+/vpr1ltvPfbbbz/69OnDIYccssLnuMYaazB69GiuueYa9t9/f9544w022GADttpqK8444wyef/55NttsMx577DEAZs2axYIFCzjllFMYPnw4jRs35t577+X888/n5ptvLvyLICIiIlJFFAQnzZo1o02bNgC0bt2anj17Yma0adOGqVOnMn36dEaMGMFVV10FwLx585g2bRqbbbYZAwYMYNy4cdStW5fJkycv2WaXLl1o0qQJAO3bt2fq1KnLDILzvfrqq0yYMIGuXbsCMH/+fHbaaSfWXXddysrKOP744+nTpw99+vRZree43377AdCmTRtat27NpptuCsCWW27Jhx9+SJs2bTjzzDM599xz6dOnD926dePtt9/m7bffZo899gBg0aJFS+4nIiIiUlMpCE7WXHPNJf/XqVNnyfU6deqwcOFC6tatywMPPEDz5s2Xut+gQYPYeOONGT9+PIsXL6asrGyZ26xbty4LFy5cpba4O3vssQf33HPPj24bNWoUzz77LMOGDeO6667jueeeW+3nmPv8cp/jtttuy5gxY3j88ce54IIL6NmzJwceeCCtW7fmlVdeWeXHEREREanuVpoTbGY3m9nnZvZ2zrI/m9kkM3vTzB4ys/WK28zS69WrF0OHDl2S1zt27FggUgY23XRT6tSpwx133MGiRYsqtP111lmH2bNnA7Djjjvy0ksvMWXKFCBydSdPnsycOXOYNWsWe++9N1dffTXjx4//0X0r4+OPP6ZBgwYceeSRnH322YwZM4bmzZszY8aMJUHwggULeOeddyr9WCIiIiKltCoD424FeuctexrYzt3bApOB3xW4XdXOhRdeyIIFC2jbti2tW7fmwgsvBOCkk07itttuo127dkyaNImGDRtWaPv9+/end+/edO/encaNG3PrrbdyxBFH0LZtW3baaScmTZrE7Nmz6dOnD23btmXnnXdm8ODBABx++OH8+c9/pkOHDssdGLcq3nrrLbp06UL79u25+OKLueCCC1hjjTUYNmwY5557Lu3ataN9+/ZLBv+JiIiI1FS2vIoFS61k1hR41N23W8ZtBwKHuHvflW2nU6dOXj5orNzEiRNp2bLlqrZXahC9tiIiIrVQocvZQlFK2prZG+7eaXm3F6JE2nHAEwXYjoiIiIhIlajUwDgzOx9YCNy1gnX6A/0Btthii8o8XK1w4IEH8sEHHyy17IorrqBXr14F2f7JJ5/MSy+9tNSy0047jWOPPbYg2xcRERGpDSocBJtZP6AP0NNXkFPh7jcBN0GkQ1T08WqLhx56qKjbv/7664u6fREREZHaoEJBsJn1Bs4BdnX3byvbCHfHzCq7GalGViXXXERERKRUVqVE2j3AK0BzM5tuZscD1wHrAE+b2Tgzu7GiDSgrK2PmzJkKmmoRd2fmzJlL1UwWERERqU5W2hPs7kcsY/E/CtWAJk2aMH36dGbMmFGoTUo1UFZWtmS2PBEREZHqpuQzxtWvX59mzZqVuhkiIiIikiGFKJEmIiIiIlKjKAgWERERkcxRECwiIiIimaMgWEREREQyR0GwiIiIiGSOgmARERERyRwFwSIiIiKSOQqCRURERCRzFASLiIiISOYoCBYRERGRzFEQLCIiIiKZoyBYRERERDKnXqkbICIiIlJUg9YtwjZnFX6bUqUUBIuIiFQ3CtpEik7pECIiIiKSOQqCRURERCRzFASLiIiISOYoCBYRERGRzFEQLCIiIiKZoyBYRERERDJHJdJERESk2mg68LGCb3NqWcE3KbXASnuCzexmM/vczN7OWbaBmT1tZu+lv+sXt5kiIiIiIoWzKukQtwK985YNBJ51922AZ9N1EREREZEaYaVBsLu/AHyZt3h/4Lb0/23AAQVul4iIiIhI0VR0YNzG7v5J+v9TYOPlrWhm/c1stJmNnjFjRgUfTkRERESkcCpdHcLdHfAV3H6Tu3dy906NGzeu7MOJiIiIiFRaRYPgz8xsU4D09/PCNUlEREREpLgqGgSPAI5J/x8DDC9Mc0REREREim9VSqTdA7wCNDez6WZ2PPAnYA8zew/YPV0XEREREakRVjpZhrsfsZybeha4LSIiIiIiVUIzxomIiFSCZjgTqZkqXR1CRERERKSmURAsIiIiIpmjIFhEREREMkdBsIiIiIhkjoJgEREREckcBcEiIiIikjkKgkVEREQkcxQEi4iIiEjmKAgWERERkczRjHEiIlIYg9YtwjZnFX6bIiIoCBaRLFPQJiKSWUqHEBEREZHMURAsIiIiIpmjIFhEREREMkdBsIiIiIhkjoJgEREREckcBcEiIiIikjkKgkVEREQkcxQEi4iIiEjmKAgWERERkcypVBBsZmeY2Ttm9raZ3WNmZYVqmIiIiIhIsVQ4CDaznwKnAp3cfTugLnB4oRomIiIiIlIs9Qpw/7XMbAHQAPi48k0SkeUatG4Rtjmr8NsUERGp5ircE+zuHwFXAdOAT4BZ7v5UoRomIiIiIlIsFe4JNrP1gf2BZsDXwP1mdqS735m3Xn+gP8AWW2xRiaaKSJY1HfhYwbc5NcOjGLQ/RSTrKjMwbnfgA3ef4e4LgAeBn+ev5O43uXsnd+/UuHHjSjyciIiIiEhhVCYIngbsaGYNzMyAnsDEwjRLRERERKR4KpMT/BowDBgDvJW2dVOB2iUiIiIiUjSVqg7h7hcBFxWoLVJbFbqigaoZiIiISCVpxjgRERERyRwFwSIiIiKSOQqCRURERCRzFASLiIiISOYoCBYRERGRzFEQLCIiIiKZoyBYRERERDJHQbCIiIiIZI6CYBERERHJHAXBIiIiIpI5CoJFREREJHMUBIuIiIhI5igIFhEREZHMURAsIiIiIpmjIFhEREREMkdBsIiIiIhkTr1SN6BaGrRuEbY5q/DbFBEREZEKUU+wiIiIiGSOgmARERERyRwFwSIiIiKSOQqCRURERCRzFASLiIiISOZUKgg2s/XMbJiZTTKziWa2U6EaJiIiIiJSLJUtkXYN8C93P8TM1gAaFKBNIiIiIiJFVeEg2MzWBXYB+gG4+3xgfmGaJSIiIiJSPJVJh2gGzABuMbOxZvZ3M2uYv5KZ9Tez0WY2esaMGZV4OBERERGRwqhMEFwP6Ajc4O4dgLnAwPyV3P0md+/k7p0aN25ciYcTERERESmMygTB04Hp7v5auj6MCIpFRERERKq1CgfB7v4p8KGZNU+LegITCtIqEREREZEiqmx1iFOAu1JliP8Cx1a+SSIiIiIixVWpINjdxwGdCtQWEREREZEqoRnjRERERCRzFASLiIiISOYoCBYRERGRzFEQLCIiIiKZoyBYRERERDJHQbCIiIiIZI6CYBERERHJHAXBIiIiIpI5CoJFREREJHMUBIuIiIhI5igIFhEREZHMURAsIiIiIpmjIFhEREREMkdBsIiIiIhkjoJgEREREckcBcEiIiIikjkKgkVEREQkcxQEi4iIiEjmKAgWERERkcxRECwiIiIimaMgWEREREQyp9JBsJnVNbOxZvZoIRokIiIiIlJshegJPg2YWIDtiIiIiIhUiXqVubOZNQH2AS4DfluQFonUEk0HPlbwbU4tK/gmRUREMqmyPcFDgHOAxctbwcz6m9loMxs9Y8aMSj6ciIiIiEjlVTgINrM+wOfu/saK1nP3m9y9k7t3aty4cUUfTkRERESkYCrTE9wV2M/MpgL/BHqY2Z0FaZWIiIiISBFVOAh299+5exN3bwocDjzn7kcWrGUiIiIiIkWiOsEiIiIikjmVqg5Rzt2fB54vxLZERERERIpNPcEiIiIikjkKgkVEREQkcxQEi4iIiEjmKAgWERERkcxRECwiIiIimaMgWEREREQyR0GwiIiIiGSOgmARERERyRwFwSIiIiKSOQqCRURERCRzFASLiIiISOYoCBYRERGRzFEQLCIiIiKZoyBYRERERDJHQbCIiIiIZI6CYBERERHJHAXBIiIiIpI5CoJFREREJHMUBIuIiIhI5igIFhEREZHMURAsIiIiIplT4SDYzDY3s5FmNsHM3jGz0wrZMBERERGRYqlXifsuBM509zFmtg7whpk97e4TCtQ2EREREZGiqHBPsLt/4u5j0v+zgYnATwvVMBERERGRYilITrCZNQU6AK8VYnsiIiIiIsVU6SDYzNYGHgBOd/dvlnF7fzMbbWajZ8yYUdmHExERERGptEoFwWZWnwiA73L3B5e1jrvf5O6d3L1T48aNK/NwIiIiIiIFUZnqEAb8A5jo7oML1/U+QhAAACAASURBVCQRERERkeKqTE9wV+AooIeZjUuXvQvULhERERGRoqlwiTR3fxGwArZFRERERKRKaMY4EREREckcBcEiIiIikjkKgkVEREQkcxQEi4iIiEjmKAgWERERkcxRECwiIiIimaMgWEREREQyR0GwiIiIiGSOgmARERERyZwKzxgntVPTgY8VfJtTywq+SREREZFKUU+wiIiIiGSOgmARERERyRwFwSIiIiKSOQqCRURERCRzFASLiIiISOYoCBYRERGRzFEQLCIiIiKZoyBYRERERDJHQbCIiIiIZI6CYBERERHJHAXBIiIiIpI5CoJFREREJHMqFQSbWW8ze9fMppjZwEI1SkRERESkmCocBJtZXeB6YC+gFXCEmbUqVMNERERERIqlMj3BXYAp7v5fd58P/BPYvzDNEhEREREpHnP3it3R7BCgt7ufkK4fBezg7gPy1usP9E9XmwPvVry5VaYR8EWpG1GLaH8WjvZlYWl/Fpb2Z+FoXxaW9mdh1ZT9+TN3b7y8G+sV+9Hd/SbgpmI/TiGZ2Wh371TqdtQW2p+Fo31ZWNqfhaX9WTjal4Wl/VlYtWV/ViYd4iNg85zrTdIyEREREZFqrTJB8OvANmbWzMzWAA4HRhSmWSIiIiIixVPhdAh3X2hmA4AngbrAze7+TsFaVlo1Kn2jBtD+LBzty8LS/iws7c/C0b4sLO3PwqoV+7PCA+NERERERGoqzRgnIiIiIpmjIFhEREREMkdBsIiISDVnZlbqNojUNgqCJdPMbItSt6G6K//xNbP1St0WkSwxsyZm9hMzK3N3NzP9ZheYDi6yTR+oasjMdjCz7UrdjtoqJ6jrCjxmZhuXuEnVWvrx7QXclH6Qa+2PxrKemwKP6iPns9vQzNYsdXuKycx6A08ANxCfvXXdfXGJm1Ur5H2miz5pmBSfme1oZmWrez99uVczZtYZGALoy65IUlDXBfgDcIa7f2ZmdUvdrurKzJoDpwGXu/s3pW5PsZiZlQf8ZnaKmZ0HoMCj+kivz/7AI0RgeGCp21QMZrYXcDHxubsG+Bo4OOf2WnsgWhXKP9Nm1g/4PzM7Lx3oSw1kZjsD/wdsu7r3VRBcjZhZG+DXwOPuPqHU7anlGgBdgZ0B3H2RfliWZmFd4FfAVkBjiECkpA0rkhRg7Qn8iZgM6LdmdnmJmyU5zGwb4EQiMHwMuNLMDittqworHZBfBYxz9+fcfRQwFvipmZWZ2Vq19TNYlczsaOBM4CFgXWC/tExqEDPbEjgfGOrub5rZavXsKwiuXtYBNgG2M7NmpW5MbZJzGrWRmW3g7s8DvYFDzOw4WBIEZT4QLt8HHmYBfwH+BexmZu1K2rgiMbM66RTpQcAxwE+A94hT0VINmFlL4K/A2+4+3N3vA04FLjGzI0vbusIws12AXwL7A7uY2Ynppp8DJwMPA8+b2RFm1rpEzayRlvHd3gz4vbs/AlwJvAx0MrO1qrxxUhkbAwuAI8xskzSR2yr/jisILqGcwKyVmW1F/Oj+GlgI7KtBW4WTAtwDgLuBx83sHGAW0cv5GzP7dfl6JWxmyeWkBOxtZreZ2T3A1sDVQH3gQDPrUNpWFsVa6RTpDOI9MRDo5+4fmllfM+tb2uaJu08E3gY6mtk2ZlbH3Z8AzgIuN7NNa8FBbBnwC3efAhwNnGVmzxJnYVoA/YFhwA7AlyVrZQ1T/r2W/v9pWvwNcLKZbeTuM4GngNbAhiVqpqyCnLipqZn9DHgNOBcYDZyeXs9V7tBSEFxC6YXqDdwH/A54AWiV/t8eOEyBcGGkg4yLgNOJU2BrEL1+7wEXAKekkdg1/Ue0UtJ78ufA5cD9wHPAHcA2RCC8IXCQma1TulYWRs6XaXPgT2bWiPhC7Q9c4u7vmtn2wHnA9NK1NJtyXp8dzOxQM+vq7mcAo4jP8pYpuHkE2N7dP6kFB7HvAfXMbE93fx04BNgUGOnuXwMfuvufgXPd/ZNSNrQmyQmAzwQGm1lj4E7gVeD3ZrY5sCMxSG5eyRoqK5V+o/YhBo1eR8RNaxHpUQDnm9nGq/pdoFGRJZK+4BsTgx8GuPvzZrYr8CDQhxgcdzYRiEjlrQvMKs+1NrMvgaHADu7+mJntmnoDJALeke7+KICZfQjcSvxI3Ax86+6zS9e8ysvp8e4N9APaEafULiLlnJrZWKJn6Hfu/u+SNTajcn7sLiNOVW9iZr9y935m9icid/t3wHvuPqOUba0MM1vb3ecAuPsHZvYI8Ecze9vdx6Y81TvNrL67X5XW+76Uba6JUtrbAcAB7j4zjXd4ihgXcidxBvY0d/+ihM2UlUgHLAOBo9x9tJldmK6fBtwLHAmsB3y2Stur+QfONVcKhG8Fzir/Ejez/kBzdz8z5a7qlFcF5AQ5HYEPgW+BG4FngX+6+zwzuwiY6e7XlbKtpZazr7Z29ylmth9wKHAcsDgNGhwK/N3dx5e2tZWTd1q0LTCceK7bAm2IAZMDiTyzNYB67j4h935SPGa2IdAgpaHUJdKX/uHuT5lZAyJHe6q7X2RmfwOuq8nvSTPbGjgJGOPud6ZlRuQ+P+Luj6dlOwLXAz1Tj7CsREqXWZxz/SxgPvAWkU7SHZhInAlcA/je3eeWoq2yYnnf22sDtwCXufu4tOwWYJ67n2hm67v7V6u6baVDVKGc03vdzOyo9KKuDwzOWW0u0WsJURZHKiAFdXsBDwBN05fbU0BLYKiZ7Uv0AI4rXSurh/IcYOA2i9H3TwGNiPSHdma2G9ALqNGpImbWhMgBLJ/0YyPgdXcf7e53EwFxa+CPAO4+ufzMgQLg4rMYkHQ0UMfM1nT3RUQeennqzTzgb8TgYdz9VzU8AN6LKNM4DRhkZoPNrG96r00hDkIBcPdXgZ8rAF41KWgqL4PW28zqE/t0e+ASomPkRiIGaujuXyoArp5yOmn2MLM9iB77mcTYgEZptfuBrwBWJwAGBcFVKr2Q+xO9GZ+mxfsDm5vZCDP7HZHg/UBaX/VJK8jMWhAHFwe5++tmtinwJhHgfQTsDpzk7i+WsJnVgkVt6muAU9z9PXefB+xHfNmcSKTsnF5+1F2DrQ0cBRxtZg2J98PmZnYELAk03iIqQ+wBmiijKrn7d8SZsfnA2Wa2Qbr+ZzPbMX0frgVsY2Yb1OTXxsz6EAdb97j7EKL6w3RiQPRTRG56ezM7NOdu86u+pTVTTq/hyURqYWN3fxg4BdjT3e8CFgHdUBxUraW4aT+iStEa6ffpduBA4AIzu4QoKfhyRbavdIgqlI5a7gFOcPf/mdlOQAt3vyX9EK8DTHH353T6dfXlnTLZmBgA9zGRe70H0eNyp7s/nHqalFcHmNnBxI/Bn4HD0+Vj4LCUNtK4JudcAphZPY/SOYcSB5pPAZcSOYK7AVOBkcRAi+HAz9z9+NK0NnvKT12nFIj2xODEqUTPbw/iIO1OotPg9PI0gZrIzDYhfgfOdfdRZtbA3b+1GOn+CTCASM/pD/wdODH1istqMLNuxPumt7t/nlLjPidS43oCg4hKHO+UrpWyMulg+GEibpqcXsd1iOoe2xJjWP7j7v+uSNykgXFFltOV35AoafMd8Bczm0mc6utoZt3c/bjc+ykAXj05+3kvoCnRg/QNcfprGFEHcgBxuvthMtyrkpcv7UQFiMuA7YizEAcTwWAP4HGgRg8UMbO6KQDehyhB+BRwAlEObThxcDQQ6JCW/wQ4M3fAkhRP+alrM+sB7OTul1mU5tuPeL2GEKXR1gXudffRJWxuIXxPDML8zmKa13NSwLYm8TxPJ1KPHicG/SkAXgU532vlgdBC4rutr5ltRtSFn0YMfv0fsI+7Ty1Zg2W58uKmucTnZX+LCcXqEvncg9z9ptz7VSRu0mmAIsp5IfchPngNgd8QoxbvTIFvX2C+ma1RwqbWeDmnTC4HPkqnVi9396PcfTiwJVES7bXy9UvX2tLK2Ve3AD9JOVTbA/u6+w3EKedmpLJgNXVfpRzg8tkA1yYmG7jB3c8jAvyDiFrALwL7EpMUNCYOAC5UAFw1cr4jbyBKVuExmc1txOsxkBj08kotCIAhxno8SZzCnUIctN9DnLlqCOzh7t+5+wiP2siyEnk9gI3T3zFEINwCGOHubYjvtFbuPkoBcPWUmwMMXJrO2P4fMYbjdnfvSxwc72gxg2Ll4lh316WIFyL39G2ihyP/tv2A8cD+pW5nTb8Qo/ofIAa+lRGn9y8gBnjtSPT+HVDqdlaHCzH5xShiwCBAc2Cv9P/uxA/zfqVuZyWfoxG5zG1ylg0menrL0vUewGLgDOKsWJ305bptqdufpUv67N4LdEzXexHlC7ci6qZfC2xV6nYW+DmvDewE/AJYM2f5P4jSTyVvY028EAe6TxEHGL/Mu+1AYvrprUvdTl1W+jr2AiYDuy3jtj1STNW7EI+lnOAiSUcnTuS0jSFyuw4mahJ+SuQq3UCc3huhHODKMbM1iRGinxKB74fALkSPy/lAE4887Mzv55STeAMwgTi11BL4KVGO6hYiT/2Vmr6vUjWWLYgyWvtaTK3bE7jK3d/JGTx5sbu/Vsq2Zk1Ob08jd//CzP5I5GePJdJvyoC27r6jrWbJo5oqJ1/9MHd/v9TtqWks6gD3IyqMXEnkiw73KKe3JzHpzSnu/lbpWikrkr6zy4j46EF3/5eZHURMGjOc6Oh6FBjq7o8tf0ur8Zg1+DeuWsr5cq/rcRr2IOLotIyY2eQzIi/1LGCBx4CIGh1slELOfu5GnEL8hqj5eCzwoseAk45EGsovPcPlb3L2VUsiF/p7YjDBWcSp/1eIg7O27n556VpaeSn3bz1gtket2bWIU83fuPvRFoXVWxO9vm2JH8WnS9fi7Ml5P+4HHAGck16rk4nP7vg0SGwocERt/+xaVK45jJiu+zB3f7vETar28n8z0+f8UCJA+iUx4dQf02WEu/+pNgzwra2W8XoeR0yG8wowiTgwPgroSKTwfVmouElBcAHlfLl3JxK3xxKjfb8B5ntMRNCFqE/Yx90/LmFza7yUR1j+RXcDcKy7P5Ru25fIDz7PY1rVTLMozXcucVZibeIL5t30ft2VCDgGes0edd8CuIuoF/kp8LC7D7OY4vlGYuKPo1KA1YqYKGVU6VqcXRa1p68GjnP3sWnZGu4+36JayYXE1NUPlrCZVSIFcD2Iz+OUUrenJrAfqr3Uc/eFaVlDYjzD34lKAl+Y2YPEgMOjXBNPVUt5cVM3Ih3vOSKX+2OPihBbEGMEDi7066iBcQWUXsjdiYBsLHAFkdsyEXjfzHoCdwAXKQCunDSq+tdEXvW3xNHia2ZWJ6VGHEQEdY+kUyyZZTHN5JnAnsTAkK2IUkFrmdlWwO+JgWA1OQBuRfT4nkWcDn2FmAEOjyme+xOTMDwGTHP3JxQAV72cz2IX4F/AF2b2KzO7D7gpDWZsSbwfH8zCZ9djENxjCoBXjUWp0SkWM6outJgIg3TGoD5R3WVbMzuGyPk/RgFw9ZXipj5EHeD/AccTZRCfTwHwgcBjRApEwV9HBcEFUP5FnSo87E6c4ptGlPb4W+qy3xTYEDhZgVnlmFlXoDOROH8Q8Fvii+5jIndoC6C/uz+W9VST1OvZmJgZ7yCiCkK/9GWyHXGW4gh3H17D35MbAO3cfWR6HzwJdDaz9mbWNP1A/opIR9q+lA3Nopz3VoP090XgZ8ATxJmJYcQsUGXufmn5d2SWP7uybO7+BTHpxcspX3yBmdVL75dPgIeIMnO/IaoL1OgSj7Vd6rTqQqSwfEocxAxNt21AfD8MLNZBseoEF0A6kulN5Ft+QCTlr0eUnPo4nd6bTyR6Lyy/T8kaXIOlPN+/EPlfC4lRwFu6+9SUanIBcYp1AWRzP+ecXuoEXE+MQN+QyI/ey93ftyg/8weiWPw0qNn7yt1fNLO9zey/7r4lcZDUiTg1+r2Z/Y8Yef8bd89sjehSSe/HvYCDzOxdYra+U4F67v5p+lxfTLxGS+5TmtZKdZcOkhYCo82sk7t/lYKp74H/ENUDXnP3b0vaUFmhlBa1HrA+cDMxvudgd/8ofV/UBe7yqCNelINi9QQXgMW0s6cQBZ0nEPv1Onefnr7cLyXqXC4sYTNrPDPbjvjh/I+7f+juA4npE+8zs0uBm4ALvHbUEq2wFHD0IILeP7j7/4BHiF63M82sLzEBwWXlAXBt4O7/AgaY2Rzgt+6+EZECcgSRJ/ylAuDSMLOdiYPX64gZCQ8mzkJ8lXLS7wXOdvcJpWul1CTu/gQxAdLo1CP8vZkNIM4qvK8AuHozs22JGuBvEr/djYD73X1aGvB+LTGgeTEU76BYA+MqKXXXv0AMajg4pUScToy+34Y4srnUY8IGqSAza0D0Zv6FOINxoafpLi2mnP6S+MDU+NJehZCCjheIIPiiNPimJTHt7LfAGHd/ujbuq3QAcLu7Nyl1W7Is54xEXaJCzlRioPBfid6eaRbVPH4G4O6vlKyxUmOlHsMriFlCf0Wkd40raaNkhcxsS+B5ooTdKSmO6k10Jn5IDFwe6O6PFr0ttez3r0rkfLmv6+6zzOwXxOjzU9z9LosawRsSuZjfufsHtTHYKLac/Vx+xHgZMe30ZcC7wEPu/m4p21jdmFl7YPN0urAH0ft7jLv/s8RNq1IpPel2oLlnoMZsdZPz2e1DTM7yPvEZbkBMV/uxRV3cpsCQ8vQlkYqwqBT0CNDB3ceXuj2yfGlA45dmdhFRzm5vT3WxzWxDYvzUPI9qWkWPm5QOsZpyvtw7A6PMbHd3v4+oT3uumR3u7ovdfYa7T3D3D0D5bRWR9nN5GbQdiHzfdYjT/FsDR6QAOdNyBmaWn0K618wOcffngL2B68zsqFK2saql1Ih+QLsSNyWT0md3JyIV5Q1iYOYnRHWchWa2PVEGbYICYKksj4kT1lYAXD3l/EZtD1xpZru6+8XAfUQ64xYA7j7T3d/2VCmlKuIm9QRXQDr98gviNF5H4CB3fy71elxL1KbNVM9bMaQA93FiusvGRCC8JVH/tw4RDF/iKi1UHgDfQJSX6QXsBVzp7g+lXtEHidJon5XnWGWFzsJUPYsShsOI2Qe3TssOJb4vuxFndK7zVJVEr49I7WZmexOpopsRYzQucPd/m9nFxDiBPdP4lSql6hCrycx+CvwZGODuz5vZ8cDdZnakuz9qZvWI/FSpIDOrkwK1DYEPPE1zaWafE5M8XEz0Ch/r7otK19JqpR3wgsf0v6+Z2TTgxrQvH7AoE/Z5idtYEgqwqpaZbe4xA9wAYISZ3eDuJ7r7/RZ1mtcC6rj7DAXAIrWfRanOS4Aj3X2SmQ0CjjOzRWnMyprA5kSd4CqldIjVNwMYDUyzmBr5H0RC/jAza+fuD7v7C+Xd/7LqcvbZ2unvGGCOmZ0K4DGd6GvAImKa0Top/zpzlvH+mgTUM7MmKbC4lajFeqqZtSkPgPW+lGLIOd3ZgUgTu9TdpxK1P7c1syEA7v5tOuU5I11XACxS+80len/LANx9EHEwfKWZdXT3ge7+YikalskAYnXkfLk3NrNGqcSSAUfn9EI+QZT5uN9iHnh9uVdAyiPsDdxsZucTge5tQAszu8HM9iTSUN4g6sBa1k7tw1J56XuY2alm1h94h6i1eBTQzWJCkbpEyb6zyt/Hel9KMeTk719IzNx3ipkN8ijBdyywg5kNLWkjRaRK5MRNG6bKD18SHVidzaxZWu0fRIfWOaVpZVA6xErkjHA+H/hfOiU/EHjAYvrGb4ipew8nyrPUL1lja6icoK4rUQKtL1EB4hPgd8TMcL8lAuB+wBrAAcRI88zVfU37qicwGDgReJo4oB2Yrp8AtCbej5sRpWdEiiL94K1N/JgNSXno1wEjzayeu19gZocT70URqeXSb9QBxHT184FHgYnEeIAuZvYRMdbnBOBCM9u6VGN71BO8Ehazbp1PzFD2PDEL3CdEvdVRRBB8GFHouScxYYasAjNbM/1IlvdONiVyfdcANiLqK88gJjk4gfhAbUDUGT3T3b8uQbNLLg06OoT4AoGYHelxd3/f3c9y96OJ6bs3J/KwblIPsBSLh9nAW8DX6aD2v8S0teea2W/c/X+eaniXtrUiUmwWk4SdQ3QOTidyge8ifrufItIijiY6YpsCJfstV09wnlSnrnzK3W+I7vqrgZ2JXsgeadWN3P32dJ/OwN+AA1OALCthZq2A3wPrmdlf3P1p4DNiRqn5QM80cGZf4lTqHzxmBFoXODRLFSHMrDlwJDAbGObu/zWzycBxwHbA4R4TD/QH5qYvm9nESPxj3f3NUrVdaqecszdbp0UfEGdsTifKoX0FfA48AJxnZhPc/QUdjInUPma2DjEFenlN9sbAP4mzkB2JND2Ar939fiJ1tBdwFdDX3b+o6jaXU4m0HGbWgqhj+T7RS34+UZf2TiKo6OHucy3muz6bON38CdE7uZa7Ty9Fu2saM2tJ5PoOAbYA9iVO478HXAPMIo4YNyIOLs7zKpg5pjpKAfCdxOxvZUAXYA+i/u8fidz0f5tZW+Bu4HR3f6ZU7ZXsSKUiryTScXoRefrXEmfFPknL9iHSmJ5yzQgnUuukuOk24FPixNABZtaa+G7YCDgsddzsD5xEdNp8ZWYbE7Wd3y9Z41EQvER6IW8heiLfAQ4iZi253MwGEtN+/pKYpOFMqmhKv9rGzNYG7idm0jsoLTsHaODug8ysHXEq/zBgJnBjVmuJpkGWTwF/dfcbzKw+Efje6e7jzOwMYl99CzQjaiaPyOK+kqqVvi//RvTwtCUOXlukszXdiPKG7wA/Jb5T90spEiJSS1jU8r+XOPh9hKjr/yxxlvdKYqzAE8TZ3T+R4qZUWatalDdVEEzUpQUeAjZw925pWU/gYKJnbX4a2NGF6Bke5u5PKthYfWbWgDjA6EjUAB5qZhcSpZQgfjC/cPcnzOwn7v5NVvezmW1EzKjzOPB3j6km7yW+UCYDNxMTYLwLrOfu72Z1X0lxmdlmxHffQnd/P6WNHUYcgJ0EHJGW707Uq56fAuV/EmcrlJIjUouksSl/J6daVkqPOtrdf5/WORVoQhwM35l+16vVb5SC4MTMNiFGMD7n7ueY2WnEpAxjiC//q4CpHpMRyGqyKIa9hrvPNrOtiAOKnYBNiJSI3wC7Eaklx6f/p1SnD0tVMbO6xGQCCywmZ/kr8CrwPZEHfB+xz3YkettOdHdN0CJFkYLZe4hC9uU/fM8RaRDrAdumH8Adie/J49x9ssXEQeu6+8wSNV1EiiiVND0MeMXdbzKz84g00vHEOIEXiB7iT6trOdPMB8G5RyWp5+0pYkKMBsS893WA7sTAuKHuPq5Uba2pUlC3E3HadC4xu9lQYHvgVOBf7n55zvoN3X1uKdpaaulgoSfwMjEIcx3i9NL1QEvitPKktG5LYiDctBI1V2q5nJz0S4GXiBzfDu5+ekp7eDjdtgZR2vACdx9RqvaKSPHZD7O6lo8N6JtuagUcQ6Qy/oYYH3CXu79UkoaugkwHwTkjnPcCtnH3a1MgPAyY5O79y19sM2vg7t+WuMk1VsodugboQEw5PSyNKN0L6ApMc/e/pHWr1emSqmZmpxO5lg2IdJwnU37wTcSR9d3u/lEp2yjZYGZ/IHp2f5quNyPqU19IDCDeiKhcsgAY7e7PZf3zK1Kb5cRNrYAvgDnAlsR4lZeBP+V0LNZz94Wla+3KZbpOcHohexOn8ManZZ8TOattzGxo+dGOAuCKSfnWuPtkovrDf4DWZra5R23REcDrwJZmtkVaN5M/oPbDFNB3EhUyPgfGmVlZKr03gDhoODkNkhMpivJ6vu5+IfC0mZVXHOlOpCpdR9QFPhmY7O5Xuvtz6T6Z/PyKZEGKm/Ymfqd+Q5w9/4wYHLctMVvkT9O61ToAhgwHwRbWJAZ1/D6VmdorDdLahjjtt1s6HSgVkI4YF5vZvmb2R3c/lTh12hA4NaVJNCROnVya5dP6Ofvq58CexKDMF4lgY9u02sdEis4D7q5JWaRocnpydgAuAj41s4nEhDVNiIOxvYGFQGZqdotknZltSYyXOoCY5KIeMWD2aaJM58+pQbFljWlooXn4npgF7ggze5KY/ngzoo7dl0And3+3hM2s0dIR475E4PtiWjaeGGSzmMgnfIOoBpHpSUbSvupDlOmb7u5fufv5wATg92Y2gKi92tDd3yhlWyUbzGx7YqKghu5+JPAksMjd57r7d+nszoXuPrakDRWRois/O0RMIPYIMcbnl8RscF+ZWY8UCJ/k7h+Wqp2rK1M5wTm5LF2J3rW3iBd0E+ATj9qr3YmpZvcDZlXXEY01QTplPwT4B/Bf4gjxYOKHdXa6/ln5adQsS6eP7gFOSCPruxDv0buJQQetgBfd/bESNlMyIr0f/wPc6+6/y1l+G3GmrLfHjJoiUovlxE0NPSYLq0+MTWkObOHuc9Ig2UHE+IH/lbK9qytTQTCAxVR91xJ5wH8Cfuvut6XbuhOnn89RsFEx+YNizOwaIoBbSOT+tgAc+KWnYtkaSBPM7O9EibiPgI2BdYH33H2AmdVPJdPKczUzv7+kuMzsMuDXwK7u/k7O8ruAa9x9VMkaJyJVJsVNJxK/4R8CE4mBcKOAt4kZdAe5+/CSNbKCMhMEp+BhHaI01x+BnxD1Lvd0908tpvDrB7zp1bCgc02Qc8S4BzFadL6732IxXeJkd5+YRpf/nZgv/NOSNriEcvZVcyLYnUbUXD2BqFf9MlFL+XDgVJ2RkGLKeT+2BNYCxnvU/h1ITHt8tLu/XdpWikhVS728NxK/TScT5RCPJc6gn0sExf/f3p0HWllVfRz//hAnBBwTS18nyOhVkRwytZzQRC1Jc55KM0c0Sswh1Mh5KDWHJHkVxzAVEQnFCUNTcQ5nS0mlcihTE5EUfu8fax87kVhcuTz3nLM+/8h5nuce9z333HvWs/faVa3mzQAAF2pJREFUa93vBm0g1rnqAcwv5QfzlqTHiLuWNYmaqy8rusE9DvyktuGo0X6QHUH5EN0WOAE4GhgmaQXbJwBI2pFop3hcKwfA8MFr9TVgCLG54AWixNRggHIjcRpxd50BcGpXdb+7PyYaYWwkaYDtUyXNAEZJ+rrtx6odaUqpvdXdFHcDPgEcWk71BnYoaRFv2t6//usaMW5q6o1xtaVjSSuWOrUA04mWvYfb/oOkzxG5LEvljvt5YhtgR2BhYCpwSV1C/WrAkbZH1x1rSZIWJyqT7G17C+A6oLek7SX9D1FwfKjtMa3+WqX2J2lt4GRgK+BmYiXnakmr2T4LuIhYsUgpNSlJPSV9sQTAWwHfA7oClxGdS79s+8Vy7lBJi1U53nmhqWeC66oTDAWeLj+wI4iGDfsomhKsSuQAT6xwqA1P0uZEd5hZwCBgdSJJfqqknSS94bqucI14xziPLUjk/3YpjycCXwL62L5e0kGOFtMNt7yUGtKzRNOLXsTqxNJE4HubpH62z6hycCml9lVS8y4DBikaYXwVGGn7bkVL9EWB90t6xI+Bo9wEnV2bMgium8rvDXyfmN3YHDih7Lw/iNjZuBxRneCxDDbaTtIaRBm0HYjOUdcAXy2v9ReIahvfrnCIlat7T/Ygqo78RdLFwL6SppV86QeAbSUtRHThyZuF1C7q3o/LAwvZngI8Jun7wHjb/5B0PZE21q3SwaaU2lUJgEcB59q+V9JkYjP7aWUlcjiwE3Ar0cjpGNtjmyFuaqqNcbUd9OXfKwOvE7MbJpaXd7f9vKSN3IF7WTeS8stzPFE/dK9ybCBwOPAroiXycbZvrG6UHUNZlTiUmC2fCLwMLEI0IBhJdN85wPb4ygaZWkbJSR9MtD79I5EOsT6RzvQ7YvLgUNsPVDbIlFK7Kpthf0FUJDqgpOD1BK4GbrQ9tO7aJYjGGG83QwAMTRQElx/ktrbPlLQpUQXiSOC7wJLEzOSfJW0MnAPsZDs7HX1MkroDxxApJicA9zg6n60PTAM62Z7cLL8wbVX+qIwlqj30IPKjPwMMA1YmUkl+b/vuqsaYWoek1YHzga8QN2G7EzesywCbEO2Rb7A9trJBppTalaSlgRuAnwBTiBr+V9gerugMNxa43PYpFQ6zXTVFOkTZ9HYFcGpZ3jsGGGT7dkmfAA4DviqpK7AvkcuSAXAbSOpUgtwNiA/Mv9s+StIJxHLJ+5Lutz2p/utaLQAuNwddbf+pHFoKmOLomIekl4ANgOUy0EgVELEBbjfi93Zn2zMkdbV9FdGkJWt4p9TcOgGH1H0unQIcLWmW7YsVXUwnSFrA9omVjrSdNHx1iLIcfwvwtO1riOW85YnOZDgaYZxK7Gxelqi5OjZ33M8dSZ0ASgC8FfBzYGPixmOY7WOJUl/fJOrbtqyyqeBm4BpJZ5XDk4FFJB0MYPsp4E/EBkLy/ZjaU12lnNr77G/AF4hZ4L1Lmlh/4HJJK9SuywA4peZT9/v9Wi0ALo/HAycBe0v6pu3nif1UTVs4oKHTIcrGt8uBScRM2zjbV5S7l+2BR2yfV+UYm0GZaV8PuJbIr74auNT26HJ+EhH0nUzUth1WgryWU27KLiXSccYSHXV2sP1EyQneiliBuZpIhfim7XuqGm9qHYo6wP2IvRKnEbPAA4i6wNOIyjlH5spESq2hpI6uQGzWvrHu+BZEU7FhtoeXY025KtSwM8FlB/0Qon3nQGL5bhdJe5Y/4mOB1SV9r8pxNroSAI8CFrQ9w/Y/iI0079Rdti/RQ3wGMLiFA+AliLSc221faftNYCYwWNKpwFtE552Fge2IWtUZAKd2J2lN4ib1OaAnsWn1KmLXdw+gL5FClqtkKTWxulWhDYiSaKsDx0saUrvG9m3AD4gmYrVjTRcAQwPnBJcSPofZfr0cupOYpTyg3LBcKakz0F/SirZfrGywDaoEwFcDJ9oeWVIilgHuAy6UtKGj89ungJVKHuzb1Y24WrbfkHQLsKKkdYFjgbuJDYNDiVbR+xM1qjvbfr9Z765TtSQtA3QvaQ7rAQOBC2wPK+cvAsYBX3O0ie9s+31o3g+7lNIH/RPWJVbLD7Q9TtKlwC/Lx9FJ5bpbKh3ofNKQQXBtcxbwbu1YKdlxZ3m4XymXNkLSRNuvVDLQxrcFsLLtkeXxBGCC7R9KWgW4VdKtxBL/922/VdVAq1Z7T9r+QdkkeCnwcAl6kXQgcLekz9l+JAOO1F4kLQLsAdxQZn3eIiqRzJC0uO03bX9b0mXAnWVGKN+HKTW5ukmXfkQQ/IKkhWw/LWlnYFyJnX5Y6UDno4bLCa79EMsmju2AZ4Cxtp8r5xcDtiQ2fOxXtzs/tYGk04jX8w2i/NmQunMbE80x3rf9QKvOata9J7vXbgQkHQ58ETi+lIhbg0iV2DErk6T2JqkbsBhwCFEKrTuRinMdUfKo9j5dw/bjc3yilFLDq/uM+qTtP5dj3yBKdh4LPFpWJj8LLGP7rirHOz81XBAMIGlL4GyiC9lFwIPACNsTyvnFgC62X6tulI1r9mBW0UVqELCG7dclLWL73Tk/Q+uo++OyDdFk4EUiyHhO0g+APkT1koOBH9m+ocLhpianf20YtD6wN/AKcAGR+3sWMB64qJVXblJqFfpnWdP+RMD7e2KvymHE5tjtiP0CD9RWKFtpQqthNsbVJXN3J9rz7gp0Af5B7Gw+QNLG5Yc3LQPgtitB3fqS9imzm6cTG2huk9TT9ru5eSaU12pLYrf9OcQflB9L2qzkVj1BbOA81vYN+bql9iBplZLq8F7ZC4GjVvcIou3xoUSHwsOJ9+iSVY01pdT+SlpUraxpb+Lz6RjgdGAq0STjUuAe4Dhi5YjyNS0RAEOD5ATXzbZ9hSiFdjQRAJ8DbGh7uqQXiLqrTxLVC1IbSdqEmDl6iWgyco7t4yS9B9wkaSvbU6odZXUk/Q+wFnAb0QK5P7AXMdM2i9iBf4Si4PiPJF1i+6VWurtO811P4GFJq5QNmgvZ/kdJU+pETBwcQXSG2tZ2y25gTanZKZqE7STpctt/J2Z+77b9a0kLAMcTtf6/avsUSdeWakYtpyFmgksAvAERaLxo+w1gASIgXknRkvYZ4DLbGQC3Qd1M+6LAqsC3bPcnUk32krSp7ROAkUQzklb2OeBEoL+jZNwQ4gZsMLCZ7cOJoGQ3ScvYfgla6+46zV+Okka7AQ9JWtJRPWfhcuM1idjUaqJiRAbAKTW3bkTt/i6lEsRfgX6KBhgzy2fRa/zzs7xl96l02Jng+lmzMq0/BFje9p0AZWbtSqLOXTeiOsGjVY230ZUbjQHEcsmCRB7rfbZPlnQUsL+ideJxlQ60YuV9OUZSL2CQpC62ryp56MsA60iaSuQGD8ubsjS/2L5Z0kDgQUnruZSPLBtYNyHygJ+vdJAppXbnKI3Yicj1XRQ4k+iiO1LSckT9322A75TrW3aCpkNujCtB7862L5O0NrAu8Bsih2VkrUJByX3rBSxg+4nKBtwEFJ3OfkxsOOxC1LYdZvuCcn4IMMb25OpG2TGUTXAHEw1DNiN6r/9S0r5EVZLuwFG2x1Q4zNSiJG0NnG97VUmrEzXU97d9fbUjSym1p7rU0b7An4nc/z2ICc+LiQmuI4l9VOOc3SE7ZhAMUHbWDybyUne1/WQp33ERcKvtoZUOsImUHNeziBSTncvmmo2Ju8df2D6r0gF2IOUuehRwjO07Je1CVM44B/gl8Emgq+1nMgc4VaUEwqOAN4mC+KPz/ZhS86oLgAcQ+6YOt/0bSf9LpJICXGz7d7N/TRXj7Sg6XE5wmcIH+D9ig9GStp8EcLTj/TawnaRTKhpiU6ivUlByVkcDCwHbSupmeyJwFNHdbKW6n0tLkfQZSbuWGwUcHfKeARYr6SFXE7VXRwDb2/6j7WfKtS39xyVVx/ZNwLbAwRkAp9S8JHUtaXlWdHk9npg4/I2kTwHTgZOARYhGYkvUvjb/JnTAnOBSzmMtYvf9xsDpkp4FPl82xL1BlEfLEj9tVHfHuBmxyesd4BKiA9/XgVmSJti+Q9Imtv9W5XirUm4U9ifqKV4r6VXiD8xfiQ5cTwJTgNuBrwB/qGakKf0723dAzvak1KxKQDsIOI/4HO9MfI73lbQfEUf1IxpenQd0LnFUKjrM7J6kTqV0B0Q5n01tv2N7IHAHMKnkYo4GZtq+v6qxNrq62rZnE7O/GxBVIMYRedd7ETtJF2jVABg+uEu+GZhEbMxcGfgu8Ami1uo+ki4kOsENtf1QRUNNaY4yAE6pOZWAdjiwqKQdgGeJNKgjgN8SDZwGAWvafq62Spn+qfIgWFIXiBlgYKVy+Abg1do1tg8k8i33Ibpu5Q7nuSSpR8nzrdkWONf2qba/AdwKXGf7WmAi8LztmVWMtSOxfStRd3p32wOI2d5NgOWI4uJdiHJyEyobZEoppZZSmzS0PRXYlNgA9xXbZ9reyPY1wOeJiZsMfueg0nSIUpHgEEmnA28D15WmFz2AtSU9QtS2vJ2oViDbM3J5b+5IWhAYAGymaKt6O7E7dNm6y4YAF5bz51Yxzo6m7n12EpGHvhbRcetEIg1iI6I29W8rHGZKKaUWUj6bZioaW/W2PaxU1dqh7N+ZSPRRuJAoH5uTNHNQWRBcErhHErORU8uxLwEzgM2J+r99gdWA7YkZ4Kcgl/fmVqn2cA1RT3kPSS8TS/gTJT1veySRG7w60EPSH/M1/pf32QvEHfVgYJDt4QCS7rX9TlXjSyml1HpKSuPWRAfIQ8uxi8o+lm2I2G48sI3tF3LicM4qKZFWSnZcSeRRji53LgcB19p+pVxzFlEKbZykHrXjae7UbYL7MlHbdkXgd8TMb1fgcuA+4AvAkbZ/VdlgOzBJ6wE/BXaw/WdJnUoKT0oppTTflOZMFwAjbE9QaZNezh1IFBX4bsZN/1lVM8FLAWvZHl0ejwcetf1K2Yw1k8hX7kMUdM4fZBuVALgncC5R+aEbsYx/NPCj8u+uQDfbT+cd4xw9CjwBfEnRZz0D4JRSSvOd7Wll8nANYEJdAPxp2xdKGpNx03+nko1xtu8m6tE+L+k24C7bR5RzM0tuyzVAVoCYN7oDr9p+3Pa9wBhgCSIwXqfUtn0aMtVkTmy/BwwDpmYAnFJKaX6p1fUvNfs/Ww7fCSwhaZ1ybh3gPEk9bf+pmpE2nko7xknqR8wCL1QLLCRtQCzbD847mbapS4FYzPa0cmwUMMn2aeXxUcCngbNsP17hcFNKKaX0EUonuGOILrqvExWz+hNVtWYRK+dH2b6hskE2oMrbJpfavz+13UvSp4kad0faHlfpwBpcSZrfh/iFORlYD9iaqAhxJXA6sK/t+yobZEoppZQ+VN2EVm/gfOBrRLOwQ233kbQ4Ua6zJ7FKOTlTGudO5UEwgKT+RPA7hZgBvqniITU0SZ8HzgLOAA4gclmvAt4kZtkXAG63fWNlg0wppZTSv6ltvK7772pE44u/A7sDe9p+TtK6th+sdrSNrUMEwfBBakR329dXPZZGJmklomzKE7aPK81IziZaKp5v+3d1v1h5x5hSSil1ECXg3ZvYy9OJmMx6k6j524to3PSspC3KuR1sT6lqvI2u8o5xNbZvt319LQE8tVkXIgViS0nrlzq2hxEVOQaXPOFZkJvgUkoppY6iNBAbBfwVeI5oFnYvUdr0WuBPwABJhwDnAMdmAPzxdJiZ4NQ2s+UMvUV03jPRL3w5oo7gA6XiRq/cBJdSSil1LHX9E463Pabu+LHAfsA6REOrdYFliD4Kd+SK7seTQXATKJsLzyDuFDcC9gKmE/m/qwE/sz2puhGmlFJKaU4kfRGYaLtTebyo7enl32cDSwL7ZInOeavDpEOktpG0LnAasB2xVNILuIVoijGM2Gw4rbIBppRSSukj1fVPeE7S0ranlxVciJSIzhkAz3sZBDcYSZ+S9FlJK5ZDrwO7EDlDBwBrE01GbiPyg0/KFIiUUkqpYyuVsQYC90tayva75dQM4A1JC+a+qXmrqrbJqQ1K3u+VwN+AVyRdZ3tUObcjkfbwuqSHgE8BK9t+qboRp5RSSum/ZfsmSQOBB4FVy2a5U4FBpXNpmocyCG4QdUnz3wOeAbYH1gJGlR7is4B1JM0ikuj3tP1kJs2nlFJKjaMEwodIeodIafye7ZurHlczyo1xDeJDkuZ7AT8l2ii+SNQR/CGxa/Q229dVNNSUUkopfUzZP6H9ZRDcQEpnvQtsryppN6JO4EvAe8AjwBgiAH4vZ4BTSimlxpef5+0n0yEaiO2bJQ2U9DbwlO1lJS0FdAWOAl6u5QzlL0xKKaXU+PLzvP3kTHADkrQ5cJntFaoeS0oppZRSI8oSaQ3I9h3AfpJelbRk1eNJKaWUUmo0ORPcwEqnuHds31n1WFJKKaWUGkkGwU0gk+ZTSimllOZOBsEppZRSSqnlZE5wSimllFJqORkEp5RSSimllpNBcEoppZRSajkZBKeUmo6kmZIelfS4pBslLVH1mGok/UjSFvPgeTaVZEn71R3rW44NLo9HSNrxPzyPJV1R97izpNckjZ3L8fxB0jIf95qUUppfMghOKTWj6bb72l4DeB045OM+oaR50mHT9nG2b5sXzwU8Duxc93g34Ldz+RzTgDUkLVoebwn8cR6MLaWUOrQMglNKze5eYHkAST0l3SzpIUl3Sepdd/w+SY9JOrG0Jq/Ntt4laQzwpKQFJJ0h6QFJkyUdUK77pKSJdbPPXyrXjiiPH5P03XLtB7OzkvpJeqScv1jSwuX4HyQNlfRwOdd7Dt/bC8AiknpIEtAfuKkNr9E4YNvy792AX9ROSFpK0ujy/d4nqU85vrSkWyQ9IWk4oLqv2VPS/eX1GCZpgTaMKaWU2lUGwSmlplWCr37AmHLo58ChttcBBgMXlOPnAOfYXhOYOtvTrA18x/ZqwLeAN22vB6wHfFvSKsDuwHjbfYG1gEeBvsDyttcoz3vJbGNbBBgB7FLOdwYOqrvkL7bXBn5Wxjon1wI7ARsCDwMz/uML8+9GAruWMfUBJtWdGwo8YrsPcAxwWTl+PHC37dWB64EVy/f1WWAXYKPyeswE9mjDmFJKqV3Nk+W9lFLqYBaV9CgxA/wUcKukrkSgeE1MmgKwcPnvBsDXyr+vAs6se677bU8p//4y0Kcuz3Zx4NPAA8DFkhYERtt+VNLzwKqSzgV+Bdwy2xg/A0yx/Wx5fCmRtnF2eTyq/PchYIeP+F5/CVwN9CZmcDf8iGs/lO3JklYmZoHHzXb6i8DXy3V3lBng7sDGtXHZ/pWkv5Xr+wHrAA+U13lR4NW5HVNKKbW3DIJTSs1ouu2+kroA44ngcgTwRpmdnBvT6v4tYiZ5/OwXSdqYSCkYIeknti+TtBawFXAgkbu771z8f2szujP5iL/Vtl+W9B6Ry/sd2hAEF2OI4H9TYOk2PgfEa3Sp7aM/xnOklFK7y3SIlFLTsv0OcBhwOPAOMEXSThDtxkuQCnAfZbYT2PUjnnI8cFCZ8UXSapIWk7QS8Irti4DhwNqlCkIn29cBQ4i0inrPACtL6lUe7wX8uo3f6nHAkbZntvHrAS4Ghtp+bLbjd1HSGSRtSqRpvAVMJNJAkLQ1sGS5/nZgR0nLlnNLldcnpZQ6lJwJTik1NduPSJpMLPXvAfxM0hBgQSIX9rfAIOAKST8AbgbenMPTDQdWBh4uG9FeI9IoNgWOKDOybwN7E6kYl0iqTTb8y8yo7Xcl7UOkZ3QmUioubOP3eM9HnB4mqZZi8ZLtDebwHFOBn37IqR8SqR6TiRuJb5TjQ4FfSHoCuAd4sTzPk+X1vaV87+8RM/EvzN13lVJK7Uu2qx5DSilVqqRNTLdtSbsCu9keUPW4UkoptZ+cCU4ppdjIdV6Z3X2DucvdTSml1IByJjillFJKKbWc3BiXUkoppZRaTgbBKaWUUkqp5WQQnFJKKaWUWk4GwSmllFJKqeVkEJxSSimllFpOBsEppZRSSqnl/D+dhF4ejbnaogAAAABJRU5ErkJggg==\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"TVrD5EeVuyqC"},"source":["* ExtraTreesRegressor performs the best but seems a bit overfitted with default params.\n","* AdaBoostRegressor peforms okayish and is also not very overfitted. Maybe (or not) we should use this model to further tune!\n","* DecisionTreeRegressor is a notorious overfitter!"]},{"cell_type":"markdown","metadata":{"id":"WpBpBRervVXO"},"source":["## Tuning for the best `ML` Model\n","\n","* We will peform hyperparameter tuning for the best ML model i.e. `ExtraTreesRegressor`"]},{"cell_type":"markdown","metadata":{"id":"IxOSeGfZ3bms"},"source":["### Get the tree depths of `ExtraTreesClassifier`\n","\n","https://stackoverflow.com/questions/34214087/how-do-you-access-tree-depth-in-pythons-scikit-learn"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":265},"id":"otHINLZT2qE8","executionInfo":{"status":"ok","timestamp":1625257047740,"user_tz":-330,"elapsed":518,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"aca18d2f-330b-4985-c731-82bff7a7220d"},"source":["tree_depths = [est.get_depth() for est in grid_search.best_estimator_.named_steps['reg'].estimators_]\n","plt.hist(tree_depths);"],"execution_count":122,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"KkbfsuAquyB_","executionInfo":{"status":"ok","timestamp":1625257433366,"user_tz":-330,"elapsed":470,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"b03691af-4729-4506-e8d6-9945140e9710"},"source":["extratrees_paramgrid = {'n_estimators': [2, 10, 20, 50, 100], 'max_features': [2, 4, 6, 8], 'max_depth': [8, 12, 16, 20]}\n","param_grid = {'reg': [ExtraTreesRegressor()], **{f'reg__{param}': vals for param, vals in extratrees_paramgrid.items()}}\n","param_grid"],"execution_count":133,"outputs":[{"output_type":"execute_result","data":{"text/plain":["{'reg': [ExtraTreesRegressor(bootstrap=False, ccp_alpha=0.0, criterion='mse',\n"," max_depth=None, max_features='auto', max_leaf_nodes=None,\n"," max_samples=None, min_impurity_decrease=0.0,\n"," min_impurity_split=None, min_samples_leaf=1,\n"," min_samples_split=2, min_weight_fraction_leaf=0.0,\n"," n_estimators=100, n_jobs=None, oob_score=False,\n"," random_state=None, verbose=0, warm_start=False)],\n"," 'reg__max_depth': [8, 12, 16, 20],\n"," 'reg__max_features': [2, 4, 6, 8],\n"," 'reg__n_estimators': [2, 10, 20, 50, 100]}"]},"metadata":{"tags":[]},"execution_count":133}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"rcDiq21Ntddh","executionInfo":{"status":"ok","timestamp":1625257462644,"user_tz":-330,"elapsed":25708,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"6efbd115-06f8-4b72-fedc-a768cc3d7d77"},"source":["%%time\n","\n","grid_search = GridSearchCV(model, param_grid, scoring='neg_mean_squared_error', n_jobs=-1, cv=5)\n","grid_search.fit(dfX_train, y_train)"],"execution_count":134,"outputs":[{"output_type":"stream","text":["CPU times: user 2.42 s, sys: 36.5 ms, total: 2.45 s\n","Wall time: 25.2 s\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"OPYqPTat4rYp","executionInfo":{"status":"ok","timestamp":1625257466261,"user_tz":-330,"elapsed":519,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"1d157ee4-4f37-4f9e-9be6-470efe925d6d"},"source":["grid_search.best_params_"],"execution_count":135,"outputs":[{"output_type":"execute_result","data":{"text/plain":["{'reg': ExtraTreesRegressor(bootstrap=False, ccp_alpha=0.0, criterion='mse',\n"," max_depth=12, max_features=8, max_leaf_nodes=None,\n"," max_samples=None, min_impurity_decrease=0.0,\n"," min_impurity_split=None, min_samples_leaf=1,\n"," min_samples_split=2, min_weight_fraction_leaf=0.0,\n"," n_estimators=100, n_jobs=None, oob_score=False,\n"," random_state=None, verbose=0, warm_start=False),\n"," 'reg__max_depth': 12,\n"," 'reg__max_features': 8,\n"," 'reg__n_estimators': 100}"]},"metadata":{"tags":[]},"execution_count":135}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"86akKfVT45fC","executionInfo":{"status":"ok","timestamp":1625257470031,"user_tz":-330,"elapsed":7,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"b53ffb9a-903a-4f22-b750-d39bbc8e145a"},"source":["-grid_search.best_score_"],"execution_count":136,"outputs":[{"output_type":"execute_result","data":{"text/plain":["6.449396003903662"]},"metadata":{"tags":[]},"execution_count":136}]},{"cell_type":"markdown","metadata":{"id":"FMpbugkC5UQs"},"source":["## Feature Importance"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":447},"id":"6nAD75o95OLE","executionInfo":{"status":"ok","timestamp":1625257691516,"user_tz":-330,"elapsed":566,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"c2402595-a377-4f72-f660-f35628962112"},"source":["best_model = grid_search.best_estimator_\n","feature_importances = pd.DataFrame(zip(PREPROCESSED_COLUMNS, best_model.named_steps['reg'].feature_importances_), \n"," columns=['feature', 'importance']).sort_values('importance', ascending=False)\n","feature_importances"],"execution_count":142,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
featureimportance
12origin_30.200836
11origin_20.170609
0cylinder0.126985
1displacement0.122400
5model_year0.096339
3weight0.091172
2horsepower0.076762
10origin_10.059976
9acceleration_on_cylinder0.017342
4acceleration0.016108
6displacement_on_horsepower0.011502
7weight_on_cylinder0.005297
8acceleration_on_horsepower0.004672
\n","
"],"text/plain":[" feature importance\n","12 origin_3 0.200836\n","11 origin_2 0.170609\n","0 cylinder 0.126985\n","1 displacement 0.122400\n","5 model_year 0.096339\n","3 weight 0.091172\n","2 horsepower 0.076762\n","10 origin_1 0.059976\n","9 acceleration_on_cylinder 0.017342\n","4 acceleration 0.016108\n","6 displacement_on_horsepower 0.011502\n","7 weight_on_cylinder 0.005297\n","8 acceleration_on_horsepower 0.004672"]},"metadata":{"tags":[]},"execution_count":142}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":512},"id":"QIfWvWXb6Szz","executionInfo":{"status":"ok","timestamp":1625258331237,"user_tz":-330,"elapsed":835,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"d3cca960-2e1b-4419-aceb-796f52ca6b86"},"source":["feature_importances.plot(x='feature', y='importance', kind='bar', figsize=(16, 6))\n","plt.xticks(rotation=45);\n","plt.title('Feature Importance', fontdict=dict(size=20, weight='bold'))\n","plt.savefig('../reports/feature_importance.jpg')"],"execution_count":155,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"B8p1aEHf53oM","executionInfo":{"status":"ok","timestamp":1625257733061,"user_tz":-330,"elapsed":453,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["feature_importances.to_csv('../reports/extratrees_feature_importance.csv')"],"execution_count":144,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"YIwbji4m6wEl"},"source":["## Evaluate on Test Data"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"2yzCC1w_6yAg","executionInfo":{"status":"ok","timestamp":1625257978203,"user_tz":-330,"elapsed":465,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}},"outputId":"a18cc0d1-9d9b-4aed-c6c6-65c19eba8c02"},"source":["from sklearn.metrics import mean_squared_error\n","\n","y_test_pred = best_model.predict(dfX_test)\n","mean_squared_error(y_test_pred, y_test) # Test MSE"],"execution_count":151,"outputs":[{"output_type":"execute_result","data":{"text/plain":["6.849679833782827"]},"metadata":{"tags":[]},"execution_count":151}]},{"cell_type":"markdown","metadata":{"id":"Vw2WkWk77R_b"},"source":["## Save the Model"]},{"cell_type":"code","metadata":{"id":"_c_HDEeX7QOx","executionInfo":{"status":"ok","timestamp":1625258132681,"user_tz":-330,"elapsed":471,"user":{"displayName":"Abhishek Bhatia","photoUrl":"","userId":"05636063588651340588"}}},"source":["import pickle\n","\n","best_reg = best_model.named_steps['reg']\n","\n","with open('../models/extratrees.pkl', 'wb') as f:\n"," pickle.dump(best_reg, f)"],"execution_count":153,"outputs":[]}]} \ No newline at end of file diff --git a/mlops/mpg-pred-end-to-end-ml/reports/extratrees_feature_importance.csv b/mlops/mpg-pred-end-to-end-ml/reports/extratrees_feature_importance.csv new file mode 100644 index 0000000..3a30cfe --- /dev/null +++ b/mlops/mpg-pred-end-to-end-ml/reports/extratrees_feature_importance.csv @@ -0,0 +1,14 @@ +,feature,importance +12,origin_3,0.20083576847734336 +11,origin_2,0.17060922321284105 +0,cylinder,0.12698487175591056 +1,displacement,0.12239999942793195 +5,model_year,0.09633910660006512 +3,weight,0.0911721102947178 +2,horsepower,0.07676208086911002 +10,origin_1,0.05997616000408615 +9,acceleration_on_cylinder,0.01734199197848265 +4,acceleration,0.016107734148097033 +6,displacement_on_horsepower,0.011501569741050459 +7,weight_on_cylinder,0.0052970431506353145 +8,acceleration_on_horsepower,0.004672340339728447 diff --git a/mlops/mpg-pred-end-to-end-ml/reports/feature_importance.jpg b/mlops/mpg-pred-end-to-end-ml/reports/feature_importance.jpg new file mode 100644 index 0000000..b58c72b Binary files /dev/null and b/mlops/mpg-pred-end-to-end-ml/reports/feature_importance.jpg differ diff --git a/mlops/mpg-pred-end-to-end-ml/reports/mlmodel_comparison.jpg b/mlops/mpg-pred-end-to-end-ml/reports/mlmodel_comparison.jpg new file mode 100644 index 0000000..0fe1d41 Binary files /dev/null and b/mlops/mpg-pred-end-to-end-ml/reports/mlmodel_comparison.jpg differ