{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "49318024-22be-4f0b-8061-bbb3943ad4d2",
   "metadata": {},
   "source": [
    "# MNIST Fashion Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2f5af665-251c-4d25-bb41-0e50a4eddcb1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load libraries\n",
    "# !pip install tensorflow\n",
    "import numpy as np\n",
    "import pandas as pdi\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n",
    "from tensorflow.keras.datasets import fashion_mnist, cifar10\n",
    "\n",
    "# Load Fashion MNIST dataset\n",
    "(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "332556e1-a38a-4ccf-b6d1-8382972bcbae",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training data shape: (60000, 28, 28)\n",
      "Testing data shape: (10000, 28, 28)\n"
     ]
    }
   ],
   "source": [
    "# Define class labels for Fashion MNIST\n",
    "class_labels = [\"T-shirt/Top\", \"Trouser\", \"Pullover\", \"Dress\", \"Coat\", \"Sandal\", \"Shirt\", \"Sneaker\", \"Bag\", \"Ankle Boot\"]\n",
    "\n",
    "# Check dataset shape\n",
    "print(f\"Training data shape: {X_train.shape}\")\n",
    "print(f\"Testing data shape: {X_test.shape}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "332ead94-c7b5-485c-8165-736974bf5794",
   "metadata": {},
   "source": [
    "## Check the class distribution."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8902e816-c856-403a-af25-6a08c2de6a48",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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XDls27Yty4ZfIPlEr4ULF2Lr1q1ISkpK85LIlPXcuHEDQ4cOhb+/v6GrQu+JPcBEREREpCr8qUpEREREqsIATERERESqwgBMRERERKrCk+AyKCkpCffv34eNjQ0nvCYiIiIyQvL/Lyrl4uLyxpNSGYAz6P79+3B1dTV0NYiIiIjoLe7cuYN8+fKlu54BOINsbGwAJL+gtra2Bq4NEREREb0uKioKrq6uSm5LDwNwBumGPdja2jIAExERERmxtw1X5UlwRERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoGD8D37t3Dd999BwcHB+TIkQNlypTByZMnlfUigqCgILi4uCB79uyoUaMGLly4oLeN2NhY9O7dG7ly5YKVlRX8/Pxw9+5dvTIREREICAiAVquFVqtFQEAAnj179jmaSERERERGxKABOCIiAr6+vjAzM8Pff/+NixcvYsqUKciZM6dSZuLEiZg6dSpmz56NkJAQODs7o06dOnj+/LlSJjAwEJs2bcKaNWtw8OBBvHjxAo0bN0ZiYqJSxt/fH6GhoQgODkZwcDBCQ0MREBDwOZtLREREREZAIyJiqCcfMmQIDh06hAMHDqS5XkTg4uKCwMBADB48GEByb6+TkxMmTJiArl27IjIyErlz58aKFSvwzTffAADu378PV1dXbNu2DfXq1UNYWBi++OILHD16FN7e3gCAo0ePwsfHB5cuXYKHh8db6xoVFQWtVovIyEjY2tp+pFeAiIiIiD6WjOY1g/YAb926FV5eXvj666/h6OiIsmXLYuHChcr6GzduIDw8HHXr1lWWWVhYoHr16jh8+DAA4OTJk4iPj9cr4+LighIlSihljhw5Aq1Wq4RfAKhUqRK0Wq1S5nWxsbGIiorSuxERERFR5mdqyCe/fv065s6di/79++PHH3/E8ePH0adPH1hYWOD7779HeHg4AMDJyUnvcU5OTrh16xYAIDw8HObm5rCzs0tVRvf48PBwODo6pnp+R0dHpczrxo0bh9GjR39wGz/E+NP/GfT539eQsrkyXFYNbQTYTmPHz2xqaminGtoIqKOdamgjoJ52fg4G7QFOSkpCuXLlMHbsWJQtWxZdu3ZF586dMXfuXL1yGo1G776IpFr2utfLpFX+TdsZOnQoIiMjldudO3cy2iwiIiIiMmIGDcB58uTBF198obfM09MTt2/fBgA4OzsDQKpe2kePHim9ws7OzoiLi0NERMQbyzx8+DDV8z9+/DhV77KOhYUFbG1t9W5ERERElPkZNAD7+vri8uXLesuuXLmCAgUKAADc3d3h7OyMnTt3Kuvj4uKwf/9+VK5cGQBQvnx5mJmZ6ZV58OABzp8/r5Tx8fFBZGQkjh8/rpQ5duwYIiMjlTJEREREpA4GHQPcr18/VK5cGWPHjkWrVq1w/PhxLFiwAAsWLACQPGwhMDAQY8eORZEiRVCkSBGMHTsWOXLkgL+/PwBAq9WiY8eOGDBgABwcHGBvb4+BAweiZMmSqF27NoDkXuX69eujc+fOmD9/PgCgS5cuaNy4cYZmgCAiIiKirMOgAbhChQrYtGkThg4dijFjxsDd3R3Tp0/Ht99+q5QZNGgQoqOj0aNHD0RERMDb2xs7duyAjY2NUmbatGkwNTVFq1atEB0djVq1amHZsmUwMTFRyqxatQp9+vRRZovw8/PD7NmzP19jiYiIiMgoGDQAA0Djxo3RuHHjdNdrNBoEBQUhKCgo3TKWlpaYNWsWZs2alW4Ze3t7rFy58kOqSkRERERZgMEvhUxERERE9DkxABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqhg0AAcFBUGj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nHDr1i2ljLm5uV7Psa6M7vHh4eFwdHRMtX1HR0elTFrGjRuH0aNHv1uDiIiIiMjoGawH+M6dO+jbty9WrlwJS0vLdMtpNBq9+yKSatnrXi+TVvm3bWfo0KGIjIxUbnfu3HnjcxIRERFR5mCwAHzy5Ek8evQI5cuXh6mpKUxNTbF//37MnDkTpqamSs/v6720jx49UtY5OzsjLi4OERERbyzz8OHDVM//+PHjVL3LKVlYWMDW1lbvRkRERESZn8ECcK1atXDu3DmEhoYqNy8vL3z77bcIDQ1FwYIF4ezsjJ07dyqPiYuLw/79+1G5cmUAQPny5WFmZqZX5sGDBzh//rxSxsfHB5GRkTh+/LhS5tixY4iMjFTKEBEREZF6GGwMsI2NDUqUKKG3zMrKCg4ODsrywMBAjB07FkWKFEGRIkUwduxY5MiRA/7+/gAArVaLjh07YsCAAXBwcIC9vT0GDhyIkiVLKifVeXp6on79+ujcuTPmz58PAOjSpQsaN24MDw+Pz9hiIiIiIjIGBj0J7m0GDRqE6Oho9OjRAxEREfD29saOHTtgY2OjlJk2bRpMTU3RqlUrREdHo1atWli2bBlMTEyUMqtWrUKfPn2U2SL8/Pwwe/bsz94eIiIiIjI8owrA+/bt07uv0WgQFBSEoKCgdB9jaWmJWbNmYdasWemWsbe3x8qVKz9SLYmIiIgoMzP4PMBERERERJ8TAzARERERqQoDMBERERGpCgMwEREREakKAzARERERqQoDMBERERGpCgMwEREREakKAzARERERqQoDMBERERGpCgMwEREREakKAzARERERqQoDMBERERGpCgMwEREREakKAzARERERqQoDMBERERGpCgMwEREREakKAzARERERqQoDMBERERGpCgMwEREREakKAzARERERqQoDMBERERGpCgMwEREREakKAzARERERqQoDMBERERGpCgMwEREREakKAzARERERqQoDMBERERGpynsF4IIFC+LJkyeplj979gwFCxb84EoREREREX0q7xWAb968icTExFTLY2Njce/evQ+uFBERERHRp2L6LoW3bt2q/H/79u3QarXK/cTEROzevRtubm4frXJERERERB/bOwXgpk2bAgA0Gg3atm2rt87MzAxubm6YMmXKR6scEREREdHH9k4BOCkpCQDg7u6OkJAQ5MqV65NUioiIiIjoU3mnAKxz48aNj10PIiIiIqLP4r0CMADs3r0bu3fvxqNHj5SeYZ0lS5Z8cMWIiIiIiD6F9wrAo0ePxpgxY+Dl5YU8efJAo9F87HoREREREX0S7xWA582bh2XLliEgIOBj14eIiIiI6JN6r3mA4+LiULly5Y9dFyIiIiKiT+69AnCnTp2wevXqj10XIiIiIqJP7r2GQMTExGDBggXYtWsXSpUqBTMzM731U6dO/SiVIyIiIiL62N4rAJ89exZlypQBAJw/f15vHU+IIyIiIiJj9l4BeO/evR+7HkREREREn8V7jQEmIiIiIsqs3qsHuGbNmm8c6rBnz573rhARERER0af0XgFYN/5XJz4+HqGhoTh//jzatm37MepFRERERPRJvFcAnjZtWprLg4KC8OLFiw+qEBERERHRp/RRxwB/9913WLJkycfcJBERERHRR/VRA/CRI0dgaWn5MTdJRERERPRRvdcQiObNm+vdFxE8ePAAJ06cwIgRIz5KxYiIiIiIPoX3CsBarVbvfrZs2eDh4YExY8agbt26H6ViRERERESfwnsF4KVLl37sehARERERfRYfNAb45MmTWLlyJVatWoXTp0+/8+Pnzp2LUqVKwdbWFra2tvDx8cHff/+trBcRBAUFwcXFBdmzZ0eNGjVw4cIFvW3Exsaid+/eyJUrF6ysrODn54e7d+/qlYmIiEBAQAC0Wi20Wi0CAgLw7Nmz92ozEREREWVu7xWAHz16hC+//BIVKlRAnz590KtXL5QvXx61atXC48ePM7ydfPnyYfz48Thx4gROnDiBL7/8El999ZUScidOnIipU6di9uzZCAkJgbOzM+rUqYPnz58r2wgMDMSmTZuwZs0aHDx4EC9evEDjxo2RmJiolPH390doaCiCg4MRHByM0NBQBAQEvE/TiYiIiCiTe68A3Lt3b0RFReHChQt4+vQpIiIicP78eURFRaFPnz4Z3k6TJk3QsGFDFC1aFEWLFsXPP/8Ma2trHD16FCKC6dOnY9iwYWjevDlKlCiB5cuX49WrV1i9ejUAIDIyEosXL8aUKVNQu3ZtlC1bFitXrsS5c+ewa9cuAEBYWBiCg4OxaNEi+Pj4wMfHBwsXLsSff/6Jy5cvv0/ziYiIiCgTe68AHBwcjLlz58LT01NZ9sUXX+CXX37RG8LwLhITE7FmzRq8fPkSPj4+uHHjBsLDw/VOqrOwsED16tVx+PBhAMlDMOLj4/XKuLi4oESJEkqZI0eOQKvVwtvbWylTqVIlaLVapUxaYmNjERUVpXcjIiIioszvvQJwUlISzMzMUi03MzNDUlLSO23r3LlzsLa2hoWFBbp164ZNmzbhiy++QHh4OADAyclJr7yTk5OyLjw8HObm5rCzs3tjGUdHx1TP6+joqJRJy7hx45Qxw1qtFq6uru/ULiIiIiIyTu8VgL/88kv07dsX9+/fV5bdu3cP/fr1Q61atd5pWx4eHggNDcXRo0fRvXt3tG3bFhcvXlTWazQavfIikmrZ614vk1b5t21n6NChiIyMVG537tzJaJOIiIiIyIi9VwCePXs2nj9/Djc3NxQqVAiFCxeGu7s7nj9/jlmzZr3TtszNzVG4cGF4eXlh3LhxKF26NGbMmAFnZ2cASNVL++jRI6VX2NnZGXFxcYiIiHhjmYcPH6Z63sePH6fqXU7JwsJCmZ1CdyMiIiKizO+9ArCrqytOnTqFv/76C4GBgejTpw+2bduGkydPIl++fB9UIRFBbGws3N3d4ezsjJ07dyrr4uLisH//flSuXBkAUL58eZiZmemVefDgAc6fP6+U8fHxQWRkJI4fP66UOXbsGCIjI5UyRERERKQe73QhjD179qBXr144evQobG1tUadOHdSpUwdA8owMxYsXx7x581C1atUMbe/HH39EgwYN4OrqiufPn2PNmjXYt28fgoODodFoEBgYiLFjx6JIkSIoUqQIxo4dixw5csDf3x9A8hXpOnbsiAEDBsDBwQH29vYYOHAgSpYsidq1awMAPD09Ub9+fXTu3Bnz588HAHTp0gWNGzeGh4fHuzSfiIiIiLKAdwrA06dPR+fOndMcDqDVatG1a1dMnTo1wwH44cOHCAgIwIMHD6DValGqVCkEBwcroXrQoEGIjo5Gjx49EBERAW9vb+zYsQM2NjbKNqZNmwZTU1O0atUK0dHRqFWrFpYtWwYTExOlzKpVq9CnTx9ltgg/Pz/Mnj37XZpORERERFnEOwXgM2fOYMKECemur1u3LiZPnpzh7S1evPiN6zUaDYKCghAUFJRuGUtLS8yaNeuNY4/t7e2xcuXKDNeLiIiIiLKudxoD/PDhwzSnP9MxNTV9pyvBERERERF9bu8UgPPmzYtz586lu/7s2bPIkyfPB1eKiIiIiOhTeacA3LBhQ4wcORIxMTGp1kVHR2PUqFFo3LjxR6scEREREdHH9k5jgIcPH46NGzeiaNGi6NWrFzw8PKDRaBAWFoZffvkFiYmJGDZs2KeqKxERERHRB3unAOzk5ITDhw+je/fuGDp0KEQEQPLJavXq1cOcOXPeeHEJIiIiIiJDe6cADAAFChTAtm3bEBERgX///RcigiJFisDOzu5T1I+IiIiI6KN65wCsY2dnhwoVKnzMuhARERERfXLvdSlkIiIiIqLMigGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFSFAZiIiIiIVIUBmIiIiIhUhQGYiIiIiFTFoAF43LhxqFChAmxsbODo6IimTZvi8uXLemVEBEFBQXBxcUH27NlRo0YNXLhwQa9MbGwsevfujVy5csHKygp+fn64e/euXpmIiAgEBARAq9VCq9UiICAAz549+9RNJCIiIiIjY9AAvH//fvTs2RNHjx7Fzp07kZCQgLp16+Lly5dKmYkTJ2Lq1KmYPXs2QkJC4OzsjDp16uD58+dKmcDAQGzatAlr1qzBwYMH8eLFCzRu3BiJiYlKGX9/f4SGhiI4OBjBwcEIDQ1FQEDAZ20vERERERmeqSGfPDg4WO/+0qVL4ejoiJMnT6JatWoQEUyfPh3Dhg1D8+bNAQDLly+Hk5MTVq9eja5duyIyMhKLFy/GihUrULt2bQDAypUr4erqil27dqFevXoICwtDcHAwjh49Cm9vbwDAwoUL4ePjg8uXL8PDwyNV3WJjYxEbG6vcj4qK+lQvAxERERF9RkY1BjgyMhIAYG9vDwC4ceMGwsPDUbduXaWMhYUFqlevjsOHDwMATp48ifj4eL0yLi4uKFGihFLmyJEj0Gq1SvgFgEqVKkGr1SplXjdu3DhluIRWq4Wrq+vHbSwRERERGYTRBGARQf/+/VGlShWUKFECABAeHg4AcHJy0ivr5OSkrAsPD4e5uTns7OzeWMbR0THVczo6OiplXjd06FBERkYqtzt37nxYA4mIiIjIKBh0CERKvXr1wtmzZ3Hw4MFU6zQajd59EUm17HWvl0mr/Ju2Y2FhAQsLi4xUnYiIiIgyEaPoAe7duze2bt2KvXv3Il++fMpyZ2dnAEjVS/vo0SOlV9jZ2RlxcXGIiIh4Y5mHDx+met7Hjx+n6l0mIiIioqzNoAFYRNCrVy9s3LgRe/bsgbu7u956d3d3ODs7Y+fOncqyuLg47N+/H5UrVwYAlC9fHmZmZnplHjx4gPPnzytlfHx8EBkZiePHjytljh07hsjISKUMEREREamDQYdA9OzZE6tXr8aWLVtgY2Oj9PRqtVpkz54dGo0GgYGBGDt2LIoUKYIiRYpg7NixyJEjB/z9/ZWyHTt2xIABA+Dg4AB7e3sMHDgQJUuWVGaF8PT0RP369dG5c2fMnz8fANClSxc0btw4zRkgiIiIiCjrMmgAnjt3LgCgRo0aesuXLl2Kdu3aAQAGDRqE6Oho9OjRAxEREfD29saOHTtgY2OjlJ82bRpMTU3RqlUrREdHo1atWli2bBlMTEyUMqtWrUKfPn2U2SL8/Pwwe/bsT9tAIiIiIjI6Bg3AIvLWMhqNBkFBQQgKCkq3jKWlJWbNmoVZs2alW8be3h4rV658n2oSERERURZiFCfBERERERF9LgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqBg3A//zzD5o0aQIXFxdoNBps3rxZb72IICgoCC4uLsiePTtq1KiBCxcu6JWJjY1F7969kStXLlhZWcHPzw93797VKxMREYGAgABotVpotVoEBATg2bNnn7h1RERERGSMDBqAX758idKlS2P27Nlprp84cSKmTp2K2bNnIyQkBM7OzqhTpw6eP3+ulAkMDMSmTZuwZs0aHDx4EC9evEDjxo2RmJiolPH390doaCiCg4MRHByM0NBQBAQEfPL2EREREZHxMTXkkzdo0AANGjRIc52IYPr06Rg2bBiaN28OAFi+fDmcnJywevVqdO3aFZGRkVi8eDFWrFiB2rVrAwBWrlwJV1dX7Nq1C/Xq1UNYWBiCg4Nx9OhReHt7AwAWLlwIHx8fXL58GR4eHp+nsURERERkFIx2DPCNGzcQHh6OunXrKsssLCxQvXp1HD58GABw8uRJxMfH65VxcXFBiRIllDJHjhyBVqtVwi8AVKpUCVqtVimTltjYWERFRendiIiIiCjzM9oAHB4eDgBwcnLSW+7k5KSsCw8Ph7m5Oezs7N5YxtHRMdX2HR0dlTJpGTdunDJmWKvVwtXV9YPaQ0RERETGwWgDsI5Go9G7LyKplr3u9TJplX/bdoYOHYrIyEjldufOnXesOREREREZI6MNwM7OzgCQqpf20aNHSq+ws7Mz4uLiEBER8cYyDx8+TLX9x48fp+pdTsnCwgK2trZ6NyIiIiLK/Iw2ALu7u8PZ2Rk7d+5UlsXFxWH//v2oXLkyAKB8+fIwMzPTK/PgwQOcP39eKePj44PIyEgcP35cKXPs2DFERkYqZYiIiIhIPQw6C8SLFy/w77//Kvdv3LiB0NBQ2NvbI3/+/AgMDMTYsWNRpEgRFClSBGPHjkWOHDng7+8PANBqtejYsSMGDBgABwcH2NvbY+DAgShZsqQyK4Snpyfq16+Pzp07Y/78+QCALl26oHHjxpwBgoiIiEiFDBqAT5w4gZo1ayr3+/fvDwBo27Ytli1b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XQBA7969MW7cOGzZsgWXL19G3759ERERofTuWllZoXv37vjhhx8QHByMixcvonPnznj16hU6duz41jZ6enqiUqVKGDx4MNq0aYPs2bO/9+tFRFkPAzARUQaVKVMGU6dOxYQJE1CiRAmsWrUK48aN0yuTmJiInj17wtPTE/Xr14eHhwfmzJnz3s/Zp08fDBgwAAMGDEDJkiURHByMrVu3okiRIh/Ulq+++gqHDx+GmZkZ/P39UaxYMbRp0waRkZH46aefAADdunVD8+bN8c0338Db2xtPnjxBjx499LbTuXNneHh4KOOEDx06hBw5cuCff/5B/vz50bx5c3h6eqJDhw6Ijo6Gra0tACjB9Pvvv4ePjw+sra1Rr149WFpaKtseP348WrRogYCAAJQrVw7//vsvtm/fDjs7uwy1sWPHjoiLi+PwByJKRSPvcjYEERHRJ5CUlARPT0+0atUK//vf/z7KNn/++WesWbMG586d+yjbI6Ksw9TQFSAiIvW5desWduzYgerVqyM2NhazZ8/GjRs39E6Se18vXrxAWFgYZs2a9dHCNBFlLRwCQUREn122bNmwbNkyVKhQAb6+vjh37hx27dr1QeOldXr16oUqVaqgevXqHP5ARGniEAgiIiIiUhX2ABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGqMAATERERkaowABMRERGRqjAAExEREZGq/D8jajU/B4AIEgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Count occurrences of each class\n",
    "unique, counts = np.unique(y_train, return_counts=True)\n",
    "\n",
    "# Plot\n",
    "plt.figure(figsize=(8, 5))\n",
    "plt.bar(unique, counts, color=\"skyblue\")\n",
    "plt.xticks(ticks=unique, labels=class_labels, rotation=45)\n",
    "plt.title(\"Class Distribution of Training Data (MNIST Fashion)\")\n",
    "plt.xlabel(\"Fashion Category\")\n",
    "plt.ylabel(\"Count\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d2c464ef-f69c-482a-ab47-26cfe4c74f8e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAIFCAYAAADcCkvoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB6kElEQVR4nO3dd1gUV9sG8HvpIkVEAVEUVOxYUVSMShR7b7HG3ht2jQ2NvbeoUWOJJZZYkxgbllgTULF3sYtdsNB5vj/4dl5WQFHRXZj7d1176c6c3X2GbfeeOXNGIyICIiIiIiKVMNJ3AUREREREXxMDMBERERGpCgMwEREREakKAzARERERqQoDMBERERGpCgMwEREREakKAzARERERqQoDMBERERGpCgMwEREREakKAzBlKGfPnkXHjh3h5uYGCwsLWFlZoXTp0pg2bRqeP3+utKtatSqqVq2qv0JToNFolIuxsTHs7OxQokQJdO/eHSdOnEjS/tatW9BoNFi5cuVHPc66deswZ86cj7pNco/l7+8PjUaDp0+fftR9vc/Fixfh7++PW7duJVnXoUMHuLq6ptljfQnPnz9Hy5Yt4eDgAI1Gg0aNGiVps3LlSp3nOqVLWm3rsWPH4O/vj5cvXyZZp8/3QtWqVZVtNTIygrW1NfLnz4/mzZvj999/R3x8/Cff96e8xj9Gp06dUKtWLeW69v2h0Wjg7++f4m20bRLT/h0S39+79ztjxgxl2cGDB6HRaPD777/rtP3333/RuHFj5M6dG+bm5nB0dESFChUwaNAgAGnzutM+dnKXZs2afejP9lG09QYFBX2w7dd4Hf/yyy/ImTMn3rx580Ufh74OE30XQJRWli5dil69eqFgwYIYMmQIihQpgpiYGAQFBWHx4sU4fvw4tm7dqu8yP6hZs2YYNGgQRATh4eE4f/48fv31VyxZsgT9+vXD3LlzlbY5cuTA8ePHkS9fvo96jHXr1uH8+fPw8/NL9W0+9bE+1sWLFzFu3DhUrVo1yRfx6NGj0b9//y/6+J/rxx9/xNatW7F8+XLky5cPWbNmTdKmbt26OH78uM6yChUqKM+9lrm5eZrUdOzYMYwbNw4dOnRAlixZdNYtXLgwTR7jU+XNmxdr164FALx58wYhISHYtm0bmjdvjm+++QZ//PEHbG1tP/p+P+U1nlqnT5/GqlWr8O+//yZZZ21tjZUrV2LMmDEwMvpfH9Pr16+xadMm2NjYIDw8PNn73b17N/bv349vv/32o2v666+/0KBBA1StWhXTpk1Djhw58PDhQwQFBWH9+vWYOXNmmr7uJk2aBB8fH51l9vb2H113Wvkar+P27dtj6tSpmDZtGsaNG/fFH4++LAZgyhCOHz+Onj17wtfXF9u2bdP5APf19cWgQYOwa9cuPVaYeo6OjihfvrxyvWbNmvDz80O3bt0wb948FCpUCD179gSQ8EWVuO2XEBcXh9jY2K/yWB/ypcN3Wjh//jzy5cuHNm3apNgme/bsyJ49e5Ll7z73X0ORIkW+6uO9K1OmTEm2uUuXLlixYgU6deqEbt26YcOGDXqqLnlTpkxBuXLl4OnpmWTdd999h2XLliEgIAC+vr7K8g0bNiAuLg6NGjXCmjVrktyuQIECiI2NxdChQxEYGJikl/hDpk2bBjc3N+zevRsmJv/7am/ZsiWmTZsGIG1fd+7u7nr/PEjsa7yOTUxM0L17d/z4448YNmwYLC0tv/hj0pfDIRCUIUyaNAkajQZLlixJtvfCzMwMDRo0eO99jBs3Dl5eXsiaNStsbGxQunRp/PLLLxARnXb79+9H1apVYW9vj0yZMiF37txo2rQp3r59q7RZtGgRSpQoASsrK1hbW6NQoUL44YcfPnn7jI2NsWDBAmTLlg3Tp09Xlic3LOHJkyfo1q0bXFxcYG5ujuzZs8Pb2xv79u0DkLCr8K+//sLt27d1dl8mvr9p06ZhwoQJcHNzg7m5OQ4cOPDe4RZ3795FkyZNYGNjA1tbW7Rt2xZPnjzRaZPSrmFXV1d06NABQMIuz+bNmwMAfHx8lNq0j5ncEIjIyEiMGDECbm5uMDMzQ86cOdG7d+8ku/tdXV1Rr1497Nq1C6VLl0amTJlQqFAhLF++/AN//QTPnz9Hr169kDNnTpiZmSFv3rwYOXIkoqKidP52+/btw6VLl5TaDx48mKr7T861a9fQunVrODg4wNzcHIULF8ZPP/2k0yY+Ph4TJkxAwYIFkSlTJmTJkgXFixdX9hT4+/tjyJAhAAA3N7ckdb276zjxLvdZs2bBzc0NVlZWqFChQrLDcJYuXYoCBQrA3NwcRYoUwbp169JkqErHjh1Rp04dbNq0Cbdv31aW//TTT6hcuTIcHByQOXNmeHh4YNq0aYiJiVHavO81DqT+vZ6cR48eYevWrWjXrl2y6wsWLIiKFSsmeV0tX74cTZo0SbE329TUFBMnTsTJkyc/KfA/e/YM2bJl0wm/Wol7or+0J0+eoFevXihSpAisrKzg4OCAb7/9FocPH07SNrWfk69evULPnj2RLVs22Nvbo0mTJnjw4IFOm+SGQHzoPaul0WjQp08frF69GoULF4alpSVKlCiBP//8M0ktbdq0QXh4ONavX/8Jfx0yJOwBpnQvLi4O+/fvR5kyZeDi4vLJ93Pr1i10794duXPnBgCcOHECffv2xf379zFmzBilTd26dfHNN99g+fLlyJIlC+7fv49du3YhOjoalpaWWL9+PXr16oW+fftixowZMDIywvXr13Hx4sXP2s5MmTKhevXqWL9+Pe7du4dcuXIl265du3Y4deoUJk6ciAIFCuDly5c4deoUnj17BiBhV2G3bt1w48aNFIeEzJs3DwUKFMCMGTNgY2MDd3f399bWuHFjtGjRAj169MCFCxcwevRoXLx4Ef/++y9MTU1TvY1169bFpEmT8MMPP+Cnn35C6dKlAaTc8ysiaNSoEQICAjBixAh88803OHv2LMaOHYvjx4/j+PHjOj+Izpw5g0GDBmH48OFwdHTEsmXL0LlzZ+TPnx+VK1dOsa7IyEj4+Pjgxo0bGDduHIoXL47Dhw9j8uTJCA4Oxl9//aUMEenVqxfCwsKU3fqf2jN18eJFVKxYEblz58bMmTPh5OSE3bt3o1+/fnj69CnGjh0LIKHnz9/fH6NGjULlypURExODy5cvKz8AunTpgufPn2P+/PnYsmULcuTIkaq6fvrpJxQqVEgZRzt69GjUqVMHISEhSohbsmQJunfvjqZNm2L27NkICwvDuHHjkgSMT9WgQQPs3LkThw8fRp48eQAAN27cQOvWrZUfPGfOnMHEiRNx+fJlJXR+6DWemvd6Svbs2YOYmJgku/8T69y5M3r37o0XL17Azs4OV65cwbFjxzBhwgRs3rw5xdt99913mDFjBkaNGoWmTZt+1HunQoUKWLZsGfr164c2bdqgdOnSH3X7jxUfH4/Y2FidZSYmJsqxFmPHjoWTkxNev36NrVu3omrVqggICFBC6sd8Tnbp0gV169bFunXrcPfuXQwZMgRt27bF/v37U6wvNe/ZxP766y8EBgZi/PjxsLKywrRp09C4cWNcuXIFefPmVdo5OTmhUKFC+Ouvv9CpU6dP/fORIRCidC40NFQASMuWLVN9mypVqkiVKlVSXB8XFycxMTEyfvx4sbe3l/j4eBER+f333wWABAcHp3jbPn36SJYsWVJdS2IApHfv3imuHzZsmACQf//9V0REQkJCBICsWLFCaWNlZSV+fn7vfZy6detKnjx5kizX3l++fPkkOjo62XWJH2vs2LECQAYMGKDTdu3atQJA1qxZo7NtY8eOTfKYefLkkfbt2yvXN23aJADkwIEDSdq2b99ep+5du3YJAJk2bZpOuw0bNggAWbJkic7jWFhYyO3bt5VlERERkjVrVunevXuSx0ps8eLFAkA2btyos3zq1KkCQPbs2aMsq1KlihQtWvS995ecd5/7mjVrSq5cuSQsLEynXZ8+fcTCwkKeP38uIiL16tWTkiVLvve+p0+fLgAkJCQkybp33wva59nDw0NiY2OV5f/9958AkN9++01EEt4jTk5O4uXlpXN/t2/fFlNT02RfX8k99vv+Vn///bcAkKlTpya7Xvs+/fXXX8XY2Fj5m4ik/BpP6T7efa+npGfPnpIpU6Yk7bR/t+nTp8urV6/EyspKFixYICIiQ4YMETc3N4mPj5fevXvLu1+9if8O+/btEwAyf/78JPerdeDAAQEgmzZtUpY9ffpUKlWqJAAEgJiamkrFihVl8uTJ8urVqxS350OfOe/SPnZyl2vXriVpHxsbKzExMVKtWjVp3Lixsjw1n5MrVqwQANKrVy+d5dOmTRMA8vDhQ2XZu6/jj3nPAhBHR0cJDw9XloWGhoqRkZFMnjw5SV1t2rQRR0fH99ZOho9DIIj+3/79+1G9enXY2trC2NgYpqamGDNmDJ49e4bHjx8DAEqWLAkzMzN069YNq1atws2bN5PcT7ly5fDy5Uu0atUK27dvT9MZEiQVu2jLlSuHlStXYsKECThx4oTOruHUatCgwUf1Hr073rVFixYwMTHBgQMHPvqxP4a2B0g7hEKrefPmyJw5MwICAnSWlyxZUun1AwALCwsUKFBAZxd7So+TOXPmJEe5ax/33cf5XJGRkQgICEDjxo1haWmJ2NhY5VKnTh1ERkYqwxHKlSuHM2fOoFevXti9e3eKB1h9rLp168LY2Fi5Xrx4cQBQ/lZXrlxBaGgoWrRooXO73Llzw9vbO01qSO71fvr0aTRo0AD29vbK+/T7779HXFwcrl69mqr7Tc17PSUPHjxA9uzZ3ztG18rKCs2bN8fy5csRGxuLX3/9FR07dkzVuN5q1aqhRo0aGD9+PF69epWq7QESDkA7fPgwAgMDMWXKFDRs2BBXr17FiBEj4OHhkaafQwAwdepUBAYG6ly0e+AWL16M0qVLw8LCAiYmJjA1NUVAQAAuXbqk3P5jPiffHb727msxOR/7nvXx8YG1tbVy3dHREQ4ODsk+hoODAx4/fpykB5zSFwZgSveyZcsGS0tLhISEfPJ9/Pfff6hRowaAhDGNR48eRWBgIEaOHAkAiIiIAJCwK37fvn1wcHBA7969kS9fPuTLl09nZoZ27dph+fLluH37Npo2bQoHBwd4eXlh7969n7GVCbQfxs7Ozim22bBhA9q3b49ly5ahQoUKyJo1K77//nuEhoam+nG0u8lTy8nJSee6iYkJ7O3tlWEXX8qzZ89gYmKS5MAejUYDJyenJI+f3FHq5ubmyvP7vsdxcnJKEmAcHBxgYmKS5tv57NkzxMbGYv78+TA1NdW51KlTBwCUwDBixAjMmDEDJ06cQO3atWFvb49q1aqlauqo93n3b6UdSqL9W2m32dHRMcltk1v2Kd59vd+5cwfffPMN7t+/j7lz5yqBTzsu+kPPI5D693pKIiIiYGFh8cHH6dy5szIU6cmTJ0l+pL3P1KlT8fTpU52pz1LL09MTw4YNw6ZNm/DgwQMMGDAAt27dUg6ESyt58+aFp6enzsXc3ByzZs1Cz5494eXlhc2bN+PEiRMIDAxErVq1dP62H/M5+aHXYnI+9j37MZ8NFhYWEBFERkam+Phk+BiAKd0zNjZGtWrVcPLkSdy7d++T7mP9+vUwNTXFn3/+iRYtWqBixYrJHuENQJmaKSwsDCdOnECFChXg5+enc1BEx44dcezYMYSFheGvv/6CiKBevXof7Gl8n4iICOzbtw/58uVLcfwvkPCDYM6cObh16xZu376NyZMnY8uWLR/1BfyxR6C/G65jY2Px7NkznS8Vc3PzZMeGfk54tLe3R2xsbJID7kQEoaGhyJYt2yff97uP8+jRoyQ9ktpeoLR6HC07OzsYGxujQ4cOSXrZtBdtEDYxMcHAgQNx6tQpPH/+HL/99hvu3r2LmjVr6hyYmda0z+2jR4+SrPuYH1vvs2PHDmg0GmV89rZt2/DmzRts2bIFbdu2RaVKleDp6QkzM7NU3+fHvNeTky1bNp05xVPi7e2NggULYvz48fD19f2o4xNKliyJVq1aYdasWcn+fVPL1NRUGSt+/vz5T76fj7FmzRpUrVoVixYtQt26deHl5QVPT89ke7O/xOek1pd8zz5//hzm5uawsrL63DJJjxiAKUMYMWIERARdu3ZFdHR0kvUxMTH4448/Ury9RqOBiYmJzi7fiIgIrF69OsXbGBsbw8vLS+l9OnXqVJI2mTNnRu3atTFy5EhER0fjwoULH7NZiri4OPTp0wfPnj3DsGHDUn273Llzo0+fPvD19dWpLzW9nh9De8CX1saNGxEbG6tzVLarqyvOnj2r027//v14/fq1zrLU9O5oVatWDQCSTCu1efNmvHnzRln/uapVq4bXr19j27ZtOst//fVXnTrSiqWlJXx8fHD69GkUL148SU+bp6dnsj1WWbJkQbNmzdC7d288f/5cOZnIx/xNU6tgwYJwcnLCxo0bdZbfuXMHx44d++z7X7FiBf7++2+0atVKGbai/WGW+MBGEcHSpUuT3D6l1/invNcTK1SoEJ49e4awsLAPth01ahTq16+vM8duak2YMAHR0dGpnm/24cOHyS7XDjt4316jtKTRaJLMxHP27Nkk8w8nllafk4l9yffszZs39T59IH0+zgJBGUKFChWwaNEi9OrVC2XKlEHPnj1RtGhRxMTE4PTp01iyZAmKFSuG+vXrJ3v7unXrYtasWWjdujW6deuGZ8+eYcaMGUk+yBcvXoz9+/ejbt26yJ07NyIjI5Ujz6tXrw4A6Nq1KzJlygRvb2/kyJEDoaGhmDx5MmxtbVG2bNkPbsujR49w4sQJiAhevXqlnAjjzJkzGDBgALp27ZribcPCwuDj44PWrVujUKFCsLa2RmBgIHbt2oUmTZoo7Tw8PLBlyxYsWrQIZcqUgZGR0Uf1gr1ry5YtMDExga+vrzILRIkSJXTGh7Zr1w6jR4/GmDFjUKVKFVy8eBELFixIMi1UsWLFACTMMGBtbQ0LCwu4ubklG/h8fX1Rs2ZNDBs2DOHh4fD29lZmgShVqlSKU1V9rO+//x4//fQT2rdvj1u3bsHDwwNHjhzBpEmTUKdOHeW5T0tz585FpUqV8M0336Bnz55wdXXFq1evcP36dfzxxx/K+Of69eujWLFi8PT0RPbs2XH79m3MmTMHefLkUWbv8PDwUO6zffv2MDU1RcGCBXXGPH4sIyMjjBs3Dt27d0ezZs3QqVMnvHz5EuPGjUOOHDlSPfVWRESEMp45IiICN2/exLZt2/Dnn3+iSpUqWLx4sdLW19cXZmZmaNWqFYYOHYrIyEgsWrQIL168SHK/Kb3GU/teT0nVqlUhIvj333+VoRQpadu2Ldq2bZuq+32Xm5sbevbsqTO86n1q1qyJXLlyoX79+ihUqBDi4+MRHByMmTNnwsrK6qudQKZevXr48ccfMXbsWFSpUgVXrlzB+PHj4ebmpjNm9nM/Jz/kS71n4+Pj8d9//6Fz586fXSPpmX6OvSP6MoKDg6V9+/aSO3duMTMzk8yZM0upUqVkzJgx8vjxY6VdcrNALF++XAoWLCjm5uaSN29emTx5svzyyy86R88fP35cGjduLHny5BFzc3Oxt7eXKlWqyI4dO5T7WbVqlfj4+Iijo6OYmZmJs7OztGjRQs6ePfvB+pHoiGojIyOxsbERDw8P6datmxw/fjxJ+3dnZoiMjJQePXpI8eLFxcbGRjJlyiQFCxaUsWPHyps3b5TbPX/+XJo1ayZZsmQRjUajHJWe3BHnKT2WyP9mgTh58qTUr19frKysxNraWlq1aiWPHj3SuX1UVJQMHTpUXFxcJFOmTFKlShUJDg5OMguEiMicOXPEzc1NjI2NdR7z3VkgRBJmchg2bJjkyZNHTE1NJUeOHNKzZ0958eKFTrs8efJI3bp1k2zXh2YE0Xr27Jn06NFDcuTIISYmJpInTx4ZMWKEREZGJrm/tJgFQiThb96pUyfJmTOnmJqaSvbs2aVixYoyYcIEpc3MmTOlYsWKki1bNjEzM5PcuXNL586d5datWzr3NWLECHF2dhYjIyOdWTZSmgUiudcAkpnJY8mSJZI/f34xMzOTAgUKyPLly6Vhw4ZSqlSpD25zlSpVdF7zmTNnlrx580qzZs1k06ZNEhcXl+Q2f/zxh5QoUUIsLCwkZ86cMmTIEGW2iMQzh6T0GhdJ3Xs9JXFxceLq6ppkZoL3/d0S+9AsEIk9efJEbGxsUjULxIYNG6R169bi7u4uVlZWYmpqKrlz55Z27drJxYsXU6wnudfd+yT32IlFRUXJ4MGDJWfOnGJhYSGlS5eWbdu2JXnvpuZzUjsLRGBgYLI1JH6+k3sfp/Y9m9LfILnPpoCAAOUzj9I3jUgqDisnIiJKhZcvX6JAgQJo1KgRlixZou9yvoiZM2di4sSJuH//PjJlyqTvcugrateuHW7evImjR4/quxT6TAzARET0SUJDQzFx4kT4+PjA3t4et2/fxuzZs3H58mUEBQWhaNGi+i7xi4iMjEThwoXRu3dvDB48WN/l0Fdy48YNFC5cGPv370elSpX0XQ59Jo4BJiKiT2Jubo5bt26hV69eeP78OSwtLVG+fHksXrw4w4ZfIGEarNWrV+P06dP6LoW+ojt37mDBggUMvxkEe4CJiIiISFU4DRoRERERqQoDMBERERGpCgMwEREREakKD4JLpfj4eDx48ADW1tYffZpYIiIiIvry5P9PIuXs7PzeE/IwAKfSgwcPPupc7kRERESkH3fv3kWuXLlSXM8AnEraU4bevXsXNjY2eq6GiIiIiN4VHh4OFxeXD57qnQE4lbTDHmxsbBiAiYiIiAzYh4ar8iA4IiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhW9BuB//vkH9evXh7OzMzQaDbZt26azXkTg7+8PZ2dnZMqUCVWrVsWFCxd02kRFRaFv377Ili0bMmfOjAYNGuDevXs6bV68eIF27drB1tYWtra2aNeuHV6+fPmFt46IiIiIDJFeA/CbN29QokQJLFiwINn106ZNw6xZs7BgwQIEBgbCyckJvr6+ePXqldLGz88PW7duxfr163HkyBG8fv0a9erVQ1xcnNKmdevWCA4Oxq5du7Br1y4EBwejXbt2X3z7iIiIiMjwaERE9F0EAGg0GmzduhWNGjUCkND76+zsDD8/PwwbNgxAQm+vo6Mjpk6diu7duyMsLAzZs2fH6tWr8d133wEAHjx4ABcXF+zcuRM1a9bEpUuXUKRIEZw4cQJeXl4AgBMnTqBChQq4fPkyChYsmKr6wsPDYWtri7CwMNjY2KT9H4CIiIiIPktq85rBjgEOCQlBaGgoatSooSwzNzdHlSpVcOzYMQDAyZMnERMTo9PG2dkZxYoVU9ocP34ctra2SvgFgPLly8PW1lZpk5yoqCiEh4frXIiIiIgo/TPRdwEpCQ0NBQA4OjrqLHd0dMTt27eVNmZmZrCzs0vSRnv70NBQODg4JLl/BwcHpU1yJk+ejHHjxn3WNnyuKaef6vXxP9XwUtlS3VYN2whwOw0dX7NJqWE71bCNgDq2Uw3bCKhnO78Gg+0B1tJoNDrXRSTJsne92ya59h+6nxEjRiAsLEy53L179yMrJyIiIiJDZLAB2MnJCQCS9NI+fvxY6RV2cnJCdHQ0Xrx48d42jx49SnL/T548SdK7nJi5uTlsbGx0LkRERESU/hlsAHZzc4OTkxP27t2rLIuOjsahQ4dQsWJFAECZMmVgamqq0+bhw4c4f/680qZChQoICwvDf//9p7T5999/ERYWprQhIiIiIvXQ6xjg169f4/r168r1kJAQBAcHI2vWrMidOzf8/PwwadIkuLu7w93dHZMmTYKlpSVat24NALC1tUXnzp0xaNAg2NvbI2vWrBg8eDA8PDxQvXp1AEDhwoVRq1YtdO3aFT///DMAoFu3bqhXr16qZ4AgIiIiooxDrwE4KCgIPj4+yvWBAwcCANq3b4+VK1di6NChiIiIQK9evfDixQt4eXlhz549sLa2Vm4ze/ZsmJiYoEWLFoiIiEC1atWwcuVKGBsbK23Wrl2Lfv36KbNFNGjQIMW5h4mIiIgoY9NrAK5atSreNw2xRqOBv78//P39U2xjYWGB+fPnY/78+Sm2yZo1K9asWfM5pRIRERFRBmGwY4CJiIiIiL4EBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhUGYCIiIiJSFQZgIiIiIlIVBmAiIiIiUhWDDsCxsbEYNWoU3NzckClTJuTNmxfjx49HfHy80kZE4O/vD2dnZ2TKlAlVq1bFhQsXdO4nKioKffv2RbZs2ZA5c2Y0aNAA9+7d+9qbQ0REREQGwKAD8NSpU7F48WIsWLAAly5dwrRp0zB9+nTMnz9faTNt2jTMmjULCxYsQGBgIJycnODr64tXr14pbfz8/LB161asX78eR44cwevXr1GvXj3ExcXpY7OIiIiISI9M9F3A+xw/fhwNGzZE3bp1AQCurq747bffEBQUBCCh93fOnDkYOXIkmjRpAgBYtWoVHB0dsW7dOnTv3h1hYWH45ZdfsHr1alSvXh0AsGbNGri4uGDfvn2oWbOmfjaOiIiIiPTCoHuAK1WqhICAAFy9ehUAcObMGRw5cgR16tQBAISEhCA0NBQ1atRQbmNubo4qVarg2LFjAICTJ08iJiZGp42zszOKFSumtElOVFQUwsPDdS5ERERElP4ZdA/wsGHDEBYWhkKFCsHY2BhxcXGYOHEiWrVqBQAIDQ0FADg6OurcztHREbdv31bamJmZwc7OLkkb7e2TM3nyZIwbNy4tN4eIiIiIDIBB9wBv2LABa9aswbp163Dq1CmsWrUKM2bMwKpVq3TaaTQanesikmTZuz7UZsSIEQgLC1Mud+/e/fQNISIiIiKDYdA9wEOGDMHw4cPRsmVLAICHhwdu376NyZMno3379nBycgKQ0MubI0cO5XaPHz9WeoWdnJwQHR2NFy9e6PQCP378GBUrVkzxsc3NzWFubv4lNouIiIiI9Mige4Dfvn0LIyPdEo2NjZVp0Nzc3ODk5IS9e/cq66Ojo3Ho0CEl3JYpUwampqY6bR4+fIjz58+/NwATERERUcZk0D3A9evXx8SJE5E7d24ULVoUp0+fxqxZs9CpUycACUMf/Pz8MGnSJLi7u8Pd3R2TJk2CpaUlWrduDQCwtbVF586dMWjQINjb2yNr1qwYPHgwPDw8lFkhiIiIiEg9DDoAz58/H6NHj0avXr3w+PFjODs7o3v37hgzZozSZujQoYiIiECvXr3w4sULeHl5Yc+ePbC2tlbazJ49GyYmJmjRogUiIiJQrVo1rFy5EsbGxvrYLCIiIiLSI4MOwNbW1pgzZw7mzJmTYhuNRgN/f3/4+/un2MbCwgLz58/XOYEGEREREamTQY8BJiIiIiJKawzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoMwERERESkKgzARERERKQqDMBEREREpCoGH4Dv37+Ptm3bwt7eHpaWlihZsiROnjyprBcR+Pv7w9nZGZkyZULVqlVx4cIFnfuIiopC3759kS1bNmTOnBkNGjTAvXv3vvamEBEREZEBMOgA/OLFC3h7e8PU1BR///03Ll68iJkzZyJLlixKm2nTpmHWrFlYsGABAgMD4eTkBF9fX7x69Upp4+fnh61bt2L9+vU4cuQIXr9+jXr16iEuLk4PW0VERERE+mSi7wLeZ+rUqXBxccGKFSuUZa6ursr/RQRz5szByJEj0aRJEwDAqlWr4OjoiHXr1qF79+4ICwvDL7/8gtWrV6N69eoAgDVr1sDFxQX79u1DzZo1v+o2EREREZF+GXQP8I4dO+Dp6YnmzZvDwcEBpUqVwtKlS5X1ISEhCA0NRY0aNZRl5ubm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Vs9VfVkajQa7du1C9erVsX//fn2X81m0z9+JEycQEBCg52rSzo0bNzBy5Ei8ePECmzZtgpubG27cuKHvsr6aH374AePHj0efPn3SdQg2MjLCgwcP0KpVK/z999/Yvn07SpcuraofNFra96pGo8HBgwdRp04dvHnzBrGxsXquLPW033nBwcEAEraFdL169QrLly9H9erV0apVKyxbtgweHh6G92NBiD7TiBEjxN3dXaytraVatWry888/S2RkpL7L+ignTpyQ9u3bS5UqVeTatWsiIhIfH6/nqtKedpvu3r0rPXr0kAULFui5os+j3Z7NmzeLs7Oz9OjRQ+7du6fnqtLG1q1bxcrKSmrVqiUWFhaycuVKEcmYr8v3mTJlihgZGcnChQv1XconO336tDRt2lSKFi0q5ubmsm7dOhERiYuL03Nl+nH//n2ZPn26TJgwQd+lpFri5+rw4cPi4OCgPI/0P9q/09SpU0Wj0YiXl5e8ePFCWW9In1/sAaaPlngX0NKlS7FixQqMGTMGmzZtgq2tLVauXInJkycjOjpaj1V+nGvXruHQoUP477//cOvWLQAZ85e9RqNBYGAg+vTpg//++w+lS5cGkH6Hsmg0Guzduxdt27bFjz/+iNmzZyNnzpz6LitNNGrUCH379sXu3btRsWJFVK9eHUDCNouh9aR8QcOGDcPEiRPTZU+w/P/Y7ZIlS6JevXq4ePEicufODWtrawAJvYnp9b33KUQEt27dQq5cuTB58mSYmZnpu6RUSby3c82aNVi3bh3evHmDYcOGYe3atXquzjBpT6189uxZdO/eHbdv3wZgWN+rDMD00bQfBHv37kVYWBjGjx+Ptm3bombNmvj111/xzTff4M8//8ShQ4f0XGnqtW3bFrNnz4arqyvmz5+PkydP6rukL0aj0eDBgwc4e/asMtbZyMgoXYaq6OhobN26Fb169UKnTp0QFRWFoKAgDBgwAGPHjsWVK1f0XeIn0R4oZWFhgQEDBuDatWuYOHGicjBJRgzB2u25ePEijhw5gl27dinrhg8fjgkTJqS7EKzRaGBkZIQNGzZgy5YtWLJkCcqVK4epU6di48aNANQTgkUEGo0Grq6umD17Nl68eIHg4GA8ffpU36V9kPY7b/jw4RgyZAiKFy+O0aNHw9XVFePGjcPKlSv1W6AB0L5/tf/2798fY8eOxf79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",
      "text/plain": [
       "<Figure size 800x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Count occurrences of each class in y_test\n",
    "unique, counts = np.unique(y_test, return_counts=True)\n",
    "\n",
    "# Plot\n",
    "plt.figure(figsize=(8, 5))\n",
    "plt.bar(unique, counts, color=\"skyblue\")\n",
    "plt.xticks(ticks=unique, labels=class_labels, rotation=45)\n",
    "plt.title(\"Class Distribution of Testing Data (MNIST Fashion)\")\n",
    "plt.xlabel(\"Fashion Category\")\n",
    "plt.ylabel(\"Count\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bd887da2-86c2-43ea-b16a-463e3a99c9e5",
   "metadata": {},
   "source": [
    "# A version with Feature Selection with PCA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "492682fe-5f22-4a0d-99dc-873791a6243f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Original feature count: 784\n",
      "Reduced feature count: 187\n"
     ]
    }
   ],
   "source": [
    "# Flatten images from 28x28 matrix for each image to a row (1D) with 784 features.\n",
    "X_train = X_train.reshape(X_train.shape[0], -1)\n",
    "X_test = X_test.reshape(X_test.shape[0], -1)\n",
    "\n",
    "# Normalize pixel values (0-1 range)\n",
    "X_train = X_train / 255.0\n",
    "X_test = X_test / 255.0\n",
    "\n",
    "# Apply PCA to reduce dimensions (e.g., keep 95% variance)\n",
    "pca = PCA(n_components=0.95, whiten=True)  # Keep 95% variance\n",
    "X_train_pca = pca.fit_transform(X_train)\n",
    "X_test_pca = pca.transform(X_test)\n",
    "\n",
    "print(f\"Original feature count: {X_train.shape[1]}\")\n",
    "print(f\"Reduced feature count: {X_train_pca.shape[1]}\")\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bcaaebbd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Decision Tree Accuracy after PCA: 0.7683\n"
     ]
    }
   ],
   "source": [
    "# Train Decision Tree Classifier on PCA-reduced data\n",
    "dt_model = DecisionTreeClassifier(random_state=42, max_depth=20)\n",
    "dt_model.fit(X_train_pca, y_train)\n",
    "\n",
    "# Make predictions\n",
    "y_pred2 = dt_model.predict(X_test_pca)\n",
    "\n",
    "# Evaluate model performance\n",
    "accuracy = accuracy_score(y_test, y_pred2)\n",
    "print(f\"Decision Tree Accuracy after PCA: {accuracy:.4f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "609b121e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[719   9  38  50  14   4 144   1  19   2]\n",
      " [ 12 939   7  29   5   0   6   0   2   0]\n",
      " [ 28   8 658  17 148   2 117   0  20   2]\n",
      " [ 50  34  19 785  56   2  45   0   9   0]\n",
      " [ 14   2 154  48 665   1 105   0  11   0]\n",
      " [  4   0   2   4   3 819   3  91  18  56]\n",
      " [165   8 130  46 136   4 479   2  28   2]\n",
      " [  2   0   0   0   0  75   0 847   6  70]\n",
      " [  3   3  25  10  13  18  26  16 882   4]\n",
      " [  0   0   0   1   1  33   2  70   3 890]]\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0      0.721     0.719     0.720      1000\n",
      "           1      0.936     0.939     0.938      1000\n",
      "           2      0.637     0.658     0.647      1000\n",
      "           3      0.793     0.785     0.789      1000\n",
      "           4      0.639     0.665     0.652      1000\n",
      "           5      0.855     0.819     0.837      1000\n",
      "           6      0.517     0.479     0.497      1000\n",
      "           7      0.825     0.847     0.836      1000\n",
      "           8      0.884     0.882     0.883      1000\n",
      "           9      0.867     0.890     0.879      1000\n",
      "\n",
      "    accuracy                          0.768     10000\n",
      "   macro avg      0.767     0.768     0.768     10000\n",
      "weighted avg      0.767     0.768     0.768     10000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn import metrics\n",
    "# display the metrics of the model's classification through confusion matrix and classification report\n",
    "# (accuracy / precision / recall / f1)\n",
    "print(metrics.confusion_matrix(y_test, y_pred))\n",
    "\n",
    "print(metrics.classification_report(y_test, y_pred, digits=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "1b9d4c99",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'X_train_pca' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[6], line 5\u001b[0m\n\u001b[0;32m      2\u001b[0m svm_clf \u001b[38;5;241m=\u001b[39m SVC(kernel\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlinear\u001b[39m\u001b[38;5;124m'\u001b[39m)  \u001b[38;5;66;03m# Use linear kernel for simplicity\u001b[39;00m\n\u001b[0;32m      4\u001b[0m \u001b[38;5;66;03m# Train the SVM model\u001b[39;00m\n\u001b[1;32m----> 5\u001b[0m svm_clf\u001b[38;5;241m.\u001b[39mfit(X_train_pca, y_train)\n\u001b[0;32m      7\u001b[0m \u001b[38;5;66;03m# Predict on test data\u001b[39;00m\n\u001b[0;32m      8\u001b[0m y_pred_svm \u001b[38;5;241m=\u001b[39m svm_clf\u001b[38;5;241m.\u001b[39mpredict(X_test_pca)\n",
      "\u001b[1;31mNameError\u001b[0m: name 'X_train_pca' is not defined"
     ]
    }
   ],
   "source": [
    "\n",
    "# Initialize SVM model with default parameters (can be tuned)\n",
    "svm_clf = SVC(kernel='linear')  # Use linear kernel for simplicity\n",
    "\n",
    "# Train the SVM model\n",
    "svm_clf.fit(X_train_pca, y_train)\n",
    "\n",
    "# Predict on test data\n",
    "y_pred_svm = svm_clf.predict(X_test_pca)\n",
    "\n",
    "# Evaluate SVM performance\n",
    "print(\"SVM Classifier Accuracy:\", accuracy_score(y_test, y_pred_svm))\n",
    "print(\"Classification Report (SVM):\")\n",
    "print(classification_report(y_test, y_pred_svm))\n",
    "print(\"Confusion Matrix (SVM):\")\n",
    "print(confusion_matrix(y_test, y_pred_svm))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ab62958d",
   "metadata": {},
   "source": [
    "# CIFAR10 Image Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "fb1cb30c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load CIFAR-10 dataset\n",
    "(X_train_cifar, y_train_cifar), (X_test_cifar, y_test_cifar) = cifar10.load_data()\n",
    "y_train_cifar = y_train_cifar.flatten()\n",
    "y_test_cifar = y_test_cifar.flatten()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e6e370c9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Original feature count: 3072\n",
      "Reduced feature count: 217\n"
     ]
    }
   ],
   "source": [
    "# Flatten and normalize pixel values\n",
    "X_train_cifar = X_train_cifar.reshape((X_train_cifar.shape[0], -1)) / 255.0\n",
    "X_test_cifar = X_test_cifar.reshape((X_test_cifar.shape[0], -1)) / 255.0\n",
    "\n",
    "# Apply PCA to reduce dimensions\n",
    "pca_cifar = PCA(n_components=0.95)\n",
    "X_train_cifar_pca = pca_cifar.fit_transform(X_train_cifar)\n",
    "X_test_cifar_pca = pca_cifar.transform(X_test_cifar)\n",
    "\n",
    "\n",
    "print(f\"Original feature count: {X_train_cifar.shape[1]}\")\n",
    "print(f\"Reduced feature count: {X_train_cifar_pca.shape[1]}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "130bdbc9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy With Max Depth', 3, 'is= 0.2274\n",
      "Accuracy With Max Depth', 4, 'is= 0.2395\n",
      "Accuracy With Max Depth', 5, 'is= 0.2552\n",
      "Accuracy With Max Depth', 6, 'is= 0.2729\n",
      "Accuracy With Max Depth', 7, 'is= 0.2936\n",
      "Accuracy With Max Depth', 8, 'is= 0.3094\n",
      "Accuracy With Max Depth', 9, 'is= 0.3115\n",
      "Accuracy With Max Depth', 10, 'is= 0.3114\n",
      "Accuracy With Max Depth', 11, 'is= 0.3135\n",
      "Accuracy With Max Depth', 12, 'is= 0.3042\n",
      "Accuracy With Max Depth', 13, 'is= 0.3038\n",
      "Accuracy With Max Depth', 14, 'is= 0.2982\n",
      "Accuracy With Max Depth', 15, 'is= 0.2919\n",
      "Accuracy With Max Depth', 16, 'is= 0.2812\n",
      "Accuracy With Max Depth', 17, 'is= 0.2788\n",
      "Accuracy With Max Depth', 18, 'is= 0.2730\n",
      "Accuracy With Max Depth', 19, 'is= 0.2715\n"
     ]
    }
   ],
   "source": [
    "## Train Decision Tree Classifier on PCA-reduced data on CIFAR-10\n",
    "for i in range(3, 20):\n",
    "    dt_cifar = DecisionTreeClassifier(random_state=42, max_depth=i)\n",
    "    dt_cifar.fit(X_train_cifar_pca, y_train_cifar)\n",
    "    y_pred_dt_cifar = dt_cifar.predict(X_test_cifar_pca)\n",
    "\n",
    "    # Evaluate model performance\n",
    "    accuracy = accuracy_score(y_test_cifar, y_pred_dt_cifar)\n",
    "    print(f\"Accuracy With Max Depth', {i}, 'is= {accuracy:.4f}\")\n",
    "    # print('Accuracy With Max Depth', i, 'is= ',metrics.accuracy_score(Y, y_pred_1))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3312c442",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Decision Tree Accuracy on CIFAR-10: 0.2715\n",
      "Classification Report (DT on CIFAR-10):\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.36      0.39      0.38      1000\n",
      "           1       0.34      0.30      0.32      1000\n",
      "           2       0.21      0.22      0.21      1000\n",
      "           3       0.18      0.17      0.17      1000\n",
      "           4       0.23      0.28      0.25      1000\n",
      "           5       0.24      0.23      0.24      1000\n",
      "           6       0.26      0.30      0.28      1000\n",
      "           7       0.26      0.21      0.23      1000\n",
      "           8       0.35      0.36      0.36      1000\n",
      "           9       0.30      0.26      0.28      1000\n",
      "\n",
      "    accuracy                           0.27     10000\n",
      "   macro avg       0.27      0.27      0.27     10000\n",
      "weighted avg       0.27      0.27      0.27     10000\n",
      "\n",
      "Confusion Matrix (DT on CIFAR-10):\n",
      "[[394  54  89  59  74  41  36  52 138  63]\n",
      " [ 66 297  75  72  79  58  54  55 100 144]\n",
      " [ 99  32 219  79 180  90 135  77  53  36]\n",
      " [ 70  70 104 171 127 121 142  80  58  57]\n",
      " [ 60  28 155  80 280  81 163  78  41  34]\n",
      " [ 51  49 115 163 105 230 106  74  57  50]\n",
      " [ 36  42 116 119 154  95 301  63  38  36]\n",
      " [ 80  73  83  96 125 109 101 208  49  76]\n",
      " [142  88  51  62  57  56  42  48 356  98]\n",
      " [ 93 149  61  70  54  63  57  80 114 259]]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n",
    "print(\"Decision Tree Accuracy on CIFAR-10:\", accuracy_score(y_test_cifar, y_pred_dt_cifar))\n",
    "print(\"Classification Report (DT on CIFAR-10):\")\n",
    "print(classification_report(y_test_cifar, y_pred_dt_cifar))\n",
    "print(\"Confusion Matrix (DT on CIFAR-10):\")\n",
    "print(confusion_matrix(y_test_cifar, y_pred_dt_cifar))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "46f1c8c7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DONE\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# ===== Train and Evaluate SVM on CIFAR-10 =====\n",
    "svm_cifar = SVC(kernel='linear')\n",
    "svm_cifar.fit(X_train_cifar_pca, y_train_cifar)\n",
    "y_pred_svm_cifar = svm_cifar.predict(X_test_cifar_pca)\n",
    "print(\"DONE\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "9b73ed20",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SVM Accuracy on CIFAR-10: 0.4188\n",
      "Classification Report (SVM on CIFAR-10):\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.45      0.51      0.48      1000\n",
      "           1       0.47      0.50      0.48      1000\n",
      "           2       0.31      0.30      0.31      1000\n",
      "           3       0.30      0.30      0.30      1000\n",
      "           4       0.38      0.29      0.33      1000\n",
      "           5       0.34      0.32      0.33      1000\n",
      "           6       0.44      0.51      0.47      1000\n",
      "           7       0.48      0.44      0.46      1000\n",
      "           8       0.52      0.53      0.53      1000\n",
      "           9       0.47      0.48      0.48      1000\n",
      "\n",
      "    accuracy                           0.42     10000\n",
      "   macro avg       0.42      0.42      0.42     10000\n",
      "weighted avg       0.42      0.42      0.42     10000\n",
      "\n",
      "Confusion Matrix (SVM on CIFAR-10):\n",
      "[[513  42  54  43  22  26  24  43 162  71]\n",
      " [ 54 497  31  41  17  36  44  47  59 174]\n",
      " [105  46 305  98 105  83 121  72  40  25]\n",
      " [ 38  59 109 301  51 177 119  48  46  52]\n",
      " [ 58  27 158  73 295  90 155 102  17  25]\n",
      " [ 41  55 106 176  81 323  87  67  47  17]\n",
      " [ 18  31  93 130  88  66 506  34  10  24]\n",
      " [ 57  44  74  76  95  86  44 437  23  64]\n",
      " [177  64  30  28  14  45  10  17 527  88]\n",
      " [ 83 186  21  27  17  25  37  47  73 484]]\n"
     ]
    }
   ],
   "source": [
    "print(\"SVM Accuracy on CIFAR-10:\", accuracy_score(y_test_cifar, y_pred_svm_cifar))\n",
    "print(\"Classification Report (SVM on CIFAR-10):\")\n",
    "print(classification_report(y_test_cifar, y_pred_svm_cifar))\n",
    "print(\"Confusion Matrix (SVM on CIFAR-10):\")\n",
    "print(confusion_matrix(y_test_cifar, y_pred_svm_cifar))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "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
}
