tahamajs's picture
download
raw
16.9 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from torchvision.datasets import MNIST\n",
"from torchvision.transforms import transforms\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.svm import SVC\n",
"from sklearn.model_selection import GridSearchCV\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.metrics import accuracy_score\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Load MNIST"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"MNIST_MEAN = 0.1307\n",
"MNIST_STD = 0.3081\n",
"\n",
"transform = transforms.Compose([\n",
" transforms.ToTensor(), \n",
" transforms.Normalize((MNIST_MEAN,), (MNIST_STD,))\n",
" ])\n",
"\n",
"train_dataset = MNIST(root='../data', train=True, download=True, transform=transform)\n",
"test_dataset = MNIST(root='../data', train=False, download=True, transform=transform)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Show Image Function"
]
},
{
"cell_type": "code",
"execution_count": 183,
"metadata": {},
"outputs": [],
"source": [
"def show_image(image, title):\n",
" plt.figure(figsize=(4, 4))\n",
" plt.imshow(image, cmap='gray_r')\n",
" plt.title(title)\n",
" plt.axis('off')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Train and Test data"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {},
"outputs": [],
"source": [
"X_train = np.array(train_dataset.data).reshape(-1, 28 * 28)[:1000]\n",
"y_train = np.array(train_dataset.targets)[:1000]\n",
"X_test = np.array(test_dataset.data).reshape(-1, 28 * 28)[:100]\n",
"y_test = np.array(test_dataset.targets)[:100]"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Digit Count(train data)\n",
"----- -----------------\n",
"0 97\n",
"1 116\n",
"2 99\n",
"3 93\n",
"4 105\n",
"5 92\n",
"6 94\n",
"7 117\n",
"8 87\n",
"9 100\n"
]
}
],
"source": [
"digits, counts = np.unique(y_train, return_counts=True)\n",
"print(\"Digit Count(train data)\")\n",
"print(\"----- -----------------\")\n",
"for digit, count in zip(digits, counts):\n",
" print(f\"{digit:<8}{count}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Kernel: Linear"
]
},
{
"cell_type": "code",
"execution_count": 190,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Score: 0.88\n",
"Best Parameters: {'C': 1e-06}\n"
]
}
],
"source": [
"param_grid = {\n",
" 'C': [1e-7, 1e-6, 1e-5, 1e-4, 0.01, 0.1, 1, 10]\n",
"}\n",
"\n",
"svm = SVC(kernel='linear')\n",
"\n",
"grid_search_linear = GridSearchCV(svm, param_grid, cv=5)\n",
"\n",
"grid_search_linear.fit(X_train, y_train)\n",
"\n",
"print(f\"Best Score: {grid_search_linear.best_score_:.2f}\")\n",
"print(f\"Best Parameters: {grid_search_linear.best_params_}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Kernel: RBF"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Score: 0.91\n",
"Best Parameters: {'C': 10, 'gamma': 'scale'}\n"
]
}
],
"source": [
"param_grid = {\n",
" 'C': [0.01, 0.1, 1, 10, 100],\n",
" 'gamma': ['scale', 'auto']\n",
"}\n",
"\n",
"svm = SVC(kernel='rbf')\n",
"\n",
"grid_search_rbf = GridSearchCV(svm, param_grid, cv=5)\n",
"\n",
"grid_search_rbf.fit(X_train, y_train)\n",
"\n",
"print(f\"Best Score: {grid_search_rbf.best_score_:.2f}\")\n",
"print(f\"Best Parameters: {grid_search_rbf.best_params_}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Kernel: Polynomial Degree 2"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Score: 0.89\n",
"Best Parameters: {'C': 10, 'gamma': 'scale'}\n"
]
}
],
"source": [
"param_grid = {\n",
" 'C': [0.1, 1, 10, 100],\n",
" 'gamma': ['scale', 'auto']\n",
"}\n",
"\n",
"svm = SVC(kernel='poly', degree=2)\n",
"\n",
"grid_search_poly = GridSearchCV(svm, param_grid, cv=5)\n",
"\n",
"grid_search_poly.fit(X_train, y_train)\n",
"\n",
"\n",
"print(f\"Best Score: {grid_search_poly.best_score_:.2f}\")\n",
"print(f\"Best Parameters: {grid_search_poly.best_params_}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Best SVM"
]
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Parameters: {'C': 10, 'gamma': 'scale'}\n",
"SVM Train Accuracy: 1.00\n",
"SVM Test Accuracy: 0.94\n"
]
}
],
"source": [
"best_svm = grid_search_rbf.best_estimator_\n",
"\n",
"y_train_pred = best_svm.predict(X_train)\n",
"y_test_pred = best_svm.predict(X_test)\n",
"\n",
"train_accuracy = accuracy_score(y_train, y_train_pred)\n",
"test_accuracy = accuracy_score(y_test, y_test_pred)\n",
"\n",
"print(f\"Best Parameters: {grid_search_rbf.best_params_}\")\n",
"print(f\"SVM Train Accuracy: {train_accuracy:.2f}\")\n",
"print(f\"SVM Test Accuracy: {test_accuracy:.2f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# SVM VS. Logistic Regression"
]
},
{
"cell_type": "code",
"execution_count": 152,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Logistic Regression Test Accuracy: 0.90\n"
]
}
],
"source": [
"logistic = LogisticRegression(max_iter=300)\n",
"logistic.fit(X_train, y_train)\n",
"logistic_y_pred = logistic.predict(X_test)\n",
"lr_accuracy = accuracy_score(y_test, logistic_y_pred)\n",
"print(f\"Logistic Regression Test Accuracy: {lr_accuracy:.2f}\")"
]
},
{
"cell_type": "code",
"execution_count": 184,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUgAAAFcCAYAAACqUye+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAZbklEQVR4nO3df5jNdf7/8ccMo0bk94+wEjlHzJiwM9NUW9jBhSlhrNEiJVmLaV1Yo/JjtJeyW10XBmv9SD/UtAxq9MOuaiq5ZtiSUiyKJVNMaTAVBq/vH645n04zT95nmC/Tdb9dl6tr3uc57/M+x+nu/X6f875OmHPOCQBQSvil3gAAuFwRSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMFT6QG7dulWjR49W586dFRUVpZtvvlkDBw7U448/Lkk6fPiwoqKiNG7cOHMdRUVFiomJ0R/+8AdJ0qpVq+T3++X3+5WXl1dq3jmnbt26ye/3a8iQIZ6288yZM1qzZo2GDRum+Ph4tWvXTgkJCRo5cqTeeustnTlzphyP/tJ65513NHfu3AtaR15envx+v954442LtFXepKWlqWvXriH9zsGDBzV37lxt37691G1z586V3++/4O1644035Pf79dprr5W67c4775Tf79d7771X6rbExET17dv3gu8fwSp1IHNycpSSkqKioiJNnDhRS5cu1cMPP6yOHTsGXmB169ZV165dtX79eh05cqTM9bz66qs6fvy4kpOTg5ZfddVVWrlyZan5TZs2ad++fbrqqqs8beeJEyc0YsQIpaWlqV69epo+fbqeeeYZpaenq2HDhnrwwQf11ltvhfjoL7133nlHGRkZl3ozyuWPf/xjyNt+6NAhZWRklBnIAQMG6KWXXrrg7YqLi1NYWJhyc3ODlhcWFmrnzp2qXr16qX+0v/76a+3fv1/x8fEXfP8IVvVSb8CFWLx4sZo1a6YlS5aoatX/eyi9e/fWxIkTAz/3799f69atU3Z2tgYPHlxqPVlZWapfv746d+4ctLxXr17Kzs7WtGnTVKNGjcDylStXqkOHDioqKvK0nY899pg2bNigWbNm6a677gq6rXv37ho+fLiOHz/uaV3ncvr0aZ0+fVrVqlUrdduPP/6oyMjIC76PX4rmzZtf1PU1btxYjRs3vuD11K1bV61bt9amTZuClm/evFlVq1ZV//79SwWyJKbnCiR//+VTqfcgCwsLVadOnaA4lggP/7+H9pvf/EaNGzfWqlWrSs19/vnn2rp1q/r06VNqPb1795YkrV27NrDs2LFj+te//qX+/ft72saCggKtXLlSt956a6k4lmjRooXatGkT+Dk/P18TJkxQQkKCoqKi1LNnTy1dujToMPzLL7+U3+/XokWLNH/+fHXt2lXR0dHKzc0NHO59+umnSk1NVWxsrLp16ybp7OmB5cuXq0+fPmrfvr1iY2OVmpqq/fv3l9qud999V/fcc486deqkmJgY9ezZUwsXLpR09hB1+fLlkhQ4HeH3+/Xll196el5CtXPnTo0aNUqxsbGKjo5Wnz59tHr16lJzu3bt0n333aeYmBjddNNNSk9PV05OTqnTJWUdYr/++usaMGBA4PH+9re/1eTJkyWdPRVQcoQxefLkwOMtOcVgHWJnZ2dr4MCB6tChgzp06KA+ffpoxYoV53ys8fHx2rNnjw4dOhRYlpeXp6ioKN1+++369NNPg/5x3rRpk6pUqaJf//rXkqQhQ4YoKSlJmzdvVkpKimJiYvTQQw9JCu21tWTJEj399NPq2rWrOnTooIEDB+qjjz4qtb3//Oc/1aNHD0VFRQV2KspzCuNyVKn3IG+88UatWLFCf/nLX3THHXeobdu2ioiIKDUXHh6uvn37asGCBdqxY0dQjLKysiSpzODVqFFDPXr0UFZWllJSUiSdjWV4eLh69uypZ5555rzbmJeXp+LiYiUmJnp6TIcPH1ZKSoqKi4v14IMPqmnTpsrJydGsWbO0b98+TZ8+PWj+ueeeU4sWLTRp0iTVqFFD1157rbZu3SpJGjt2rHr16qWUlBT98MMPkqSpU6dq9erVGjJkiCZMmKAjR45o3rx5SklJ0csvv6z69etLklasWKEpU6YoNjZW6enpqlevnvbs2aNdu3ZJOnuI+sMPP2jdunVBh5YNGzb09DhD8cUXXyglJUX16tXTww8/rDp16uiVV15RWlqavvnmG40YMULS2UPgwYMHq3r16po+fbrq1q2rV199VTNmzDjvfWzZskXjxo1Tr169NGbMGF1xxRXKz88P7J21a9dOjz32mCZPnqxRo0YFjjbOtdc4e/ZszZ8/X927d9e9996rmjVrateuXcrPzz/nttx000167rnntGnTJiUlJUk6+zrq0qWLOnbsqLCwMH3wwQe6/fbbA7e1bdtWNWvWDKyjoKBAEydO1P33369x48YpPDw85NfW8uXL1bJly0BcZ8+erQceeEBvvvlm4L5eeuklTZ06VT169NDkyZN17NgxZWRkqLi4+LzPeaXgKrHDhw+7QYMGOZ/P53w+n2vXrp0bOHCgW7hwoSsqKgqa3bdvn/P7/e7RRx8NLCsuLna33HKLS0lJCZrNyspyPp/Pffzxxy43N9f5fD63c+dO55xz/fv3d2lpac4553r37u0GDx58zm1cuHCh8/l87t133/X0mJ544gnn8/nc1q1bg5ZPmzbN+f1+98UXXzjnnNu/f7/z+XwuMTHRnTx5Mmh2zpw5zufzudmzZwct37Jli/P5fG7p0qVBy7/66ivXvn1799e//tU551xRUZHr2LGjGzRokDtz5oy5renp6c7n83l6XJaS5/f11183Z8aNG+eioqJcfn5+0PL777/fxcTEuKNHjzrnnJs1a5bz+/1u165dQXP33Xef8/l8Ljc3N7Bs0qRJrkuXLoGflyxZ4nw+X2BdZfn444+dz+dzWVlZpW4rec5L7Nu3z91www1u/Pjx5voshYWFrk2bNm7KlCnOubOvc7/fH3gNJScnu8cff9w551x+fr7z+XyBvzvnnBs8eLDz+Xxu48aNQesN9bWVlJTkTp06FZjbunWr8/l8bu3atc45506fPu1uueUWN2DAgKD1HThwwLVr1y7o+a2sKvUhdp06dfTCCy9o5cqVGj9+vLp27aq9e/fqySef1B133KHDhw8HZn/1q18pPj5e2dnZOnnypKSzh5AFBQXnPFyOi4tT8+bNlZWVpf/+97/65JNPPB9el0dubq6uv/56tW/fPmh5v3795JwrdfK+a9euZe41S2fPb/7U22+/rbCwMN155506depU4E/9+vXVpk2bwHmvLVu2qKioSHfffbfCwsIu4qMrn9zcXCUkJOiaa64JWt63b1/9+OOP2rJli6Sz5+lat26t66+/PmiuZC/sXKKjoyVJf/rTn/Taa6/p4MGDF7TNGzdu1OnTp/X73/8+5N+tVauW2rRpEzglsHnzZlWpUkUdO3aUJMXGxgZuK/nvz88/1qpVSwkJCUHLQn1tde7cWVWqVAn8XHLkdeDAAUnSnj17VFBQoJ49ewb9XpMmTdShQ4eQH/flqFIHskR0dLQeeOABzZkzR++9956GDRumAwcOaPHixUFzycnJKiwsDLxjvGrVKlWvXr3UX/BPhYWFqV+/fnrllVeUmZmpFi1aBM71eNGkSRNJ8nxurrCwUA0aNCi1vOTQtbCwMGh5WbM//50S3377rZxzuvnmm9WuXbugPx999JG+++47SQr8w3Ix3nS4GLw+J4WFhYFTBD9Vr169895HbGys5s2bp1OnTmnSpEm67bbblJSUFHT+ORQX+hzGx8dr7969OnjwoPLy8tSuXbvApybi4uK0fft2HTt2THl5eapatao6deoU9PtlPV+hvrZq164d9HPJm38nTpyQpMDrpaznt6y/h8qoUp+DLEtERITGjBmjZcuWBc6Xlejevbtq1aqlrKwsxcXFKScnR3369Dnvx3X69eunOXPmKDMz85yfpyxLfHy8IiIitH79eg0aNOi887Vr11ZBQUGp5SUn7OvUqRO0PJQ9vDp16igsLEzLly8v853ukmV169aVdPbjI5cDr89J7dq19c0335SaK2tZWRITE5WYmKiTJ0/qo48+0sKFCzV+/Hg1bdo05D2inz6HP9/z9SI+Pl5PP/20Nm3apE2bNum2224L3FYSw82bNysvL0/R0dGlXsNlvS5CfW2dT8n8t99+W+o2r8/55a5S70H+9F2+n/r8888lld6DuuKKK5SUlKT3339fixYtUnFxsafD5UaNGmn48OHq0qWL+U60pUGDBkpOTtaGDRu0Zs2aMmf27dunHTt2SJISEhK0e/duffrpp0Eza9asUVhY2AV91q1z585yzungwYOKjo4u9afkXdgOHTqoZs2ayszMlDvHN3KUBPVifETpXBISEpSbm1vqsPfll19WZGSkbrzxRkln9wJ37dql3bt3B829+uqrId1ftWrVFBcXF/io2GeffRZYLnl7vLfccouqVKmiF198MaT7LhEbG6sqVapo3bp12rVrl+Li4gK31axZUzfccIPWrFmjAwcOeH5NXOzX1nXXXacGDRro9ddfD1qen58fOO1R2VXqPcjhw4ercePG6tKli1q2bCnnnLZv366lS5eqevXqGjp0aKnfSU5O1vLly/X000+rZcuWgfM65zNhwoRyb+fkyZO1f/9+paWl6b333lO3bt1Uv359fffdd3r//fe1atUqPfXUU2rTpo2GDRumNWvWaOTIkUpNTVWTJk2Uk5OjF154QYMGDdJ1111X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RiA0Bw8e9DzbuHFjz7N9+/b1PLtq1SrPs5eDDz/80PPs1q1bPc+2bt3a82z79u09z1599dWeZ1Fx2IMEAAOBBAADgQQAA4EEAAOBBAADgQQAA4EEAAOBBAADgQQAA4EEAAPfalgJDR8+vELW6/f7K2S9odi8ebPn2aFDh3qe3bt3r+fZEydOeJ4NRbdu3TzPrlu3rkK2AaFhDxIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADFxqWAkdOXLkUm9CSDIzMz3Pjh071vPsN99843k2lMsox4wZ43n27bff9jy7evVqz7Pr16/3PJuYmOh5FqFhDxIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADFxqiHIJ5fLBIUOGeJ49ffq059kRI0Z4nk1PT/c8e80113ie/fLLLz3PhmL+/PmeZ7nUsOKwBwkABgIJAAYCCQAGAgkABgIJAAYCCQAGAgkABgIJAAYCCQAGAgkABi41REAo35YYyrcP1qxZ0/NsWlqa59k///nPnmcrm6SkpEu9CRB7kABgIpAAYCCQAGAgkABgIJAAYCCQAGAgkABgIJAAYCCQAGAgkABg4FLDSmjYsGGeZzds2OB5dsGCBeXYmvML5dsHK9vlg865Cpnt3bt3eTYHFxl7kABgIJAAYCCQAGAgkABgIJAAYCCQAGAgkABgIJAAYCCQAGAgkABg4FLDSig5Odnz7Ny5cz3Pfvzxx+XZnPNq3rx5haz32LFjnmdPnDhRIdsQynMWGRnpeXbfvn2eZxs1auR5FqFhDxIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADFxqWAnVqlXL82zfvn09z1bUpYZ/+9vfPM9+8MEHnme3bNnieTaUS/cqyvTp0z3PxsbGVtyGwDP2IAHAQCABwEAgAcBAIAHAQCABwEAgAcBAIAHAQCABwEAgAcBAIAHAEOacc5d6I1BxiouLPc8uWLDA8+yUKVM8z4by7YOhCOWlGxYWViHb4PP5PM9+8sknnmcjIiLKszm4yNiDBAADgQQAA4EEAAOBBAADgQQAA4EEAAOBBAADgQQAA4EEAAOBBAADlxqiXLZv3+55dubMmZ5nly9f7nm2oi41vPbaaz3Ppqene54dOnSo51lcHtiDBAADgQQAA4EEAAOBBAADgQQAA4EEAAOBBAADgQQAA4EEAAOBBAADlxoCgIE9SAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADAQSAAwEEgAMBBIADD8P99P+LvQi/uFAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 400x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"np.random.seed(31)\n",
"svm_pred = y_test_pred\n",
"logistic_pred = logistic_y_pred\n",
"svm_correct_logistic_wrong = X_test[(svm_pred == y_test) & (logistic_pred == y_test)]\n",
"index = np.random.randint(0, len(svm_correct_logistic_wrong))\n",
"image = svm_correct_logistic_wrong[index]\n",
"\n",
"\n",
"show_image(image.reshape((28, 28, 1)), \"SVM Correct, Logistic Wrong\")\n",
"plt.savefig(\"../assets/Q6.png\")\n",
"plt.show()\n"
]
}
],
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

Xet Storage Details

Size:
16.9 kB
·
Xet hash:
47ad9a89e0bcecf3bf5145b67bcddf9c1f0e66bb8258876ca58f0ad43201dba2

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.