{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f9daad34-f5e0-460a-a465-f97711486196",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5ab0803c-706b-4ca4-9cab-1831e5e8c512",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
      "0            6      148             72             35        0  33.6   \n",
      "1            1       85             66             29        0  26.6   \n",
      "2            8      183             64              0        0  23.3   \n",
      "3            1       89             66             23       94  28.1   \n",
      "4            0      137             40             35      168  43.1   \n",
      "\n",
      "   DiabetesPedigreeFunction  Age  Outcome  \n",
      "0                     0.627   50        1  \n",
      "1                     0.351   31        0  \n",
      "2                     0.672   32        1  \n",
      "3                     0.167   21        0  \n",
      "4                     2.288   33        1  \n"
     ]
    }
   ],
   "source": [
    "data = pd.read_csv(\"data/diabetes.csv\")\n",
    "print(data.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "de999184-c5df-4369-857c-2c5e8b747daf",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = data.drop(\"Outcome\", axis = 1)\n",
    "Y = data[\"Outcome\"]\n",
    "\n",
    "cols = [\"Glucose\", \"BloodPressure\",\"Insulin\",\"BMI\"]\n",
    "for col in cols:\n",
    "    X[col] = X[col].replace(0, X[col].mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "60e886fa-a714-4767-a4b3-ad8906d6f9f9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "}\n",
       "\n",
       "#sk-container-id-1.light {\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: black;\n",
       "  --sklearn-color-background: white;\n",
       "  --sklearn-color-border-box: black;\n",
       "  --sklearn-color-icon: #696969;\n",
       "}\n",
       "\n",
       "#sk-container-id-1.dark {\n",
       "  --sklearn-color-text-on-default-background: white;\n",
       "  --sklearn-color-background: #111;\n",
       "  --sklearn-color-border-box: white;\n",
       "  --sklearn-color-icon: #878787;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: center;\n",
       "  justify-content: center;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  display: none;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  overflow: visible;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-3) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-0);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-0);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".estimator-table {\n",
       "    font-family: monospace;\n",
       "}\n",
       "\n",
       ".estimator-table summary {\n",
       "    padding: .5rem;\n",
       "    cursor: pointer;\n",
       "}\n",
       "\n",
       ".estimator-table summary::marker {\n",
       "    font-size: 0.7rem;\n",
       "}\n",
       "\n",
       ".estimator-table details[open] {\n",
       "    padding-left: 0.1rem;\n",
       "    padding-right: 0.1rem;\n",
       "    padding-bottom: 0.3rem;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table {\n",
       "    margin-left: auto !important;\n",
       "    margin-right: auto !important;\n",
       "    margin-top: 0;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(odd) {\n",
       "    background-color: #fff;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(even) {\n",
       "    background-color: #f6f6f6;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:hover {\n",
       "    background-color: #e0e0e0;\n",
       "}\n",
       "\n",
       ".estimator-table table td {\n",
       "    border: 1px solid rgba(106, 105, 104, 0.232);\n",
       "}\n",
       "\n",
       "/*\n",
       "    `table td`is set in notebook with right text-align.\n",
       "    We need to overwrite it.\n",
       "*/\n",
       ".estimator-table table td.param {\n",
       "    text-align: left;\n",
       "    position: relative;\n",
       "    padding: 0;\n",
       "}\n",
       "\n",
       ".user-set td {\n",
       "    color:rgb(255, 94, 0);\n",
       "    text-align: left !important;\n",
       "}\n",
       "\n",
       ".user-set td.value {\n",
       "    color:rgb(255, 94, 0);\n",
       "    background-color: transparent;\n",
       "}\n",
       "\n",
       ".default td {\n",
       "    color: black;\n",
       "    text-align: left !important;\n",
       "}\n",
       "\n",
       ".user-set td i,\n",
       ".default td i {\n",
       "    color: black;\n",
       "}\n",
       "\n",
       "/*\n",
       "    Styles for parameter documentation links\n",
       "    We need styling for visited so jupyter doesn't overwrite it\n",
       "*/\n",
       "a.param-doc-link,\n",
       "a.param-doc-link:link,\n",
       "a.param-doc-link:visited {\n",
       "    text-decoration: underline dashed;\n",
       "    text-underline-offset: .3em;\n",
       "    color: inherit;\n",
       "    display: block;\n",
       "    padding: .5em;\n",
       "}\n",
       "\n",
       "/* \"hack\" to make the entire area of the cell containing the link clickable */\n",
       "a.param-doc-link::before {\n",
       "    position: absolute;\n",
       "    content: \"\";\n",
       "    inset: 0;\n",
       "}\n",
       "\n",
       ".param-doc-description {\n",
       "    display: none;\n",
       "    position: absolute;\n",
       "    z-index: 9999;\n",
       "    left: 0;\n",
       "    padding: .5ex;\n",
       "    margin-left: 1.5em;\n",
       "    color: var(--sklearn-color-text);\n",
       "    box-shadow: .3em .3em .4em #999;\n",
       "    width: max-content;\n",
       "    text-align: left;\n",
       "    max-height: 10em;\n",
       "    overflow-y: auto;\n",
       "\n",
       "    /* unfitted */\n",
       "    background: var(--sklearn-color-unfitted-level-0);\n",
       "    border: thin solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       "/* Fitted state for parameter tooltips */\n",
       ".fitted .param-doc-description {\n",
       "    /* fitted */\n",
       "    background: var(--sklearn-color-fitted-level-0);\n",
       "    border: thin solid var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".param-doc-link:hover .param-doc-description {\n",
       "    display: block;\n",
       "}\n",
       "\n",
       ".copy-paste-icon {\n",
       "    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTIwOCAwTDMzMi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNDQ4IDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek00OCAxMjhsODAgMCAwIDY0LTY0IDAgMCAyNTYgMTkyIDAgMC0zMiA2NCAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiLz48L3N2Zz4=);\n",
       "    background-repeat: no-repeat;\n",
       "    background-size: 14px 14px;\n",
       "    background-position: 0;\n",
       "    display: inline-block;\n",
       "    width: 14px;\n",
       "    height: 14px;\n",
       "    cursor: pointer;\n",
       "}\n",
       "</style><body><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(class_weight=&#x27;balanced&#x27;, criterion=&#x27;entropy&#x27;,\n",
       "                       n_estimators=500, random_state=42)</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\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>RandomForestClassifier</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"\">\n",
       "        <div class=\"estimator-table\">\n",
       "            <details>\n",
       "                <summary>Parameters</summary>\n",
       "                <table class=\"parameters-table\">\n",
       "                  <tbody>\n",
       "                    \n",
       "        <tr class=\"user-set\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('n_estimators',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=n_estimators,-int%2C%20default%3D100\">\n",
       "            n_estimators\n",
       "            <span class=\"param-doc-description\">n_estimators: int, default=100<br><br>The number of trees in the forest.<br><br>.. versionchanged:: 0.22<br>   The default value of ``n_estimators`` changed from 10 to 100<br>   in 0.22.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">500</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"user-set\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('criterion',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=criterion,-%7B%22gini%22%2C%20%22entropy%22%2C%20%22log_loss%22%7D%2C%20default%3D%22gini%22\">\n",
       "            criterion\n",
       "            <span class=\"param-doc-description\">criterion: {\"gini\", \"entropy\", \"log_loss\"}, default=\"gini\"<br><br>The function to measure the quality of a split. Supported criteria are<br>\"gini\" for the Gini impurity and \"log_loss\" and \"entropy\" both for the<br>Shannon information gain, see :ref:`tree_mathematical_formulation`.<br>Note: This parameter is tree-specific.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">&#x27;entropy&#x27;</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('max_depth',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=max_depth,-int%2C%20default%3DNone\">\n",
       "            max_depth\n",
       "            <span class=\"param-doc-description\">max_depth: int, default=None<br><br>The maximum depth of the tree. If None, then nodes are expanded until<br>all leaves are pure or until all leaves contain less than<br>min_samples_split samples.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('min_samples_split',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=min_samples_split,-int%20or%20float%2C%20default%3D2\">\n",
       "            min_samples_split\n",
       "            <span class=\"param-doc-description\">min_samples_split: int or float, default=2<br><br>The minimum number of samples required to split an internal node:<br><br>- If int, then consider `min_samples_split` as the minimum number.<br>- If float, then `min_samples_split` is a fraction and<br>  `ceil(min_samples_split * n_samples)` are the minimum<br>  number of samples for each split.<br><br>.. versionchanged:: 0.18<br>   Added float values for fractions.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">2</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('min_samples_leaf',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=min_samples_leaf,-int%20or%20float%2C%20default%3D1\">\n",
       "            min_samples_leaf\n",
       "            <span class=\"param-doc-description\">min_samples_leaf: int or float, default=1<br><br>The minimum number of samples required to be at a leaf node.<br>A split point at any depth will only be considered if it leaves at<br>least ``min_samples_leaf`` training samples in each of the left and<br>right branches.  This may have the effect of smoothing the model,<br>especially in regression.<br><br>- If int, then consider `min_samples_leaf` as the minimum number.<br>- If float, then `min_samples_leaf` is a fraction and<br>  `ceil(min_samples_leaf * n_samples)` are the minimum<br>  number of samples for each node.<br><br>.. versionchanged:: 0.18<br>   Added float values for fractions.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">1</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('min_weight_fraction_leaf',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=min_weight_fraction_leaf,-float%2C%20default%3D0.0\">\n",
       "            min_weight_fraction_leaf\n",
       "            <span class=\"param-doc-description\">min_weight_fraction_leaf: float, default=0.0<br><br>The minimum weighted fraction of the sum total of weights (of all<br>the input samples) required to be at a leaf node. Samples have<br>equal weight when sample_weight is not provided.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">0.0</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('max_features',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=max_features,-%7B%22sqrt%22%2C%20%22log2%22%2C%20None%7D%2C%20int%20or%20float%2C%20default%3D%22sqrt%22\">\n",
       "            max_features\n",
       "            <span class=\"param-doc-description\">max_features: {\"sqrt\", \"log2\", None}, int or float, default=\"sqrt\"<br><br>The number of features to consider when looking for the best split:<br><br>- If int, then consider `max_features` features at each split.<br>- If float, then `max_features` is a fraction and<br>  `max(1, int(max_features * n_features_in_))` features are considered at each<br>  split.<br>- If \"sqrt\", then `max_features=sqrt(n_features)`.<br>- If \"log2\", then `max_features=log2(n_features)`.<br>- If None, then `max_features=n_features`.<br><br>.. versionchanged:: 1.1<br>    The default of `max_features` changed from `\"auto\"` to `\"sqrt\"`.<br><br>Note: the search for a split does not stop until at least one<br>valid partition of the node samples is found, even if it requires to<br>effectively inspect more than ``max_features`` features.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">&#x27;sqrt&#x27;</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('max_leaf_nodes',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=max_leaf_nodes,-int%2C%20default%3DNone\">\n",
       "            max_leaf_nodes\n",
       "            <span class=\"param-doc-description\">max_leaf_nodes: int, default=None<br><br>Grow trees with ``max_leaf_nodes`` in best-first fashion.<br>Best nodes are defined as relative reduction in impurity.<br>If None then unlimited number of leaf nodes.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('min_impurity_decrease',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=min_impurity_decrease,-float%2C%20default%3D0.0\">\n",
       "            min_impurity_decrease\n",
       "            <span class=\"param-doc-description\">min_impurity_decrease: float, default=0.0<br><br>A node will be split if this split induces a decrease of the impurity<br>greater than or equal to this value.<br><br>The weighted impurity decrease equation is the following::<br><br>    N_t / N * (impurity - N_t_R / N_t * right_impurity<br>                        - N_t_L / N_t * left_impurity)<br><br>where ``N`` is the total number of samples, ``N_t`` is the number of<br>samples at the current node, ``N_t_L`` is the number of samples in the<br>left child, and ``N_t_R`` is the number of samples in the right child.<br><br>``N``, ``N_t``, ``N_t_R`` and ``N_t_L`` all refer to the weighted sum,<br>if ``sample_weight`` is passed.<br><br>.. versionadded:: 0.19</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">0.0</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('bootstrap',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=bootstrap,-bool%2C%20default%3DTrue\">\n",
       "            bootstrap\n",
       "            <span class=\"param-doc-description\">bootstrap: bool, default=True<br><br>Whether bootstrap samples are used when building trees. If False, the<br>whole dataset is used to build each tree.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">True</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('oob_score',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=oob_score,-bool%20or%20callable%2C%20default%3DFalse\">\n",
       "            oob_score\n",
       "            <span class=\"param-doc-description\">oob_score: bool or callable, default=False<br><br>Whether to use out-of-bag samples to estimate the generalization score.<br>By default, :func:`~sklearn.metrics.accuracy_score` is used.<br>Provide a callable with signature `metric(y_true, y_pred)` to use a<br>custom metric. Only available if `bootstrap=True`.<br><br>For an illustration of out-of-bag (OOB) error estimation, see the example<br>:ref:`sphx_glr_auto_examples_ensemble_plot_ensemble_oob.py`.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">False</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('n_jobs',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=n_jobs,-int%2C%20default%3DNone\">\n",
       "            n_jobs\n",
       "            <span class=\"param-doc-description\">n_jobs: int, default=None<br><br>The number of jobs to run in parallel. :meth:`fit`, :meth:`predict`,<br>:meth:`decision_path` and :meth:`apply` are all parallelized over the<br>trees. ``None`` means 1 unless in a :obj:`joblib.parallel_backend`<br>context. ``-1`` means using all processors. See :term:`Glossary<br><n_jobs>` for more details.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"user-set\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('random_state',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=random_state,-int%2C%20RandomState%20instance%20or%20None%2C%20default%3DNone\">\n",
       "            random_state\n",
       "            <span class=\"param-doc-description\">random_state: int, RandomState instance or None, default=None<br><br>Controls both the randomness of the bootstrapping of the samples used<br>when building trees (if ``bootstrap=True``) and the sampling of the<br>features to consider when looking for the best split at each node<br>(if ``max_features < n_features``).<br>See :term:`Glossary <random_state>` for details.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">42</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('verbose',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=verbose,-int%2C%20default%3D0\">\n",
       "            verbose\n",
       "            <span class=\"param-doc-description\">verbose: int, default=0<br><br>Controls the verbosity when fitting and predicting.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">0</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('warm_start',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=warm_start,-bool%2C%20default%3DFalse\">\n",
       "            warm_start\n",
       "            <span class=\"param-doc-description\">warm_start: bool, default=False<br><br>When set to ``True``, reuse the solution of the previous call to fit<br>and add more estimators to the ensemble, otherwise, just fit a whole<br>new forest. See :term:`Glossary <warm_start>` and<br>:ref:`tree_ensemble_warm_start` for details.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">False</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"user-set\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('class_weight',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=class_weight,-%7B%22balanced%22%2C%20%22balanced_subsample%22%7D%2C%20dict%20or%20list%20of%20dicts%2C%20%20%20%20%20%20%20%20%20%20%20%20%20default%3DNone\">\n",
       "            class_weight\n",
       "            <span class=\"param-doc-description\">class_weight: {\"balanced\", \"balanced_subsample\"}, dict or list of dicts,             default=None<br><br>Weights associated with classes in the form ``{class_label: weight}``.<br>If not given, all classes are supposed to have weight one. For<br>multi-output problems, a list of dicts can be provided in the same<br>order as the columns of y.<br><br>Note that for multioutput (including multilabel) weights should be<br>defined for each class of every column in its own dict. For example,<br>for four-class multilabel classification weights should be<br>[{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}] instead of<br>[{1:1}, {2:5}, {3:1}, {4:1}].<br><br>The \"balanced\" mode uses the values of y to automatically adjust<br>weights inversely proportional to class frequencies in the input data<br>as ``n_samples / (n_classes * np.bincount(y))``<br><br>The \"balanced_subsample\" mode is the same as \"balanced\" except that<br>weights are computed based on the bootstrap sample for every tree<br>grown.<br><br>For multi-output, the weights of each column of y will be multiplied.<br><br>Note that these weights will be multiplied with sample_weight (passed<br>through the fit method) if sample_weight is specified.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">&#x27;balanced&#x27;</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('ccp_alpha',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=ccp_alpha,-non-negative%20float%2C%20default%3D0.0\">\n",
       "            ccp_alpha\n",
       "            <span class=\"param-doc-description\">ccp_alpha: non-negative float, default=0.0<br><br>Complexity parameter used for Minimal Cost-Complexity Pruning. The<br>subtree with the largest cost complexity that is smaller than<br>``ccp_alpha`` will be chosen. By default, no pruning is performed. See<br>:ref:`minimal_cost_complexity_pruning` for details. See<br>:ref:`sphx_glr_auto_examples_tree_plot_cost_complexity_pruning.py`<br>for an example of such pruning.<br><br>.. versionadded:: 0.22</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">0.0</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('max_samples',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=max_samples,-int%20or%20float%2C%20default%3DNone\">\n",
       "            max_samples\n",
       "            <span class=\"param-doc-description\">max_samples: int or float, default=None<br><br>If bootstrap is True, the number of samples to draw from X<br>to train each base estimator.<br><br>- If None (default), then draw `X.shape[0]` samples.<br>- If int, then draw `max_samples` samples.<br>- If float, then draw `max(round(n_samples * max_samples), 1)` samples. Thus,<br>  `max_samples` should be in the interval `(0.0, 1.0]`.<br><br>.. versionadded:: 0.22</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('monotonic_cst',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.ensemble.RandomForestClassifier.html#:~:text=monotonic_cst,-array-like%20of%20int%20of%20shape%20%28n_features%29%2C%20default%3DNone\">\n",
       "            monotonic_cst\n",
       "            <span class=\"param-doc-description\">monotonic_cst: array-like of int of shape (n_features), default=None<br><br>Indicates the monotonicity constraint to enforce on each feature.<br>  - 1: monotonic increase<br>  - 0: no constraint<br>  - -1: monotonic decrease<br><br>If monotonic_cst is None, no constraints are applied.<br><br>Monotonicity constraints are not supported for:<br>  - multiclass classifications (i.e. when `n_classes > 2`),<br>  - multioutput classifications (i.e. when `n_outputs_ > 1`),<br>  - classifications trained on data with missing values.<br><br>The constraints hold over the probability of the positive class.<br><br>Read more in the :ref:`User Guide <monotonic_cst_gbdt>`.<br><br>.. versionadded:: 1.4</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "                  </tbody>\n",
       "                </table>\n",
       "            </details>\n",
       "        </div>\n",
       "    </div></div></div></div></div><script>function copyToClipboard(text, element) {\n",
       "    // Get the parameter prefix from the closest toggleable content\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${text}` : text;\n",
       "\n",
       "    const originalStyle = element.style;\n",
       "    const computedStyle = window.getComputedStyle(element);\n",
       "    const originalWidth = computedStyle.width;\n",
       "    const originalHTML = element.innerHTML.replace('Copied!', '');\n",
       "\n",
       "    navigator.clipboard.writeText(fullParamName)\n",
       "        .then(() => {\n",
       "            element.style.width = originalWidth;\n",
       "            element.style.color = 'green';\n",
       "            element.innerHTML = \"Copied!\";\n",
       "\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        })\n",
       "        .catch(err => {\n",
       "            console.error('Failed to copy:', err);\n",
       "            element.style.color = 'red';\n",
       "            element.innerHTML = \"Failed!\";\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        });\n",
       "    return false;\n",
       "}\n",
       "\n",
       "document.querySelectorAll('.copy-paste-icon').forEach(function(element) {\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const paramName = element.parentElement.nextElementSibling\n",
       "        .textContent.trim().split(' ')[0];\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${paramName}` : paramName;\n",
       "\n",
       "    element.setAttribute('title', fullParamName);\n",
       "});\n",
       "\n",
       "\n",
       "/**\n",
       " * Adapted from Skrub\n",
       " * https://github.com/skrub-data/skrub/blob/403466d1d5d4dc76a7ef569b3f8228db59a31dc3/skrub/_reporting/_data/templates/report.js#L789\n",
       " * @returns \"light\" or \"dark\"\n",
       " */\n",
       "function detectTheme(element) {\n",
       "    const body = document.querySelector('body');\n",
       "\n",
       "    // Check VSCode theme\n",
       "    const themeKindAttr = body.getAttribute('data-vscode-theme-kind');\n",
       "    const themeNameAttr = body.getAttribute('data-vscode-theme-name');\n",
       "\n",
       "    if (themeKindAttr && themeNameAttr) {\n",
       "        const themeKind = themeKindAttr.toLowerCase();\n",
       "        const themeName = themeNameAttr.toLowerCase();\n",
       "\n",
       "        if (themeKind.includes(\"dark\") || themeName.includes(\"dark\")) {\n",
       "            return \"dark\";\n",
       "        }\n",
       "        if (themeKind.includes(\"light\") || themeName.includes(\"light\")) {\n",
       "            return \"light\";\n",
       "        }\n",
       "    }\n",
       "\n",
       "    // Check Jupyter theme\n",
       "    if (body.getAttribute('data-jp-theme-light') === 'false') {\n",
       "        return 'dark';\n",
       "    } else if (body.getAttribute('data-jp-theme-light') === 'true') {\n",
       "        return 'light';\n",
       "    }\n",
       "\n",
       "    // Guess based on a parent element's color\n",
       "    const color = window.getComputedStyle(element.parentNode, null).getPropertyValue('color');\n",
       "    const match = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i);\n",
       "    if (match) {\n",
       "        const [r, g, b] = [\n",
       "            parseFloat(match[1]),\n",
       "            parseFloat(match[2]),\n",
       "            parseFloat(match[3])\n",
       "        ];\n",
       "\n",
       "        // https://en.wikipedia.org/wiki/HSL_and_HSV#Lightness\n",
       "        const luma = 0.299 * r + 0.587 * g + 0.114 * b;\n",
       "\n",
       "        if (luma > 180) {\n",
       "            // If the text is very bright we have a dark theme\n",
       "            return 'dark';\n",
       "        }\n",
       "        if (luma < 75) {\n",
       "            // If the text is very dark we have a light theme\n",
       "            return 'light';\n",
       "        }\n",
       "        // Otherwise fall back to the next heuristic.\n",
       "    }\n",
       "\n",
       "    // Fallback to system preference\n",
       "    return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n",
       "}\n",
       "\n",
       "\n",
       "function forceTheme(elementId) {\n",
       "    const estimatorElement = document.querySelector(`#${elementId}`);\n",
       "    if (estimatorElement === null) {\n",
       "        console.error(`Element with id ${elementId} not found.`);\n",
       "    } else {\n",
       "        const theme = detectTheme(estimatorElement);\n",
       "        estimatorElement.classList.add(theme);\n",
       "    }\n",
       "}\n",
       "\n",
       "forceTheme('sk-container-id-1');</script></body>"
      ],
      "text/plain": [
       "RandomForestClassifier(class_weight='balanced', criterion='entropy',\n",
       "                       n_estimators=500, random_state=42)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train, x_test, y_train, y_test = train_test_split(X,Y,test_size = 0.2, random_state = 42)\n",
    "rf = RandomForestClassifier(\n",
    "    n_estimators = 500,\n",
    "    criterion =\"entropy\",\n",
    "    class_weight = \"balanced\",\n",
    "    random_state = 42)\n",
    "rf.fit(x_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "d66572fe-3149-4467-8d69-03fd4042b078",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = rf.predict(x_test)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a128c235-3261-49ae-8d6b-002c0b45df6f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy Score: 0.7662337662337663\n",
      "Confusion Matric: [[81 18]\n",
      " [18 37]]\n",
      "Classification report:               precision    recall  f1-score   support\n",
      "\n",
      "           0       0.82      0.82      0.82        99\n",
      "           1       0.67      0.67      0.67        55\n",
      "\n",
      "    accuracy                           0.77       154\n",
      "   macro avg       0.75      0.75      0.75       154\n",
      "weighted avg       0.77      0.77      0.77       154\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(\"Accuracy Score:\", accuracy_score(y_test, y_pred))\n",
    "print(\"Confusion Matric:\", confusion_matrix(y_test, y_pred))\n",
    "print(\"Classification report:\", classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d41b0c86-a52f-4b7a-aee4-06bd53eb78c1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtYAAAHHCAYAAACbch9lAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUwtJREFUeJzt3QmcjXX///GPdaxD9iX7XiFLSgghhDupW4vEnepOi2Sp3C22ikQJRUUoFUpJKmtJpFC2ElnDjXTLLvv5P97f3+M6/3PGmTEzLjPmzOv5eBxmzrnOdb7ne87MvM/nfK7vyRAIBAIGAAAA4LxkPL+rAwAAACBYAwAAAD6hYg0AAAD4gGANAAAA+IBgDQAAAPiAYA0AAAD4gGANAAAA+IBgDQAAAPiAYA0AAAD4gGANABexzp07W+nSpVN7GACARCBYA4CZTZgwwTJkyBA8Zc6c2YoXL+6C7X//+1/mKJ55Cj09+eSTF+U8vfDCCzZ9+vREbbt169Z4798111xzQca3c+dO69evn61cudIuNt58DB061NKqL774ws0vkBIyp8itAEAaMWDAACtTpowdO3bMvv/+exckFy1aZD///LNly5YttYd30c1TqCuuuMIu1mB96623Wtu2bRN9nTvuuMNuvPHGsPMKFix4wYJ1//793TsTV1555QW5jfRMwfq1114jXCNFEKwBIETLli2tdu3a7ut7773XChQoYC+++KLNmDHD2rdvz1xFmCc/HTlyxHLmzJnq81yzZk276667LC3Ti8OsWbNaxozp883pi+W5hPQlff60AUAiNWjQwP2/adOm4HknTpywZ5991mrVqmV58uRxf7y13ddffx3v2+hvvvmmlStXzmJiYuyqq66yZcuWnXVbaldQ1VeVcf3/ySefxBsYevbsaSVKlHD7q1SpkruNQCAQtp1u++GHH7YPP/zQLrvsMsuePbvVrVvX1qxZ4y5/4403rHz58u72GjVq5Mbrl6+++srNieYmb968dtNNN9mvv/4ato3entcY165da3feeaddcsklVr9+/eDlkyZNcnOscefLl89uv/122759e9g+NmzYYLfccosVKVLE3Y9LL73UbXfgwIHgHGi+Jk6cGGzpUHvP+Vq3bp2rgmtcul29yNCLr1B//fWX9erVy6pWrWq5cuWy2NhY94Jk1apVwW0WLFjgng/yr3/9KzhGvVMiqmJHGq8eL51C96PrTZ482Z5++mnXxpQjRw47ePCgu/yHH36wFi1auOerzm/YsKEtXrz4vNqB9E5Ot27dXCVfj/G///1v97Oxf/9+u/vuu93jqdPjjz8e9twM/bl45ZVXrFSpUu4x1pj0zpCfzyXNnarVEtrW49EYrr32WsufP78bg55vH3300Vlj8H6WvJ9R/dxdfvnlNmvWrLO2VetYly5drFixYm47vbPTtWtXNzcezVH37t2DP8P6OdQL+DNnziTrMcHFg4o1ACTAC5v6Q+1RWBk7dqxrF7jvvvvs0KFDNm7cOGvevLktXbr0rLfz33//fbeNgof+QA8ZMsTatWtnmzdvtixZsrht5syZ4wKiAvCgQYNs7969LmgpKIZSQPnHP/7hQrz+eOu2Zs+ebb1793Z/0BVUQn377bcu8D300EPue+27devWLuy8/vrr9uCDD9q+ffvcmO655x4XYhJDwfV///tf2Hmq7su8efNcgCxbtqwLPH///beNHDnS6tWrZz/99NNZB2P+85//tAoVKriWDS+APf/88/bMM8+4dwn0zsGff/7p9nHdddfZihUrXMBSUNGcHz9+3B555BEXrjUHM2fOdMFFIfLdd991169Tp47df//9bt96gXMuR48ePev+aX96vH755Rd3XxRe1VeuwDd16lTXajJt2jS7+eab3fZ6fBXEdP8Urv744w/3YkYBUgFQwatKlSqurUYv1DQ+74Wcwl5yDBw40FWpFeg1L/paj6keD4XGvn37ugr2+PHj7frrr3fPD81NcnhzrjYWtU3pxaMel++++85KlizpHk+1Ybz00ksujCpsh3rnnXfcz4Wem6quv/rqq25MeuFXuHBhX55LNWrUcK02c+fOdc+FuHSb+nnq0KGDez7phYn2oedQq1atwrbVC4mPP/7Y/czkzp3bRowY4X5mt23b5oK56LY0n3r+6fGsXLmye04qrOs5pcdD/+s5oPP1O0FzpTnr06eP7dq1y4YPH56sxwMXiQAAIDB+/HglusC8efMCf/75Z2D79u2Bjz76KFCwYMFATEyM+95z6tSpwPHjx8Nmbd++fYHChQsH7rnnnuB5W7ZscfvMnz9/4K+//gqe/+mnn7rzP/vss+B5V155ZaBo0aKB/fv3B8+bM2eO265UqVLB86ZPn+7Oe+6558Ju/9Zbbw1kyJAh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ffqEbXfixAkXvqNJkSJFUnsIAAAgSlCxhsXExLiAWapUKevatas1bdrUZsyY4arZbdu2teeff96KFStmlSpVcrO1fft2a9++veXNm9fy5ctnN910k23dujU4k6p2d+vWzV2eP39+e+KJJ6xTp05uX55GjRq5bR5//HG3D91+v379wh6Nl19+2apWrWo5c+a0EiVK2IMPPmiHDx8OXj5hwgR3G7Nnz7YqVapYrly53IsEVaFDvf3223b55Ze7+1m0aFF7+OGH420FOdd9W7BggdWpU8eNSdvUq1fPfv/9d55FAACAYI2zZc+e3VWnZf78+bZ+/XqbO3euzZw5006ePGnNmze33Llz27fffmuLFy8OBlrvOi+++KK99957rgquyw8ePBixj3nixIkuoP7www82ZMgQ14Ki2/FkzJjRRowYYb/88ovb9quvvnJBPNTRo0dt6NCh9u6779rChQtt27Zt1qtXr+Dlo0ePdhX4+++/39asWeNeMKjdJZJz3Te9YNCLg4YNG9rq1attyZIlbr8K5wAAALSCICgQCLggrQrwI488Yn/++acLvmPHjg22gEyaNMnOnDnjzvMCpQK0qreq5t5www02cuRI10Zy8803u8tHjRrlWkziqlatmvXt29d9XaFCBbedbr9Zs2buvO7duwe3LV26tD333HP2wAMP2Ouvvx4WhseMGWPlypVz36sarYDu0XV69uxpjz76aPC8q666KuKjPmXKlATvW+3ate3AgQPWunXr4O2pUp4Qtdfo5NGLDAAAEJ1oBYGrRKsymy1bNncg32233RZsy1ArRmhf9apVq2zjxo2uqqvr6KSWiWPHjtmmTZtc8Pzjjz9cu4QnU6ZMVqtWrYjBOpTaNPbs2RP8ft68edakSRMrXry4u72OHTva3r17XZXakyNHjmDIjbsP/b9z5063j8Q4133T12qPUVW7TZs29uqrr57VdhLXoEGDLE+ePMGTWloAAEB0omINa9y4sWuZUIBWL3XmzP//aaGKdSj1OCskq9UjroIFCyZpNnWAZChViVUxFvU1qzKsnm/1eCvULlq0yLp06eLaMhSo49uHKu9eS0tSJOa+qYKt3vBZs2a5CvfTTz/t2leuueaaiPtU5b5Hjx5hFWvCNQAA0YlgDRee4+s7jqtmzZouUBYqVMhiY2MjblO4cGFbtmyZXXfdde7706dP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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "importance = rf.feature_importances_\n",
    "features = X.columns\n",
    "\n",
    "plt.barh(features, importance)\n",
    "plt.xlabel(\"Feature Importance\")\n",
    "plt.ylabel(\"Features\")\n",
    "plt.title(\"Random Forest Feature Importance\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "130fcf56-a9d6-4228-9464-99071bd82f8a",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
