Technologische_Grundlagen/digit_recognition/digit_recognition_DT.ipynb

254 lines
56 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "48214590-414c-4dd0-9d1f-9446c1d751a0",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "f0738b63-6ea5-4bb0-81e3-101ff9d67a63",
"metadata": {},
"outputs": [],
"source": [
"from sklearn import datasets, metrics, svm\n",
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "8a26a325-096c-45fd-b0ef-cb0166a4833d",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 1000x300 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"### load dataset \n",
"\n",
"digits = datasets.load_digits()\n",
"\n",
"### show training data\n",
"_, axes = plt.subplots(nrows=1, ncols=4, figsize=(10,3))\n",
"for ax, image, label in zip(axes, digits.images, digits.target):\n",
" ax.set_axis_off()\n",
" ax.imshow(image, cmap=plt.cm.gray_r, interpolation=\"nearest\")\n",
" ax.set_title(\"Training: %i\" % label)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "8355cc2f-3128-43a3-8122-1517d11b911a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[5 6 1 6 5 7 1 5 3 7 4 1 2 5 4 9 8 2 6 6 0 5 4 9 7 4 8 7 5 6 5 3 8 9 9 6 1\n",
" 1 0 6 8 4 8 8 8 1 2 7 1 2 0 1 8 8 9 6 4 6 7 0 4 1 0 5 4 1 7 2 0 6 7 9 1 5\n",
" 5 4 0 6 6 2 5 4 1 1 0 9 5 6 5 0 5 1 5 1 3 0 2 5 8 0 1 9 1 1 7 0 6 4 9 8 7\n",
" 3 7 4 4 2 7 3 6 2 6 1 9 7 4 8 5 5 1 3 9 4 3 7 8 0 5 8 9 5 5 0 0 5 0 6 1 8\n",
" 8 4 0 4 5 0 1 7 6 9 7 9 5 7 5 6 9 5 0 6 9 6 7 6 2 0 3 3 8 4 9 7 1 2 9 5 5\n",
" 7 0 9 1 4 6 1 4 0 5 4 9 6 7 1 6 8 1 7 0 7 0 1 5 7 1 6 1 5 1 6 6 7 3 2 7 3\n",
" 6 4 2 5 1 2 4 6 4 8 1 2 2 5 6 2 4 8 5 6 3 1 6 8 2 8 3 9 7 1 5 7 3 4 8 4 5\n",
" 1 5 4 3 9 0 1 9 5 4 1 4 3 2 2 4 5 7 6 2 0 9 2 6 4 6 8 4 4 5 8 0 4 1 1 3 4\n",
" 8 3 3 5 6 3 3 6 7 0 8 3 4 2 8 5 1 0 8 4 7 1 6 3 6 2 7 0 5 8 2 0 0 0 1 3 0\n",
" 7 8 8 5 1 0 6 8 2 0 0 5 9 7 5 4 5 7 6 3 5 3 9 3 5 5 3]\n"
]
}
],
"source": [
"from sklearn.tree import DecisionTreeClassifier\n",
"# gini a criterion to minimize the probability of misclassification\n",
"clf_dt = DecisionTreeClassifier(criterion = 'gini')\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2, shuffle=True)\n",
"\n",
"\n",
"clf_dt.fit(X_train, y_train)\n",
"predicted = clf_dt.predict(X_test)\n",
"print(predicted)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "a4c53a12-f834-426d-8217-ea98962fda64",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8805555555555555"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.metrics import accuracy_score\n",
"\n",
"accuracy_score(y_test , predicted)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "e2b99748-73e4-4e6a-bd3f-4a095eec4c12",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxsAAADQCAYAAABvGXwjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAWnklEQVR4nO3dfZBWZf0/8M/CIsjjCoIYJiSh0KhsxhiOBos4kAjh0zCOmkBqWtaID8k42QRqSGqJY5jTmCz4UJkWTJKYNSyGomKmo2M5WG6MmoTI+ojy4PX7w99u3SwPC56Le5fv6zWzf3Ducz7nuu49n/vaN2fveytSSikAAAAK1q7cAwAAAPZOwgYAAJCFsAEAAGQhbAAAAFkIGwAAQBbCBgAAkIWwAQAAZCFsAAAAWQgbAABAFrsUNmpra6OioqLpq7KyMg466KCYOnVqvPrqq7nGWGLAgAExZcqUpn/X1dVFRUVF1NXV7VKdxx57LGbMmBENDQ3NHqupqYmamppPNM4iNc5xW1+PP/54uYe3U/X19VFRURG1tbW7dXxbm78+Ka/ly5fHuHHjYr/99ot99903Bg0aFNdcc025h7VTn7RPGrWV+euT8njnnXfiiiuuiDFjxkTv3r2joqIiZsyYUe5htVgRffLkk0/G2LFjo1u3btG1a9cYNWpUPProo8UNsmB6pbzaymvq1lrTmlK5OyeeN29eDB48ODZs2BCPPPJIXHfddbFs2bJ47rnnokuXLrtTcrcdddRRsWLFivjc5z63S8c99thjMXPmzJgyZUpUVVWVPHbrrbcWOMLizJo1K0aNGlWy7fDDDy/TaPa8tjZ/fbLn3XPPPfHVr341Jk2aFAsWLIiuXbvGP/7xj3jttdfKPbQ9oi3OX5/sWevWrYuf/exnMXTo0Dj55JPj9ttvL/eQ9qiVK1fGiBEj4uijj44777wzUkpx/fXXx+jRo2Pp0qVxzDHHlHuI26VX9ry2+JpapKLmv1th4/DDD49hw4ZFRMSoUaNiy5Ytcc0118TChQvjrLPO2uYx77//fnTu3Hl3TrdD3bt3j+HDhxdac1ebZ08ZNGhQ4XP9X5s2bWr6X5PWKPf8i6ZP9qxXX301vv71r8cFF1xQsmhtHVA/qdbaJ3tq/kXTJ3tW//79Y/369VFRURFvvPFGtrDRWvvke9/7XlRVVcWSJUuarqETTjghDjnkkLj88stb9R0OvbJnWVOKm38h79lovOD+9a9/RUTElClTomvXrvHcc8/FmDFjolu3bjF69OiIiNi4cWNce+21MXjw4OjYsWP07t07pk6dGmvXri2puWnTprjiiiuib9++0blz5zjuuOPiySefbHbu7d3Ke+KJJ2LChAnRq1ev6NSpUwwcODCmTZsWEREzZsyI73znOxER8ZnPfKbp1mRjjW3dynvzzTfjm9/8ZvTr1y/22WefOOSQQ+K73/1ufPjhhyX7VVRUxLe+9a248847Y8iQIdG5c+cYOnRoPPDAA7v8vObU+Lzdeeedcdlll0W/fv2iY8eO8dJLL0VExB//+McYPXp0dO/ePTp37hzHHnts/OlPfyqp8dJLL8XUqVNj0KBB0blz5+jXr19MmDAhnnvuuXJMqdXTJ/+Vo09uv/32eO+992L69Om7XWNrbalPcsy/HPTJf+Xok8bxFakt9cmjjz4aNTU1JT+Ad+vWLUaMGBGPPfZY/Pvf/y70fDnplf+yprTuNaWQsNH4JPXu3btp28aNG+MrX/lKHH/88bFo0aKYOXNmfPTRRzFx4sSYPXt2nHnmmbF48eKYPXt2PPzww1FTUxMbNmxoOv7888+PG2+8Mc4555xYtGhRnHbaaXHqqafG+vXrdzqehx56KL70pS/F6tWr48c//nE8+OCDcdVVV8WaNWsiIuK8886Lb3/72xER8Zvf/CZWrFgRK1asiKOOOmqb9T744IMYNWpULFiwIC699NJYvHhxnH322XH99dfHqaee2mz/xYsXx09+8pO4+uqr4/7774+ePXvGKaecEv/85z9L9quoqNil30+86KKLorKyMrp37x5jx46N5cuXt/jY7bnyyitj9erVcdttt8Xvfve76NOnT9x1110xZsyY6N69e8yfPz/uvffe6NmzZ4wdO7bkon/ttdeiV69eMXv27FiyZEnMnTs3Kisr44tf/GK8+OKLOz13a5j/nqRPShXdJ4888kj07Nkz/v73v0d1dXVUVlZGnz594sILL4y33357p8fvSFvok5zz35P0Salc60kObaFPNm7cGB07dmy2vXFbW/rPMr1SyprSiteUtAvmzZuXIiI9/vjjadOmTemdd95JDzzwQOrdu3fq1q1bev3111NKKU2ePDlFRLrjjjtKjv/FL36RIiLdf//9JdtXrlyZIiLdeuutKaWU/va3v6WISJdccknJfnfffXeKiDR58uSmbUuXLk0RkZYuXdq0beDAgWngwIFpw4YN253LDTfckCIivfzyy80eGzlyZBo5cmTTv2+77bYUEenee+8t2e+HP/xhioj0hz/8oWlbRKQDDjggvf32203bXn/99dSuXbt03XXXlRzfvn37dPzxx293jI2efvrpdPHFF6ff/va36ZFHHkl33HFHGjJkSGrfvn1asmTJTo/flsbnbcSIESXb33vvvdSzZ880YcKEku1btmxJQ4cOTUcfffR2a27evDlt3LgxDRo0qOR79/LLL6eISPPmzSvZv5zzz0mflKdPDjvssNSpU6fUrVu3NGvWrLR06dJ0/fXXp3333Tcde+yx6aOPPtppja21pT7JMf+c9El5+uR/rV27NkVE+v73v79Lx22tLfVJdXV1OvTQQ9OWLVuatm3atCkdcsghKSLSPffcs9Mae5pesaa09TVlt8LG1l9HHHFEWr58edN+jRf8W2+9VXL8WWedlaqqqtLGjRvTpk2bSr769u2bJk2alFJK6dZbb00RkZ566qmS4zdt2pQqKyt3eMG/+OKLKSLSrFmzdjiXXbngJ02alLp06dLsiV2zZk2KiDR9+vSmbRGRzjjjjGY1+/btmy688MIdjmlXrF+/Ph100EHpyCOP3K3jG5+3m2++uWT7ww8/nCIi3Xfffc2+R9OnT08VFRXp3XffTSl9/P34wQ9+kIYMGZI6dOhQck18+ctfbqq5vQv+k/ik889Jn5SnTwYNGpQiotnCMmfOnBQR6eGHH97lmm2pT3LMPyd9Uv71pOiw0Rb65Oc//3mKiPSNb3wjvfLKK2n16tXp3HPPTe3bt08RkX75y1/u9vOQi16xprT1NWW33o2yYMGCGDJkSFRWVsYBBxwQBx54YLN9OnfuHN27dy/ZtmbNmmhoaIh99tlnm3XfeOONiPj40zIiIvr27VvyeGVlZfTq1WuHY2v8/cODDjqoZZNpgXXr1kXfvn2b/Z5rnz59orKysmm8jbY1xo4dO5bcqvykqqqqYvz48XHbbbfFhg0bYt99992tOlt/7xpvd55++unbPebNN9+MLl26xKWXXhpz586N6dOnx8iRI2O//faLdu3axXnnnVfoXLelqPnnpE8+tqf6pFevXrFq1aoYO3ZsyfYTTzwxpk2bFk8//XSccMIJu1W7LfRJzvnnpE8+Vs71pChtoU++9rWvxdq1a+Paa6+Nn/70pxERccwxx8Tll18eP/zhD6Nfv36FnatoeuVj1pS2t6bsVtgYMmRI0ycibM+23oC2//77R69evWLJkiXbPKZbt24R8d8L5vXXXy9p/M2bNze7uLbW+LuLr7zyyg732xW9evWKJ554IlJKJfP6z3/+E5s3b47999+/sHPtipRSRGz7uW6prY9tnMstt9yy3U+aOOCAAyIi4q677opzzjknZs2aVfL4G2+80ewj7XIoYv456ZOP7ak+OfLII7f5d1car5N27Xb/LWptoU9yzj8nffKxcq8nRWgLfRIRMX369Jg2bVqsWrUqunXrFv37948LLrggunTpEl/4whcKPVeR9MrHrCltb03Zo6vP+PHjY926dbFly5YYNmxYs6/DDjssIqLpjSt33313yfH33ntvbN68eYfnOPTQQ2PgwIFxxx13NPu0gv/V+GawlqTA0aNHx7vvvhsLFy4s2b5gwYKmx/e09evXxwMPPBDV1dXRqVOnwuoee+yxUVVVFS+88MI2v0fDhg1r+t+RioqKZm+0W7x48R75I0O55t8a6JPdc9ppp0VExIMPPliy/fe//31ERKEf09ga+2RPzr810CetX2vsk0YdO3aMww8/PPr37x+rV6+OX/3qV3H++ee3yrvkn5Re2T3WlOLmv0c/1PeMM86Iu+++O8aNGxcXX3xxHH300dGhQ4d45ZVXYunSpTFx4sQ45ZRTYsiQIXH22WfHnDlzokOHDnHCCSfE888/HzfeeGOz24PbMnfu3JgwYUIMHz48Lrnkkjj44INj9erV8dBDDzU10RFHHBERETfffHNMnjw5OnToEIcddlhTwv9f55xzTsydOzcmT54c9fX1ccQRR8Ty5ctj1qxZMW7cuN2+jVZZWRkjR45s9rFmWzvzzDPj4IMPjmHDhsX+++8fq1atih/96EexZs2aZn8Zsra2NqZOnRrz5s0r+WufLdW1a9e45ZZbYvLkyfHmm2/G6aefHn369Im1a9fGs88+G2vXrm269Tx+/Piora2NwYMHx5FHHhl/+ctf4oYbbmjxbdQc898b6JNSLb1OxowZExMmTIirr746Pvrooxg+fHg89dRTMXPmzBg/fnwcd9xxTfvujX2yK/PfG+iTUi29TiI+/uHhvffei3feeSciIl544YW47777IiJi3LhxTR8Luzf2yfPPPx/3339/DBs2LDp27BjPPvtszJ49u838VejdoVdKWVPKsKbsyptFGt+ktHLlyh3uN3ny5NSlS5dtPrZp06Z04403pqFDh6ZOnTqlrl27psGDB6cLLrggrVq1qmm/Dz/8MF122WWpT58+qVOnTmn48OFpxYoVqX///jv9RISUUlqxYkU68cQTU48ePVLHjh3TwIEDm33CwpVXXpk+9alPpXbt2pXU2PpNSimltG7dunThhRemAw88MFVWVqb+/funK6+8Mn3wwQcl+0VEuuiii5rNe+txN+679Xm25brrrkvV1dWpR48eqX379ql3797plFNOSU8++WSzfW+55ZYUETv9lKbG5+3Xv/71Nh9ftmxZOumkk1LPnj1Thw4dUr9+/dJJJ51Usv/69evTueeem/r06ZM6d+6cjjvuuPTnP/+52fO3vTcp5Zh/a6BPytMnKaX0/vvvp+nTp6dPf/rTqbKyMh188MHbPP/e2Ce7Mv/WQJ+Ur0/69++/zTccx1Zv3N0b++TFF19MI0aMSD179kz77LNP+uxnP5uuuuqqpjfftkZ6xZrS1teUiv9/YvYSkyZNipdffjlWrlxZ7qFAq6VPYOf0CbSMXtmx1vW30flEUkpRV1cXd911V7mHAq2WPoGd0yfQMnpl59zZAAAAsmidn4UIAAC0ecIGAACQhbABAABkIWwAAABZCBsAAEAWe91H3z7zzDOF11y4cGHhNRsaGgqvGRFRX19feM0cz2mOmlVVVYXXpOXmzJlTeM26urrCa0bk6WloiZqamsJr5njdj/A6TXmdfPLJhdesrq4uvGZExIwZM7LU3Vu4swEAAGQhbAAAAFkIGwAAQBbCBgAAkIWwAQAAZCFsAAAAWQgbAABAFsIGAACQhbABAABkIWwAAABZCBsAAEAWwgYAAJCFsAEAAGQhbAAAAFkIGwAAQBbCBgAAkIWwAQAAZCFsAAAAWQgbAABAFpXlHkDRamtrC6958803F16zLRk6dGjhNauqqgqvScs1NDQUXvOSSy4pvObkyZMLrwktNW3atMJrLlu2rPCaufokx1gnTpxYeE3Kb9GiRW2iZk1NTeE12Tl3NgAAgCyEDQAAIAthAwAAyELYAAAAshA2AACALIQNAAAgC2EDAADIQtgAAACyEDYAAIAshA0AACALYQMAAMhC2AAAALIQNgAAgCyEDQAAIAthAwAAyELYAAAAshA2AACALIQNAAAgC2EDAADIQtgAAACyqEgppXIPokgVFRWF11y4cGHhNf/6178WXjMiYsaMGVnqsneZM2dO4TXr6uoKr5mj96Clcrye5rimZ86cWXjNiIiLL7648Jr19fWF16T8pkyZUnjNHGuK66883NkAAACyEDYAAIAshA0AACALYQMAAMhC2AAAALIQNgAAgCyEDQAAIAthAwAAyELYAAAAshA2AACALIQNAAAgC2EDAADIQtgAAACyEDYAAIAshA0AACALYQMAAMhC2AAAALIQNgAAgCyEDQAAIAthAwAAyKKynCevq6sr5+lb7OSTTy73EFpswIABhdecMmVK4TUprxy9V11dXXjNhoaGwmvmUlVVVe4hULAcr321tbWF12xLa1SO156amprCa7Jr6uvrC6+Z47rOtabkmH+ONbVc3NkAAACyEDYAAIAshA0AACALYQMAAMhC2AAAALIQNgAAgCyEDQAAIAthAwAAyELYAAAAshA2AACALIQNAAAgC2EDAADIQtgAAACyEDYAAIAshA0AACALYQMAAMhC2AAAALIQNgAAgCyEDQAAIAthAwAAyKIipZTKdfL6+vrCa86ZM6fwmtOmTSu8Zo5xRkQ0NDQUXrO2trbwmpRXTU1N4TWXLVtWeM1cevToUXjN+fPnF15z4sSJhddk71NXV5elblt57W8r49ybDRgwoNxDaJEcPyNFRLz11luF17zpppsKr5nj59mWcGcDAADIQtgAAACyEDYAAIAshA0AACALYQMAAMhC2AAAALIQNgAAgCyEDQAAIAthAwAAyELYAAAAshA2AACALIQNAAAgC2EDAADIQtgAAACyEDYAAIAshA0AACALYQMAAMhC2AAAALIQNgAAgCyEDQAAIAthAwAAyKIipZTKPYj/i2bMmFHuIbRYWxorLTNgwIDCa1ZXVxdec+HChYXXjIhoaGgovGaO5zTHOKGl6urqCq85atSowmv6Mab8pkyZUnjN+fPnF16zR48ehdeMyLP+5ZCjp1vCnQ0AACALYQMAAMhC2AAAALIQNgAAgCyEDQAAIAthAwAAyELYAAAAshA2AACALIQNAAAgC2EDAADIQtgAAACyEDYAAIAshA0AACALYQMAAMhC2AAAALIQNgAAgCyEDQAAIAthAwAAyELYAAAAshA2AACALCrLPYCizZgxo/CadXV1hddsaGgovGZExMyZM7PUZe+So08WLlxYeM1cfVJfX194zaqqqsJr5hjngAEDCq+5t8rx/OdYT3J9T3P0NHunmpqawmvOnz+/8Jq5esVr9Y65swEAAGQhbAAAAFkIGwAAQBbCBgAAkIWwAQAAZCFsAAAAWQgbAABAFsIGAACQhbABAABkIWwAAABZCBsAAEAWwgYAAJCFsAEAAGQhbAAAAFkIGwAAQBbCBgAAkIWwAQAAZCFsAAAAWQgbAABAFsIGAACQRWW5B1C0z3/+84XXXLhwYeE1q6urC68ZETFy5Mgsddm7TJkypfCa9fX1hdfcb7/9Cq+Zy0033VR4zQEDBhRek5arqqoqvGaO9WTRokWF14yI6NGjR+E1c/QJ5ZdjTXnmmWcKr1lbW1t4zVzmzJlT7iEUxp0NAAAgC2EDAADIQtgAAACyEDYAAIAshA0AACALYQMAAMhC2AAAALIQNgAAgCyEDQAAIAthAwAAyELYAAAAshA2AACALIQNAAAgC2EDAADIQtgAAACyEDYAAIAshA0AACALYQMAAMhC2AAAALIQNgAAgCwqUkqp3IMAAAD2Pu5sAAAAWQgbAABAFsIGAACQhbABAABkIWwAAABZCBsAAEAWwgYAAJCFsAEAAGQhbAAAAFn8P/9RncoGbPzLAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 1000x300 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_, axes = plt.subplots(nrows=1, ncols=4, figsize=(10,3))\n",
"for ax, image, prediction, t in zip(axes, X_test, predicted, y_test):\n",
" ax.set_axis_off()\n",
" image = image.reshape(8,8)\n",
" ax.imshow(image, cmap=plt.cm.gray_r, interpolation=\"nearest\")\n",
" ax.set_title(f\"Prediction: {prediction}, real: {t}\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "1d010c44-2967-44fa-996f-c1fd733d17f1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Confusion Matrix:\n",
"[[36 0 0 0 0 1 0 0 0 0]\n",
" [ 0 37 1 1 0 0 0 0 2 1]\n",
" [ 0 0 21 0 0 0 0 0 2 0]\n",
" [ 0 0 4 26 0 2 1 0 1 1]\n",
" [ 0 1 0 0 31 0 1 0 0 0]\n",
" [ 0 0 0 0 2 43 0 1 0 0]\n",
" [ 1 1 0 0 4 0 40 0 0 0]\n",
" [ 0 0 0 0 1 1 0 34 1 0]\n",
" [ 0 3 0 0 0 1 0 0 27 2]\n",
" [ 0 2 0 1 1 2 0 0 0 22]]\n"
]
},
{
"data": {
"image/png": "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L7Kz9dckIiL249Nd619//XVp5wBg1apVHtmOiIj4nrLatV6oQt6pU6fSziEiIiJFUKQLwgCcPn2agwcPkpmZ6TLf05dZFRERKQyfbpFf6Pfff+fuu+9m6dKlBT6vY+QiImJHZfUYudsXhBk1ahTHjx9nw4YNBAUFsWzZMubMmUP9+vVZssSi80ZERER8lNst8q+++oqPP/6Ytm3bUq5cOWrWrEm3bt0ICwsjISGBnj17lkZOERGRYimrXetut8jT09OJiIgAoFKlSvz++++AeUe0zZs3l2w6ERGRElJWL9HqdiFv2LAhu3fvBqBly5a8/fbb/Pbbb0ybNo2oqKgSDygiIiKX5nbX+qhRozh8+DAA48aN46abbmLevHkEBAQwe/bsks4nIiJSIspq17rbhfyOO+7I+3erVq3Yv38/P/74IzVq1KBKlSolGk5ERKSklNVR60U+jzxXcHAwV199dUlkERERKTU+3SIfPXp0oVc4efLkIocRERER9xSqkG/ZsqVQK7vwxiq+THdh8l63fmB1gvyMeKsT5OeItzpBfrojm/yl4o48t2mT3FY3TRERESktZbVr3e3Tz0RERMQ+ij3YTURExBto1LqIiIgXU9e6iIiI2I5a5CIi4hPKatd6kVrkc+fO5dprryU6OpoDBw4AMGXKFD7++OMSDSciIlJSjBKY7MjtQj516lRGjx5Njx49OHHiBNnZ5omSFStWZMqUKSWdT0RERC7D7UL++uuvM2PGDMaOHYuf3/krMLRp04bt27eXaDgREZGS4unbmCYkJNC2bVtCQ0OJiIjglltuybt76PlMBvHx8URHRxMUFETnzp3ZsWOHW9txu5Dv27ePVq1a5ZvvdDpJT093d3UiIiIe4emu9dWrVzNy5Eg2bNjAypUrycrKonv37i618sUXX2Ty5Mm88cYbJCYmUq1aNbp168bJkycLvR23B7vVrl2brVu3UrNmTZf5S5cupXHjxu6uTkRExCM8Pdht2bJlLo9nzZpFREQEmzZt4vrrr8cwDKZMmcLYsWPp06cPAHPmzCEyMpL58+dz7733Fmo7bhfyxx57jJEjR3L27FkMw+C7777j/fffJyEhgf/85z/urk5ERMSrpKWluTx2Op04nc6/fF1qaioAlSpVAswe7uTkZLp37+6yrk6dOvHNN9+UXiG/++67ycrK4vHHH+f06dMM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q6PQpEkTDh8+nDdt377d0jzHjx/n2muvxd/fn6VLl7Jz505efvllKlasaFmmxMREl32UewGP2267zbJMkyZNYtq0abzxxhvs2rWLF198kf/7v//j9ddftywTwLBhw1i5ciVz585l+/btdO/ena5du/Lbb79ZmsunGT7ummuuMe677z6XeVdddZXx5JNPWpTIFWAsWrTI6hguUlJSDMBYvXq11VFcXHHFFcZ//vMfq2MYJ0+eNOrXr2+sXLnS6NSpk/Hwww9blmXcuHFGixYtLNt+QZ544gmjY8eOVse4rIcfftioW7eukZOTY1mGnj17GkOGDHGZ16dPH2PgwIEWJTKM06dPG35+fsann37qMr9FixbG2LFjLUolPt0iz73FXPfu3V3ml/Qt5sqa1NRUACpVqmRxElN2djYLFiwgPT2d2NhYq+MwcuRIevbsSdeuXa2OAsCePXuIjo6mdu3a9O/fn19++cXSPEuWLKFNmzbcdtttRERE0KpVK2bMmGFppgtlZmby3nvvMWTIkBK9sYW7OnbsyJdffslPP/0EwPfff8+6devo0aOHZZmysrLIzs7Od83yoKAg1q1bZ1Eq8ekru3nqFnNliWEYjB49mo4dO9K0aVNLs2zfvp3Y2FjOnj1LhQoVWLRoEY0bN7Y004IFC9i8ebNtjhm2a9eOd999lwYNGnDkyBFeeOEFOnTowI4dO6hcubIlmX755RemTp3K6NGjeeqpp/juu+946KGHcDqd3HXXXZZkutDixYs5ceIEgwcPtjTHE088QWpqKldddRV+fn5kZ2czfvx4br/9dssyhYaGEhsby/PPP0+jRo2IjIzk/fff59tvv6V+/fqW5fJ1Pl3Ic5X2LebKkgceeIBt27bZ4tt3w4YN2bp1KydOnODDDz9k0KBBrF692rJinpSUxMMPP8yKFSs8fpelS4mLi8v7d7NmzYiNjaVu3brMmTOH0aNHW5IpJyeHNm3aMGHCBABatWrFjh07mDp1qi0K+cyZM4mLiyvV22oWxsKFC3nvvfeYP38+TZo0YevWrYwaNYro6GgGDRpkWa65c+cyZMgQrrzySvz8/Lj66qsZMGAAmzdvtiyTr/PpQu6pW8yVFQ8++CBLlixhzZo1JX772KIICAigXr16ALRp04bExEReffVV3n77bUvybNq0iZSUFFq3bp03Lzs7mzVr1vDGG2+QkZGBn5+fJdlyhYSE0KxZM/bs2WNZhqioqHxftho1asSHH35oUaLzDhw4wBdffMFHH31kdRQee+wxnnzySfr37w+YX8QOHDhAQkKCpYW8bt26rF69mvT0dNLS0oiKiqJfv37Url3bsky+zqePkXvqFnPezjAMHnjgAT766CO++uor2/7BGoZBRkaGZdu/8cYb2b59O1u3bs2b2rRpwx133MHWrVstL+IAGRkZ7Nq1i6ioKMsyXHvttflOX/zpp59K9CYSRTVr1iwiIiLo2bOn1VE4ffo05cq5/hft5+dn+elnuUJCQoiKiuL48eMsX76c3r17Wx3JZ/l0ixw8c4s5d506dYqff/457/G+ffvYunUrlSpVokaNGh7PM3LkSObPn8/HH39MaGhoXg9GeHg4QUFBHs8D8NRTTxEXF0dMTAwnT55kwYIFrFq1imXLllmSB8zjhxePGwgJCaFy5cqWjSd49NFH6dWrFzVq1CAlJYUXXniBtLQ0S1t0//rXv+jQoQMTJkygb9++fPfdd0yfPp3p06dblgnMLv9Zs2YxaNAgype3/r/GXr16MX78eGrUqEGTJk3YsmULkydPZsiQIZbmWr58OYZh0LBhQ37++Wcee+wxGjZsyN13321pLp9m6Zh5m3jzzTeNmjVrGgEBAcbVV19t+WlVX3/9tQHkmwYNGmRJnoKyAMasWbMsyWMYhjFkyJC896xq1arGjTfeaKxYscKyPJdi9eln/fr1M6Kiogx/f38jOjra6NOnj7Fjxw7L8uT65JNPjKZNmxpOp9O46qqrjOnTp1sdyVi+fLkBGLt377Y6imEYhpGWlmY8/PDDRo0aNYzAwECjTp06xtixY42MjAxLcy1cuNCoU6eOERAQYFSrVs0YOXKkceLECUsz+TrdxlRERMSL+fQxchEREW+nQi4iIuLFVMhFRES8mAq5iIiIF1MhFxER8WIq5CIiIl5MhVxERMSLqZCLiIh4MRVykWKKj4+nZcuWeY8HDx7MLbfc4vEc+/fvx+FwsHXr1ksuU6tWLaZMmVLodc6ePZuKFSsWO5vD4WDx4sXFXo+I5KdCLmXS4MGDcTgcOBwO/P39qVOnDo8++ijp6emlvu1XX32V2bNnF2rZwhRfEZHLsf7OACKl5Oabb2bWrFmcO3eOtWvXMmzYMNLT05k6dWq+Zc+dO4e/v3+JbDc8PLxE1iMiUhhqkUuZ5XQ6qVatGjExMQwYMIA77rgjr3s3tzv8nXfeoU6dOjidTgzDIDU1lXvuuYeIiAjCwsK44YYb+P77713WO3HiRCIjIwkNDWXo0KGcPXvW5fmLu9ZzcnKYNGkS9erVw+l0UqNGDcaPHw+Qd0vYVq1a4XA46Ny5c97rZs2aRaNGjQgMDOSqq67irbfectnOd999R6tWrQgMDKRNmzZs2bLF7X00efJkmjVrRkhICDExMdx///2cOnUq33KLFy+mQYMGBAYG0q1bN5KSklye/+STT2jdujWBgYHUqVOHZ599lqysLLfziIj7VMjFZwQFBXHu3Lm8xz///DMffPABH374YV7Xds+ePUlOTubzzz9n06ZNXH311dx444388ccfAHzwwQeMGzeO8ePHs3HjRqKiovIV2IuNGTOGSZMm8fTTT7Nz507mz59PZGQkYBZjgC+++ILDhw/z0UcfATBjxgzGjh3L+PHj2bVrFxMmTODpp59mzpw5AKSnp/O3v/2Nhg0bsmnTJuLj43n00Ufd3iflypXjtdde44cffmDOnDl89dVXPP744y7LnD59mvHjxzNnzhz+97//kZaWRv/+/fOeX758OQMHDuShhx5i586dvP3228yePTvvy4qIlDKL774mUioGDRpk9O7dO+/xt99+a1SuXNno27evYRiGMW7cOMPf399ISUnJW+bLL780wsLCjLNnz7qsq27dusbbb79tGIZhxMbGGvfdd5/L8+3atTNatGhR4LbT0tIMp9NpzJgxo8Cc+/btMwBjy5YtLvNjYmKM+fPnu8x7/vnnjdjYWMMwDOPtt982KlWqZKSnp+c9P3Xq1ALXdaGaNWsar7zyyiWf/+CDD4zKlSvnPZ41a5YBGBs2bMibt2vXLgMwvv32W8MwDOO6664zJkyY4LKeuXPnGlFRUXmPAWPRokWX3K6IFJ2OkUuZ9emnn1KhQgWysrI4d+4cvXv35vXXX897vmbNmlStWjXv8aZNmzh16hSVK1d2Wc+ZM2fYu3cvALt27eK+++5zeT42Npavv/66wAy7du0iIyODG2+8sdC5f//9d5KSkhg6dCjDhw/Pm5+VlZV3/H3Xrl20aNGC4OBglxzu+vrrr5kwYQI7d+4kLS2NrKwszp49S3p6OiEhIQCUL1+eNm3a5L3mqquuomLFiuzatYtrrrmGTZs2kZiY6NICz87O5uzZs5w+fdolo4iUPBVyKbO6dOnC1KlT8ff3Jzo6Ot9gttxClSsnJ4eoqChWrVqVb11FPQUrKCjI7dfk5OQAZvd6u3btXJ7z8/MDwDCMIuW50IEDB+jRowf33Xcfzz//PJUqVWLdunUMHTrU5RAEmKePXSx3Xk5ODs8++yx9+vTJt0xgYGCxc4rI5amQS5kVEhJCvXr1Cr381VdfTXJyMuXLl6dWrVoFLtOoUSM2bNjAXXfdlTdvw4YNl1xn/fr1CQoK4ssvv2TYsGH5ng8ICADMFmyuyMhIrrzySn755RfuuOOOAtfbuHFj5s6dy5kzZ/K+LFwuR0E2btxIVlYWL7/8MuXKmcNlPvjgg3zLZWVlsXHjRq655hoAdu/ezYkTJ7jqqqsAc7/t3r3brX0tIiVHhVzkT127diU2NpZbbrmFSZMm0bBhQw4dOsTnn3/OLbfcQps2bXj44YcZNGgQbdq0oWPHjsybN48dO3ZQp06dAtcZGBjIE088weOPP05AQADXXnstv//+Ozt27GDo0KFEREQQFBTEsmXLqF69OoGBgYSHhxMfH89DDz1EWFgYcXFxZGRksHHjRo4fP87o0aMZMGAAY8eOZejQofz73/9m//79vPTSS279vnXr1iUrK4vXX3+dXr168b///Y9p06blW87f358HH3yQ1157DX9/fx544AHat2+fV9ifeeYZ/va3vxETE8Ntt91GuXLl2LZtG9u3b+eFF15w/40QEbdo1LrInxwOB59//jnXX389Q4YMoUGDBvTv35/9+/fnjTLv168fzzzzDE888QStW7fmwIEDjBgx4rLrffrpp3nkkUd45plnaNSoEf369SMlJQUwjz+/9tprvP3220RHR9O7d28Ahg0bxn/+8x9mz55Ns2bN6NSpE7Nnz847Xa1ChQp88skn7Ny5k1atWjF27FgmTZrk1u/bsmVLJk+ezKRJk2jatCnz5s0jISEh33LBwcE88cQTDBgwgNjYWIKCgliwYEHe8zfddBOffvopK1eupG3btrRv357JkydTs2ZNt/KISNE4jJI42CYiIiKWUItcRETEi6mQi4iIeDEVchERES+mQi4iIuLFVMhFRES8mAq5iIiIF1MhFxER8WIq5CIiIl5MhVxERMSLqZCLiIh4MRVyERERL/b/AeZGa9TXHTSEAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"### confusion matrix\n",
"\n",
"disp = metrics.ConfusionMatrixDisplay.from_predictions(y_test, predicted, cmap=\"summer\")\n",
"disp.figure_.suptitle(\"Confusion Matrix\")\n",
"\n",
"print(f\"Confusion Matrix:\\n{disp.confusion_matrix}\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "8608e6eb-6dd0-4947-9ee6-dc77f35cecc7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification report for classifier DecisionTreeClassifier():\n",
" precision recall f1-score support\n",
"\n",
" 0 0.97 0.97 0.97 37\n",
" 1 0.84 0.88 0.86 42\n",
" 2 0.81 0.91 0.86 23\n",
" 3 0.93 0.74 0.83 35\n",
" 4 0.79 0.94 0.86 33\n",
" 5 0.86 0.93 0.90 46\n",
" 6 0.95 0.87 0.91 46\n",
" 7 0.97 0.92 0.94 37\n",
" 8 0.82 0.82 0.82 33\n",
" 9 0.85 0.79 0.81 28\n",
"\n",
" accuracy 0.88 360\n",
" macro avg 0.88 0.88 0.88 360\n",
"weighted avg 0.89 0.88 0.88 360\n",
"\n",
"\n"
]
}
],
"source": [
"print(\n",
" f\"Classification report for classifier {clf_dt}:\\n\"\n",
" f\"{metrics.classification_report(y_test, predicted)}\\n\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "42fdd6a5-af00-4155-bc42-44e037d13c2d",
"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.11.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}