{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1cf2a14b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import dependencies and packages needed from sklearn import datasets\n",
    "import numpy as np\n",
    "import os\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split, GridSearchCV\n",
    "from sklearn.ensemble import GradientBoostingClassifier, GradientBoostingRegressor\n",
    "from sklearn import metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "9675ba69",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'ccp_alpha': 0.0,\n",
       " 'criterion': 'friedman_mse',\n",
       " 'init': None,\n",
       " 'learning_rate': 0.1,\n",
       " 'loss': 'deviance',\n",
       " 'max_depth': 3,\n",
       " 'max_features': None,\n",
       " 'max_leaf_nodes': None,\n",
       " 'min_impurity_decrease': 0.0,\n",
       " 'min_samples_leaf': 1,\n",
       " 'min_samples_split': 2,\n",
       " 'min_weight_fraction_leaf': 0.0,\n",
       " 'n_estimators': 100,\n",
       " 'n_iter_no_change': None,\n",
       " 'random_state': None,\n",
       " 'subsample': 1.0,\n",
       " 'tol': 0.0001,\n",
       " 'validation_fraction': 0.1,\n",
       " 'verbose': 0,\n",
       " 'warm_start': False}"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# this step is just to demonstrate the adjustable parameters within the algorithm and not a necessary step\n",
    "# Specifically look at n_estimators (how many individual trees to build) and max_depth (how deep each tree will go)\n",
    "# Also notice in this classifier we will use a learning rate as discussed in the lecture\n",
    "GradientBoostingClassifier().get_params()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d7d774d6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'alpha': 0.9,\n",
       " 'ccp_alpha': 0.0,\n",
       " 'criterion': 'friedman_mse',\n",
       " 'init': None,\n",
       " 'learning_rate': 0.1,\n",
       " 'loss': 'squared_error',\n",
       " 'max_depth': 3,\n",
       " 'max_features': None,\n",
       " 'max_leaf_nodes': None,\n",
       " 'min_impurity_decrease': 0.0,\n",
       " 'min_samples_leaf': 1,\n",
       " 'min_samples_split': 2,\n",
       " 'min_weight_fraction_leaf': 0.0,\n",
       " 'n_estimators': 100,\n",
       " 'n_iter_no_change': None,\n",
       " 'random_state': None,\n",
       " 'subsample': 1.0,\n",
       " 'tol': 0.0001,\n",
       " 'validation_fraction': 0.1,\n",
       " 'verbose': 0,\n",
       " 'warm_start': False}"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "GradientBoostingRegressor().get_params()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b98215d7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The length of the dataset is  768\n",
      "The shape of the dataset (Number of columns / features) is  (768, 10)\n"
     ]
    }
   ],
   "source": [
    "# load the dataset (stored in a variable)\n",
    "diabetes = pd.read_csv('./diabetes.csv', sep=',',header = 0)\n",
    "\n",
    "print (\"The length of the dataset is \", len(diabetes))\n",
    "print(\"The shape of the dataset (Number of columns / features) is \", diabetes.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "81450d75",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PatientId</th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PatientId  Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin  \\\n",
       "0          1            6      148             72             35        0   \n",
       "1          2            1       85             66             29        0   \n",
       "2          3            8      183             64              0        0   \n",
       "3          4            1       89             66             23       94   \n",
       "4          5            0      137             40             35      168   \n",
       "\n",
       "    BMI  DiabetesPedigreeFunction  Age  Outcome  \n",
       "0  33.6                     0.627   50        1  \n",
       "1  26.6                     0.351   31        0  \n",
       "2  23.3                     0.672   32        1  \n",
       "3  28.1                     0.167   21        0  \n",
       "4  43.1                     2.288   33        1  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diabetes.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5ab96474",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 576 entries, 357 to 102\n",
      "Data columns (total 10 columns):\n",
      " #   Column                    Non-Null Count  Dtype  \n",
      "---  ------                    --------------  -----  \n",
      " 0   PatientId                 576 non-null    int64  \n",
      " 1   Pregnancies               576 non-null    int64  \n",
      " 2   Glucose                   576 non-null    int64  \n",
      " 3   BloodPressure             576 non-null    int64  \n",
      " 4   SkinThickness             576 non-null    int64  \n",
      " 5   Insulin                   576 non-null    int64  \n",
      " 6   BMI                       576 non-null    float64\n",
      " 7   DiabetesPedigreeFunction  576 non-null    float64\n",
      " 8   Age                       576 non-null    int64  \n",
      " 9   Outcome                   576 non-null    int64  \n",
      "dtypes: float64(2), int64(8)\n",
      "memory usage: 49.5 KB\n"
     ]
    }
   ],
   "source": [
    "# split the data into train and test using the SciKitLearn package\n",
    "train,test=train_test_split(diabetes,test_size=0.25,random_state=42)\n",
    "# view the information\n",
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7c7c37fa",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 192 entries, 668 to 615\n",
      "Data columns (total 8 columns):\n",
      " #   Column                    Non-Null Count  Dtype  \n",
      "---  ------                    --------------  -----  \n",
      " 0   Pregnancies               192 non-null    int64  \n",
      " 1   Glucose                   192 non-null    int64  \n",
      " 2   BloodPressure             192 non-null    int64  \n",
      " 3   SkinThickness             192 non-null    int64  \n",
      " 4   Insulin                   192 non-null    int64  \n",
      " 5   BMI                       192 non-null    float64\n",
      " 6   DiabetesPedigreeFunction  192 non-null    float64\n",
      " 7   Age                       192 non-null    int64  \n",
      "dtypes: float64(2), int64(6)\n",
      "memory usage: 13.5 KB\n"
     ]
    }
   ],
   "source": [
    "# Ensure only labels are saved in y variables\n",
    "y_train=train['Outcome']\n",
    "y_test=test['Outcome']\n",
    "#drop the unwanted / irrelevant columns, features are stored in X variables\n",
    "X_train=train.drop(['PatientId','Outcome'],axis=1)\n",
    "X_test=test.drop(['PatientId','Outcome'],axis=1)\n",
    "# view the information\n",
    "X_test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "7cf6d532",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Pregnancies',\n",
       " 'Glucose',\n",
       " 'BloodPressure',\n",
       " 'SkinThickness',\n",
       " 'Insulin',\n",
       " 'BMI',\n",
       " 'DiabetesPedigreeFunction',\n",
       " 'Age']"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mtarget =  diabetes[\"Outcome\"].values \n",
    "mtarget = np.array(mtarget, dtype='int')  #array of class targets\n",
    "values = np.array(diabetes.values,dtype='int') #array of attribute values for training data\n",
    "values = values[:,1:9] #slice-> cols 1,2,3 and 4 kept.  cols 0 and 9 excluded.\n",
    "targetNames=['Diabetes','No Diabetes']\n",
    "feature_names=list(diabetes)\n",
    "\n",
    "\n",
    "feature_names=feature_names[1:9]   #slice-> cols 1,2,3 and 4 kept.  cols 0 and 5 excluded.\n",
    "feature_names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c55b2240",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GradientBoostingClassifier()"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Set a model into a variable\n",
    "gb_clf = GradientBoostingClassifier()\n",
    "# Fit the data to the model\n",
    "gb_clf.fit(values, mtarget)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "fa469ca4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 1 0 1 1\n",
      " 1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 1 1 0 0 0\n",
      " 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0\n",
      " 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0\n",
      " 0 1 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 1 1 1 0 1 0 0 0 0 0 1 1 0 0 0 1 1\n",
      " 0 0 0 1 1 0 0]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Mark Huntly\\anaconda3\\lib\\site-packages\\sklearn\\base.py:443: UserWarning: X has feature names, but GradientBoostingClassifier was fitted without feature names\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "192"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Test the model\n",
    "y_pred_gb = gb_clf.predict(X_test)\n",
    "print(y_pred_gb)\n",
    "len(y_pred_gb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "895bb38a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "668    0\n",
      "324    0\n",
      "624    0\n",
      "690    0\n",
      "473    0\n",
      "      ..\n",
      "554    0\n",
      "319    1\n",
      "594    0\n",
      "6      1\n",
      "615    0\n",
      "Name: Outcome, Length: 192, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "868d9370",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[113  10]\n",
      " [ 12  57]]\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0      0.904     0.919     0.911       123\n",
      "           1      0.851     0.826     0.838        69\n",
      "\n",
      "    accuracy                          0.885       192\n",
      "   macro avg      0.877     0.872     0.875       192\n",
      "weighted avg      0.885     0.885     0.885       192\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# display the metrics of the model's classification through confusion matrix and classification report\n",
    "# (accuracy / precision / recall / f1)\n",
    "print(metrics.confusion_matrix(y_test, y_pred_gb))\n",
    "\n",
    "print(metrics.classification_report(y_test, y_pred_gb, digits=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "487c23c3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     Actual  Predicted\n",
      "668       0          0\n",
      "324       0          0\n",
      "624       0          0\n",
      "690       0          0\n",
      "473       0          1\n",
      "..      ...        ...\n",
      "554       0          0\n",
      "319       1          1\n",
      "594       0          1\n",
      "6         1          0\n",
      "615       0          0\n",
      "\n",
      "[192 rows x 2 columns]\n"
     ]
    }
   ],
   "source": [
    "# use Pandas to create a dataframe to view the ground truth and classifications side by side\n",
    "data = {'Actual': y_test,\n",
    "        'Predicted':y_pred_gb}\n",
    "df = pd.DataFrame(data)\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "683e1703",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0      0.904     0.919     0.911       123\n",
      "           1      0.851     0.826     0.838        69\n",
      "\n",
      "    accuracy                          0.885       192\n",
      "   macro avg      0.877     0.872     0.875       192\n",
      "weighted avg      0.885     0.885     0.885       192\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Use Seaborn to create a confusion matrix heatmap and MatPlotLib to display\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sn\n",
    "confusion_matrix = pd.crosstab(df['Actual'], df['Predicted'], rownames=['Actual'], colnames=['Predicted'])\n",
    "sn.heatmap(confusion_matrix, annot=True)\n",
    "plt.show()\n",
    "print(metrics.classification_report(y_test, y_pred_gb, digits=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "de4cb499",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create function for cross-validation and best params\n",
    "def print_results(results):\n",
    "    print('The Best Parameters are: {}\\n'.format(results.best_params_))\n",
    "    means = results.cv_results_['mean_test_score']\n",
    "    stds = results.cv_results_['std_test_score']\n",
    "    \n",
    "    for mean, std, params in zip(means, stds, results.cv_results_['params']):\n",
    "        print('{} (+/-{}) for {}'.format(round(mean, 3), round(std * 2, 3), params))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "fc51c030",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The Best Parameters are: {'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 50}\n",
      "\n",
      "0.651 (=/-0.004) for {'learning_rate': 0.01, 'max_depth': 1, 'n_estimators': 5}\n",
      "0.665 (=/-0.056) for {'learning_rate': 0.01, 'max_depth': 1, 'n_estimators': 50}\n",
      "0.764 (=/-0.034) for {'learning_rate': 0.01, 'max_depth': 1, 'n_estimators': 250}\n",
      "0.766 (=/-0.063) for {'learning_rate': 0.01, 'max_depth': 1, 'n_estimators': 500}\n",
      "0.651 (=/-0.004) for {'learning_rate': 0.01, 'max_depth': 3, 'n_estimators': 5}\n",
      "0.728 (=/-0.037) for {'learning_rate': 0.01, 'max_depth': 3, 'n_estimators': 50}\n",
      "0.772 (=/-0.083) for {'learning_rate': 0.01, 'max_depth': 3, 'n_estimators': 250}\n",
      "0.787 (=/-0.073) for {'learning_rate': 0.01, 'max_depth': 3, 'n_estimators': 500}\n",
      "0.651 (=/-0.004) for {'learning_rate': 0.01, 'max_depth': 5, 'n_estimators': 5}\n",
      "0.74 (=/-0.046) for {'learning_rate': 0.01, 'max_depth': 5, 'n_estimators': 50}\n",
      "0.768 (=/-0.087) for {'learning_rate': 0.01, 'max_depth': 5, 'n_estimators': 250}\n",
      "0.763 (=/-0.098) for {'learning_rate': 0.01, 'max_depth': 5, 'n_estimators': 500}\n",
      "0.651 (=/-0.004) for {'learning_rate': 0.01, 'max_depth': 7, 'n_estimators': 5}\n",
      "0.731 (=/-0.061) for {'learning_rate': 0.01, 'max_depth': 7, 'n_estimators': 50}\n",
      "0.75 (=/-0.073) for {'learning_rate': 0.01, 'max_depth': 7, 'n_estimators': 250}\n",
      "0.749 (=/-0.06) for {'learning_rate': 0.01, 'max_depth': 7, 'n_estimators': 500}\n",
      "0.651 (=/-0.004) for {'learning_rate': 0.01, 'max_depth': 9, 'n_estimators': 5}\n",
      "0.714 (=/-0.076) for {'learning_rate': 0.01, 'max_depth': 9, 'n_estimators': 50}\n",
      "0.741 (=/-0.095) for {'learning_rate': 0.01, 'max_depth': 9, 'n_estimators': 250}\n",
      "0.737 (=/-0.099) for {'learning_rate': 0.01, 'max_depth': 9, 'n_estimators': 500}\n",
      "0.685 (=/-0.086) for {'learning_rate': 0.1, 'max_depth': 1, 'n_estimators': 5}\n",
      "0.763 (=/-0.069) for {'learning_rate': 0.1, 'max_depth': 1, 'n_estimators': 50}\n",
      "0.768 (=/-0.052) for {'learning_rate': 0.1, 'max_depth': 1, 'n_estimators': 250}\n",
      "0.763 (=/-0.056) for {'learning_rate': 0.1, 'max_depth': 1, 'n_estimators': 500}\n",
      "0.73 (=/-0.033) for {'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 5}\n",
      "0.787 (=/-0.068) for {'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 50}\n",
      "0.758 (=/-0.076) for {'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 250}\n",
      "0.753 (=/-0.055) for {'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 500}\n",
      "0.729 (=/-0.057) for {'learning_rate': 0.1, 'max_depth': 5, 'n_estimators': 5}\n",
      "0.774 (=/-0.084) for {'learning_rate': 0.1, 'max_depth': 5, 'n_estimators': 50}\n",
      "0.746 (=/-0.083) for {'learning_rate': 0.1, 'max_depth': 5, 'n_estimators': 250}\n",
      "0.745 (=/-0.058) for {'learning_rate': 0.1, 'max_depth': 5, 'n_estimators': 500}\n",
      "0.733 (=/-0.045) for {'learning_rate': 0.1, 'max_depth': 7, 'n_estimators': 5}\n",
      "0.744 (=/-0.089) for {'learning_rate': 0.1, 'max_depth': 7, 'n_estimators': 50}\n",
      "0.734 (=/-0.066) for {'learning_rate': 0.1, 'max_depth': 7, 'n_estimators': 250}\n",
      "0.744 (=/-0.068) for {'learning_rate': 0.1, 'max_depth': 7, 'n_estimators': 500}\n",
      "0.715 (=/-0.086) for {'learning_rate': 0.1, 'max_depth': 9, 'n_estimators': 5}\n",
      "0.737 (=/-0.087) for {'learning_rate': 0.1, 'max_depth': 9, 'n_estimators': 50}\n",
      "0.753 (=/-0.084) for {'learning_rate': 0.1, 'max_depth': 9, 'n_estimators': 250}\n",
      "0.734 (=/-0.09) for {'learning_rate': 0.1, 'max_depth': 9, 'n_estimators': 500}\n",
      "0.733 (=/-0.034) for {'learning_rate': 1, 'max_depth': 1, 'n_estimators': 5}\n",
      "0.751 (=/-0.075) for {'learning_rate': 1, 'max_depth': 1, 'n_estimators': 50}\n",
      "0.741 (=/-0.071) for {'learning_rate': 1, 'max_depth': 1, 'n_estimators': 250}\n",
      "0.733 (=/-0.079) for {'learning_rate': 1, 'max_depth': 1, 'n_estimators': 500}\n",
      "0.745 (=/-0.07) for {'learning_rate': 1, 'max_depth': 3, 'n_estimators': 5}\n",
      "0.711 (=/-0.041) for {'learning_rate': 1, 'max_depth': 3, 'n_estimators': 50}\n",
      "0.715 (=/-0.019) for {'learning_rate': 1, 'max_depth': 3, 'n_estimators': 250}\n",
      "0.738 (=/-0.025) for {'learning_rate': 1, 'max_depth': 3, 'n_estimators': 500}\n",
      "0.716 (=/-0.059) for {'learning_rate': 1, 'max_depth': 5, 'n_estimators': 5}\n",
      "0.733 (=/-0.054) for {'learning_rate': 1, 'max_depth': 5, 'n_estimators': 50}\n",
      "0.727 (=/-0.05) for {'learning_rate': 1, 'max_depth': 5, 'n_estimators': 250}\n",
      "0.733 (=/-0.04) for {'learning_rate': 1, 'max_depth': 5, 'n_estimators': 500}\n",
      "0.703 (=/-0.092) for {'learning_rate': 1, 'max_depth': 7, 'n_estimators': 5}\n",
      "0.749 (=/-0.093) for {'learning_rate': 1, 'max_depth': 7, 'n_estimators': 50}\n",
      "0.732 (=/-0.063) for {'learning_rate': 1, 'max_depth': 7, 'n_estimators': 250}\n",
      "0.741 (=/-0.049) for {'learning_rate': 1, 'max_depth': 7, 'n_estimators': 500}\n",
      "0.706 (=/-0.045) for {'learning_rate': 1, 'max_depth': 9, 'n_estimators': 5}\n",
      "0.738 (=/-0.048) for {'learning_rate': 1, 'max_depth': 9, 'n_estimators': 50}\n",
      "0.736 (=/-0.078) for {'learning_rate': 1, 'max_depth': 9, 'n_estimators': 250}\n",
      "0.738 (=/-0.06) for {'learning_rate': 1, 'max_depth': 9, 'n_estimators': 500}\n",
      "0.277 (=/-0.053) for {'learning_rate': 10, 'max_depth': 1, 'n_estimators': 5}\n",
      "0.277 (=/-0.053) for {'learning_rate': 10, 'max_depth': 1, 'n_estimators': 50}\n",
      "0.277 (=/-0.053) for {'learning_rate': 10, 'max_depth': 1, 'n_estimators': 250}\n",
      "0.277 (=/-0.053) for {'learning_rate': 10, 'max_depth': 1, 'n_estimators': 500}\n",
      "0.423 (=/-0.297) for {'learning_rate': 10, 'max_depth': 3, 'n_estimators': 5}\n",
      "0.423 (=/-0.297) for {'learning_rate': 10, 'max_depth': 3, 'n_estimators': 50}\n",
      "0.423 (=/-0.297) for {'learning_rate': 10, 'max_depth': 3, 'n_estimators': 250}\n",
      "0.423 (=/-0.297) for {'learning_rate': 10, 'max_depth': 3, 'n_estimators': 500}\n",
      "0.595 (=/-0.148) for {'learning_rate': 10, 'max_depth': 5, 'n_estimators': 5}\n",
      "0.572 (=/-0.197) for {'learning_rate': 10, 'max_depth': 5, 'n_estimators': 50}\n",
      "0.551 (=/-0.147) for {'learning_rate': 10, 'max_depth': 5, 'n_estimators': 250}\n",
      "0.552 (=/-0.148) for {'learning_rate': 10, 'max_depth': 5, 'n_estimators': 500}\n",
      "0.635 (=/-0.11) for {'learning_rate': 10, 'max_depth': 7, 'n_estimators': 5}\n",
      "0.578 (=/-0.053) for {'learning_rate': 10, 'max_depth': 7, 'n_estimators': 50}\n",
      "0.63 (=/-0.034) for {'learning_rate': 10, 'max_depth': 7, 'n_estimators': 250}\n",
      "0.542 (=/-0.28) for {'learning_rate': 10, 'max_depth': 7, 'n_estimators': 500}\n",
      "0.642 (=/-0.12) for {'learning_rate': 10, 'max_depth': 9, 'n_estimators': 5}\n",
      "0.667 (=/-0.118) for {'learning_rate': 10, 'max_depth': 9, 'n_estimators': 50}\n",
      "0.623 (=/-0.22) for {'learning_rate': 10, 'max_depth': 9, 'n_estimators': 250}\n",
      "0.676 (=/-0.036) for {'learning_rate': 10, 'max_depth': 9, 'n_estimators': 500}\n",
      "0.349 (=/-0.004) for {'learning_rate': 100, 'max_depth': 1, 'n_estimators': 5}\n",
      "0.349 (=/-0.004) for {'learning_rate': 100, 'max_depth': 1, 'n_estimators': 50}\n",
      "0.349 (=/-0.004) for {'learning_rate': 100, 'max_depth': 1, 'n_estimators': 250}\n",
      "0.349 (=/-0.004) for {'learning_rate': 100, 'max_depth': 1, 'n_estimators': 500}\n",
      "0.318 (=/-0.153) for {'learning_rate': 100, 'max_depth': 3, 'n_estimators': 5}\n",
      "0.319 (=/-0.156) for {'learning_rate': 100, 'max_depth': 3, 'n_estimators': 50}\n",
      "0.319 (=/-0.156) for {'learning_rate': 100, 'max_depth': 3, 'n_estimators': 250}\n",
      "0.319 (=/-0.156) for {'learning_rate': 100, 'max_depth': 3, 'n_estimators': 500}\n",
      "0.51 (=/-0.208) for {'learning_rate': 100, 'max_depth': 5, 'n_estimators': 5}\n",
      "0.476 (=/-0.185) for {'learning_rate': 100, 'max_depth': 5, 'n_estimators': 50}\n",
      "0.525 (=/-0.196) for {'learning_rate': 100, 'max_depth': 5, 'n_estimators': 250}\n",
      "0.479 (=/-0.184) for {'learning_rate': 100, 'max_depth': 5, 'n_estimators': 500}\n",
      "0.546 (=/-0.099) for {'learning_rate': 100, 'max_depth': 7, 'n_estimators': 5}\n",
      "0.587 (=/-0.166) for {'learning_rate': 100, 'max_depth': 7, 'n_estimators': 50}\n",
      "0.538 (=/-0.153) for {'learning_rate': 100, 'max_depth': 7, 'n_estimators': 250}\n",
      "0.591 (=/-0.128) for {'learning_rate': 100, 'max_depth': 7, 'n_estimators': 500}\n",
      "0.524 (=/-0.218) for {'learning_rate': 100, 'max_depth': 9, 'n_estimators': 5}\n",
      "0.569 (=/-0.252) for {'learning_rate': 100, 'max_depth': 9, 'n_estimators': 50}\n",
      "0.621 (=/-0.096) for {'learning_rate': 100, 'max_depth': 9, 'n_estimators': 250}\n",
      "0.573 (=/-0.109) for {'learning_rate': 100, 'max_depth': 9, 'n_estimators': 500}\n"
     ]
    }
   ],
   "source": [
    "# Set the parameters to be used\n",
    "parameters = {\n",
    "    'n_estimators' : [5, 50, 250, 500],\n",
    "    'max_depth' : [1, 3, 5, 7, 9],\n",
    "    'learning_rate': [0.01, 0.1, 1, 10, 100]\n",
    "}\n",
    "# Create the models\n",
    "cv = GridSearchCV(gb_clf, parameters, cv = 5)\n",
    "#Fit the data to the models\n",
    "cv.fit(values, mtarget)\n",
    "# Show the workings and best params\n",
    "print_results(cv)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "a03a6af0",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import learning_curve\n",
    "train_sizes_gb, train_scores_gb, test_scores_gb = learning_curve(GradientBoostingClassifier(), values, mtarget, cv=10, scoring='accuracy', n_jobs=-1, train_sizes=np.linspace(0.01, 1.0, 50))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "d31d24d6",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_mean_gb = np.mean(train_scores_gb, axis=1)\n",
    "train_std_gb = np.std(train_scores_gb, axis=1)\n",
    "\n",
    "test_mean_gb = np.mean(test_scores_gb, axis=1)\n",
    "test_std_gb = np.std(test_scores_gb, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "4ad20bcb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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e/bE2WefjZtvvhkAcPToUQwePBg9e/bE4MGDcezYsWqf2z///INhw4ahT58+uOiii3DgwAE//VSDx+n3loCIiIiatauvvrrKbaNGjcJtt90Gk8mE66+/vsr948aNw4033ojCwkJMnDix0n3r1q1r0DgOHjyI7777DiqVCmVlZdi8eTPUajW+++47PPbYY/j000+rPObAgQP48ccfUV5ejs6dO+Ouu+6q0pv3zz//xN69e5GSkoILLrgAP//8M/r27YvJkydj8+bNaN++PcaNG1ftmN58803cd999uOmmm2Cz2eB0OrF3717MmzcPP//8MxISElBUVAQAuPfee3HLLbdgwoQJWLp0KaZNm4Y1a9ZUeW6DBw/Gm2++iU6dOuH333/H3XffjR9++KFBP7PmggGZiIiIqAHGjh0LlUoFACgtLcWECRNw6NAhCCFgt9urfcxVV12FsLAwhIWFoXXr1sjLy0NaWlqlbc4991z3bb169UJGRgb0ej06dOjg7uM7btw4vP3221X2f/7552PevHnIzMzENddcg06dOuGHH37AmDFjkJCQAACIi4sDAPz666/47LPPAAA333wzZs6cWeW5GQwG/PLLLxg7dqz7PqvV2qCfV3PCgExERETNSm0zvjqdrtb74+PjGzxjfKqIiAj397Nnz8agQYPw+eefIyMjAwMHDqz2MWFhYe7vVSoVHA6HV9soZRZ1ufHGG9G/f39s2LABQ4cOxZIlSyCl9KrNmec2ynNzuVyIiYlx12CfLliDTERERNRIpaWlSE1NBQC89957Pt9/ly5dcOTIEWRkZAAAPvroo2q3O3LkCDp06IBp06ZhxIgR2L17NwYPHoyPP/4YhYWFAOAusRgwYABWrVoFAPjggw9w4YUXVtlfVFQU2rdvj9WrVwOoWJVu165dvn56QYcBmYiIiKiRZs6ciUcffRQXXHABnE6nz/cfHh6OxYsXY9iwYbjwwguRmJiI6OjoKtt99NFH6N69O3r16oUDBw7glltuQbdu3fCf//wHl1xyCc4++2xMnz4dALBw4UIsW7YMPXv2xPvvv49XX3212mN/8MEHePfdd3H22WejW7du+OKLL3z+/IKN8HbKPlj07dtXbtu2LdDDICIioiayf/9+nHXWWYEeRsAZDAbo9XpIKXHPPfegU6dOeOCBBwI9rGajut8jIcR2KWWVPnycQSYiIiJqBt555x306tUL3bp1Q2lpKSZPnhzoIbVYPEmPiIiIqBl44IEHOGPcRDiDTERERETkgQGZiIiIiMgDAzIRERERkQcGZCIiIiIiDwzIRERERHXIzc3FDTfcgDPOOANdu3bFlVdeiYMHDwZ6WFW89957uPfeewEAb775JlasWFFlm4yMDHTv3r3W/WRkZODDDz90X9+2bRumTZvm28EGMXaxICIiIqqFlBKjR4/GhAkT3CvP7dy5E3l5eTjzzDPd2zmdTqhUqkANs4opU6Y0+LFKQL7xxhsBAH379kXfvlXaBQecv37mnEEmIiIiqsWPP/4IjUZTKXD26tULF110ETZt2oRBgwbhxhtvRI8ePWCxWDBp0iT06NED55xzDn788UcAwN69e3HuueeiV69e6NmzJw4dOgSj0YirrroKZ599Nrp3715l+WiXy4X09HSUlJS4b+vYsSPy8vKwbt069O/fH+eccw4uu+wy5OXlVRn3E088gQULFgAAtm/fjrPPPhvnn38+Fi1a5N4mIyMDF110EXr37o3evXvjl19+AQA88sgj2LJlC3r16oWXX34ZmzZtwvDhwwFULFU9atQo9OzZE+eddx52797tPt6tt96KgQMHokOHDli4cGGVMTmdTkycOBHdu3dHjx498PLLLwMADh8+jMsuuwxnn302evfujX/++QdSSsyYMcO9rfLzOfVn7nQ6MWPGDPTr1w89e/bEW2+9Vb9/4GpwBpmIiIiajUcffRR79uzx6T67d++OZ599tsb79+zZgz59+tR4/x9//IE9e/agffv2ePHFFwEAf/31Fw4cOIAhQ4bg4MGDePPNN3Hffffhpptugs1mg9PpxMaNG5GSkoINGzYAAEpLSyvtNyQkBCNHjsTnn3+OSZMm4ffff0d6ejoSExNx4YUX4rfffoMQAkuWLMELL7zgPnZ1Jk2ahNdeew2XXHIJZsyY4b69devW+Pbbb6HVanHo0CGMGzcO27Ztw3PPPYcFCxZg/fr1ACpCqWLOnDk455xzsGbNGvzwww+45ZZbsHPnTgDAgQMH8OOPP6K8vBydO3fGXXfdBY1G437szp07kZWV5f43VML/TTfdhEceeQSjR4+GxWKBy+XCZ599hp07d2LXrl0oKChAv379cPHFF1f5mb/99tuIjo7G1q1bYbVaccEFF2DIkCFo3759jT+PuvhtBlkIsVQIcUIIUe1vsaiwUAhxWAixWwjR219jISIiIvKXc8891x3GfvrpJ9x8880AgC5duqBdu3Y4ePAgzj//fDzzzDN4/vnncfToUYSHh6NHjx747rvv8PDDD2PLli2Ijo6usu/rr7/ePXO6atUqXH/99QCAzMxMDB06FD169MD8+fOxd+/eGsdXWlqKkpISXHLJJQDgHh8A2O123HHHHejRowfGjh2Lffv21fl8PZ/jpZdeisLCQne4v+qqqxAWFoaEhAS0bt26ysx2hw4dcOTIEUydOhVfffUVoqKiUF5ejqysLIwePRoAoNVqodPp8NNPP2HcuHFQqVRITEzEJZdcgq1bt1b5mX/zzTdYsWIFevXqhf79+6OwsBCHDh2q83nUxp8zyO8BeB1A1erwClcA6HTy0h/AGye/Erm5XC44HA7Y7XbY7XZYrVb39wCgUqkQGhrqvmg0Gmg0GoSE1O+9n5QSTqcTDofDfbHZbBBCICYmptK7XyIiCpzaZnr9pVu3bvjkk09qvD8iIsL9vZSy2m1uvPFG9O/fHxs2bMDQoUOxZMkSXHrppdi+fTs2btyIRx99FEOGDMHQoUPdS0jPnTsXV199NQ4fPoz8/HysWbMGs2bNAgBMnToV06dPx4gRI7Bp0yY88cQTNY5PSgkhRLX3vfzyy0hMTMSuXbvgcrmg1Wrr+nFU+xyV/YeFhblvU6lUcDgclbaLjY3Frl278PXXX2PRokX4+OOP8corr3h9HMWpP/PXXnsNQ4cOrXPs3vJbQJZSbhZCpNeyyUgAK2TFs/9NCBEjhEiWUub4a0yNoXy04enMM890n+E5YcKEKu/eevXqhSVLlgAAxo4di3///bfS/QMGDHDX51x11VVV3mVddtlleO655wAAgwYNQnl5eaX7R44cidmzZwOoeCflcrkq3X/DDTfgoYcegtlsxkUXXVTlOd1222246667UFRUhCFDhlS5f+rUqZgwYQKOHz/uflfn6eGHH8bYsWPx999/46abbqpy/5NPPomrrroKO3bswJ133lnl/vnz52PQoEH4+eefMXPmTMTExCA6OhpRUVGIiorC2LFj0aZNGxQUFODw4cOIjo52X3Q6HYCK/xS5ubnIyMhAaWmp+11yaWkp7r33XsTExOCjjz7C+++/D5vNhsjISERFRSEiIgIvvPACNBoNfv75Z/z999+IjIxEZGQk9Ho99Ho9zjrrLAghYDAYoNVqERsb69UfDiIialkuvfRSPPbYY3jnnXdwxx13AAC2bt0Kk8lUZduLL74YH3zwAS699FIcPHgQx44dQ+fOnXHkyBF06NAB06ZNw5EjR7B792506dIFcXFxGD9+PPR6Pd577z08/vjj7nIFxejRozF9+nScddZZiI+PB1AxK5yamgoAWL58ea3jV15ff/rpJ1x44YX44IMP3PeVlpYiLS0NISEhWL58OZxOJwAgMjKySu449TnOnj0bmzZtQkJCAqKiorz6WRYUFCA0NBTXXnstzjjjDEycOBFRUVFIS0vDmjVrMGrUKFitVjidTlx88cV46623MGHCBBQVFWHz5s2YP38+Dhw4UGmfQ4cOxRtvvIFLL70UGo0GBw8eRGpqaqUQXV+BrEFOBXDc43rmyduqBGQhxJ0A7gSAtm3bNsngTpWenl7ltsTEROTm5gKoCMt6vb7S/W3atHHf37VrV7Ru3brKPpX7e/bsibKyskr3p6Wlue8/55xzYLVaK92flJTkvv/cc8+t8k6rVatWyM3Nhd1uR//+VSfnY2NjkZubC4PBUO39er0eubm5KC8vr/b+8PBw5Obmwmw2V3u/RqOp9fhCCOTm5kJKibPOOgtlZWUoKCjAP//8g9LSUgwePBht2rTBb7/9VuWdsUqlwqpVq9C+fXt88803eOmllyrdr9VqMW7cOGg0GoSGhqJDhw5Qq9UwGo0wGAwoKiqC3W6HlBLff/99lZkBlUqF3377DQBw6NAhpKWlwWKxQKPRIDY2FjqdrsZ340RE1LIIIfD555/j/vvvx3PPPQetVov09HS88soryMrKqrTt3XffjSlTpqBHjx5Qq9V47733EBYWho8++ggrV66ERqNBUlISHn/8cWzduhUzZsxASEgINBoN3njjjWqPf/3116Nfv35477333Lc98cQTGDt2LFJTU3HeeedVmYQ71bJly3DrrbdCp9NVmmm9++67ce2112L16tUYNGiQO1T27NkTarUaZ599NiZOnIhzzjmn0rEnTZqEnj17QqfT1RnQPWVlZWHSpEnuST3lE4H3338fkydPxuOPPw6NRoPVq1dj9OjR+PXXX3H22WdDCIEXXngBSUlJVQLy7bffjoyMDPTu3RtSSrRq1Qpr1qzxekzVEbVNXzfWyRnk9VLKKs32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vnkyPuK3gCyldAgh7gXwNQAVgKVSyr1CiCkn738TwFkAVgghnAD2AbjNX+MhIiIiopppNBokJCQgLi4OZWVlKCkpcYdkZcY5KioKoaGhPjmeWq12z2IHGy41TURERERVSClhMpkAVJRSNNcT7mrDpaaJiIiIyGtCCERERAR6GAHBpaaJiIiIiDwwIBMREREReWBAJiIiIiLywIBMREREROSBAZmIiIiIyAMDMhERERGRBwZkIiIiIiIPDMhERERERB4YkImIiIiIPDAgExERERF5YEAmIiIiIvLAgExERERE5IEBmYiIiIjIAwMyEREREZEHBmQiIiIiIg8MyEREREREHhiQiYiIiIg8MCATEREREXlgQCYiIiIi8sCATERERETkgQGZiIiIiMgDAzIRERERkQcGZCIiIiIiDwzIREREREQeGJCJiIiIiDwwIBMREREReWBAJiIiIiLywIBMREREROSBAZmIiIiIyAMDMhERERGRBwZkIiIiIiIPDMhERERERB4YkImIiIiIPDAgExERERF5YEAmIiIiIvLAgExERERE5IEBmYiIiIjIAwMyEREREZEHBmQiIiIiIg8MyEREREREHhiQiYiIiIg8MCATEREREXlgQCYiIiIi8sCATERERETkgQGZiIiIiMgDAzIRERERkQcGZCIiIiIiDwzIREREREQeGJCJiIiIiDwwIBMREREReWBAJiIiIiLywIBMREREROSBAZmIiIiIyAMDMhERERGRBwZkIiIiIiIPDMhERERERB4YkImIiIiIPDAgExERERF5YEAmIiIiIvLAgExERERE5IEBmYiIiIjIAwMyEREREZEHBmQiIiIiIg8MyEREREREHhiQiYiIiIg8MCATEREREXlgQCYiIiIi8sCATERERETkgQGZiIiIiMgDAzIRERERkQcGZCIiIiIiDwzIREREREQeGJCJiIiIiDwwIBMREREReWBAJiIiIiLywIBMREREROSBAZmIiIiIyAMDMhERERGRBwZkIiIiIiIPDMhERERERB4YkImIiIiIPDAgExERERF5YEAmIiIiIvLAgExERERE5IEBmYiIiIjIAwMyEREREZEHBmQiIiIiIg8MyEREREREHhiQiYiIiMhnpJSBHkKjqQM9ACIiIiJqGaxWK7KzsxEaGorIyEjodDqo1c0vbja/ERMRERFR0HE6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g08//RSrVq3Cddddh61bt+L+++/HsmXL0KVLl0aNk4ioLgzILZiUkh0sTkPr16/H6tWrcfPNN+Pyyy8HAAwbNgypqanNbhZ5yZIlOHr0KGbNmtWoHrm333479Ho9XnnllWb1/H1NSok9e/bgmWeewdChQ/H4448jJycHt912GwBgypQpyMjIaNC+HQ4HVq5ciZ49e+Lss89u1DgnT56M888/H88++ywWLFiAXr164eOPP8b48eO52h0RNQkG5BbMbDYHegjUxA4cOIBnnnkG/fr1wz33/P9il2q1GrfeeisOHDiAn3/+OYAj9N7+/fuxYsUKjBgxotEnYUVHR+P222/H77//jl9++cVHI2w+ioqKsHLlSlx//fWYOHEiNmzYgIEDB+Ktt97C559/jrvuugtvvPEGpJSYMmUKjh49Wu9jfPfdd8jOzsYtt9zS6LIulUqFp556CkOGDMHTTz+NV199tdl3YSGi5qXeS00HGpea9l5BQQHKysoCPQxqIsqJSy6XCytXrkRsbGyl+x0OB6655hrExMRg+fLlQV2bbrfbccstt6C4uBirV69GZGSkT/Z53XXXQa1W47///W+Ln4l0OBz49ddfsXbtWmzevBlOpxM9evTAiBEjcPnll0Ov11d5zOHDh3HXXXdBrVbjrbfeQtu2bb06lpQSN910E2w2Gz7++ONm2y2FiAIn2Jaa5l+xIGK1WuF0On22P6PR6LN9UXBzOBx47LHHUFhYiPnz51cJx0DFLPKkSZOwb98+/Prrrz49/rZt2/DHH3/4bH/vvfceDh06hEcffdQn4RgANBoNpk2bhn///Rdr1qzxyT6D0YkTJ/Daa6+5ewPv2rULN954Iz7++GMsW7YMo0ePrjYcA0DHjh3xxhtvwG63Y8qUKcjMzPTqmL///jsOHjyIm2++meGYiFoE/iULInl5ecjPz/fJvux2O1wul0/2RcHvjTfewB9//IGHH34YXbt2rXG74cOHIykpyae1yP/88w/uu+8+3HPPPfjoo48avb/Dhw/j3XffxdChQ3HJJZf4YIT/b+DAgejduzfeeuutFtcf/MSJE3jhhRcwcuRIrFy5Et26dcOCBQuwceNG3HfffejQoYNX++nYsSMWL14Mq9WKyZMnexWSV6xYgVatWuGKK65o7NMgIgoKDMhBwmazwel0wmw2w2azNXp/nD0+fXz/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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplots(1, figsize=(10,10))\n",
    "plt.plot(train_sizes_gb, train_mean_gb, '--', color=\"#111111\",  label=\"Training score\")\n",
    "plt.plot(train_sizes_gb, test_mean_gb, color=\"#111111\", label=\"Cross-validation score\")\n",
    "\n",
    "plt.fill_between(train_sizes_gb, train_mean_gb - train_std_gb, train_mean_gb + train_std_gb, color=\"#DDDDDD\")\n",
    "plt.fill_between(train_sizes_gb, test_mean_gb - test_std_gb, test_mean_gb + test_std_gb, color=\"#DDDDDD\")\n",
    "\n",
    "plt.title(\"Learning Curve\")\n",
    "plt.xlabel(\"Training Set Size\"), plt.ylabel(\"Accuracy Score\"), plt.legend(loc=\"best\")\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "33361eca",
   "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.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
