Files
cas-pml/ML/aufgaben/a1/decisiontree_iris.ipynb
T

1293 lines
118 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# data prep"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from sklearn import datasets\n",
"iris = datasets.load_iris()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# data understanding"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"600\n",
"150\n"
]
}
],
"source": [
"print(iris.data.size)\n",
"print(iris.target.size)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[5.1 3.5 1.4 0.2]\n",
" [4.9 3. 1.4 0.2]\n",
" [4.7 3.2 1.3 0.2]\n",
" [4.6 3.1 1.5 0.2]\n",
" [5. 3.6 1.4 0.2]\n",
" [5.4 3.9 1.7 0.4]\n",
" [4.6 3.4 1.4 0.3]\n",
" [5. 3.4 1.5 0.2]\n",
" [4.4 2.9 1.4 0.2]\n",
" [4.9 3.1 1.5 0.1]\n",
" [5.4 3.7 1.5 0.2]\n",
" [4.8 3.4 1.6 0.2]\n",
" [4.8 3. 1.4 0.1]\n",
" [4.3 3. 1.1 0.1]\n",
" [5.8 4. 1.2 0.2]\n",
" [5.7 4.4 1.5 0.4]\n",
" [5.4 3.9 1.3 0.4]\n",
" [5.1 3.5 1.4 0.3]\n",
" [5.7 3.8 1.7 0.3]\n",
" [5.1 3.8 1.5 0.3]\n",
" [5.4 3.4 1.7 0.2]\n",
" [5.1 3.7 1.5 0.4]\n",
" [4.6 3.6 1. 0.2]\n",
" [5.1 3.3 1.7 0.5]\n",
" [4.8 3.4 1.9 0.2]\n",
" [5. 3. 1.6 0.2]\n",
" [5. 3.4 1.6 0.4]\n",
" [5.2 3.5 1.5 0.2]\n",
" [5.2 3.4 1.4 0.2]\n",
" [4.7 3.2 1.6 0.2]\n",
" [4.8 3.1 1.6 0.2]\n",
" [5.4 3.4 1.5 0.4]\n",
" [5.2 4.1 1.5 0.1]\n",
" [5.5 4.2 1.4 0.2]\n",
" [4.9 3.1 1.5 0.2]\n",
" [5. 3.2 1.2 0.2]\n",
" [5.5 3.5 1.3 0.2]\n",
" [4.9 3.6 1.4 0.1]\n",
" [4.4 3. 1.3 0.2]\n",
" [5.1 3.4 1.5 0.2]\n",
" [5. 3.5 1.3 0.3]\n",
" [4.5 2.3 1.3 0.3]\n",
" [4.4 3.2 1.3 0.2]\n",
" [5. 3.5 1.6 0.6]\n",
" [5.1 3.8 1.9 0.4]\n",
" [4.8 3. 1.4 0.3]\n",
" [5.1 3.8 1.6 0.2]\n",
" [4.6 3.2 1.4 0.2]\n",
" [5.3 3.7 1.5 0.2]\n",
" [5. 3.3 1.4 0.2]\n",
" [7. 3.2 4.7 1.4]\n",
" [6.4 3.2 4.5 1.5]\n",
" [6.9 3.1 4.9 1.5]\n",
" [5.5 2.3 4. 1.3]\n",
" [6.5 2.8 4.6 1.5]\n",
" [5.7 2.8 4.5 1.3]\n",
" [6.3 3.3 4.7 1.6]\n",
" [4.9 2.4 3.3 1. ]\n",
" [6.6 2.9 4.6 1.3]\n",
" [5.2 2.7 3.9 1.4]\n",
" [5. 2. 3.5 1. ]\n",
" [5.9 3. 4.2 1.5]\n",
" [6. 2.2 4. 1. ]\n",
" [6.1 2.9 4.7 1.4]\n",
" [5.6 2.9 3.6 1.3]\n",
" [6.7 3.1 4.4 1.4]\n",
" [5.6 3. 4.5 1.5]\n",
" [5.8 2.7 4.1 1. ]\n",
" [6.2 2.2 4.5 1.5]\n",
" [5.6 2.5 3.9 1.1]\n",
" [5.9 3.2 4.8 1.8]\n",
" [6.1 2.8 4. 1.3]\n",
" [6.3 2.5 4.9 1.5]\n",
" [6.1 2.8 4.7 1.2]\n",
" [6.4 2.9 4.3 1.3]\n",
" [6.6 3. 4.4 1.4]\n",
" [6.8 2.8 4.8 1.4]\n",
" [6.7 3. 5. 1.7]\n",
" [6. 2.9 4.5 1.5]\n",
" [5.7 2.6 3.5 1. ]\n",
" [5.5 2.4 3.8 1.1]\n",
" [5.5 2.4 3.7 1. ]\n",
" [5.8 2.7 3.9 1.2]\n",
" [6. 2.7 5.1 1.6]\n",
" [5.4 3. 4.5 1.5]\n",
" [6. 3.4 4.5 1.6]\n",
" [6.7 3.1 4.7 1.5]\n",
" [6.3 2.3 4.4 1.3]\n",
" [5.6 3. 4.1 1.3]\n",
" [5.5 2.5 4. 1.3]\n",
" [5.5 2.6 4.4 1.2]\n",
" [6.1 3. 4.6 1.4]\n",
" [5.8 2.6 4. 1.2]\n",
" [5. 2.3 3.3 1. ]\n",
" [5.6 2.7 4.2 1.3]\n",
" [5.7 3. 4.2 1.2]\n",
" [5.7 2.9 4.2 1.3]\n",
" [6.2 2.9 4.3 1.3]\n",
" [5.1 2.5 3. 1.1]\n",
" [5.7 2.8 4.1 1.3]\n",
" [6.3 3.3 6. 2.5]\n",
" [5.8 2.7 5.1 1.9]\n",
" [7.1 3. 5.9 2.1]\n",
" [6.3 2.9 5.6 1.8]\n",
" [6.5 3. 5.8 2.2]\n",
" [7.6 3. 6.6 2.1]\n",
" [4.9 2.5 4.5 1.7]\n",
" [7.3 2.9 6.3 1.8]\n",
" [6.7 2.5 5.8 1.8]\n",
" [7.2 3.6 6.1 2.5]\n",
" [6.5 3.2 5.1 2. ]\n",
" [6.4 2.7 5.3 1.9]\n",
" [6.8 3. 5.5 2.1]\n",
" [5.7 2.5 5. 2. ]\n",
" [5.8 2.8 5.1 2.4]\n",
" [6.4 3.2 5.3 2.3]\n",
" [6.5 3. 5.5 1.8]\n",
" [7.7 3.8 6.7 2.2]\n",
" [7.7 2.6 6.9 2.3]\n",
" [6. 2.2 5. 1.5]\n",
" [6.9 3.2 5.7 2.3]\n",
" [5.6 2.8 4.9 2. ]\n",
" [7.7 2.8 6.7 2. ]\n",
" [6.3 2.7 4.9 1.8]\n",
" [6.7 3.3 5.7 2.1]\n",
" [7.2 3.2 6. 1.8]\n",
" [6.2 2.8 4.8 1.8]\n",
" [6.1 3. 4.9 1.8]\n",
" [6.4 2.8 5.6 2.1]\n",
" [7.2 3. 5.8 1.6]\n",
" [7.4 2.8 6.1 1.9]\n",
" [7.9 3.8 6.4 2. ]\n",
" [6.4 2.8 5.6 2.2]\n",
" [6.3 2.8 5.1 1.5]\n",
" [6.1 2.6 5.6 1.4]\n",
" [7.7 3. 6.1 2.3]\n",
" [6.3 3.4 5.6 2.4]\n",
" [6.4 3.1 5.5 1.8]\n",
" [6. 3. 4.8 1.8]\n",
" [6.9 3.1 5.4 2.1]\n",
" [6.7 3.1 5.6 2.4]\n",
" [6.9 3.1 5.1 2.3]\n",
" [5.8 2.7 5.1 1.9]\n",
" [6.8 3.2 5.9 2.3]\n",
" [6.7 3.3 5.7 2.5]\n",
" [6.7 3. 5.2 2.3]\n",
" [6.3 2.5 5. 1.9]\n",
" [6.5 3. 5.2 2. ]\n",
" [6.2 3.4 5.4 2.3]\n",
" [5.9 3. 5.1 1.8]]\n"
]
}
],
"source": [
"print(iris.data)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
" 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2\n",
" 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
" 2 2]\n"
]
}
],
"source": [
"print(iris.target)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']\n",
"['setosa' 'versicolor' 'virginica']\n"
]
}
],
"source": [
"print(iris.feature_names)\n",
"print(iris.target_names)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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Jh15hazV2rVro6ioqN9WWlqacNqR89BDD8WFF14YM2fOjKKiorjjjjve8jGbNm2K973vfZHL5eLkk0+OtWvXDvucR4NC12rTpk1vuK6Kioqis7MzzcAjqKmpKT7wgQ/ElClT4oQTToglS5bE9u3b3/Jx4/E1azBrNV5fs2666aaYN29e/heI1dTUxD333POmjxmJa2pMxcett94ajY2NsXLlytiyZUvMnz8/6urqYvfu3Yc8/uGHH47LLrssli1bFo8//ngsWbIklixZEk888UTiydMrdK0iXv1teLt27cpvf//73xNOPHL27t0b8+fPj+bm5gEd/9xzz8UFF1wQ55xzTmzdujWWL18en/vc5+K+++4b5klHXqFr9Zrt27f3u7ZOOOGEYZrw6NHa2hoNDQ3R1tYW999/fxw4cCDOO++82Lt372EfM15fswazVhHj8zVr1qxZcd1110V7e3s89thjsXjx4rjoooviySefPOTxI3ZNDc2fkzs6LFy4MGtoaMjfPnjwYDZz5sysqanpkMd/4hOfyC644IJ++xYtWpR98YtfHNY5jwaFrtWaNWuy8vLyRNMdvSIi27hx45sec/XVV2ennXZav32XXHJJVldXN4yTHX0GslYPPvhgFhHZv//97yQzHc12796dRUTW2tp62GPG82vW/zSQtfKa9d/e/va3Zz/72c8Oed9IXVNj5p2P/fv3R3t7e9TW1ub3FRcXR21tbWzevPmQj9m8eXO/4yMi6urqDnv8WDGYtYp49c8vn3jiiVFVVfWmJT3ejdfr6kicccYZMWPGjDj33HPjT3/600iPMyK6u7sjImLatGmHPca19aqBrFWE16yDBw/G+vXrY+/evYf98yYjdU2Nmfh44YUX4uDBg2/4LaoVFRWH/f5xZ2dnQcePFYNZq9mzZ8fPf/7zuPPOO+NXv/pV9PX1xVlnnRXPP/98ipFHlcNdVz09PfHKK6+M0FRHpxkzZsTNN98ct99+e9x+++1RVVUVZ599dmzZsmWkR0uqr68vli9fHh/84Afj9NNPP+xx4/U1638a6FqN59esbdu2xeTJkyOXy8WXvvSl2LhxY5x66qmHPHakrqlh+fXqjD01NTX9yvmss86KuXPnxi233BLf/e53R3AyRrPZs2fH7Nmz87fPOuusePbZZ2PVqlXxy1/+cgQnS6uhoSGeeOKJ+OMf/zjSoxz1BrpW4/k1a/bs2bF169bo7u6O3/zmN7F06dJobW09bICMhDHzzsdxxx0XxxxzTHR1dfXb39XVFZWVlYd8TGVlZUHHjxWDWavXmzhxYrz3ve+NZ555ZjhGHNUOd12VlZXFpEmTRmiq0WPhwoXj6rq64oor4u67744HH3wwZs2a9abHjtfXrNcUslavN55es0pKSuLkk0+OBQsWRFNTU8yfPz9uuOGGQx47UtfUmImPkpKSWLBgQbS0tOT39fX1RUtLy2G/11VTU9Pv+IiI+++//7DHjxWDWavXO3jwYGzbti1mzJgxXGOOWuP1uhoqW7duHRfXVZZlccUVV8TGjRvjgQceiJNOOuktHzNer63BrNXrjefXrL6+vujt7T3kfSN2TQ3rx1kTW79+fZbL5bK1a9dmf/3rX7MvfOEL2dSpU7POzs4sy7LsU5/6VHbNNdfkj//Tn/6UTZgwIfuv//qv7KmnnspWrlyZTZw4Mdu2bdtIfQnJFLpW1157bXbfffdlzz77bNbe3p5deumlWWlpafbkk0+O1JeQzEsvvZQ9/vjj2eOPP55FRHb99ddnjz/+ePb3v/89y7Isu+aaa7JPfepT+eP/9re/Zccee2z2ta99LXvqqaey5ubm7JhjjsnuvffekfoSkil0rVatWpXdcccd2dNPP51t27Yt+8pXvpIVFxdnf/jDH0bqS0jmy1/+clZeXp5t2rQp27VrV377z3/+kz/Ga9arBrNW4/U165prrslaW1uz5557LvvLX/6SXXPNNVlRUVH2+9//Psuyo+eaGlPxkWVZ9pOf/CSrrq7OSkpKsoULF2ZtbW35+z760Y9mS5cu7Xf8bbfdlp1yyilZSUlJdtppp2W//e1vE088cgpZq+XLl+ePraioyD7+8Y9nW7ZsGYGp03vtx0Ffv722PkuXLs0++tGPvuExZ5xxRlZSUpK9853vzNasWZN87pFQ6Fr94Ac/yN71rndlpaWl2bRp07Kzzz47e+CBB0Zm+MQOtU4R0e9a8Zr1qsGs1Xh9zfrsZz+bnXjiiVlJSUl2/PHHZx/72Mfy4ZFlR881VZRlWTa8760AAPy3MfOZDwBgdBAfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASf1/mOTsexRfsLIAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"plt.hist(iris.target, bins=(0,1,2,3), edgecolor='black')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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IiLiMU1aLiIiIiJepzApIiIiIh5TmBQRERERjylMioiIiIjHFCZFRERExGMKkyIiIiLiMYVJEREREfGYwqSIiIiIeExhUkREREQ8pjApIiIiIh5TmBQRERERjylMioiIiIjHFCZFRERExGMKkyIiIiLiMYVJEREREfGYwqSIiIiIeExhUkREREQ8pjApIiIiIh5TmBQRERERjylMioiIiIjHFCZFRERExGMKkyIiIiLiMYVJEREREfGY3dcNiPxaTk4O33zzDWfOnKFBgwZ07twZq1Xve0RERCoihUmpMFwuFy+++CKvTBjPz2fPY7GAMRBzTV3+99336NKli69bFBERkV/R6R6pMJ599lnGjh3LsObnOfQoOMdA2j0QzSF6dO9Genq6r1sUERGRX7EYY0x5F83JySE0NJTs7GxCQkLKu7xUQMeOHSM6Oopn2joY27noWL4DEmbaqH5tR5Z8971P+hMREbnSlDav6cykVAhz587FiovhbS4dC7DDyNZOln6/jKNHj5Z/cyIiIlIihUmpELKysqgVbKNapeLHG1W/uJ6IiIhUHAqTUiHUqVOHozkOjuUVP77xGFitFsLDw8u3MREREflNCpNSIdxxxx34+fnz8qpLx3Ly4fXVNm5JTqZmzZrl35yIiIiUSGFSKoRq1aox/u8TmLwGBnwGPx6CIzkwdxu0m2XjREElXnp5vK/bFBERkV/RPJNSYYwYMYIqVarw/NgxfPRepnt5pw4JfPjW28TFxfmwOxERESmOpgaSCsfpdJKenk52djYxMTE0atTI1y2JiIhccUqb13RmUiocm81Gu3btfN2GiIiIlILumRQRERERjylMioiIiIjHFCZFRERExGMKkyIiIiLiMYVJEREREfGYwqSIiIiIeExhUkREREQ8pjApIiIiIh5TmBQRERERjylMioiIiIjHFCZFRERExGMKkyIiIiLiMYVJEREREfGY3RdFjTEA5OTk+KK8iIiIiPyOX3LaL7mtJD4Jk7m5uQBERUX5oryIiIiIlFJubi6hoaEljlvM78VNL3C5XGRmZlKlShUsFkt5lxcRERGR32GMITc3l4iICKzWku+M9EmYFBEREZHLgz6AIyIiIiIeU5gUEREREY8pTIqIiIiIxxQmRURERMRjCpMiIqVksViYP39+ieOdO3dm5MiR5dbPb1m+fDkWi4UzZ874uhURucwpTIpIhZaVlcWDDz5IdHQ0AQEB1K5dm27dupGWlubr1iqMihRiReTK45NJy0VESqtPnz4UFBTw/vvvU69ePY4fP853333HqVOnfN2aiIigM5MiUoGdOXOGVatWMWHCBG688Ubq1q1L69atGT16NLfcckuR9e677z5q1qxJSEgIXbp0YfPmze7xcePG0bx5c6ZNm0ZUVBRBQUH069eP7Oxs9zpr164lKSmJGjVqEBoaSqdOndiwYcMf6j8/P59Ro0YRGRlJ5cqVadOmDcuXL3ePz5o1i6pVq/Ltt98SGxtLcHAw3bt35+jRo+51HA4Hw4cPp2rVqlSvXp0nn3ySQYMG0bt3bwDuvvtuVqxYwaRJk7BYLFgsFg4cOODefv369bRq1YqgoCDatm3Lzp07/9A+iYj8msKkiFRYwcHBBAcHM3/+fPLz80tcr2/fvpw4cYJvvvmG9evX06JFCxITE/n3v//tXmfPnj188sknLFy4kEWLFrFx40aGDRvmHs/NzWXQoEGkpqaSnp5OgwYN6Nmzp/vxr554+OGH+fHHH/n444/ZsmULffv2pXv37uzevdu9ztmzZ/nHP/7B7NmzWblyJQcPHmTUqFHu8QkTJvDhhx8yc+ZM0tLSyMnJKXLf5qRJk0hISGDIkCEcPXqUo0ePFnlU7TPPPMNrr73GunXrsNvt3HPPPR7vj4hIsYyISAU2b948U61aNRMYGGjatm1rRo8ebTZv3uweX7VqlQkJCTHnz58vsl1MTIyZNm2aMcaYsWPHGpvNZg4fPuwe/+abb4zVajVHjx4ttq7T6TRVqlQxCxcudC8DzL/+9a8Se+3UqZMZMWKEMcaYjIwMY7PZzJEjR4qsk5iYaEaPHm2MMWbmzJkGMHv27HGPv/322yYsLMz9dVhYmHn11VfdXzscDhMdHW1uvfXWYuv+YtmyZQYwS5cudS/76quvDGDOnTtX4j6IiPxf6cykiFRoffr0ITMzkwULFtC9e3eWL19OixYtmDVrFgCbN28mLy+P6tWru89kBgcHs3//fvbu3et+nejoaCIjI91fJyQk4HK53Jd9jx8/zpAhQ2jQoAGhoaGEhISQl5fHwYMHPep769atOJ1OGjZsWKSvFStWFOkrKCiImJgY99fh4eGcOHECgOzsbI4fP07r1q3d4zabjZYtW5a6j/j4+CKvDbhfX0SkLOgDOCJS4QUGBpKUlERSUhJjxozhvvvuY+zYsdx9993k5eURHh5e5F7EX1StWrXUNQYNGsSpU6eYNGkSdevWJSAggISEBAoKCjzqOS8vD5vNxvr167HZbEXGgoOD3f/28/MrMmaxWDDGeFSzOP/9+haLBQCXy1Vmry8iojApIn86cXFx7vsGW7RowbFjx7Db7Vx99dUlbnPw4EEyMzOJiIgAID09HavVSqNGjQBIS0tjypQp9OzZE4BDhw5x8uRJj3u87rrrcDqdnDhxgg4dOnj0GqGhoYSFhbF27Vo6duwIgNPpZMOGDTRv3ty9nr+/P06n0+NeRUT+CF3mFpEK69SpU3Tp0oUPPviALVu2sH//fj799FNeeeUVbr31VgC6du1KQkICvXv3ZvHixRw4cIAffviBZ555hnXr1rlfKzAwkEGDBrF582ZWrVrF8OHD6devH7Vr1wagQYMGzJ49mx07drB69WpSUlKoVKmSx703bNiQlJQUBg4cyOeff87+/ftZs2YN48eP56uvvir16zzyyCOMHz+eL774gp07dzJixAhOnz7tPssIcPXVV7N69WoOHDjAyZMndeZRRMqVwqSIVFjBwcG0adOGiRMn0rFjR5o0acKYMWMYMmQIb731FnDh0u3XX39Nx44dGTx4MA0bNqR///5kZGQQFhbmfq369etz22230bNnT2666Sbi4+OZMmWKe3zGjBmcPn2aFi1a8Je//IXhw4dTq1atP9T/zJkzGThwII8//jiNGjWid+/erF27lujo6FK/xpNPPsmdd97JwIEDSUhIIDg4mG7duhEYGOheZ9SoUdhsNuLi4qhZs6bH93mKiHjCYsry5hwRkQpo3LhxzJ8/n02bNvm6lT/M5XIRGxtLv379eOGFF3zdjoiI7pkUEanIMjIyWLx4MZ06dSI/P5+33nqL/fv3M2DAAF+3JiIC6DK3iEiFZrVamTVrFtdffz3t2rVj69atLF26lNjYWF+3JiIC6DK3iIiIiPwBOjMpIiIiIh5TmBQRERERjylMioiIiIjHFCZFRERExGMKkyIiIiLiMYVJEREREfGYwqSIiIiIeExhUkREREQ89v8BCNiIAPl8BpkAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X = iris.data[:, :2] # we only take the first two features.\n",
"y = iris.target\n",
"plt.figure(2, figsize=(8, 6))\n",
"plt.clf()\n",
"plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1, edgecolor='k')\n",
"plt.xlabel('Sepal length')\n",
"plt.ylabel('Sepal width')\n",
"plt.xticks(())\n",
"plt.yticks(())\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# train model"
]
},
{
"cell_type": "code",
"execution_count": 8,
"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>DecisionTreeClassifier()</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>DecisionTreeClassifier</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.tree.DecisionTreeClassifier.html\">?<span>Documentation for DecisionTreeClassifier</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=\"default\">\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.tree.DecisionTreeClassifier.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`.</span>\n",
" </a>\n",
" </td>\n",
" <td class=\"value\">&#x27;gini&#x27;</td>\n",
" </tr>\n",
" \n",
"\n",
" <tr class=\"default\">\n",
" <td><i class=\"copy-paste-icon\"\n",
" onclick=\"copyToClipboard('splitter',\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.tree.DecisionTreeClassifier.html#:~:text=splitter,-%7B%22best%22%2C%20%22random%22%7D%2C%20default%3D%22best%22\">\n",
" splitter\n",
" <span class=\"param-doc-description\">splitter: {\"best\", \"random\"}, default=\"best\"<br><br>The strategy used to choose the split at each node. Supported<br>strategies are \"best\" to choose the best split and \"random\" to choose<br>the best random split.</span>\n",
" </a>\n",
" </td>\n",
" <td class=\"value\">&#x27;best&#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.tree.DecisionTreeClassifier.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.tree.DecisionTreeClassifier.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.tree.DecisionTreeClassifier.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.tree.DecisionTreeClassifier.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.tree.DecisionTreeClassifier.html#:~:text=max_features,-int%2C%20float%20or%20%7B%22sqrt%22%2C%20%22log2%22%7D%2C%20default%3DNone\">\n",
" max_features\n",
" <span class=\"param-doc-description\">max_features: int, float or {\"sqrt\", \"log2\"}, default=None<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<br> each 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>.. note::<br><br> 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\">None</td>\n",
" </tr>\n",
" \n",
"\n",
" <tr class=\"default\">\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.tree.DecisionTreeClassifier.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 the randomness of the estimator. The features are always<br>randomly permuted at each split, even if ``splitter`` is set to<br>``\"best\"``. When ``max_features < n_features``, the algorithm will<br>select ``max_features`` at random at each split before finding the best<br>split among them. But the best found split may vary across different<br>runs, even if ``max_features=n_features``. That is the case, if the<br>improvement of the criterion is identical for several splits and one<br>split has to be selected at random. To obtain a deterministic behaviour<br>during fitting, ``random_state`` has to be fixed to an integer.<br>See :term:`Glossary <random_state>` for details.</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('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.tree.DecisionTreeClassifier.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 a tree 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.tree.DecisionTreeClassifier.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('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.tree.DecisionTreeClassifier.html#:~:text=class_weight,-dict%2C%20list%20of%20dict%20or%20%22balanced%22%2C%20default%3DNone\">\n",
" class_weight\n",
" <span class=\"param-doc-description\">class_weight: dict, list of dict or \"balanced\", default=None<br><br>Weights associated with classes in the form ``{class_label: weight}``.<br>If None, 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>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\">None</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.tree.DecisionTreeClassifier.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('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.tree.DecisionTreeClassifier.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": [
"DecisionTreeClassifier()"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.tree import DecisionTreeClassifier\n",
"classifier = DecisionTreeClassifier()\n",
"classifier.fit(iris.data[:-1], iris.target[:-1]) # use all but the last sample for training"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# use model for prediction"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"predicted [2] vs. real [2]\n"
]
}
],
"source": [
"print(\"predicted\",classifier.predict(iris.data[-1:]),\"vs. real\",iris.target[-1:])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# export model for visual inspection"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"from sklearn import tree\n",
"tree.export_graphviz(classifier,out_file='tree.dot', \n",
" feature_names=iris.feature_names, \n",
" class_names=iris.target_names, \n",
" filled=True, rounded=True, \n",
" special_characters=True) "
]
},
{
"cell_type": "code",
"execution_count": null,
"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.4"
}
},
"nbformat": 4,
"nbformat_minor": 4
}