alejandrocl86/IBM_Applied_Data_Science_Capstone
0
1{2 "cells": [3 {4 "cell_type": "markdown",5 "metadata": {},6 "source": [7 "<p style=\"text-align:center\">\n",8 " <a href=\"https://skills.network/?utm_medium=Exinfluencer&utm_source=Exinfluencer&utm_content=000026UJ&utm_term=10006555&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDS0321ENSkillsNetwork26802033-2022-01-01\">\n",9 " <img src=\"https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/assets/logos/SN_web_lightmode.png\" width=\"200\" alt=\"Skills Network Logo\" />\n",10 " </a>\n",11 "</p>\n"12 ]13 },14 {15 "cell_type": "markdown",16 "metadata": {},17 "source": [18 "# **Space X Falcon 9 First Stage Landing Prediction**\n"19 ]20 },21 {22 "cell_type": "markdown",23 "metadata": {},24 "source": [25 "## Assignment: Machine Learning Prediction\n"26 ]27 },28 {29 "cell_type": "markdown",30 "metadata": {},31 "source": [32 "Estimated time needed: **60** minutes\n"33 ]34 },35 {36 "cell_type": "markdown",37 "metadata": {},38 "source": [39 "Space X advertises Falcon 9 rocket launches on its website with a cost of 62 million dollars; other providers cost upward of 165 million dollars each, much of the savings is because Space X can reuse the first stage. Therefore if we can determine if the first stage will land, we can determine the cost of a launch. This information can be used if an alternate company wants to bid against space X for a rocket launch. In this lab, you will create a machine learning pipeline to predict if the first stage will land given the data from the preceding labs.\n"40 ]41 },42 {43 "cell_type": "markdown",44 "metadata": {},45 "source": [46 "\n"47 ]48 },49 {50 "cell_type": "markdown",51 "metadata": {},52 "source": [53 "Several examples of an unsuccessful landing are shown here:\n"54 ]55 },56 {57 "cell_type": "markdown",58 "metadata": {},59 "source": [60 "\n"61 ]62 },63 {64 "cell_type": "markdown",65 "metadata": {},66 "source": [67 "Most unsuccessful landings are planed. Space X; performs a controlled landing in the oceans.\n"68 ]69 },70 {71 "cell_type": "markdown",72 "metadata": {},73 "source": [74 "## Objectives\n"75 ]76 },77 {78 "cell_type": "markdown",79 "metadata": {},80 "source": [81 "Perform exploratory Data Analysis and determine Training Labels\n",82 "\n",83 "* create a column for the class\n",84 "* Standardize the data\n",85 "* Split into training data and test data\n",86 "\n",87 "\\-Find best Hyperparameter for SVM, Classification Trees and Logistic Regression\n",88 "\n",89 "* Find the method performs best using test data\n"90 ]91 },92 {93 "cell_type": "markdown",94 "metadata": {},95 "source": [96 "## Import Libraries and Define Auxiliary Functions\n"97 ]98 },99 {100 "cell_type": "markdown",101 "metadata": {},102 "source": [103 "We will import the following libraries for the lab\n"104 ]105 },106 {107 "cell_type": "code",108 "execution_count": 1,109 "metadata": {},110 "outputs": [],111 "source": [112 "import pandas as pd\n",113 "import numpy as np\n",114 "import matplotlib.pyplot as plt\n",115 "import seaborn as sns\n",116 "from sklearn import preprocessing\n",117 "from sklearn.model_selection import train_test_split\n",118 "from sklearn.model_selection import GridSearchCV\n",119 "from sklearn.linear_model import LogisticRegression\n",120 "from sklearn.svm import SVC\n",121 "from sklearn.tree import DecisionTreeClassifier\n",122 "from sklearn.neighbors import KNeighborsClassifier"123 ]124 },125 {126 "cell_type": "markdown",127 "metadata": {},128 "source": [129 "This function is to plot the confusion matrix.\n"130 ]131 },132 {133 "cell_type": "code",134 "execution_count": 2,135 "metadata": {},136 "outputs": [],137 "source": [138 "def plot_confusion_matrix(y,y_predict):\n",139 " \"this function plots the confusion matrix\"\n",140 " from sklearn.metrics import confusion_matrix\n",141 "\n",142 " cm = confusion_matrix(y, y_predict)\n",143 " ax= plt.subplot()\n",144 " sns.heatmap(cm, annot=True, ax = ax); #annot=True to annotate cells\n",145 " ax.set_xlabel('Predicted labels')\n",146 " ax.set_ylabel('True labels')\n",147 " ax.set_title('Confusion Matrix'); \n",148 " ax.xaxis.set_ticklabels(['did not land', 'land']); ax.yaxis.set_ticklabels(['did not land', 'landed']) \n",149 " plt.show() "150 ]151 },152 {153 "cell_type": "markdown",154 "metadata": {},155 "source": [156 "## Load the dataframe\n"157 ]158 },159 {160 "cell_type": "markdown",161 "metadata": {},162 "source": [163 "Load the data\n"164 ]165 },166 {167 "cell_type": "code",168 "execution_count": 3,169 "metadata": {},170 "outputs": [],171 "source": [172 "# from js import fetch\n",173 "# import io\n",174 "\n",175 "URL1 = \"https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBM-DS0321EN-SkillsNetwork/datasets/dataset_part_2.csv\"\n",176 "# resp1 = await fetch(URL1)\n",177 "# text1 = io.BytesIO((await resp1.arrayBuffer()).to_py())\n",178 "data = pd.read_csv(URL1)"179 ]180 },181 {182 "cell_type": "code",183 "execution_count": 4,184 "metadata": {},185 "outputs": [186 {187 "data": {188 "text/html": [189 "<div>\n",190 "<style scoped>\n",191 " .dataframe tbody tr th:only-of-type {\n",192 " vertical-align: middle;\n",193 " }\n",194 "\n",195 " .dataframe tbody tr th {\n",196 " vertical-align: top;\n",197 " }\n",198 "\n",199 " .dataframe thead th {\n",200 " text-align: right;\n",201 " }\n",202 "</style>\n",203 "<table border=\"1\" class=\"dataframe\">\n",204 " <thead>\n",205 " <tr style=\"text-align: right;\">\n",206 " <th></th>\n",207 " <th>FlightNumber</th>\n",208 " <th>Date</th>\n",209 " <th>BoosterVersion</th>\n",210 " <th>PayloadMass</th>\n",211 " <th>Orbit</th>\n",212 " <th>LaunchSite</th>\n",213 " <th>Outcome</th>\n",214 " <th>Flights</th>\n",215 " <th>GridFins</th>\n",216 " <th>Reused</th>\n",217 " <th>Legs</th>\n",218 " <th>LandingPad</th>\n",219 " <th>Block</th>\n",220 " <th>ReusedCount</th>\n",221 " <th>Serial</th>\n",222 " <th>Longitude</th>\n",223 " <th>Latitude</th>\n",224 " <th>Class</th>\n",225 " </tr>\n",226 " </thead>\n",227 " <tbody>\n",228 " <tr>\n",229 " <th>0</th>\n",230 " <td>1</td>\n",231 " <td>2010-06-04</td>\n",232 " <td>Falcon 9</td>\n",233 " <td>6104.959412</td>\n",234 " <td>LEO</td>\n",235 " <td>CCAFS SLC 40</td>\n",236 " <td>None None</td>\n",237 " <td>1</td>\n",238 " <td>False</td>\n",239 " <td>False</td>\n",240 " <td>False</td>\n",241 " <td>NaN</td>\n",242 " <td>1.0</td>\n",243 " <td>0</td>\n",244 " <td>B0003</td>\n",245 " <td>-80.577366</td>\n",246 " <td>28.561857</td>\n",247 " <td>0</td>\n",248 " </tr>\n",249 " <tr>\n",250 " <th>1</th>\n",251 " <td>2</td>\n",252 " <td>2012-05-22</td>\n",253 " <td>Falcon 9</td>\n",254 " <td>525.000000</td>\n",255 " <td>LEO</td>\n",256 " <td>CCAFS SLC 40</td>\n",257 " <td>None None</td>\n",258 " <td>1</td>\n",259 " <td>False</td>\n",260 " <td>False</td>\n",261 " <td>False</td>\n",262 " <td>NaN</td>\n",263 " <td>1.0</td>\n",264 " <td>0</td>\n",265 " <td>B0005</td>\n",266 " <td>-80.577366</td>\n",267 " <td>28.561857</td>\n",268 " <td>0</td>\n",269 " </tr>\n",270 " <tr>\n",271 " <th>2</th>\n",272 " <td>3</td>\n",273 " <td>2013-03-01</td>\n",274 " <td>Falcon 9</td>\n",275 " <td>677.000000</td>\n",276 " <td>ISS</td>\n",277 " <td>CCAFS SLC 40</td>\n",278 " <td>None None</td>\n",279 " <td>1</td>\n",280 " <td>False</td>\n",281 " <td>False</td>\n",282 " <td>False</td>\n",283 " <td>NaN</td>\n",284 " <td>1.0</td>\n",285 " <td>0</td>\n",286 " <td>B0007</td>\n",287 " <td>-80.577366</td>\n",288 " <td>28.561857</td>\n",289 " <td>0</td>\n",290 " </tr>\n",291 " <tr>\n",292 " <th>3</th>\n",293 " <td>4</td>\n",294 " <td>2013-09-29</td>\n",295 " <td>Falcon 9</td>\n",296 " <td>500.000000</td>\n",297 " <td>PO</td>\n",298 " <td>VAFB SLC 4E</td>\n",299 " <td>False Ocean</td>\n",300 " <td>1</td>\n",301 " <td>False</td>\n",302 " <td>False</td>\n",303 " <td>False</td>\n",304 " <td>NaN</td>\n",305 " <td>1.0</td>\n",306 " <td>0</td>\n",307 " <td>B1003</td>\n",308 " <td>-120.610829</td>\n",309 " <td>34.632093</td>\n",310 " <td>0</td>\n",311 " </tr>\n",312 " <tr>\n",313 " <th>4</th>\n",314 " <td>5</td>\n",315 " <td>2013-12-03</td>\n",316 " <td>Falcon 9</td>\n",317 " <td>3170.000000</td>\n",318 " <td>GTO</td>\n",319 " <td>CCAFS SLC 40</td>\n",320 " <td>None None</td>\n",321 " <td>1</td>\n",322 " <td>False</td>\n",323 " <td>False</td>\n",324 " <td>False</td>\n",325 " <td>NaN</td>\n",326 " <td>1.0</td>\n",327 " <td>0</td>\n",328 " <td>B1004</td>\n",329 " <td>-80.577366</td>\n",330 " <td>28.561857</td>\n",331 " <td>0</td>\n",332 " </tr>\n",333 " </tbody>\n",334 "</table>\n",335 "</div>"336 ],337 "text/plain": [338 " FlightNumber Date BoosterVersion PayloadMass Orbit LaunchSite \n",339 "0 1 2010-06-04 Falcon 9 6104.959412 LEO CCAFS SLC 40 \\\n",340 "1 2 2012-05-22 Falcon 9 525.000000 LEO CCAFS SLC 40 \n",341 "2 3 2013-03-01 Falcon 9 677.000000 ISS CCAFS SLC 40 \n",342 "3 4 2013-09-29 Falcon 9 500.000000 PO VAFB SLC 4E \n",343 "4 5 2013-12-03 Falcon 9 3170.000000 GTO CCAFS SLC 40 \n",344 "\n",345 " Outcome Flights GridFins Reused Legs LandingPad Block \n",346 "0 None None 1 False False False NaN 1.0 \\\n",347 "1 None None 1 False False False NaN 1.0 \n",348 "2 None None 1 False False False NaN 1.0 \n",349 "3 False Ocean 1 False False False NaN 1.0 \n",350 "4 None None 1 False False False NaN 1.0 \n",351 "\n",352 " ReusedCount Serial Longitude Latitude Class \n",353 "0 0 B0003 -80.577366 28.561857 0 \n",354 "1 0 B0005 -80.577366 28.561857 0 \n",355 "2 0 B0007 -80.577366 28.561857 0 \n",356 "3 0 B1003 -120.610829 34.632093 0 \n",357 "4 0 B1004 -80.577366 28.561857 0 "358 ]359 },360 "execution_count": 4,361 "metadata": {},362 "output_type": "execute_result"363 }364 ],365 "source": [366 "data.head()"367 ]368 },369 {370 "cell_type": "code",371 "execution_count": 5,372 "metadata": {},373 "outputs": [],374 "source": [375 "URL2 = 'https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBM-DS0321EN-SkillsNetwork/datasets/dataset_part_3.csv'\n",376 "# resp2 = await fetch(URL2)\n",377 "# text2 = io.BytesIO((await resp2.arrayBuffer()).to_py())\n",378 "X = pd.read_csv(URL2)"379 ]380 },381 {382 "cell_type": "code",383 "execution_count": 6,384 "metadata": {},385 "outputs": [386 {387 "data": {388 "text/html": [389 "<div>\n",390 "<style scoped>\n",391 " .dataframe tbody tr th:only-of-type {\n",392 " vertical-align: middle;\n",393 " }\n",394 "\n",395 " .dataframe tbody tr th {\n",396 " vertical-align: top;\n",397 " }\n",398 "\n",399 " .dataframe thead th {\n",400 " text-align: right;\n",401 " }\n",402 "</style>\n",403 "<table border=\"1\" class=\"dataframe\">\n",404 " <thead>\n",405 " <tr style=\"text-align: right;\">\n",406 " <th></th>\n",407 " <th>FlightNumber</th>\n",408 " <th>PayloadMass</th>\n",409 " <th>Flights</th>\n",410 " <th>Block</th>\n",411 " <th>ReusedCount</th>\n",412 " <th>Orbit_ES-L1</th>\n",413 " <th>Orbit_GEO</th>\n",414 " <th>Orbit_GTO</th>\n",415 " <th>Orbit_HEO</th>\n",416 " <th>Orbit_ISS</th>\n",417 " <th>...</th>\n",418 " <th>Serial_B1058</th>\n",419 " <th>Serial_B1059</th>\n",420 " <th>Serial_B1060</th>\n",421 " <th>Serial_B1062</th>\n",422 " <th>GridFins_False</th>\n",423 " <th>GridFins_True</th>\n",424 " <th>Reused_False</th>\n",425 " <th>Reused_True</th>\n",426 " <th>Legs_False</th>\n",427 " <th>Legs_True</th>\n",428 " </tr>\n",429 " </thead>\n",430 " <tbody>\n",431 " <tr>\n",432 " <th>0</th>\n",433 " <td>1.0</td>\n",434 " <td>6104.959412</td>\n",435 " <td>1.0</td>\n",436 " <td>1.0</td>\n",437 " <td>0.0</td>\n",438 " <td>0.0</td>\n",439 " <td>0.0</td>\n",440 " <td>0.0</td>\n",441 " <td>0.0</td>\n",442 " <td>0.0</td>\n",443 " <td>...</td>\n",444 " <td>0.0</td>\n",445 " <td>0.0</td>\n",446 " <td>0.0</td>\n",447 " <td>0.0</td>\n",448 " <td>1.0</td>\n",449 " <td>0.0</td>\n",450 " <td>1.0</td>\n",451 " <td>0.0</td>\n",452 " <td>1.0</td>\n",453 " <td>0.0</td>\n",454 " </tr>\n",455 " <tr>\n",456 " <th>1</th>\n",457 " <td>2.0</td>\n",458 " <td>525.000000</td>\n",459 " <td>1.0</td>\n",460 " <td>1.0</td>\n",461 " <td>0.0</td>\n",462 " <td>0.0</td>\n",463 " <td>0.0</td>\n",464 " <td>0.0</td>\n",465 " <td>0.0</td>\n",466 " <td>0.0</td>\n",467 " <td>...</td>\n",468 " <td>0.0</td>\n",469 " <td>0.0</td>\n",470 " <td>0.0</td>\n",471 " <td>0.0</td>\n",472 " <td>1.0</td>\n",473 " <td>0.0</td>\n",474 " <td>1.0</td>\n",475 " <td>0.0</td>\n",476 " <td>1.0</td>\n",477 " <td>0.0</td>\n",478 " </tr>\n",479 " <tr>\n",480 " <th>2</th>\n",481 " <td>3.0</td>\n",482 " <td>677.000000</td>\n",483 " <td>1.0</td>\n",484 " <td>1.0</td>\n",485 " <td>0.0</td>\n",486 " <td>0.0</td>\n",487 " <td>0.0</td>\n",488 " <td>0.0</td>\n",489 " <td>0.0</td>\n",490 " <td>1.0</td>\n",491 " <td>...</td>\n",492 " <td>0.0</td>\n",493 " <td>0.0</td>\n",494 " <td>0.0</td>\n",495 " <td>0.0</td>\n",496 " <td>1.0</td>\n",497 " <td>0.0</td>\n",498 " <td>1.0</td>\n",499 " <td>0.0</td>\n",500 " <td>1.0</td>\n",501 " <td>0.0</td>\n",502 " </tr>\n",503 " <tr>\n",504 " <th>3</th>\n",505 " <td>4.0</td>\n",506 " <td>500.000000</td>\n",507 " <td>1.0</td>\n",508 " <td>1.0</td>\n",509 " <td>0.0</td>\n",510 " <td>0.0</td>\n",511 " <td>0.0</td>\n",512 " <td>0.0</td>\n",513 " <td>0.0</td>\n",514 " <td>0.0</td>\n",515 " <td>...</td>\n",516 " <td>0.0</td>\n",517 " <td>0.0</td>\n",518 " <td>0.0</td>\n",519 " <td>0.0</td>\n",520 " <td>1.0</td>\n",521 " <td>0.0</td>\n",522 " <td>1.0</td>\n",523 " <td>0.0</td>\n",524 " <td>1.0</td>\n",525 " <td>0.0</td>\n",526 " </tr>\n",527 " <tr>\n",528 " <th>4</th>\n",529 " <td>5.0</td>\n",530 " <td>3170.000000</td>\n",531 " <td>1.0</td>\n",532 " <td>1.0</td>\n",533 " <td>0.0</td>\n",534 " <td>0.0</td>\n",535 " <td>0.0</td>\n",536 " <td>1.0</td>\n",537 " <td>0.0</td>\n",538 " <td>0.0</td>\n",539 " <td>...</td>\n",540 " <td>0.0</td>\n",541 " <td>0.0</td>\n",542 " <td>0.0</td>\n",543 " <td>0.0</td>\n",544 " <td>1.0</td>\n",545 " <td>0.0</td>\n",546 " <td>1.0</td>\n",547 " <td>0.0</td>\n",548 " <td>1.0</td>\n",549 " <td>0.0</td>\n",550 " </tr>\n",551 " <tr>\n",552 " <th>...</th>\n",553 " <td>...</td>\n",554 " <td>...</td>\n",555 " <td>...</td>\n",556 " <td>...</td>\n",557 " <td>...</td>\n",558 " <td>...</td>\n",559 " <td>...</td>\n",560 " <td>...</td>\n",561 " <td>...</td>\n",562 " <td>...</td>\n",563 " <td>...</td>\n",564 " <td>...</td>\n",565 " <td>...</td>\n",566 " <td>...</td>\n",567 " <td>...</td>\n",568 " <td>...</td>\n",569 " <td>...</td>\n",570 " <td>...</td>\n",571 " <td>...</td>\n",572 " <td>...</td>\n",573 " <td>...</td>\n",574 " </tr>\n",575 " <tr>\n",576 " <th>85</th>\n",577 " <td>86.0</td>\n",578 " <td>15400.000000</td>\n",579 " <td>2.0</td>\n",580 " <td>5.0</td>\n",581 " <td>2.0</td>\n",582 " <td>0.0</td>\n",583 " <td>0.0</td>\n",584 " <td>0.0</td>\n",585 " <td>0.0</td>\n",586 " <td>0.0</td>\n",587 " <td>...</td>\n",588 " <td>0.0</td>\n",589 " <td>0.0</td>\n",590 " <td>1.0</td>\n",591 " <td>0.0</td>\n",592 " <td>0.0</td>\n",593 " <td>1.0</td>\n",594 " <td>0.0</td>\n",595 " <td>1.0</td>\n",596 " <td>0.0</td>\n",597 " <td>1.0</td>\n",598 " </tr>\n",599 " <tr>\n",600 " <th>86</th>\n",601 " <td>87.0</td>\n",602 " <td>15400.000000</td>\n",603 " <td>3.0</td>\n",604 " <td>5.0</td>\n",605 " <td>2.0</td>\n",606 " <td>0.0</td>\n",607 " <td>0.0</td>\n",608 " <td>0.0</td>\n",609 " <td>0.0</td>\n",610 " <td>0.0</td>\n",611 " <td>...</td>\n",612 " <td>1.0</td>\n",613 " <td>0.0</td>\n",614 " <td>0.0</td>\n",615 " <td>0.0</td>\n",616 " <td>0.0</td>\n",617 " <td>1.0</td>\n",618 " <td>0.0</td>\n",619 " <td>1.0</td>\n",620 " <td>0.0</td>\n",621 " <td>1.0</td>\n",622 " </tr>\n",623 " <tr>\n",624 " <th>87</th>\n",625 " <td>88.0</td>\n",626 " <td>15400.000000</td>\n",627 " <td>6.0</td>\n",628 " <td>5.0</td>\n",629 " <td>5.0</td>\n",630 " <td>0.0</td>\n",631 " <td>0.0</td>\n",632 " <td>0.0</td>\n",633 " <td>0.0</td>\n",634 " <td>0.0</td>\n",635 " <td>...</td>\n",636 " <td>0.0</td>\n",637 " <td>0.0</td>\n",638 " <td>0.0</td>\n",639 " <td>0.0</td>\n",640 " <td>0.0</td>\n",641 " <td>1.0</td>\n",642 " <td>0.0</td>\n",643 " <td>1.0</td>\n",644 " <td>0.0</td>\n",645 " <td>1.0</td>\n",646 " </tr>\n",647 " <tr>\n",648 " <th>88</th>\n",649 " <td>89.0</td>\n",650 " <td>15400.000000</td>\n",651 " <td>3.0</td>\n",652 " <td>5.0</td>\n",653 " <td>2.0</td>\n",654 " <td>0.0</td>\n",655 " <td>0.0</td>\n",656 " <td>0.0</td>\n",657 " <td>0.0</td>\n",658 " <td>0.0</td>\n",659 " <td>...</td>\n",660 " <td>0.0</td>\n",661 " <td>0.0</td>\n",662 " <td>1.0</td>\n",663 " <td>0.0</td>\n",664 " <td>0.0</td>\n",665 " <td>1.0</td>\n",666 " <td>0.0</td>\n",667 " <td>1.0</td>\n",668 " <td>0.0</td>\n",669 " <td>1.0</td>\n",670 " </tr>\n",671 " <tr>\n",672 " <th>89</th>\n",673 " <td>90.0</td>\n",674 " <td>3681.000000</td>\n",675 " <td>1.0</td>\n",676 " <td>5.0</td>\n",677 " <td>0.0</td>\n",678 " <td>0.0</td>\n",679 " <td>0.0</td>\n",680 " <td>0.0</td>\n",681 " <td>0.0</td>\n",682 " <td>0.0</td>\n",683 " <td>...</td>\n",684 " <td>0.0</td>\n",685 " <td>0.0</td>\n",686 " <td>0.0</td>\n",687 " <td>1.0</td>\n",688 " <td>0.0</td>\n",689 " <td>1.0</td>\n",690 " <td>1.0</td>\n",691 " <td>0.0</td>\n",692 " <td>0.0</td>\n",693 " <td>1.0</td>\n",694 " </tr>\n",695 " </tbody>\n",696 "</table>\n",697 "<p>90 rows × 83 columns</p>\n",698 "</div>"699 ],700 "text/plain": [701 " FlightNumber PayloadMass Flights Block ReusedCount Orbit_ES-L1 \n",702 "0 1.0 6104.959412 1.0 1.0 0.0 0.0 \\\n",703 "1 2.0 525.000000 1.0 1.0 0.0 0.0 \n",704 "2 3.0 677.000000 1.0 1.0 0.0 0.0 \n",705 "3 4.0 500.000000 1.0 1.0 0.0 0.0 \n",706 "4 5.0 3170.000000 1.0 1.0 0.0 0.0 \n",707 ".. ... ... ... ... ... ... \n",708 "85 86.0 15400.000000 2.0 5.0 2.0 0.0 \n",709 "86 87.0 15400.000000 3.0 5.0 2.0 0.0 \n",710 "87 88.0 15400.000000 6.0 5.0 5.0 0.0 \n",711 "88 89.0 15400.000000 3.0 5.0 2.0 0.0 \n",712 "89 90.0 3681.000000 1.0 5.0 0.0 0.0 \n",713 "\n",714 " Orbit_GEO Orbit_GTO Orbit_HEO Orbit_ISS ... Serial_B1058 \n",715 "0 0.0 0.0 0.0 0.0 ... 0.0 \\\n",716 "1 0.0 0.0 0.0 0.0 ... 0.0 \n",717 "2 0.0 0.0 0.0 1.0 ... 0.0 \n",718 "3 0.0 0.0 0.0 0.0 ... 0.0 \n",719 "4 0.0 1.0 0.0 0.0 ... 0.0 \n",720 ".. ... ... ... ... ... ... \n",721 "85 0.0 0.0 0.0 0.0 ... 0.0 \n",722 "86 0.0 0.0 0.0 0.0 ... 1.0 \n",723 "87 0.0 0.0 0.0 0.0 ... 0.0 \n",724 "88 0.0 0.0 0.0 0.0 ... 0.0 \n",725 "89 0.0 0.0 0.0 0.0 ... 0.0 \n",726 "\n",727 " Serial_B1059 Serial_B1060 Serial_B1062 GridFins_False GridFins_True \n",728 "0 0.0 0.0 0.0 1.0 0.0 \\\n",729 "1 0.0 0.0 0.0 1.0 0.0 \n",730 "2 0.0 0.0 0.0 1.0 0.0 \n",731 "3 0.0 0.0 0.0 1.0 0.0 \n",732 "4 0.0 0.0 0.0 1.0 0.0 \n",733 ".. ... ... ... ... ... \n",734 "85 0.0 1.0 0.0 0.0 1.0 \n",735 "86 0.0 0.0 0.0 0.0 1.0 \n",736 "87 0.0 0.0 0.0 0.0 1.0 \n",737 "88 0.0 1.0 0.0 0.0 1.0 \n",738 "89 0.0 0.0 1.0 0.0 1.0 \n",739 "\n",740 " Reused_False Reused_True Legs_False Legs_True \n",741 "0 1.0 0.0 1.0 0.0 \n",742 "1 1.0 0.0 1.0 0.0 \n",743 "2 1.0 0.0 1.0 0.0 \n",744 "3 1.0 0.0 1.0 0.0 \n",745 "4 1.0 0.0 1.0 0.0 \n",746 ".. ... ... ... ... \n",747 "85 0.0 1.0 0.0 1.0 \n",748 "86 0.0 1.0 0.0 1.0 \n",749 "87 0.0 1.0 0.0 1.0 \n",750 "88 0.0 1.0 0.0 1.0 \n",751 "89 1.0 0.0 0.0 1.0 \n",752 "\n",753 "[90 rows x 83 columns]"754 ]755 },756 "execution_count": 6,757 "metadata": {},758 "output_type": "execute_result"759 }760 ],761 "source": [762 "X.head(100)"763 ]764 },765 {766 "cell_type": "markdown",767 "metadata": {},768 "source": [769 "## TASK 1\n"770 ]771 },772 {773 "cell_type": "markdown",774 "metadata": {},775 "source": [776 "Create a NumPy array from the column <code>Class</code> in <code>data</code>, by applying the method <code>to_numpy()</code> then\n",777 "assign it to the variable <code>Y</code>,make sure the output is a Pandas series (only one bracket df\\['name of column']).\n"778 ]779 },780 {781 "cell_type": "code",782 "execution_count": 7,783 "metadata": {},784 "outputs": [],785 "source": [786 "Y = data['Class'].to_numpy()"787 ]788 },789 {790 "cell_type": "markdown",791 "metadata": {},792 "source": [793 "## TASK 2\n"794 ]795 },796 {797 "cell_type": "markdown",798 "metadata": {},799 "source": [800 "Standardize the data in <code>X</code> then reassign it to the variable <code>X</code> using the transform provided below.\n"801 ]802 },803 {804 "cell_type": "code",805 "execution_count": 8,806 "metadata": {},807 "outputs": [],808 "source": [809 "# students get this \n",810 "transform = preprocessing.StandardScaler()\n",811 "X = transform.fit_transform(X)"812 ]813 },814 {815 "cell_type": "markdown",816 "metadata": {},817 "source": [818 "We split the data into training and testing data using the function <code>train_test_split</code>. The training data is divided into validation data, a second set used for training data; then the models are trained and hyperparameters are selected using the function <code>GridSearchCV</code>.\n"819 ]820 },821 {822 "cell_type": "markdown",823 "metadata": {},824 "source": [825 "## TASK 3\n"826 ]827 },828 {829 "cell_type": "markdown",830 "metadata": {},831 "source": [832 "Use the function train_test_split to split the data X and Y into training and test data. Set the parameter test_size to 0.2 and random_state to 2. The training data and test data should be assigned to the following labels.\n"833 ]834 },835 {836 "cell_type": "markdown",837 "metadata": {},838 "source": [839 "<code>X_train, X_test, Y_train, Y_test</code>\n"840 ]841 },842 {843 "cell_type": "code",844 "execution_count": 9,845 "metadata": {},846 "outputs": [],847 "source": [848 "X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size=0.2, random_state=2)"849 ]850 },851 {852 "cell_type": "markdown",853 "metadata": {},854 "source": [855 "we can see we only have 18 test samples.\n"856 ]857 },858 {859 "cell_type": "code",860 "execution_count": 10,861 "metadata": {},862 "outputs": [863 {864 "data": {865 "text/plain": [866 "(18,)"867 ]868 },869 "execution_count": 10,870 "metadata": {},871 "output_type": "execute_result"872 }873 ],874 "source": [875 "Y_test.shape"876 ]877 },878 {879 "cell_type": "markdown",880 "metadata": {},881 "source": [882 "## TASK 4\n"883 ]884 },885 {886 "cell_type": "markdown",887 "metadata": {},888 "source": [889 "Create a logistic regression object then create a GridSearchCV object <code>logreg_cv</code> with cv = 10. Fit the object to find the best parameters from the dictionary <code>parameters</code>.\n"890 ]891 },892 {893 "cell_type": "code",894 "execution_count": 11,895 "metadata": {},896 "outputs": [],897 "source": [898 "parameters ={'C':[0.01,0.1,1],\n",899 " 'penalty':['l2'],\n",900 " 'solver':['lbfgs']}"901 ]902 },903 {904 "cell_type": "code",905 "execution_count": 12,906 "metadata": {},907 "outputs": [908 {909 "data": {910 "text/html": [911 "<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=10, estimator=LogisticRegression(),\n",912 " param_grid={'C': [0.01, 0.1, 1], 'penalty': ['l2'],\n",913 " 'solver': ['lbfgs']})</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">GridSearchCV</label><div class=\"sk-toggleable__content\"><pre>GridSearchCV(cv=10, estimator=LogisticRegression(),\n",914 " param_grid={'C': [0.01, 0.1, 1], 'penalty': ['l2'],\n",915 " 'solver': ['lbfgs']})</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: LogisticRegression</label><div class=\"sk-toggleable__content\"><pre>LogisticRegression()</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LogisticRegression</label><div class=\"sk-toggleable__content\"><pre>LogisticRegression()</pre></div></div></div></div></div></div></div></div></div></div>"916 ],917 "text/plain": [918 "GridSearchCV(cv=10, estimator=LogisticRegression(),\n",919 " param_grid={'C': [0.01, 0.1, 1], 'penalty': ['l2'],\n",920 " 'solver': ['lbfgs']})"921 ]922 },923 "execution_count": 12,924 "metadata": {},925 "output_type": "execute_result"926 }927 ],928 "source": [929 "parameters ={\"C\":[0.01,0.1,1],'penalty':['l2'], 'solver':['lbfgs']}# l1 lasso l2 ridge\n",930 "lr=LogisticRegression()\n",931 "logreg_cv = GridSearchCV(lr, parameters, cv=10)\n",932 "logreg_cv.fit(X_train,Y_train)"933 ]934 },935 {936 "cell_type": "markdown",937 "metadata": {},938 "source": [939 "We output the <code>GridSearchCV</code> object for logistic regression. We display the best parameters using the data attribute <code>best_params\\_</code> and the accuracy on the validation data using the data attribute <code>best_score\\_</code>.\n"940 ]941 },942 {943 "cell_type": "code",944 "execution_count": 13,945 "metadata": {},946 "outputs": [947 {948 "name": "stdout",949 "output_type": "stream",950 "text": [951 "tuned hpyerparameters :(best parameters) {'C': 0.01, 'penalty': 'l2', 'solver': 'lbfgs'}\n",952 "accuracy : 0.8464285714285713\n"953 ]954 }955 ],956 "source": [957 "print(\"tuned hpyerparameters :(best parameters) \",logreg_cv.best_params_)\n",958 "print(\"accuracy :\",logreg_cv.best_score_)"959 ]960 },961 {962 "cell_type": "markdown",963 "metadata": {},964 "source": [965 "## TASK 5\n"966 ]967 },968 {969 "cell_type": "markdown",970 "metadata": {},971 "source": [972 "Calculate the accuracy on the test data using the method <code>score</code>:\n"973 ]974 },975 {976 "cell_type": "code",977 "execution_count": 14,978 "metadata": {},979 "outputs": [980 {981 "data": {982 "text/plain": [983 "0.8333333333333334"984 ]985 },986 "execution_count": 14,987 "metadata": {},988 "output_type": "execute_result"989 }990 ],991 "source": [992 "logreg_score = logreg_cv.score(X_test, Y_test)\n",993 "logreg_score"994 ]995 },996 {997 "cell_type": "markdown",998 "metadata": {},999 "source": [1000 "Lets look at the confusion matrix:\n"1001 ]1002 },1003 {1004 "cell_type": "code",1005 "execution_count": 15,1006 "metadata": {},1007 "outputs": [1008 {1009 "data": {1010 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAHHCAYAAADqJrG+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABD30lEQVR4nO3dd3RU1fr/8c+EkEkISQg9USABFIJUQbh0uESKghSV6jU0vQpIL3IVSACNghRBEUEFRBS5IiCoKFX0ggiEANJLKNKlSguQOb8//DFfxySaDGc4k+H9cs1amX327P2cLAcedjs2wzAMAQAAuMHP6gAAAEDORSIBAADcRiIBAADcRiIBAADcRiIBAADcRiIBAADcRiIBAADcRiIBAADcRiIBAADcRiIBeNDevXvVuHFjhYWFyWazaeHChaa2f/DgQdlsNs2cOdPUdnOyBg0aqEGDBlaHAdw1SCTg8/bv369///vfKlmypAIDAxUaGqratWvrzTff1NWrVz3ad1xcnLZt26ZXXnlFs2fPVrVq1Tza353UuXNn2Ww2hYaGZvh73Lt3r2w2m2w2m954441st3/s2DHFx8crOTnZhGgBeIq/1QEAnvTll1/qySeflN1u19NPP63y5cvr+vXr+uGHHzRo0CBt375d06ZN80jfV69e1bp16/TSSy+pV69eHumjRIkSunr1qnLnzu2R9v+Ov7+/rly5osWLF6tt27Yu1+bMmaPAwEBdu3bNrbaPHTumhIQERUVFqXLlyln+3LfffutWfwDcQyIBn5WSkqL27durRIkSWrlypSIiIpzXevbsqX379unLL7/0WP+nT5+WJOXLl89jfdhsNgUGBnqs/b9jt9tVu3ZtffLJJ+kSiY8//liPPvqo5s+ff0diuXLlivLkyaOAgIA70h+A3zG1AZ81ZswYXbp0Se+//75LEnFL6dKl1adPH+f7mzdvatSoUSpVqpTsdruioqL0n//8R6mpqS6fi4qKUvPmzfXDDz+oevXqCgwMVMmSJfXhhx8668THx6tEiRKSpEGDBslmsykqKkrS71MCt37+o/j4eNlsNpeyZcuWqU6dOsqXL5/y5s2rMmXK6D//+Y/zemZrJFauXKm6desqODhY+fLlU8uWLbVz584M+9u3b586d+6sfPnyKSwsTF26dNGVK1cy/8X+SceOHfX111/r/PnzzrINGzZo79696tixY7r6Z8+e1cCBA1WhQgXlzZtXoaGhatasmbZs2eKss3r1aj300EOSpC5dujinSG7dZ4MGDVS+fHlt2rRJ9erVU548eZy/lz+vkYiLi1NgYGC6+2/SpInCw8N17NixLN8rgPRIJOCzFi9erJIlS6pWrVpZqt+9e3cNHz5cDz74oCZMmKD69esrMTFR7du3T1d33759euKJJ/Twww9r3LhxCg8PV+fOnbV9+3ZJUps2bTRhwgRJUocOHTR79mxNnDgxW/Fv375dzZs3V2pqqkaOHKlx48bpscce0//+97+//Nzy5cvVpEkTnTp1SvHx8erfv7/Wrl2r2rVr6+DBg+nqt23bVr/99psSExPVtm1bzZw5UwkJCVmOs02bNrLZbPr888+dZR9//LHKli2rBx98MF39AwcOaOHChWrevLnGjx+vQYMGadu2bapfv77zL/WYmBiNHDlSkvTss89q9uzZmj17turVq+ds58yZM2rWrJkqV66siRMnqmHDhhnG9+abb6pQoUKKi4tTWlqaJOndd9/Vt99+q8mTJysyMjLL9wogAwbggy5cuGBIMlq2bJml+snJyYYko3v37i7lAwcONCQZK1eudJaVKFHCkGSsWbPGWXbq1CnDbrcbAwYMcJalpKQYkoyxY8e6tBkXF2eUKFEiXQwjRoww/viVnDBhgiHJOH36dKZx3+pjxowZzrLKlSsbhQsXNs6cOeMs27Jli+Hn52c8/fTT6frr2rWrS5utW7c2ChQokGmff7yP4OBgwzAM44knnjAaNWpkGIZhpKWlGUWLFjUSEhIy/B1cu3bNSEtLS3cfdrvdGDlypLNsw4YN6e7tlvr16xuSjKlTp2Z4rX79+i5l33zzjSHJGD16tHHgwAEjb968RqtWrf72HgH8PUYk4JMuXrwoSQoJCclS/a+++kqS1L9/f5fyAQMGSFK6tRTlypVT3bp1ne8LFSqkMmXK6MCBA27H/Ge31lYsWrRIDocjS585fvy4kpOT1blzZ+XPn99ZXrFiRT388MPO+/yj5557zuV93bp1debMGefvMCs6duyo1atX68SJE1q5cqVOnDiR4bSG9Pu6Cj+/3//oSUtL05kzZ5zTNklJSVnu0263q0uXLlmq27hxY/373//WyJEj1aZNGwUGBurdd9/Ncl8AMkciAZ8UGhoqSfrtt9+yVP/QoUPy8/NT6dKlXcqLFi2qfPny6dChQy7lxYsXT9dGeHi4zp0752bE6bVr1061a9dW9+7dVaRIEbVv317z5s37y6TiVpxlypRJdy0mJka//vqrLl++7FL+53sJDw+XpGzdyyOPPKKQkBB9+umnmjNnjh566KF0v8tbHA6HJkyYoPvuu092u10FCxZUoUKFtHXrVl24cCHLfd5zzz3ZWlj5xhtvKH/+/EpOTtakSZNUuHDhLH8WQOZIJOCTQkNDFRkZqZ9//jlbn/vzYsfM5MqVK8NywzDc7uPW/P0tQUFBWrNmjZYvX65//etf2rp1q9q1a6eHH344Xd3bcTv3covdblebNm00a9YsLViwINPRCEl69dVX1b9/f9WrV08fffSRvvnmGy1btkwPPPBAlkdepN9/P9mxefNmnTp1SpK0bdu2bH0WQOZIJOCzmjdvrv3792vdunV/W7dEiRJyOBzau3evS/nJkyd1/vx55w4MM4SHh7vscLjlz6MekuTn56dGjRpp/Pjx2rFjh1555RWtXLlSq1atyrDtW3Hu3r073bVdu3apYMGCCg4Ovr0byETHjh21efNm/fbbbxkuUL3ls88+U8OGDfX++++rffv2aty4sWJjY9P9TrKa1GXF5cuX1aVLF5UrV07PPvusxowZow0bNpjWPnA3I5GAzxo8eLCCg4PVvXt3nTx5Mt31/fv3680335T0+9C8pHQ7K8aPHy9JevTRR02Lq1SpUrpw4YK2bt3qLDt+/LgWLFjgUu/s2bPpPnvrYKY/b0m9JSIiQpUrV9asWbNc/mL++eef9e233zrv0xMaNmyoUaNG6a233lLRokUzrZcrV650ox3//e9/dfToUZeyWwlPRklXdg0ZMkSHDx/WrFmzNH78eEVFRSkuLi7T3yOArONAKvisUqVK6eOPP1a7du0UExPjcrLl2rVr9d///ledO3eWJFWqVElxcXGaNm2azp8/r/r16+unn37SrFmz1KpVq0y3Frqjffv2GjJkiFq3bq3evXvrypUreuedd3T//fe7LDYcOXKk1qxZo0cffVQlSpTQqVOnNGXKFN17772qU6dOpu2PHTtWzZo1U82aNdWtWzddvXpVkydPVlhYmOLj4027jz/z8/PTyy+//Lf1mjdvrpEjR6pLly6qVauWtm3bpjlz5qhkyZIu9UqVKqV8+fJp6tSpCgkJ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i4szWrZsmen106dPG5KMbdu2GYZhGCkpKYYk47333kvX986dOw3DMIwOHToYjzzyiEs77dq1M8LCwv42HuCv1K9f3+X79kcbNmwwJBm//fabYRiGsWrVKkOSsXz5cmedL7/80pBkXL161TAMw6hZs6bRo0cPl3Zq1KiRpe8OYAVGJHKw/fv36/r166pRo4azLH/+/CpTpkymn9m5c6eKFSumyMhIZ1lWnwJXsWJFl/cRERHOYdtb7RYrVsx5vVy5csqXL5927tyZpfYzs3fvXnXo0EElS5ZUaGiooqKiJP0+lZJZfBEREZLkEt8ff09S1u8byKpNmzapRYsWKl68uEJCQlS/fn1J/L8K30YigSzLnTu3y3ubzZZuesETWrRoobNnz2r69Olav3691q9fL0m6fv16pvHZbDZJuiPxAdLvU3BNmjRRaGio5syZow0bNmjBggWS+H8Vvo1EIgcrVaqUcufO7fyLVZLOnTunPXv2ZPqZmJgYHTlyRMePH3eW/fjjj7cdy612jxw54izbsWOHzp8/r3LlykmSAgIClJaWlq12z5w5o927d+vll19Wo0aNFBMTo3PnzrkV3x9/T5I59w3csmvXLp05c0avvfaa6tatq7Jly7ostMwq/l9FTsP2zxwsb9686tatmwYNGqQCBQqocOHCeumll+Tnl3l+GBsbq/vvv19xcXEaO3asLl68qJdeeum2Y4mNjVWFChXUqVMnTZw4UTdv3lSPHj1Uv359VatWTdLvu0dSUlKUnJyse++9VyEhIX/79MPw8HAVKFBA06ZNU0REhA4fPqwXX3wx2/H17t1btWvX1htvvKGWLVvqm2++0dKlS926VyAjxYsXV0BAgCZPnqznnntOP//8s0aNGpXtdvr06aPOnTurWrVqql27tubMmaPt27erZMmSHogauH2MSORwY8eOVd26ddWiRQvFxsaqTp06qlq1aqb1/fz8tGDBAl29elXVq1dX9+7d9corr9x2HDabTYsWLVJ4eLjq1aun2NhYlSxZUp9++qmzzuOPP66mTZuqYcOGKlSokD755JO/bdfPz09z587Vpk2bVL58efXr109jx47Ndnz/+Mc/NH36dL355puqVKmSvv32W7388svZbgfITKFChTRz5kz997//Vbly5fTaa6/pjTfeyHY77dq107BhwzR48GBVrVpVhw4d0vPPP++BiAFz8BhxAADgNkYkAACA20gkAACA20gkAACA20gkAACA20gkAACA20gkAACA20gkAACA20gkAAt17txZrVq1cr5v0KCB+vbte8fjWL16tWw2m86fP59pHZvNpoULF2a5zfj4eFWuXPm24jp48KBsNpuSk5Nvqx0AnkMiAfxJ586dZbPZZLPZFBAQoNKlS2vkyJG6efOmx/v+/PPPs3ysclb+8gcAT+NZG0AGmjZtqhkzZig1NVVfffWVevbsqdy5c2vo0KHp6l6/fl0BAQGm9Js/f35T2gGAO4URCSADdrtdRYsWVYkSJfT8888rNjZWX3zxhaT/m4545ZVXFBkZqTJlykiSjhw5orZt2ypfvnzKnz+/WrZsqYMHDzrbTEtLU//+/ZUvXz4VKFBAgwcP1p9PqP/z1EZqaqqGDBmiYsWKyW63q3Tp0nr//fd18OBBNWzYUNLvDzaz2Wzq3LmzpN8fR52YmKjo6GgFBQWpUqVK+uyzz1z6+eqrr3T//fcrKChIDRs2dIkzq4YMGaL7779fefLkUcmSJTVs2DDduHEjXb13331XxYoVU548edS2bVtduHDB5fp7772nmJgYBQYGqmzZspoyZUqmfZ47d06dOnVSoUKFFBQUpPvuu08zZszIduwAzMOIBJAFQUFBOnPmjPP9ihUrFBoaqmXLlkmSbty4oSZNmqhmzZr6/vvv5e/vr9GjR6tp06baunWrAgICNG7cOM2cOVMffPCBYmJiNG7cOC1YsED//Oc/M+336aef1rp16zRp0iRVqlRJKSkp+vXXX1WsWDHNnz9fjz/+uHbv3q3Q0FAFBQVJkhITE/XRRx9p6tSpuu+++7RmzRo99dRTKlSokOrXr68jR46oTZs26tmzp5599llt3LhRAwYMyPbvJCQkRDNnzlRkZKS2bdumZ555RiEhIRo8eLCzzr59+zRv3jwtXrxYFy9eVLdu3dSjRw/NmTNHkjRnzhwNHz5cb731lqpUqaLNmzfrmWeeUXBwsOLi4tL1OWzYMO3YsUNff/21ChYsqH379unq1avZjh2AiQwALuLi4oyWLVsahmEYDofDWLZsmWG3242BAwc6rxcpUsRITU11fmb27NlGmTJlDIfD4SxLTU01goKCjG+++cYwDMOIiIgwxowZ47x+48YN495773X2ZRiGUb9+faNPnz6GYRjG7t27DUnGsmXLMoxz1apVhiTj3LlzzrJr164ZefLkMdauXetSt1u3bkaHDh0MwzCMoUOHGuXKlXO5PmTIkHRt/ZkkY8GCBZleHzt2rFG1alXn+xEjRhi5cuUyfvnlF2fZ119/bfj5+RnHjx83DMMwSpUqZXz88ccu7YwaNcqoWbOmYRiGkZKSYkgyNm/ebBiGYbRo0cLo0qVLpjEAuPMYkQAysGTJEuXNm1c3btyQw+FQx44dFR8f77xeoUIFl3URW7Zs0b59+xQSEuLSzrVr17R//35duHBBx48fV40aNZzX/P39Va1atXTTG7ckJycrV65cql+/fpbj3rdvn65cuaKHH37Ypfz69euqUqWKJGnnzp0ucUhSzZo1s9zHLZ9++qkmTZqk/fv369KlS7p586ZCQ0Nd6hQvXlz33HOPSz8Oh0O7d+9WSEiI9u/fr27duumZZ55x1rl586bCwsIy7PP555/X448/rqSkJDVu3FitWrVSrVq1sh07APOQSAAZaNiwod555x0FBAQoMjJS/v6uX5Xg4GCX95cuXVLVqlWdQ/Z/VKhQIbdiuDVVkR2XLl2SJH355Zcuf4FLv6/7MMu6devUqVMnJSQkqEmTJgoLC9PcuXM1bty4bMc6ffr0dIlNrly5MvxMs2bNdOjQIX311VdatmyZGjVqpJ49e+qNN95w/2YA3BYSCSADwcHBKl26dJbrP/jgg/r0009VuHDhdP8qvyUiIkLr169XvXr1JP3+L+9NmzbpwQcfzLB+hQoV5HA49N133yk2Njbd9VsjImlpac6ycuXKyW636/Dhw5mOZMTExDgXjt7y448//v1N/sHatWtVokQJvfTSS86yQ4cOpat3+PBhHTt2TJGRkc5+/Pz8VKZMGRUpUkSRkZE6cOCAOnXqlOW+CxUqpLi4OMXFxalu3boaNGgQiQRgIXZtACbo1KmTChYsqJYtW+r7779XSkqKVq9erd69e+uXX36RJPXp00evvfaaFi5cqF27dqlHjx5/eQZEVFSU4uLi1LVrVy1cuNDZ5rx58yRJJUqUkM1m05IlS3T69GldunRJISEhGjhwoPr166dZs2Zp//79SkpK0uTJkzVr1ixJ0nPPPae9e/dq0KBB2r17tz7++GPNnDkzW/d733336fDhw5o7d67279+vSZMmacGCBenqBQYGKi4uTlu2bNH333+v3r17q23btipatKgkKSEhQYmJiZo0aZL27Nmjbdu2acaMGRo/fnyG/Q4fPlyLFi3Svn37tH37di1ZskQxMTHZih2AuUgkABPkyZNHa9asUfHixdWmTRvFxMSoW7duunbtmnOEYsCAAfrXv/6luLg41axZUyEhIWrduvVftvvOO+/oiSeeUI8ePVS2bFk988wzunz5siTpnnvuUUJCgl588UUVKVJEvXr1kiSNGjVKw4YNU2JiomJiYtS0aVN9+eWXio6OlvT7uoX58+dr4cKFqlSpkqZOnapXX301W/f72GOPqV+/furVq5cqV66stWvXatiwYenqlS5dWm3atNEjjzyixo0bq2LFii7bO7t376733ntPM2bMUIUKFVS/fn3NnDnTGeufBQQEaOjQoapYsaLq1aunXLlyae7cudmKHYC5bEZmK70AAAD+BiMSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbf8PkAtlXISM2hwAAAAASUVORK5CYII=",1011 "text/plain": [1012 "<Figure size 640x480 with 2 Axes>"1013 ]1014 },1015 "metadata": {},1016 "output_type": "display_data"1017 }1018 ],1019 "source": [1020 "logreg_yhat=logreg_cv.predict(X_test)\n",1021 "plot_confusion_matrix(Y_test,logreg_yhat)"1022 ]1023 },1024 {1025 "cell_type": "markdown",1026 "metadata": {},1027 "source": [1028 "Examining the confusion matrix, we see that logistic regression can distinguish between the different classes. We see that the major problem is false positives.\n"1029 ]1030 },1031 {1032 "cell_type": "markdown",1033 "metadata": {},1034 "source": [1035 "## TASK 6\n"1036 ]1037 },1038 {1039 "cell_type": "markdown",1040 "metadata": {},1041 "source": [1042 "Create a support vector machine object then create a <code>GridSearchCV</code> object <code>svm_cv</code> with cv - 10. Fit the object to find the best parameters from the dictionary <code>parameters</code>.\n"1043 ]1044 },1045 {1046 "cell_type": "code",1047 "execution_count": 16,1048 "metadata": {},1049 "outputs": [],1050 "source": [1051 "parameters = {'kernel':('linear', 'rbf', 'poly', 'sigmoid'),\n",1052 " 'C': np.logspace(-3, 3, 5),\n",1053 " 'gamma': np.logspace(-3, 3, 5)}\n",1054 "svm = SVC()\n",1055 "svm_cv = GridSearchCV(svm, parameters, cv=10)"1056 ]1057 },1058 {1059 "cell_type": "code",1060 "execution_count": 17,1061 "metadata": {},1062 "outputs": [1063 {1064 "data": {1065 "text/html": [1066 "<style>#sk-container-id-2 {color: black;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=10, estimator=SVC(),\n",1067 " param_grid={'C': array([1.00000000e-03, 3.16227766e-02, 1.00000000e+00, 3.16227766e+01,\n",1068 " 1.00000000e+03]),\n",1069 " 'gamma': array([1.00000000e-03, 3.16227766e-02, 1.00000000e+00, 3.16227766e+01,\n",1070 " 1.00000000e+03]),\n",1071 " 'kernel': ('linear', 'rbf', 'poly', 'sigmoid')})</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" ><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">GridSearchCV</label><div class=\"sk-toggleable__content\"><pre>GridSearchCV(cv=10, estimator=SVC(),\n",1072 " param_grid={'C': array([1.00000000e-03, 3.16227766e-02, 1.00000000e+00, 3.16227766e+01,\n",1073 " 1.00000000e+03]),\n",1074 " 'gamma': array([1.00000000e-03, 3.16227766e-02, 1.00000000e+00, 3.16227766e+01,\n",1075 " 1.00000000e+03]),\n",1076 " 'kernel': ('linear', 'rbf', 'poly', 'sigmoid')})</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-5\" type=\"checkbox\" ><label for=\"sk-estimator-id-5\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: SVC</label><div class=\"sk-toggleable__content\"><pre>SVC()</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-6\" type=\"checkbox\" ><label for=\"sk-estimator-id-6\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">SVC</label><div class=\"sk-toggleable__content\"><pre>SVC()</pre></div></div></div></div></div></div></div></div></div></div>"1077 ],1078 "text/plain": [1079 "GridSearchCV(cv=10, estimator=SVC(),\n",1080 " param_grid={'C': array([1.00000000e-03, 3.16227766e-02, 1.00000000e+00, 3.16227766e+01,\n",1081 " 1.00000000e+03]),\n",1082 " 'gamma': array([1.00000000e-03, 3.16227766e-02, 1.00000000e+00, 3.16227766e+01,\n",1083 " 1.00000000e+03]),\n",1084 " 'kernel': ('linear', 'rbf', 'poly', 'sigmoid')})"1085 ]1086 },1087 "execution_count": 17,1088 "metadata": {},1089 "output_type": "execute_result"1090 }1091 ],1092 "source": [1093 "svm_cv.fit(X_train, Y_train) # Обучение модели"1094 ]1095 },1096 {1097 "cell_type": "code",1098 "execution_count": 18,1099 "metadata": {},1100 "outputs": [1101 {1102 "name": "stdout",1103 "output_type": "stream",1104 "text": [1105 "tuned hpyerparameters :(best parameters) {'C': 1.0, 'gamma': 0.03162277660168379, 'kernel': 'sigmoid'}\n",1106 "accuracy : 0.8482142857142856\n"1107 ]1108 }1109 ],1110 "source": [1111 "print(\"tuned hpyerparameters :(best parameters) \",svm_cv.best_params_)\n",1112 "print(\"accuracy :\",svm_cv.best_score_)"1113 ]1114 },1115 {1116 "cell_type": "markdown",1117 "metadata": {},1118 "source": [1119 "## TASK 7\n"1120 ]1121 },1122 {1123 "cell_type": "markdown",1124 "metadata": {},1125 "source": [1126 "Calculate the accuracy on the test data using the method <code>score</code>:\n"1127 ]1128 },1129 {1130 "cell_type": "code",1131 "execution_count": 19,1132 "metadata": {},1133 "outputs": [1134 {1135 "data": {1136 "text/plain": [1137 "0.8333333333333334"1138 ]1139 },1140 "execution_count": 19,1141 "metadata": {},1142 "output_type": "execute_result"1143 }1144 ],1145 "source": [1146 "svm_score = svm_cv.score(X_test, Y_test)\n",1147 "svm_score"1148 ]1149 },1150 {1151 "cell_type": "markdown",1152 "metadata": {},1153 "source": [1154 "We can plot the confusion matrix\n"1155 ]1156 },1157 {1158 "cell_type": "code",1159 "execution_count": 20,1160 "metadata": {},1161 "outputs": [1162 {1163 "data": {1164 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAHHCAYAAADqJrG+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABD30lEQVR4nO3dd3RU1fr/8c+EkEkISQg9USABFIJUQbh0uESKghSV6jU0vQpIL3IVSACNghRBEUEFRBS5IiCoKFX0ggiEANJLKNKlSguQOb8//DFfxySaDGc4k+H9cs1amX327P2cLAcedjs2wzAMAQAAuMHP6gAAAEDORSIBAADcRiIBAADcRiIBAADcRiIBAADcRiIBAADcRiIBAADcRiIBAADcRiIBAADcRiIBeNDevXvVuHFjhYWFyWazaeHChaa2f/DgQdlsNs2cOdPUdnOyBg0aqEGDBlaHAdw1SCTg8/bv369///vfKlmypAIDAxUaGqratWvrzTff1NWrVz3ad1xcnLZt26ZXXnlFs2fPVrVq1Tza353UuXNn2Ww2hYaGZvh73Lt3r2w2m2w2m954441st3/s2DHFx8crOTnZhGgBeIq/1QEAnvTll1/qySeflN1u19NPP63y5cvr+vXr+uGHHzRo0CBt375d06ZN80jfV69e1bp16/TSSy+pV69eHumjRIkSunr1qnLnzu2R9v+Ov7+/rly5osWLF6tt27Yu1+bMmaPAwEBdu3bNrbaPHTumhIQERUVFqXLlyln+3LfffutWfwDcQyIBn5WSkqL27durRIkSWrlypSIiIpzXevbsqX379unLL7/0WP+nT5+WJOXLl89jfdhsNgUGBnqs/b9jt9tVu3ZtffLJJ+kSiY8//liPPvqo5s+ff0diuXLlivLkyaOAgIA70h+A3zG1AZ81ZswYXbp0Se+//75LEnFL6dKl1adPH+f7mzdvatSoUSpVqpTsdruioqL0n//8R6mpqS6fi4qKUvPmzfXDDz+oevXqCgwMVMmSJfXhhx8668THx6tEiRKSpEGDBslmsykqKkrS71MCt37+o/j4eNlsNpeyZcuWqU6dOsqXL5/y5s2rMmXK6D//+Y/zemZrJFauXKm6desqODhY+fLlU8uWLbVz584M+9u3b586d+6sfPnyKSwsTF26dNGVK1cy/8X+SceOHfX111/r/PnzzrINGzZo79696tixY7r6Z8+e1cCBA1WhQgXlzZtXoaGhatasmbZs2eKss3r1aj300EOSpC5dujinSG7dZ4MGDVS+fHlt2rRJ9erVU548eZy/lz+vkYiLi1NgYGC6+2/SpInCw8N17NixLN8rgPRIJOCzFi9erJIlS6pWrVpZqt+9e3cNHz5cDz74oCZMmKD69esrMTFR7du3T1d33759euKJJ/Twww9r3LhxCg8PV+fOnbV9+3ZJUps2bTRhwgRJUocOHTR79mxNnDgxW/Fv375dzZs3V2pqqkaOHKlx48bpscce0//+97+//Nzy5cvVpEkTnTp1SvHx8erfv7/Wrl2r2rVr6+DBg+nqt23bVr/99psSExPVtm1bzZw5UwkJCVmOs02bNrLZbPr888+dZR9//LHKli2rBx98MF39AwcOaOHChWrevLnGjx+vQYMGadu2bapfv77zL/WYmBiNHDlSkvTss89q9uzZmj17turVq+ds58yZM2rWrJkqV66siRMnqmHDhhnG9+abb6pQoUKKi4tTWlqaJOndd9/Vt99+q8mTJysyMjLL9wogAwbggy5cuGBIMlq2bJml+snJyYYko3v37i7lAwcONCQZK1eudJaVKFHCkGSsWbPGWXbq1CnDbrcbAwYMcJalpKQYkoyxY8e6tBkXF2eUKFEiXQwjRoww/viVnDBhgiHJOH36dKZx3+pjxowZzrLKlSsbhQsXNs6cOeMs27Jli+Hn52c8/fTT6frr2rWrS5utW7c2ChQokGmff7yP4OBgwzAM44knnjAaNWpkGIZhpKWlGUWLFjUSEhIy/B1cu3bNSEtLS3cfdrvdGDlypLNsw4YN6e7tlvr16xuSjKlTp2Z4rX79+i5l33zzjSHJGD16tHHgwAEjb968RqtWrf72HgH8PUYk4JMuXrwoSQoJCclS/a+++kqS1L9/f5fyAQMGSFK6tRTlypVT3bp1ne8LFSqkMmXK6MCBA27H/Ge31lYsWrRIDocjS585fvy4kpOT1blzZ+XPn99ZXrFiRT388MPO+/yj5557zuV93bp1debMGefvMCs6duyo1atX68SJE1q5cqVOnDiR4bSG9Pu6Cj+/3//oSUtL05kzZ5zTNklJSVnu0263q0uXLlmq27hxY/373//WyJEj1aZNGwUGBurdd9/Ncl8AMkciAZ8UGhoqSfrtt9+yVP/QoUPy8/NT6dKlXcqLFi2qfPny6dChQy7lxYsXT9dGeHi4zp0752bE6bVr1061a9dW9+7dVaRIEbVv317z5s37y6TiVpxlypRJdy0mJka//vqrLl++7FL+53sJDw+XpGzdyyOPPKKQkBB9+umnmjNnjh566KF0v8tbHA6HJkyYoPvuu092u10FCxZUoUKFtHXrVl24cCHLfd5zzz3ZWlj5xhtvKH/+/EpOTtakSZNUuHDhLH8WQOZIJOCTQkNDFRkZqZ9//jlbn/vzYsfM5MqVK8NywzDc7uPW/P0tQUFBWrNmjZYvX65//etf2rp1q9q1a6eHH344Xd3bcTv3covdblebNm00a9YsLViwINPRCEl69dVX1b9/f9WrV08fffSRvvnmGy1btkwPPPBAlkdepN9/P9mxefNmnTp1SpK0bdu2bH0WQOZIJOCzmjdvrv3792vdunV/W7dEiRJyOBzau3evS/nJkyd1/vx55w4MM4SHh7vscLjlz6MekuTn56dGjRpp/Pjx2rFjh1555RWtXLlSq1atyrDtW3Hu3r073bVdu3apYMGCCg4Ovr0byETHjh21efNm/fbbbxkuUL3ls88+U8OGDfX++++rffv2aty4sWJjY9P9TrKa1GXF5cuX1aVLF5UrV07PPvusxowZow0bNpjWPnA3I5GAzxo8eLCCg4PVvXt3nTx5Mt31/fv3680335T0+9C8pHQ7K8aPHy9JevTRR02Lq1SpUrpw4YK2bt3qLDt+/LgWLFjgUu/s2bPpPnvrYKY/b0m9JSIiQpUrV9asWbNc/mL++eef9e233zrv0xMaNmyoUaNG6a233lLRokUzrZcrV650ox3//e9/dfToUZeyWwlPRklXdg0ZMkSHDx/WrFmzNH78eEVFRSkuLi7T3yOArONAKvisUqVK6eOPP1a7du0UExPjcrLl2rVr9d///ledO3eWJFWqVElxcXGaNm2azp8/r/r16+unn37SrFmz1KpVq0y3Frqjffv2GjJkiFq3bq3evXvrypUreuedd3T//fe7LDYcOXKk1qxZo0cffVQlSpTQqVOnNGXKFN17772qU6dOpu2PHTtWzZo1U82aNdWtWzddvXpVkydPVlhYmOLj4027jz/z8/PTyy+//Lf1mjdvrpEjR6pLly6qVauWtm3bpjlz5qhkyZIu9UqVKqV8+fJp6tSpCgkJ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i4szWrZsmen106dPG5KMbdu2GYZhGCkpKYYk47333kvX986dOw3DMIwOHToYjzzyiEs77dq1M8LCwv42HuCv1K9f3+X79kcbNmwwJBm//fabYRiGsWrVKkOSsXz5cmedL7/80pBkXL161TAMw6hZs6bRo0cPl3Zq1KiRpe8OYAVGJHKw/fv36/r166pRo4azLH/+/CpTpkymn9m5c6eKFSumyMhIZ1lWnwJXsWJFl/cRERHOYdtb7RYrVsx5vVy5csqXL5927tyZpfYzs3fvXnXo0EElS5ZUaGiooqKiJP0+lZJZfBEREZLkEt8ff09S1u8byKpNmzapRYsWKl68uEJCQlS/fn1J/L8K30YigSzLnTu3y3ubzZZuesETWrRoobNnz2r69Olav3691q9fL0m6fv16pvHZbDZJuiPxAdLvU3BNmjRRaGio5syZow0bNmjBggWS+H8Vvo1EIgcrVaqUcufO7fyLVZLOnTunPXv2ZPqZmJgYHTlyRMePH3eW/fjjj7cdy612jxw54izbsWOHzp8/r3LlykmSAgIClJaWlq12z5w5o927d+vll19Wo0aNFBMTo3PnzrkV3x9/T5I59w3csmvXLp05c0avvfaa6tatq7Jly7ostMwq/l9FTsP2zxwsb9686tatmwYNGqQCBQqocOHCeumll+Tnl3l+GBsbq/vvv19xcXEaO3asLl68qJdeeum2Y4mNjVWFChXUqVMnTZw4UTdv3lSPHj1Uv359VatWTdLvu0dSUlKUnJyse++9VyEhIX/79MPw8HAVKFBA06ZNU0REhA4fPqwXX3wx2/H17t1btWvX1htvvKGWLVvqm2++0dKlS926VyAjxYsXV0BAgCZPnqznnntOP//8s0aNGpXtdvr06aPOnTurWrVqql27tubMmaPt27erZMmSHogauH2MSORwY8eOVd26ddWiRQvFxsaqTp06qlq1aqb1/fz8tGDBAl29elXVq1dX9+7d9corr9x2HDabTYsWLVJ4eLjq1aun2NhYlSxZUp9++qmzzuOPP66mTZuqYcOGKlSokD755JO/bdfPz09z587Vpk2bVL58efXr109jx47Ndnz/+Mc/NH36dL355puqVKmSvv32W7388svZbgfITKFChTRz5kz997//Vbly5fTaa6/pjTfeyHY77dq107BhwzR48GBVrVpVhw4d0vPPP++BiAFz8BhxAADgNkYkAACA20gkAACA20gkAACA20gkAACA20gkAACA20gkAACA20gkAACA20gkAAt17txZrVq1cr5v0KCB+vbte8fjWL16tWw2m86fP59pHZvNpoULF2a5zfj4eFWuXPm24jp48KBsNpuSk5Nvqx0AnkMiAfxJ586dZbPZZLPZFBAQoNKlS2vkyJG6efOmx/v+/PPPs3ysclb+8gcAT+NZG0AGmjZtqhkzZig1NVVfffWVevbsqdy5c2vo0KHp6l6/fl0BAQGm9Js/f35T2gGAO4URCSADdrtdRYsWVYkSJfT8888rNjZWX3zxhaT/m4545ZVXFBkZqTJlykiSjhw5orZt2ypfvnzKnz+/WrZsqYMHDzrbTEtLU//+/ZUvXz4VKFBAgwcP1p9PqP/z1EZqaqqGDBmiYsWKyW63q3Tp0nr//fd18OBBNWzYUNLvDzaz2Wzq3LmzpN8fR52YmKjo6GgFBQWpUqVK+uyzz1z6+eqrr3T//fcrKChIDRs2dIkzq4YMGaL7779fefLkUcmSJTVs2DDduHEjXb13331XxYoVU548edS2bVtduHDB5fp7772nmJgYBQYGqmzZspoyZUqmfZ47d06dOnVSoUKFFBQUpPvuu08zZszIduwAzMOIBJAFQUFBOnPmjPP9ihUrFBoaqmXLlkmSbty4oSZNmqhmzZr6/vvv5e/vr9GjR6tp06baunWrAgICNG7cOM2cOVMffPCBYmJiNG7cOC1YsED//Oc/M+336aef1rp16zRp0iRVqlRJKSkp+vXXX1WsWDHNnz9fjz/+uHbv3q3Q0FAFBQVJkhITE/XRRx9p6tSpuu+++7RmzRo99dRTKlSokOrXr68jR46oTZs26tmzp5599llt3LhRAwYMyPbvJCQkRDNnzlRkZKS2bdumZ555RiEhIRo8eLCzzr59+zRv3jwtXrxYFy9eVLdu3dSjRw/NmTNHkjRnzhwNHz5cb731lqpUqaLNmzfrmWeeUXBwsOLi4tL1OWzYMO3YsUNff/21ChYsqH379unq1avZjh2AiQwALuLi4oyWLVsahmEYDofDWLZsmWG3242BAwc6rxcpUsRITU11fmb27NlGmTJlDIfD4SxLTU01goKCjG+++cYwDMOIiIgwxowZ47x+48YN495773X2ZRiGUb9+faNPnz6GYRjG7t27DUnGsmXLMoxz1apVhiTj3LlzzrJr164ZefLkMdauXetSt1u3bkaHDh0MwzCMoUOHGuXKlXO5PmTIkHRt/ZkkY8GCBZleHzt2rFG1alXn+xEjRhi5cuUyfvnlF2fZ119/bfj5+RnHjx83DMMwSpUqZXz88ccu7YwaNcqoWbOmYRiGkZKSYkgyNm/ebBiGYbRo0cLo0qVLpjEAuPMYkQAysGTJEuXNm1c3btyQw+FQx44dFR8f77xeoUIFl3URW7Zs0b59+xQSEuLSzrVr17R//35duHBBx48fV40aNZzX/P39Va1atXTTG7ckJycrV65cql+/fpbj3rdvn65cuaKHH37Ypfz69euqUqWKJGnnzp0ucUhSzZo1s9zHLZ9++qkmTZqk/fv369KlS7p586ZCQ0Nd6hQvXlz33HOPSz8Oh0O7d+9WSEiI9u/fr27duumZZ55x1rl586bCwsIy7PP555/X448/rqSkJDVu3FitWrVSrVq1sh07APOQSAAZaNiwod555x0FBAQoMjJS/v6uX5Xg4GCX95cuXVLVqlWdQ/Z/VKhQIbdiuDVVkR2XLl2SJH355Zcuf4FLv6/7MMu6devUqVMnJSQkqEmTJgoLC9PcuXM1bty4bMc6ffr0dIlNrly5MvxMs2bNdOjQIX311VdatmyZGjVqpJ49e+qNN95w/2YA3BYSCSADwcHBKl26dJbrP/jgg/r0009VuHDhdP8qvyUiIkLr169XvXr1JP3+L+9NmzbpwQcfzLB+hQoV5HA49N133yk2Njbd9VsjImlpac6ycuXKyW636/Dhw5mOZMTExDgXjt7y448//v1N/sHatWtVokQJvfTSS86yQ4cOpat3+PBhHTt2TJGRkc5+/Pz8VKZMGRUpUkSRkZE6cOCAOnXqlOW+CxUqpLi4OMXFxalu3boaNGgQiQRgIXZtACbo1KmTChYsqJYtW+r7779XSkqKVq9erd69e+uXX36RJPXp00evvfaaFi5cqF27dqlHjx5/eQZEVFSU4uLi1LVrVy1cuNDZ5rx58yRJJUqUkM1m05IlS3T69GldunRJISEhGjhwoPr166dZs2Zp//79SkpK0uTJkzVr1ixJ0nPPPae9e/dq0KBB2r17tz7++GPNnDkzW/d733336fDhw5o7d67279+vSZMmacGCBenqBQYGKi4uTlu2bNH333+v3r17q23btipatKgkKSEhQYmJiZo0aZL27Nmjbdu2acaMGRo/fnyG/Q4fPlyLFi3Svn37tH37di1ZskQxMTHZih2AuUgkABPkyZNHa9asUfHixdWmTRvFxMSoW7duunbtmnOEYsCAAfrXv/6luLg41axZUyEhIWrduvVftvvOO+/oiSeeUI8ePVS2bFk988wzunz5siTpnnvuUUJCgl588UUVKVJEvXr1kiSNGjVKw4YNU2JiomJiYtS0aVN9+eWXio6OlvT7uoX58+dr4cKFqlSpkqZOnapXX301W/f72GOPqV+/furVq5cqV66stWvXatiwYenqlS5dWm3atNEjjzyixo0bq2LFii7bO7t376733ntPM2bMUIUKFVS/fn3NnDnTGeufBQQEaOjQoapYsaLq1aunXLlyae7cudmKHYC5bEZmK70AAAD+BiMSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbSQSAADAbf8PkAtlXISM2hwAAAAASUVORK5CYII=",1165 "text/plain": [1166 "<Figure size 640x480 with 2 Axes>"1167 ]1168 },1169 "metadata": {},1170 "output_type": "display_data"1171 }1172 ],1173 "source": [1174 "svm_yhat=svm_cv.predict(X_test)\n",1175 "plot_confusion_matrix(Y_test,svm_yhat)"1176 ]1177 },1178 {1179 "cell_type": "markdown",1180 "metadata": {},1181 "source": [1182 "## TASK 8\n"1183 ]1184 },1185 {1186 "cell_type": "markdown",1187 "metadata": {},1188 "source": [1189 "Create a decision tree classifier object then create a <code>GridSearchCV</code> object <code>tree_cv</code> with cv = 10. Fit the object to find the best parameters from the dictionary <code>parameters</code>.\n"1190 ]1191 },1192 {1193 "cell_type": "code",1194 "execution_count": 21,1195 "metadata": {},1196 "outputs": [],1197 "source": [1198 "parameters = {'criterion': ['gini', 'entropy'],\n",1199 " 'splitter': ['best', 'random'],\n",1200 " 'max_depth': [2*n for n in range(1,10)],\n",