{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.model_selection import train_test_split, cross_val_score\n", "from sklearn.preprocessing import LabelEncoder, StandardScaler\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.svm import SVC\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.tree import DecisionTreeClassifier\n", "from xgboost import XGBClassifier\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.ensemble import GradientBoostingClassifier" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "redwine_dir = r'./data/winequality-red.csv'\n", "whitewine_dir = r'./data/winequality-white.csv'\n", "df_redwine = pd.read_csv(redwine_dir, sep=';')\n", "df_whitewine= pd.read_csv(whitewine_dir, sep=';')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# O = redwine; 1= whitewine\n", "df_redwine['wine_type'] = 0\n", "df_whitewine['wine_type']= 1" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ True, True, True, True, True, True, True, True, True,\n", " True, True, True, True])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_whitewine.columns == df_redwine.columns" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "13" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(df_whitewine.columns == df_redwine.columns)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
fixed acidityvolatile aciditycitric acidresidual sugarchloridesfree sulfur dioxidetotal sulfur dioxidedensitypHsulphatesalcoholwine_type
07.40.700.001.90.07611.034.00.99783.510.569.40
17.80.880.002.60.09825.067.00.99683.200.689.80
27.80.760.042.30.09215.054.00.99703.260.659.80
311.20.280.561.90.07517.060.00.99803.160.589.80
47.40.700.001.90.07611.034.00.99783.510.569.40
\n", "
" ], "text/plain": [ " fixed acidity volatile acidity citric acid residual sugar chlorides \\\n", "0 7.4 0.70 0.00 1.9 0.076 \n", "1 7.8 0.88 0.00 2.6 0.098 \n", "2 7.8 0.76 0.04 2.3 0.092 \n", "3 11.2 0.28 0.56 1.9 0.075 \n", "4 7.4 0.70 0.00 1.9 0.076 \n", "\n", " free sulfur dioxide total sulfur dioxide density pH sulphates \\\n", "0 11.0 34.0 0.9978 3.51 0.56 \n", "1 25.0 67.0 0.9968 3.20 0.68 \n", "2 15.0 54.0 0.9970 3.26 0.65 \n", "3 17.0 60.0 0.9980 3.16 0.58 \n", "4 11.0 34.0 0.9978 3.51 0.56 \n", "\n", " alcohol wine_type \n", "0 9.4 0 \n", "1 9.8 0 \n", "2 9.8 0 \n", "3 9.8 0 \n", "4 9.4 0 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merge_df = pd.concat([df_redwine,\n", " df_whitewine],\n", " axis = 0)\n", "merge_df.drop('quality', axis = 1, inplace= True)\n", "merge_df.head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(6497, 12)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merge_df.shape" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "wine_type\n", "1 4898\n", "0 1599\n", "Name: count, dtype: int64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merge_df['wine_type'].value_counts()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABqwAAAJOCAYAAADClyY7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACTA0lEQVR4nOzdd3hUZd7/8c+Z9JBGIBB670hHiWIBKSrgKvg86lpAxVUX3RVd9aePa1tXdt1V18a6rqvYEMWuLCAioEgsgKH3IiWQhEAqSaac+/dHzEhMISHlJJP367pymZz7nDPfM4yBOZ/53rdljDECAAAAAAAAAAAAHOJyugAAAAAAAAAAAAA0bQRWAAAAAAAAAAAAcBSBFQAAAAAAAAAAABxFYAUAAAAAAAAAAABHEVgBAAAAAAAAAADAUQRWAAAAAAAAAAAAcBSBFQAAAAAAAAAAABxFYAUAAAAAAAAAAABHEVgBAAAAAAAAAADAUQRWAAAA9axXr17q1auXnn32WadLqRMHDhzwX+P777/vdDmnpCFdw/vvv++v5cCBA47WAgAAAABAXSGwAgAAqMQDDzzgDwuSk5OrdezKlSv9xz766KN1VGFgOjGkcTowCkSpqan697//reuuu06jR4/WoEGDNGDAAJ199tm64YYbNHv2bO3fv9/pMgEAAAAATQiBFQAAQCV+9atf+b//+OOPq3XsRx995P/+kksuqa2SgFNWVFSkxx57TOPHj9ff//53rVq1SgcPHlRBQYGKioqUnp6ulStX6umnn9bYsWN1++2369ChQ06XXae+/fZbfzj67bffOl0OAAAAADRZwU4XAAAA0JANHTpUHTt21L59+/TZZ5/pwQcfVHh4+EmPO378uD7//HNJUo8ePdS/f3//2LZt2+qsXqAiR48e1S233KKUlBRJUrNmzTRx4kSNGDFCiYmJCg4O1pEjR7R27VotWbJEe/fu1cKFCzVo0CBNmzbN0doBAAAAAIGPwAoAAOAkfvWrX+nZZ59VXl6eli5dqgkTJpz0mM8++0zHjx+XJF188cV1XSJQKdu2dfvtt/vDqlGjRunPf/6zWrRoUWbf0aNH64477tDHH3+sxx9/vJ4rBQAAAAA0VUwJCAAAcBK/+tWvZFmWpKpPC1iyn8vlKjWtIOCE1157zT/d3ciRI/Xcc8+VG1aVcLlcuuSSS/xriQEAAAAAUNfosAIAADiJDh06aMiQIVqzZo1WrlypzMzMSm/2p6WlKTk5WZI0YsQItW7dutR4SQBw66236rbbbitzfE5Ojt58800tX75cu3fv1vHjxxUdHa34+Hh16dJFZ511lsaNG6eWLVtW67wlrrnmGn333Xc6/fTT9frrr5cZT09P15IlS/Ttt99q69atSk9Pl9frVfPmzdW/f39NmjRJF1xwgVyuhvvZp+zsbH3++edKTk7W5s2bdejQIXk8HsXGxqp3794aN26cLr30UoWGhlb5nAsXLtTbb7+tbdu2KT8/X23bttXYsWN14403KiYm5qTHf/PNN/rggw+0evVqHTlyREFBQWrXrp1GjhypadOmlXmd1Ba3263//Oc/kqSwsDA99thjCg6u2tuAxMREJSYmVnje+fPna9GiRdqxY4fy8vIUGxurvn37auLEiZo0aVKFr5GTvQZLPPvss3ruuecklT+V5i9f8+vXr9ecOXO0evVqHT16VM2bN9eIESN08803q1u3bqWOPXDggM4///xS26699toyjzFr1ixNnjy5whoBAAAAALWDwAoAAKAKLrnkEq1Zs0Zer1cLFiwo98Z2iU8//VS2bUtStburdu3apWnTpik9Pb3U9mPHjunYsWPatWuXPv/8c9m2rauvvrr6F3ISPp9P5557rr/+E6Wnp+uLL77QF198oXfffVfPPvusmjVrVus11IZLL71UBw8eLLP9yJEjWrlypVauXKl58+bpxRdfVEJCwknPd9999+m9994rtW3Pnj168cUX9eGHH2rOnDllApESRUVFuvfee7VgwYIyY9u3b9f27ds1b948PfHEExo9enQVr7DqVq5c6X89XXDBBbUSjB04cEA33nijdu/eXWr7kSNH9OWXX+rLL7/U22+/rdmzZysuLq7Gj1cVb775ph577DF5vV7/tvT0dH388cdasmSJ/v3vf2v48OH1UgsAAAAAoPoIrAAAAKrgwgsv1KOPPqqioiJ99NFHlQZWH330kSQpMjJS48aNq9bj3HXXXUpPT1dISIj+53/+R+ecc45atmwpY4wOHz6slJQUff755zW6lsoYYyQVd4adc8456tmzp+Lj45Wfn6/9+/dr/vz5+uGHH/T111/rkUce0V//+tc6q6UmfD6fBg4cqPPOO099+/ZVixYt5PF4dODAAX388cf66quvtHnz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bdu2TVdeeaWuu+46derUSXl5eVqxYoXmzp2ryMhItWrVql6ma5NUbvhWntGjRysuLs6/xlh6erouv/xy3XjjjerZs6eKior0zTff6NVXX5Xb7Va/fv2qNC1g//79tWzZMl155ZWaNm2aOnXqpMzMTH344YdasGCBJCkxMVG//e1vyxx75ZVXatWqVVqyZIkWLVqkzZs36/LLL9eAAQMUHR2tvLw87d69W999952++OILhYaG6uqrr67eE1QFLpdL//jHP3TzzTdr3bp1WrZsmcaMGaNJkyZpxIgRSkxMVHBwsI4cOaKUlBR99tln2r17d7nnmjFjhpYsWaL9+/fr2Wef1fbt2zV58mQlJCTowIEDeuONN/Tdd99JkgYPHqzLL7+8zDnOPfdctWvXTgcPHtTTTz+tY8eOaezYsQoLC9POnTv1+uuva/PmzRo0aJBSUlJq/fk4Udu2bZWYmKjDhw/r5ZdfVmJiorp06eKf9rNFixaKioqq0xoAAAAAAARWAAAApyQ8PFzjx4/X+++/7992wQUXlOqwOVUbNmyodN2kwYMH689//nOZ7T169NBdd92lWbNmKTs7W7NmzSo1HhcXp+eff15PP/10hWHTzJkztXbtWm3ZskUbN27UnXfeWeYczz77rJ555pl6C6zeffddvfvuuyfd78MPP1RcXJyuvfZarVq1SitXrtTevXv1f//3f6X2Cw8P11//+letWLGiSoHVVVddpe+//17vv/++Zs6cWWY8ISFB//nPfxQdHV1mzLIsPfXUU/rzn/+sefPmad++ffrb3/5W4WPV5XSS8fHxev311/X3v/9db731lvLz8zVv3jzNmzev3P0ty9KkSZN04YUXltoeFRWlOXPm6MYbb9Tu3bu1ePFiLV68uMzxQ4YM0T//+U9/8HOi0NBQPf7447rxxht1/PhxzZkzR3PmzPGPBwUF6b777lN2dnadB1aSdNNNN+nhhx/WgQMHygSPs2bN0uTJk+u8BgAAAABo6gisAAAATtGll15aKrCqyXSAkjRx4kS1aNFCq1at0oYNG5SWlqbMzEx5vV61aNFCffv21UUXXaQJEybI5Sp/Zudp06apW7dumjNnjjZs2KCCggK1atVK5557rqZPn662bdtWWkN0dLTeeustvfLKK1q4cKF+/PFHBQUFqU2bNjr33HM1depU/7pMDVVISIj+9a9/6a233tKHH36oXbt2yRij1q1bKykpSddee626deumFStWVPmcs2bN0llnnaW3335b27dv1/Hjx9W2bVuNGTNGv/nNbxQbG1tpPQ899JCuvPJKzZ8/X99++60OHTqk48ePKzIyUu3bt1e/fv10zjnnaNSoUbXxFFQoLCxM//d//6frrrtOn376qZKTk7V3714dPXpUxhjFxsaqZ8+eGj58uCZNmlRm2skS7du310cffaT58+dr0aJF2r59u/Lz8xUbG6s+ffpo0qRJmjRpUoWvU0kaNmyY3nvvPb3wwgtKTk7WsWPHFBcXpyFDhmjatGkaMmSInn322bp6Kkr59a9/rZYtW+rtt9/Wli1blJ2d3aDXaQMAAACAQGQZY4zTRQAAAAAAAAAAAKDpqvgjjwAAAAAAAAAAAEA9ILACAAAAAAAAAACAowisAAAAAAAAAAAA4CgCKwAAAAAAAAAAADiKwAoAAAAAAAAAAACOIrACAAAAAAAAAACAowisAAAAAAAAAAAA4CgCKwAAAAAAAAAAADiKwAoAAAAAAAAAAACOIrACAAAAAAAAAACAowisAAAAAAAAAAAA4CgCKwAAAAAAAAAAADiKwAoAAAAAAAAAAACOIrACAAAAAAAAAACAowisAAAAAAAAAAAA4CgCKwAAAAAAAAAAADiKwAoAAAAAAAAAAACOIrACAAAAAAAAAACAowisAAAAAAAAAAAA4CgCKwAAAAAAAAAAADiKwAoAAAAAAAAAAACOIrACAAAAAAAAAACAowisAAAAAAAAAAAA4CgCKwAAAAAAAAAAADiKwAoAAAAAAAAAAACOIrACAAAAAAAAAACAowisAAAAAAAAAAAA4CgCKwAAAAAAAAAAADiKwAoAAAAAAAAAAACOIrBCtXXu3FmWZZX6CgsLU8eOHXX55Zfrq6++crpE1KNp06bJsixNmzatTh/nvPPOk2VZWr58eZ0+TomS1/nevXvr5fEAAAAAoDJLlizRddddp549eyomJkZhYWFq06aNxo4dq6eeekoZGRlOl+gI3pMCABA4CKxwys466yxNnTpVU6dO1YUXXijbtvXOO+/o3HPP1ZNPPul0eQ0C/8AEAAAAANTEkSNHNHbsWI0bN05z5syRx+PRqFGjNGXKFPXp00erVq3SHXfcoa5du+rbb791utxqe+ihh2RZlh566CGnSwEAAA4LdroANF7Tp08v9QmmwsJC3XTTTXrttdd09913a+LEierZs6dzBQIAAAAA0IhlZ2dr5MiR2rZtm3r37q0XX3xRZ599dql9ioqK9Oqrr+rBBx/UoUOHHKoUAACg5uiwQq0JDw/X888/r2bNmsnn8+n99993uiQAAAAAABqt2267Tdu2bVPnzp319ddflwmrJCksLEy/+c1vlJKSoj59+jhQJQAAQO0gsEKtioqKUq9evSSpzDR427dv10033aRu3bopPDxcsbGxOuecc/TGG2+Ue64T54f+6quvNGnSJCUkJMjlcmnOnDn+/Y4fP65//OMfGjlypJo3b66wsDB16tRJkyZN0ty5c8s997vvvqsLLrhACQkJCg0NVbt27XT11Vdr8+bNZfbdu3evLMtS586dZYzRiy++qKFDh6pZs2aKjY3VuHHjlJycXOqYOXPmyLIs/fjjj5KkLl26lFrz68Q5r99//31Nnz5d/fv3V/PmzRUeHq4uXbro+uuv17Zt2yp8rvPz8/XHP/5RPXr0UFhYmNq2bavrr79eBw8ePOmUCmvWrNFVV12ljh07KiwsTPHx8Ro/frz++9//Vvh4tcXj8eiNN97QVVddpd69eysmJkYRERHq1auXfve73yk1NfWk51ixYoXGjRun+Ph4RUZG6vTTT9frr79e6TFLly7V5MmT1aZNG4WGhqpVq1a69NJLy/zZAQAAAEBDsHv3bv972ieffFLx8fGV7t+6dWv/+/ETzZs3T+eff77i4+P975evv/56bd++vdzzlLxvrUhFazmduD0lJUWTJ09Wy5YtFRYWpr59++qJJ56QMabMYz388MOSpIcffrjU++a6WpOK96QAADRcBFaodTk5OZKKP+VVYv78+Ro4cKBefPFFhYaG6qKLLtKwYcO0du1aXXPNNbr++usrPN/8+fN13nnnaffu3RozZozGjh3rP/f+/fs1fPhwzZw5Uz/88IOGDx+uyZMnq1OnTvrqq6903333lTqX1+vV5Zdfrv/5n//R8uXL1bNnT11yySVKSEjQm2++qWHDhmnRokUV1nLdddfp1ltvVVxcnCZOnKjExEQtWbJEo0aNKjVXePfu3TV16lQ1a9ZMkjRlyhT/el9Tp05VYmKif9///d//1VtvvaWIiAiNHj1a48ePl8vl0iuvvKKhQ4dq1apVZerIz8/XqFGj9Oijj+rw4cMaN26cRo4cqUWLFmnIkCH+oKw8Tz/9tE4//XTNnTtXLVq00MUXX6x+/fpp+fLlmjBhgh555JEKj60NaWlpuuaaa7RgwQI1b95cF1xwgUaPHq28vDw9++yzGjRokHbu3Fnh8R988IFGjx6tgwcPavz48Ro+fLjWrFmja6+9VnfeeWe5x/zhD3/QmDFj9NFHH6ljx4665JJL1LVrV3300Uc6++yz9corr9TV5QIAAADAKfn000/l8/kUFxeniy++uNrHG2M0depUXXnllfryyy81ePBgTZ48WeHh4XrllVc0ePDgSt//nqrFixfrjDPO0NatWzV27FglJSVp+/bt+sMf/qCZM2eW2nfq1KkaOHCgJGngwIGl3jePHDmy1muTeE8KAECDZoBq6tSpk5FkXnnllTJj69atMy6Xy0gyL7/8sjHGmPXr15uwsDATHh5u3nvvvVL7792715x22mlGknn11VdLjZ177rlGkpFknn/++TKP5fP5zLBhw4wkM27cOJOenl5qvKCgwCxYsKDUtvvuu89IMmeccYbZvXt3qbH58+eboKAg07x5c3Ps2DH/9j179vjr6NSpk9m2bZt/zOv1muuvv95fQ0XP1Z49e8qMlZg3b57Jy8srtc22bfP8888bSaZfv37Gtu1S4zNnzjSSTN++fU1qamqpa77sssv89T744IOljlu0aJGxLMu0bNnSrFixotTY+vXrTfv27Y0ks3z58grr/aWpU6caSWbq1KlV2j8nJ8d89NFHpqioqNR2t9tt7r33XiPJXHTRRWWOO/H18Nhjj5UaW758uYmIiDCSzKJFi0qNvfjii0aS6d69u1m3bl2psRUrVpjo6GgTGhpqtm/fXmqsKn92AAAAAFBXrrnmGiPJjB49+pSO/+c//2kkmZYtW5offvjBv922bfPggw8aSSYuLq7Me+mS910VKXlvtmzZsnK3SzIvvPBCqbGlS5cay7JMUFCQ2b9/f6mxklp++f61qnhPCgBA4CCwQrWVF1hlZWWZBQsWmG7duhlJpm3btv4Q5vLLLzeSzN///vdyz/fdd98ZSWbo0KGltpf8Y7Cif5x/+OGHRpJp06aNyc3NPWndmZmZJiIiwoSHh5sDBw6Uu89vf/tbI8k8++yz/m0nBlYff/xxmWMOHTpkJJmwsDDjdrtLjdX0H5hJSUlGktm0aZN/2/Hjx01UVJSRZBYvXlzmmPT0dBMZGVnuP/jPOOMMI8m8++675T7eO++8YySZKVOmVLnG6r45OJm2bdsal8tlcnJySm0veT0MHjy43OPuvPNOI8mMHTvWv83n85m2bdsaSWb16tXlHvf4448bSebOO+8stZ03BwAAAACcdMEFFxhJ5oorrjil40venz/zzDNlxmzbNgMGDDCSzJ///OdSYzUNrCZPnlzucSXX89prr5XaXt+B1cnwnhQAAOcEn1pfFlA8Pd51111XZnu3bt303nvvqVmzZrJtWwsXLpQkXX755eWeZ9iwYYqKitIPP/ygwsJChYeHlxq/7LLLyj2uZOqCX//614qKijppvcuWLVNBQYHOP/98tWvXrtx9zjvvPM2ePVurVq3SrbfeWmosODhYF1xwQZljEhMT1bx5cx07dkyZmZmlpvurqp07d2rRokXauXOncnNz5fP5JBVPVSBJ27ZtU9++fSUVrz+Vl5enli1baty4cWXOlZCQoLFjx+qjjz4qtf3IkSP67rvvFBERoUmTJlV4/ZLKnYawtq1bt05Lly7Vnj17lJ+fL9u2JRVP22jbtnbu3KnBgweXOe7aa68t93xTp07VE088oZUrV8rn8ykoKEg//PCDUlNT1a1bNw0dOrTc4+rzmgEAAACgPhw4cEC7du2SVPxe6Zcsy9J1112nmTNnatmyZWWm06+Jit5v9unTR4sWLdLBgwdr7bFqgvekAAA0PARWOGVnnXWWunfvLkn+BUNHjBihCy64QMHBxS+tzMxM/5pWHTp0OOk5MzMzy4RJnTt3LnffknWaevfuXaV6d+/eLal4odPKFpCVpIyMjDLb2rRpo5CQkHL3j4mJ0bFjx1RYWFilWkr4fD7deuut+te//lVm8dkTlTyHUvEbD6ni56WisT179sgYo4KCglLri5WnvOuvLfn5+brmmmv0wQcfVLrfidd8oi5dulS6vaCgQJmZmWrVqpX/z3zXrl2n9GcOAAAAAE5JSEiQJKWnp1f72JJQqEWLFoqJiSl3n27dupXat7Z07Nix3O0ldVT3fXNt4z0pAAANF4EVTtn06dM1bdq0Svcp+YSSVP6nun6pvCAlIiKi2rVVVkv37t111llnVbpveSGYy+WqlTpO9PTTT+uFF15QYmKinnzySZ155plq3bq1v8vs17/+td56661yw6zK/rFb3ljJ9UdFRWnKlCm1dAXVd++99+qDDz5Q79699Ze//EXDhw9Xy5YtFRoaKkk688wzlZycXGmAdzIlx5Zcc2JiosaPH1/pMS1btjzlxwMAAACA2jZ06FC9/vrrWrt2rb9jpyE48X1+eerivXNt4j0pAAANF4EV6lTLli0VERGhgoIC/f3vf6/Vf4CVfGpr69atVdq/pMOrV69emjNnTq3VURPvvPOOJOlf//qXLr744jLjO3bsKLOtpANt7969FZ63vLGS67csSy+//LJjbyJKrvntt9/WgAEDyoyXd80n2rNnT7nbS645PDxcLVq0kPTzNbdo0aLB/JkDAAAAQFVMnDhRd9xxh7KysvTxxx/r0ksvrfKxJe8bS2Y9Ka/LqqT755eznISEhMjj8Sg3N1fR0dFljiuZ7aSx4j0pAAANV8P+2AsavaCgII0dO1bSz/8orC0l60m99dZbys/PP+n+559/vkJDQ7V8+fJTmlLhVJR8Qsvr9ZY7fvToUUlSp06dyoxt2rRJKSkpZbYPHTpUkZGRysjI0Oeff15m/MiRI1qyZEmZ7W3bttWAAQOUm5vrX//LCZVd8+LFi3XkyJFKj3/jjTfK3f7aa69JkkaOHOmfkrLkk3KbN2/Wpk2balI2AAAAANSrbt266corr5Qk3Xnnnf73UhVJT0/Xtm3bJEnt27f3T/lXXlBijPFvHzVqVKmxkgBry5YtZY5bv3699u/fX63rOJmTvW+ubbwnBQCg4SKwQp178MEHFRoaqrvuukuvvvpqudMHbNy4Ue+//361znvxxRdr8ODBSk1N1f/8z/8oMzOz1HhhYaEWLlzo/7l169a67bbblJ+fr0mTJmnDhg1lzllUVKSPP/64yl1bJ9O+fXtJqvAfpn369JEkPf/886Wel0OHDunaa68t9x/skZGRmj59uiRp5syZSktLK1X/rbfeWmGA9+ijj0qSrrvuOn3yySdlxo0x+vbbb/XZZ59V5fJOSck1P/vss6W2b9u2TTfffPNJj1+zZo0ef/zxUttWrlyp559/XlLxc1IiJCREDz74oIwxuvTSS7Vy5coy5/P5fPriiy/0zTffVPtaAAAAAKAuPfvss+revbv27NmjkSNHlvuexu126+WXX9bgwYNLhUx/+MMfJEl/+tOftG7dOv92Y4weffRRpaSkKC4uTjfeeGOp840ZM0aS9PDDD6uoqMi/fe/evZo6dWqNpsorz8neN9c23pMCANBwMSUg6tyQIUP0xhtvaNq0aZo2bZruv/9+9e3bVwkJCTp69Kg2bNigAwcO6PLLL9fkyZOrfF6Xy6UPPvhA48eP18KFC9WxY0eNHDlSLVq00MGDB7Vu3TrFxcWVmh7vL3/5iw4dOqS5c+dq0KBBGjhwoLp27arg4GAdOHBAKSkpys/P18KFC8tdx6q6pkyZomXLlunqq6/WuHHj1Lx5c0nSXXfdpV69eum+++7TokWL9O9//1vLli3TkCFDlJOToxUrVqhr16669NJLy10I9s9//rO+/vprrVmzRt27d9fo0aMVHh6ulStXyu12a+rUqXr11Vf9n1QrMWnSJD399NO68847dfHFF6t79+7q1auXYmNjlZGRoXXr1ik9PV333HOPxo0bV61rXbBggUaMGFHh+PTp0zV9+nQ9+OCDuuyyy/THP/5R77zzjvr166f09HR99dVXOvvss9W2bVutWrWqwvP87ne/07333qvXXntNAwYMUGpqqr766ivZtq3f//73uuiii0rtf+utt2rfvn3629/+prPPPlv9+vVT9+7dFRERocOHDyslJUVZWVn65z//WWn9AAAAAFDfmjdvrq+//lqXX365li9frrPPPltdunTRgAEDFBkZqbS0NH333XfKy8tTTEyM2rZt6z/2pptu0qpVq/T6669r2LBhOvfcc9WqVSutXbtW27ZtU0REhObOnauEhIRSj3nffffp3Xff1X//+1/17NlTw4cPV0ZGhr7//nudddZZOvPMMyt9z1Zd48ePV7NmzfThhx9q5MiR6tGjh4KCgnTWWWfpuuuuq/J5eE8KAEAAMEA1derUyUgyr7zySrWO27Nnj5k5c6bp37+/adasmQkPDzedOnUy5513nvnLX/5idu7cWWr/c88910gyy5Ytq/S8ubm55q9//asZPny4iY6ONmFhYaZTp07m4osvNvPmzSv3mP/+979m8uTJpl27diYkJMTExcWZPn36mCuuuMLMnTvX5Ofnl6pbkunUqVOFNZQ8J3v27Cm13efzmVmzZpl+/fqZ8PBwI6nMNa1fv95cfPHFpk2bNiY8PNz06NHD3H333SYnJ8dMnTq1wuc6NzfX3HfffaZr164mNDTUJCYmmmuuucb8+OOP5vrrrzeSzL/+9a9y692wYYP5zW9+Y3r0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nDkzRVGM6niBcuzevTv9/f158cUX09nZWfZwAIB3yN/pMPHVarXs2bMnfX19b3mtYAUAQMNobW3NsmXL8uijj+baa69NUg9Qjz76aDZs2DDix7S1taWtre2IY93d3aM8UqARdHZ2urkFABOAv9NhYnurmVWHCVYAADSUjRs3Zt26dVm+fHlWrlyZe++9N/v27cv69evLHhoAAAAwSgQrAAAaykc+8pG8/PLLue2227Jt27ZceOGFeeSRR9LT01P20AAAAIBRIlgBANBwNmzYcMwlAAHa2tpy++23H7UcKAAwvvg7HXijolar1coeBAAAAAAAAJNXpewBAAAAAAAAMLkJVgAAAAAAAJRKsAIAAAAAAKBUghUAAADjygMPPJAFCxakvb09q1atylNPPVX2kACAt+Gxxx7LNddck76+vhRFkS1btpQ9JKABCFYAAACMGw8//HA2btyY22+/Pd/73veydOnSrF27Ni+99FLZQwMATtC+ffuydOnSPPDAA2UPBWggRa1Wq5U9CAAAADgRq1atyooVK3L//fcnSarVavr7+/PpT386n/nMZ0oeHQDwdhVFka997Wu59tpryx4KUDIzrAAAABgXDh48mKeffjpr1qwZPlapVLJmzZo88cQTJY4MAAA4WYIVAAAA48KOHTsyNDSUnp6eI4739PRk27ZtJY0KAAA4FQQrAAAAAAAASiVYAQAAMC7MmjUrTU1N2b59+xHHt2/fnt7e3pJGBQAAnAqCFQAAAONCa2trli1blkcffXT4WLVazaOPPprVq1eXODIAAOBkNZc9AAAAADhRGzduzLp167J8+fKsXLky9957b/bt25f169eXPTQA4ATt3bs3P/3pT4fff+GFF7J169bMmDEj8+bNK3FkQJmKWq1WK3sQAAAAcKLuv//+fP7zn8+2bdty4YUXZtOmTVm1alXZwwIATtB3vvOdvPe97z3q+Lp167J58+axHxDQEAQrAAAAAAAASmUPKwAAAAAAAEolWAEAAAAAAFAqwQoAAAAAAIBSCVYAAAAAAACUSrACAAAAAACgVIIVAAAAAAAApRKsAAAAAAAAKJVgBQAAAAAAQKkEKwAAAAAaxubNm9Pd3X3Sn6coimzZsuWkPw8AMDYEKwAAAABOqY9//OO59tpryx4GADCOCFYAAAAAAACUSrACAAAAYMzcc889ede73pWpU6emv78/f/iHf5i9e/cedd2WLVty9tlnp729PWvXrs2LL754xPl//Md/zMUXX5z29vYsWrQod9xxRwYHB8fqZQAAp5hgBQAAAMCYqVQq2bRpU5555pl86Utfyre//e3ccsstR1zz2muv5c4778yXv/zlPP7449m5c2duuOGG4fP//M//nBtvvDF/9Ed/lB/96Ef5m7/5m2zevDl33nnnWL8cAOAUKWq1Wq3sQQAAAAAwcXz84x/Pzp07s2XLlre89h/+4R/y+7//+9mxY0eSZPPmzVm/fn3+7d/+LatWrUqSPPvss1m8eHGefPLJrFy5MmvWrMmVV16ZW2+9dfjz/P3f/31uueWW/PrXv06SFEWRr33ta/bSAoBxornsAQAAAAAweXzrW9/KXXfdlWeffTa7d+/O4OBg9u/fn9deey1TpkxJkjQ3N2fFihXDH3Peeeelu7s7P/7xj7Ny5cp8//vfz+OPP37EjKqhoaGjPg8AMH4IVgAAAACMiZ///Oe5+uqr8wd/8Ae58847M2PGjPzLv/xLbrrpphw8ePCEQ9PevXtzxx135LrrrjvqXHt7+6keNgAwBgQrAAAAAMbE008/nWq1mi984QupVOpbq3/1q1896rrBwcF897vfzcqVK5Mkzz33XHbu3JnFixcnSS6++OI899xzOeuss8Zu8ADAqBKsAAAAADjldu3ala1btx5xbNasWRkYGMh9992Xa665Jo8//ngefPDBoz62paUln/70p7Np06Y0Nzdnw4YNueSSS4YD1m233Zarr7468+bNy/XXX59KpZLvf//7+eEPf5jPfvazY/HyAIBTrFL2AAAAAACYeL7zne/koosuOuLxd3/3d7nnnnvyF3/xF7ngggvy0EMP5a677jrqY6dMmZI//dM/zUc/+tFceumlmTZtWh5++OHh82vXrs3Xv/71fOMb38iKFStyySWX5K/+6q8yf/78sXyJAMApVNRqtVrZgwAAAAAAAGDyMsMKAAAAAACAUglWAAAAAAAAlEqwAgAAAAAAoFSCFQAAAAAAAKUSrAAAAAAAACiVYAUAAAAAAECpBCsAAAAAAABKJVgBAAAAAABQKsEKAAAAAACAUglWAAAAAAAAlEqwAgAAAAAAoFSCFQAAAAAAAKX6//QLwgVMOKOrAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "label_count = merge_df['wine_type'].value_counts()\n", "fig,axes = plt.subplots(nrows=1, ncols=2, figsize=(20,6))\n", "\n", "sns.set_theme(style='darkgrid', palette='pastel')\n", "color = sns.color_palette(palette='pastel')\n", "explode = [0.02]*len(label_count)\n", "\n", "axes[0].pie(label_count.values, labels=label_count.index, autopct='%1.1f%%', colors=color, explode=explode)\n", "axes[0].set_title('Percentage Label',fontsize=16)\n", "\n", "sns.barplot(x=label_count.index, y=label_count.values, ax=axes[1])\n", "axes[1].set_title('Count Label',fontsize=16)\n", "axes[1].set_xlabel('Label')\n", "axes[1].set_ylabel('Count')\n", "\n", "fig.suptitle('Visual Label Count',fontsize=20)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
fixed acidityvolatile aciditycitric acidresidual sugarchloridesfree sulfur dioxidetotal sulfur dioxidedensitypHsulphatesalcoholwine_type
07.40.700.001.90.07611.034.00.997803.510.569.40
17.80.880.002.60.09825.067.00.996803.200.689.80
27.80.760.042.30.09215.054.00.997003.260.659.80
311.20.280.561.90.07517.060.00.998003.160.589.80
47.40.700.001.90.07611.034.00.997803.510.569.40
.......................................
48936.20.210.291.60.03924.092.00.991143.270.5011.21
48946.60.320.368.00.04757.0168.00.994903.150.469.61
48956.50.240.191.20.04130.0111.00.992542.990.469.41
48965.50.290.301.10.02220.0110.00.988693.340.3812.81
48976.00.210.380.80.02022.098.00.989413.260.3211.81
\n", "

6497 rows × 12 columns

\n", "
" ], "text/plain": [ " fixed acidity volatile acidity citric acid residual sugar chlorides \\\n", "0 7.4 0.70 0.00 1.9 0.076 \n", "1 7.8 0.88 0.00 2.6 0.098 \n", "2 7.8 0.76 0.04 2.3 0.092 \n", "3 11.2 0.28 0.56 1.9 0.075 \n", "4 7.4 0.70 0.00 1.9 0.076 \n", "... ... ... ... ... ... \n", "4893 6.2 0.21 0.29 1.6 0.039 \n", "4894 6.6 0.32 0.36 8.0 0.047 \n", "4895 6.5 0.24 0.19 1.2 0.041 \n", "4896 5.5 0.29 0.30 1.1 0.022 \n", "4897 6.0 0.21 0.38 0.8 0.020 \n", "\n", " free sulfur dioxide total sulfur dioxide density pH sulphates \\\n", "0 11.0 34.0 0.99780 3.51 0.56 \n", "1 25.0 67.0 0.99680 3.20 0.68 \n", "2 15.0 54.0 0.99700 3.26 0.65 \n", "3 17.0 60.0 0.99800 3.16 0.58 \n", "4 11.0 34.0 0.99780 3.51 0.56 \n", "... ... ... ... ... ... \n", "4893 24.0 92.0 0.99114 3.27 0.50 \n", "4894 57.0 168.0 0.99490 3.15 0.46 \n", "4895 30.0 111.0 0.99254 2.99 0.46 \n", "4896 20.0 110.0 0.98869 3.34 0.38 \n", "4897 22.0 98.0 0.98941 3.26 0.32 \n", "\n", " alcohol wine_type \n", "0 9.4 0 \n", "1 9.8 0 \n", "2 9.8 0 \n", "3 9.8 0 \n", "4 9.4 0 \n", "... ... ... \n", "4893 11.2 1 \n", "4894 9.6 1 \n", "4895 9.4 1 \n", "4896 12.8 1 \n", "4897 11.8 1 \n", "\n", "[6497 rows x 12 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merge_df" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Split x and y\n", "x = merge_df.drop('wine_type', axis = 1)\n", "y = merge_df['wine_type']" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state=20)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "KNN 0.994 0.002\n", "LR 0.994 0.002\n", "NB 0.976 0.007\n", "GBC 0.994 0.002\n", "SVC 0.996 0.002\n", "RFC 0.996 0.002\n", "DT 0.987 0.003\n", "XGB 0.995 0.003\n" ] } ], "source": [ "encoded = LabelEncoder()\n", "sc = StandardScaler()\n", "\n", "x_sc = sc.fit_transform(x_train)\n", "\n", "df_sc = pd.DataFrame(x_sc, columns=x.columns)\n", "\n", "models = []\n", "models.append(('KNN', KNeighborsClassifier()))\n", "models.append(('LR', LogisticRegression()))\n", "models.append(('NB', GaussianNB()))\n", "models.append(('GBC', GradientBoostingClassifier()))\n", "models.append(('SVC', SVC()))\n", "models.append(('RFC', RandomForestClassifier()))\n", "models.append(('DT', DecisionTreeClassifier()))\n", "models.append(('XGB', XGBClassifier()))\n", "\n", "result = []\n", "names = []\n", "\n", "for name, model in models:\n", " cvs = cross_val_score(model, x_sc, y_train, cv=10)\n", " result.append(cvs)\n", " names.append(name)\n", " print('{:4} {:.3f} {:.3f}'.format(name, cvs.mean(), cvs.std()))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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nDp1Cl988QV+++03BAYGivfhKSwsRGRkpN79ZuqKv78/RowYoXcfngsXLsDHxweTJk0S2/Xt2xfu7u747LPPcOnSJXTo0AG3bt1CSkoKnnvuOWRlZdXKeI4cOYIPPvgAXbp0gYeHB1xcXPDnn3/iwIEDkMvlejdvrK/jk6iuMPAQ4f/O7owZM6bKdk8//TSeeeYZHDlyBCkpKRVecigXEREBV1dXxMfHY/fu3bC3t0evXr0wZ84chIeHVzjfYe3atQgICMCuXbvECdReXl54/fXX8eqrr9agQn2rV6/G+++/j8OHD+P777+HIAh44oknGnzgAR5OMt66dSv27duH77//HmfPnkVKSgrkcjlatWqFF198EaNGjYK/v7/Yx9HREV999RViY2Oxf/9+fPbZZ7C1tYWfnx/Cw8OrPR+opubNm4f9+/dj+/btuHnzJhwdHTF+/Hi8/fbbepOwmzZtioSEBKxZswa//PILTp06hdatW2Pq1KmYOHEikpKSamU8vXv3xq1bt3Dy5EkcOHAABQUFaNmyJYKDgzFhwgS95xCov+OTqC7IBEEQzD0IIktSUFCAZ555Bh06dBB/aZC0vfvuu/j6669x4MABPP300+YeDpFF4hweojpy9+5dg3v2lJWVYeXKlSguLtb7WAciIqpbvKRFVEf27duH9evX45lnnsETTzyBvLw8nDx5EteuXUOHDh0QGhpq7iESEVkMBh6iOtK5c2d069YNJ0+exL179wA8nAP05ptvYtKkSRXezp+IiOoG5/AQERGR5HEODxEREUkeAw8RERFJHgMPERERSR4DDxEREUkeAw8RERFJHgMPERERSR4DDxEREUkeAw8RERFJHgMPERERSR4DDxEREUkeAw8RERFJHgMPERERSR4DDxEREUkeAw8RERFJHgMPERERSR4DDxEREUkeAw8RERFJHgMPERERSR4DDxEREUkeAw8RERFJHgMPERERSR4DDxEREUkeAw8RERFJHgMPERERSR4DDxEREUkeAw8RERFJHgMPERERSZ6VuQfQkAiCAJ1OMMu25XKZ2bZtTqzbsrBuy8K6LYu56pbLZZDJZI9tx8DzCJ1OwN27hfW+XSsrOZyc7KHR3EdZma7et28urJt1WwLWzbotgTnrdna2h0Lx+MDDS1pEREQkeQw8REREJHkMPERERCR5DDxEREQkeQw8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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure()\n", "fig.suptitle('Algorithm Comparison')\n", "ax = fig.add_subplot(111)\n", "plt.boxplot(result)\n", "ax.set_xticklabels(names)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# GridSearchCV" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best Hyperparameters: {'learning_rate': 0.2, 'max_depth': 3, 'n_estimators': 300}\n", "Best Score: 0.9969212260309469\n" ] } ], "source": [ "from sklearn.model_selection import GridSearchCV\n", "from xgboost import XGBClassifier\n", "\n", "param_grid = {\n", " 'n_estimators': [100, 200, 300], \n", " 'learning_rate': [0.01, 0.1, 0.2], \n", " 'max_depth': [3, 5, 7], }\n", "\n", "xgb = XGBClassifier()\n", "\n", "grid_search = GridSearchCV(estimator=xgb, param_grid=param_grid, cv=5, n_jobs=-1)\n", "grid_search.fit(x_sc, y_train)\n", "\n", "print(\"Best Hyperparameters:\", grid_search.best_params_)\n", "print(\"Best Score:\", grid_search.best_score_)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cross val score:[1. 1. 1. 1. 0.99 1. 1. 1. 1. 0.99]\n", "Average 99.67 %\n" ] } ], "source": [ "model = grid_search.best_estimator_\n", "cvs = cross_val_score(model,x_sc,y_train,cv=10)\n", "print('Cross val score:{}'.format(cvs.round(2)))\n", "print('Average {:.2f} %'.format(cvs.mean()*100))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# RandomizedSearchCV" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best Hyperparameters: {'n_estimators': 300, 'max_depth': 3, 'learning_rate': 0.16}\n", "Best Score: 0.9965364255571185\n" ] } ], "source": [ "from sklearn.model_selection import RandomizedSearchCV\n", "from xgboost import XGBClassifier\n", "import numpy as np\n", "\n", "param_dist = {\n", " 'n_estimators': np.arange(100, 1001, 100), \n", " 'learning_rate': np.linspace(0.01, 0.2, 20), \n", " 'max_depth': [3, 5, 7, 9], }\n", "\n", "xgb = XGBClassifier()\n", "\n", "random_search = RandomizedSearchCV(estimator=xgb, param_distributions=param_dist, n_iter=10, cv=5, n_jobs=-1)\n", "random_search.fit(x_sc, y_train)\n", "\n", "print(\"Best Hyperparameters:\", random_search.best_params_)\n", "print(\"Best Score:\", random_search.best_score_)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cross val score:[1. 1. 1. 1. 0.99 1. 1. 1. 1. 0.99]\n", "Average 99.71 %\n" ] } ], "source": [ "model_rs = random_search.best_estimator_\n", "cvs = cross_val_score(model_rs,x_sc,y_train,cv=10)\n", "print('Cross val score:{}'.format(cvs.round(2)))\n", "print('Average {:.2f} %'.format(cvs.mean()*100))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
XGBClassifier(base_score=None, booster=None, callbacks=None,\n",
       "              colsample_bylevel=None, colsample_bynode=None,\n",
       "              colsample_bytree=None, early_stopping_rounds=None,\n",
       "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
       "              gamma=None, gpu_id=None, grow_policy=None, importance_type=None,\n",
       "              interaction_constraints=None, learning_rate=0.16, max_bin=None,\n",
       "              max_cat_threshold=None, max_cat_to_onehot=None,\n",
       "              max_delta_step=None, max_depth=3, max_leaves=None,\n",
       "              min_child_weight=None, missing=nan, monotone_constraints=None,\n",
       "              n_estimators=300, n_jobs=None, num_parallel_tree=None,\n",
       "              predictor=None, random_state=None, ...)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "XGBClassifier(base_score=None, booster=None, callbacks=None,\n", " colsample_bylevel=None, colsample_bynode=None,\n", " colsample_bytree=None, early_stopping_rounds=None,\n", " enable_categorical=False, eval_metric=None, feature_types=None,\n", " gamma=None, gpu_id=None, grow_policy=None, importance_type=None,\n", " interaction_constraints=None, learning_rate=0.16, max_bin=None,\n", " max_cat_threshold=None, max_cat_to_onehot=None,\n", " max_delta_step=None, max_depth=3, max_leaves=None,\n", " min_child_weight=None, missing=nan, monotone_constraints=None,\n", " n_estimators=300, n_jobs=None, num_parallel_tree=None,\n", " predictor=None, random_state=None, ...)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random_search.best_estimator_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Classification" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy Train: 0.99\n", " precision recall f1-score support\n", "\n", " 0 1.00 0.97 0.98 321\n", " 1 0.99 1.00 0.99 979\n", "\n", " accuracy 0.99 1300\n", " macro avg 0.99 0.99 0.99 1300\n", "weighted avg 0.99 0.99 0.99 1300\n", "\n" ] } ], "source": [ "from sklearn.pipeline import Pipeline\n", "from sklearn.metrics import accuracy_score,classification_report\n", "\n", "pipe1 = Pipeline([\n", " ('scaler',StandardScaler()),\n", " ('xgb',XGBClassifier(n_estimators= 500, max_depth=5, learning_rate=0.13))\n", "])\n", "\n", "pipe1.fit(x_train,y_train)\n", "y_pred = pipe1.predict(x_test)\n", "\n", "print('Accuracy Train: {:.2f}'.format(accuracy_score(y_test,y_pred)))\n", "print(classification_report(y_test,y_pred))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['model_wine_binary.pkl']" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import joblib\n", "joblib.dump(model, 'model_wine_binary.pkl')" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.10.12" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }