{ "cells": [ { "cell_type": "code", "execution_count": 213, "metadata": {}, "outputs": [], "source": [ "import pandas as pd \n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.metrics import accuracy_score" ] }, { "cell_type": "code", "execution_count": 214, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcomeGlucose_log
061487235-0.72141133.60.6275010.906292
11856629-0.72141126.60.351310-1.308279
218966230.08090728.10.167210-1.125091
3013740350.71252043.12.2883310.597264
45116740-0.72141125.60.201300-0.067913
\n", "
" ], "text/plain": [ " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n", "0 6 148 72 35 -0.721411 33.6 \n", "1 1 85 66 29 -0.721411 26.6 \n", "2 1 89 66 23 0.080907 28.1 \n", "3 0 137 40 35 0.712520 43.1 \n", "4 5 116 74 0 -0.721411 25.6 \n", "\n", " DiabetesPedigreeFunction Age Outcome Glucose_log \n", "0 0.627 50 1 0.906292 \n", "1 0.351 31 0 -1.308279 \n", "2 0.167 21 0 -1.125091 \n", "3 2.288 33 1 0.597264 \n", "4 0.201 30 0 -0.067913 " ] }, "execution_count": 214, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data=pd.read_csv('processed_data.csv')\n", "test=pd.read_csv('testing.csv')\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 215, "metadata": {}, "outputs": [], "source": [ "X_train=data.drop(['Outcome','Glucose'],axis=1)\n", "Y_train=data['Outcome']\n", "X_test=test.drop(['Outcome','Glucose'],axis=1)\n", "Y_test=test['Outcome']\n", "X_test = np.c_[np.ones((X_test.shape[0], 1)), X_test]" ] }, { "cell_type": "code", "execution_count": 216, "metadata": {}, "outputs": [], "source": [ "\n", "def sigmoid(z):\n", " return 1 / (1 + np.exp(-z))" ] }, { "cell_type": "code", "execution_count": 217, "metadata": {}, "outputs": [], "source": [ "def compute_cost(X, y, weights,lambda_val=0.9):\n", " m = len(y)\n", " h = sigmoid(np.dot(X, weights))\n", " epsilon = 1e-10 \n", " h = np.clip(h, epsilon, 1 - epsilon)\n", " cost = -(1/m) * (np.dot(y.T, np.log(h)) + np.dot((1 - y).T, np.log(1 - h)))\n", " regularization = (lambda_val / (2 * m)) * np.sum(weights[1:] ** 2) # Exclude theta_0\n", " \n", " \n", " cost += regularization\n", " return cost\n" ] }, { "cell_type": "code", "execution_count": 218, "metadata": {}, "outputs": [], "source": [ "def predictTest(X, weights, threshold=0.5):\n", " probs = sigmoid(np.dot(X, weights))\n", " return probs" ] }, { "cell_type": "code", "execution_count": 219, "metadata": {}, "outputs": [], "source": [ "def Validation(weights):\n", " y_prob=predictTest(X_test,weights)\n", " epsilonT = 1e-15 # to avoid log(0)\n", " y_prob = np.clip(y_prob, epsilonT, 1 - epsilonT)\n", " Y_validation=Y_test.to_numpy()\n", " val_cost = -np.mean(Y_validation * np.log(y_prob) + (1 - Y_validation) * np.log(1 - y_prob))\n", " \n", " return val_cost\n" ] }, { "cell_type": "code", "execution_count": 220, "metadata": {}, "outputs": [], "source": [ "def gradient_descent(X, y, weights, lr, iterations,lambda_val=100):\n", " m = len(y)\n", " cost_history = []\n", " validation_history=[]\n", " for i in range(iterations):\n", " h = sigmoid(np.dot(X, weights))\n", " gradient = np.dot(X.T, (h - y)) / m\n", " gradient[1:] += (lambda_val / m) * weights[1:]\n", " weights -= lr * gradient\n", " cost = compute_cost(X, y, weights)\n", " cost_history.append(cost.item())\n", " validation_history.append(Validation(weights))\n", "\n", " return weights, cost_history,validation_history\n" ] }, { "cell_type": "code", "execution_count": 221, "metadata": {}, "outputs": [], "source": [ "\n", "X_train = np.c_[np.ones((X_train.shape[0], 1)), X_train]\n", "Y_train = Y_train.values.reshape(-1, 1)\n", "\n", "\n", "weights = np.zeros((X_train.shape[1], 1))\n", "\n", "\n", "\n", "weights, cost_history,validation_history= gradient_descent(X_train, Y_train, weights, lr=0.001, iterations=1000000)\n" ] }, { "cell_type": "code", "execution_count": 222, "metadata": {}, "outputs": [], "source": [ "def predict(X, weights, threshold=0.5):\n", " probs = sigmoid(np.dot(X, weights))\n", " return (probs >= threshold).astype(int)\n" ] }, { "cell_type": "code", "execution_count": 223, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.7569444444444444\n" ] } ], "source": [ "\n", "y_pred = predict(X_test, weights)\n", "accuracy=accuracy_score(Y_test,y_pred)\n", "print(accuracy)\n", "\n" ] }, { "cell_type": "code", "execution_count": 224, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 75.69%\n" ] } ], "source": [ "accuracy = np.mean(y_pred == Y_test.values.reshape(-1, 1))\n", "print(f\"Accuracy: {accuracy * 100:.2f}%\")\n" ] }, { "cell_type": "code", "execution_count": 225, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(range(1, len(cost_history) + 1), cost_history, color='b')\n", "plt.xlabel('Iterations')\n", "plt.ylabel('Cost')\n", "plt.title('Cost Function during Gradient Descent')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 226, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAIhCAYAAACizkCYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABdS0lEQVR4nO3de3zP9f//8ft7Z8PmbJMx5DSHHJbDFhEjK1E/0Ucpp0o6YB9EdBidVJgKHT5YifhqUUmYyrkTIUVybMWWECPt/Pr9sc/eH287vd/z2t7vt92ul8v70t6v1/P1ej1e27Ptffd8vZ4vi2EYhgAAAAAAV8TD2QUAAAAAwNWAcAUAAAAAJiBcAQAAAIAJCFcAAAAAYALCFQAAAACYgHAFAAAAACYgXAEAAACACQhXAAAAAGACwhUAAAAAmIBwBQAoVnx8vCwWi3bs2OHsUhzWrVs3devWzWnHz8nJ0eLFi9WzZ0/VqFFD3t7eqlWrlm699VZ98sknysnJcVptAABzeTm7AAAAStO8efOcduy0tDT1799f69ev11133aX58+crKChIf/75p9auXas777xTy5cvV79+/ZxWIwDAPIQrAIDbMAxDaWlpqlChgt3bhIWFlWJFRYuJidG6dev0zjvv6N5777VZd8cdd2jChAn6559/TDnWxYsX5e/vb8q+AAAlw2WBAADTHDx4UIMHD1atWrXk6+ur5s2ba+7cuTZt0tLS9O9//1tt2rRRYGCgqlWrps6dO+ujjz7Ktz+LxaJHHnlEb7zxhpo3by5fX1+988471ssUv/zySz300EOqUaOGqlevrjvuuEMnTpyw2cfllwUeO3ZMFotFr7zyimbNmqUGDRqoUqVK6ty5s77++ut8Nbz99ttq0qSJfH19FRYWpqVLl2ro0KEKDQ0t8nuRkpKi//znP+rdu3e+YJWncePGat26taT/XXp57NgxmzYbN26UxWLRxo0bbc6pZcuW2rx5syIiIuTv76/hw4erf//+ql+/foGXGnbs2FHt2rWzvjcMQ/PmzVObNm1UoUIFVa1aVQMGDNCRI0eKPC8AQOEIVwAAU+zbt0/XX3+9fvzxR82cOVOrV6/WLbfcoscee0yxsbHWdunp6Tpz5ozGjx+vVatW6f3339cNN9ygO+64Q++++26+/a5atUrz58/XU089pXXr1qlLly7WdSNHjpS3t7eWLl2ql156SRs3btQ999xjV71z585VYmKi4uLitGTJEv3999+Kjo7WuXPnrG3eeustPfDAA2rdurU+/PBDTZ06VbGxsTZBpzBffvmlMjMz1b9/f7vqcVRycrLuueceDR48WGvWrNHo0aM1fPhwJSUl6YsvvrBp+/PPP+vbb7/VsGHDrMsefPBBjR07Vj179tSqVas0b948/fTTT4qIiNAff/xRKjUDwNWOywIBAKaIiYlR5cqVtXXrVgUEBEiSoqKilJ6erhdffFGPPfaYqlatqsDAQC1atMi6XXZ2tnr06KG//vpLcXFx+UZ5Lly4oL1796pq1arWZd99950k6eabb9arr75qXX7mzBlNnDhRKSkpCgoKKrLeypUra/Xq1fL09JQk1alTRx06dNBnn32mu+66Szk5OXr66afVsWNHffDBB9btbrjhBl177bWqU6dOkftPSkqSJDVo0KDIdiV15swZrVixQjfddJN1WVZWlmrXrq1FixapZ8+e1uWLFi2Sj4+PBg8eLEn6+uuv9fbbb2vmzJmKiYmxtuvSpYuaNGmiWbNmacaMGaVSNwBczRi5AgBcsbS0NH3++ee6/fbb5e/vr6ysLOsrOjpaaWlpNpfcrVixQpGRkapUqZK8vLzk7e2tBQsWaP/+/fn2fdNNN9kEq0vddtttNu/zLrH79ddfi635lltusQargrY9cOCAUlJSNHDgQJvt6tWrp8jIyGL3X9qqVq1qE6wkycvLS/fcc48+/PBD6whcdna2Fi9erH79+ql69eqSpNWrV8tiseiee+6x+VkFBQXpuuuus2tkDgCQH+EKAHDFTp8+raysLL322mvy9va2eUVHR0uSTp06JUn68MMPNXDgQF1zzTV677339NVXX+m7777T8OHDlZaWlm/fwcHBhR43Lyzk8fX1lSS7JokobtvTp09LkmrXrp1v24KWXa5evXqSpKNHjxbbtiQK+77kfR+XLVsmSVq3bp2Sk5NtLgn8448/ZBiGateune/n9fXXX1t/VgAAx3BZIADgilWtWlWenp4aMmSIHn744QLb5F0e995776lBgwZavny5LBaLdX16enqB213apizlha+C7j9KSUkpdvvu3bvL29tbq1at0qhRo4pt7+fnJyn/96GwoFPY9yUsLEwdOnTQokWL9OCDD2rRokWqU6eOevXqZW1To0YNWSwW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tW/fXo8//rgCAgL06aefasiQIWrYsKE6duxY6H5mzpyp6dOn64knntAHH3yghx56SF27dlWzZs0K3WbKlCmaOXOmatasqVGjRmn48OHatm2bJGnJkiV67rnnNG/ePEVGRmrZsmWaOXOmGjRoUOj+lixZokqVKmn06NEFrq9SpYokaeXKlRozZozi4uLUs2dPrV69WsOGDVPdunXVvXt3ffDBB5o9e7aWLVumFi1aKCUlRXv27JGUe0nkddddpwceeED3339/cd9eAAAA17XUtf6R2EvSbZK04rIVg+0cWXASwhWsxo4dqzvuuMNm2fjx461fP/roo1q7dq1WrFhRZLiKjo62hprHH39cs2fP1saNG4sMV88995xuvPFGSdKkSZN0yy23KC0tTX5+fnrttdc0YsQIDRs2TJL01FNPaf369bpw4UKh+zt48KAaNmwob2/vIs/5lVde0dChQ631xsTE6Ouvv9Yrr7yi7t27KykpSUFBQerZs6e8vb1Vr149dejQQVLuJZGenp6qXLmygoKCijwOAACADRcLM67GXb87hCsT+PvnjiDZY/NmKTq6+HZr1khdu+Z+nZOTo9TUVAUEBOR7eLG/v4PFFiE8PNzmfXZ2tl588UUtX75cx48fV3p6utLT01WxmKGy1q1bW7/Ou/zw5MmTdm8THBwsSTp58qTq1aunAwcO5BuB6tChg7744otC92cYhl2X6e3fv18PPPCAzbLIyEjrPWh33nmn4uLi1LBhQ918882Kjo5W3759y+SeMQAAUMoIOO7FxUetJMKVKSwW+y/N69VLqls3d/KKgu6Xslhy1/fqJXl65i7Lycmdpr1iRcmjFO+Suzw0zZw5U7Nnz1ZcXJxatWqlihUrauzYscrIyChyP5ePFlksFuXk5Ni9TV4ounSby4OSUczNZk2aNNHWrVuVmZlZ7OhVQfvOWxYSEqIDBw4oMTFRGzZs0OjRo/Xyyy9r06ZNxe4XAAA4iLCDwrhBsJIIV2XO01OaMyd3VkCLxTZg5X3Gj4v7X7Bypi1btqhfv3665557JOWGnYMHD6p58+ZlWkfTpk317bffasiQIdZlO3bsKHKbwYMH69VXX9W8efM0ZsyYfOvPnj2rKlWqqHnz5tq6davuvfde67rt27fbnGOFChV022236bbbbtPDDz+sZs2aae/evWrXrp18fHyU7Y4PKAMAwFFXEHwKvX8GKIYhyeImwUoiXDnFHXdIH3yQOyvgpdOx162bG6wuu+3Jaa699lolJCRo+/btqlq1qmbNmqWUlJQyD1ePPvqo7r//foWHhysiIkLLly/XDz/8oIYNGxa6TceOHTVx4kT9+9//1vHjx3X77berTp06OnTokN544w3dcMMNGjNmjCZMmKCBAweqXbt26tGjhz755BN9+OGH2rBhgyQpPj5e2dnZ6tixo/z9/bV48WJVqFBB9evXl5Q7O+LmzZt11113ydfXVzVq1CiT7wkAAAVy0ZEf16wK7sAi5fZrNwlYhCsnueMOqV8/acsWKTlZCg6WunRxjRGrPE8++aSOHj2q3r17y9/fXw888ID69++vc+fOlWkdd999t44cOaLx48crLS1NAwcO1NChQ/Xtt98Wud2MGTPUvn17zZ07V2+88YZycnLUqFEjDRgwwDoVe//+/TVnzhy9/PLLeuyxx9SgQQMtWrRI3bp1k5Q7q+CLL76omJgYZWdnq1WrVvrkk09UvXp1SdK0adP04IMPqlGjRkpPTy/2ckUAAKxcNAgBLslNApbF4NNgPqmpqQoMDNS5c+cUEBBgsy4tLU1Hjx5VgwYN5OfnVyb1FDWhRXkVFRWloKCgq/ZhwFfSzzIzM7VmzRpFR0dzXxjsQp+Bo8p1nyEQAc7lhIBVVDa4HCNXcHkXL17UG2+8od69e8vT01Pvv/++NmzYoMTERGeXBgBwF4QiwK1cGqHc6f9ewhVcnsVi0Zo1a/Tss88qPT1dTZs2VUJCgnr27Ons0gAAZYVwBDhfGY4aZbnpCDnhCi6vQoUK1gkmAABuinAEOM4N7jGCLcIVAACwz38DEtNqo1wh4MABhCsAAMqjKxhJYgwKjjL1/hnCDlwY4QoAAHfG5XZwJYUEH3e9fwZwFOEKAABXQlhCaWPkByg1hCsAAEoTYQlXgiAEuBXCFQAAjiAsoTgEIqDcIlzBId26dVObNm0UFxcnSQoNDdXYsWM1duzYQrexWCxauXKl+vfvf0XHNms/AJAPgQkSoQjAFSNcOcMPz0gWT6nVk/nX7Z0uGdlS62dMPWTfvn31zz//FPi8qK+++koRERHauXOn2rVr59B+v/vuO1WsWNGsMiVJzzzzjFatWqXdu3fbLE9OTlbVqlVNPVZBMjIyFBcXpyVLlujgwYPy9/dX06ZNNXLkSN1zzz1XfCPusWPH1KBBA+3atUtt2rQxp2gA+RGYyh/CEQAnI1w5g8VT2vtU7teXBqy903OXt5pm+iFHjBihO+64Q7/++qvq169vs27hwoVq06aNw8FKkmrWrGlWicUKCgoq9WNkZGSod+/e2rNnj6ZPn67IyEgFBATo66+/1iuvvKK2bdsSiABnIzRdvQhHANych7MLuKpk/V34Kzvtf+1aPSm1mJobpPY8mbt+z5O571tMlZqPt2+/Drj11ltVq1YtxcfH2yy/ePGili9frhEjRuj06dP617/+pbp168rf31+tWrXS+++/X+R+Q0NDrZcIStLBgwfVtWtX+fn5KSwsTImJifm2efzxx9WkSRP5+/urYcOGevLJJ5WZmSlJio+PV2xsrPbs2SOLxSKLxWKt2WKxaNWqVdb97N27VzfddJMqVKig6tWr64EHHtCFCxes64cOHar+/fvrlVdeUXBwsKpXr66HH37YeqyCxMXFafPmzfr888/18MMPq02bNmrYsKEGDx6sb775Ro0bN5Ykpaen67HHHlOtWrXk5+enG264Qd999511P3/99Zfuvvtu1axZUxUqVFDjxo21aNEiSVKDBg0kSW3btpXFYlG3bt2K/B4D5cZSi30vOJ1xySufwUbJXwDg5hi5MtP/VSp8XZ1oqdun/3v/86zc//70bO4rz0/PSn9ukXputC6yfNJQVdJP5d+nA3+IvLy8dO+99yo+Pl5PPfWULJbcDygrVqxQRkaG7r77bl28eFHt27fX448/roCAAH366acaMmSIGjZsqI4dOxZ7jJycHN1xxx2qUaOGvv76a6WmphZ4L1blypUVHx+vOnXqaO/evbr//vtVuXJlTZw4UYMGDdKPP/6otWvXWi9hDAwMzLePixcv6uabb1anTp303Xff6eTJkxo5cqQeeeQRmwD55ZdfKjg4WF9++aUOHTqkQYMGqU2bNrr//vsLPIclS5aoZ8+eatu2bb513t7e1ksCJ06cqISEBL3zzjuqX7++XnrpJfXu3VuHDh1StWrV9OSTT2rfvn367LPPVKNGDR06dEj//POPJOnbb79Vhw4dtGHDBrVo0UI+Pj7Ffm8Bt0cock88swgAHEK4KkeGDx+ul19+WRs3blT37t0l5V4SeMcdd6hq1aqqWrWqxo//36jZo48+qrVr12rFihV2hasNGzZo//79OnbsmOrWrStJev7559WnTx+bdlOnTrV+HRoaqn//+99avny5Jk6cqAoVKqhSpUry8vIq8jLAJUuW6J9//tG7775rvefr9ddfV9++fTVjxgzVrl1bklS1alW9/vrr8vT0VLNmzXTLLbfo888/LzRcHTx4sNiRpL///lvz589XfHy89dzefvttJSYmasGCBZowYYKSkpLUtm1bhYeHW88zT96llNWrVy+TSx2BUkVocg+MCgFAmSBcmWnghcLXWTxt3/+/k9JPL+aOVHn4SDkZuZcEtpiky6/WNPoe0bnUVAUEBMjDo+RXcjZr1kwRERFauHChunfvrsOHD2vLli1av369JCk7O1svvviili9fruPHjys9PV3p6el2T1ixf/9+1atXzxqsJKlz58752n3wwQeKi4vToUOHdOHCBWVlZSkgIMChc9m/f7+uu+46m9oiIyOVk5OjAwcOWMNVixYt5On5v+99cHCw9u7dW+h+DcOwjuoV5vDhw8rMzFRkZKR1mbe3tzp06KD9+/dLkh566CH9v//3//T999+rV69e6t+/vyIiIhw6R8DpCE6ui7AEAC7J6fdczZs3Tw0aNJCfn5/at2+vLVu2FNp26NCh1vtwLn21aNHC2iY+Pr7ANmlpaYXu1zReFQt/efrZtt0/KzdYtZom3ZWe+9+fns1d7lXBvv2WwIgRI5SQkKDU1FQtWrRI9evXV48ePSRJM2fO1OzZszVx4kR98cUX2r17t3r37q2MjAy79m0Y+f/YXx5Uvv76a911113q06ePVq9erV27dmnKlCl2H+PSYxUWgi5dfvnlKhaLRTk5OYXut0mTJtaAVNSxLz/O5TX16dNHv/76q8aOHasTJ06oR48eNqOCgEv47z1MXit8dNvf/eW1wod7m5yFe5MA4Krg1JGr5cuXa+zYsZo3b54iIyP15ptvqk+fPtq3b5/q1auXr/2cOXP04osvWt9nZWXpuuuu05133mnTLiAgQAcOHLBZ5ud3WbhxpktnBcybLTDvvwXNImiigQMHasyYMVq6dKneeecd3X///dZAsGXLFvXr10/33HOPpNx7qA4ePKjmzZvbte+wsDAlJSXpxIkTqlOnjqTcad4vtW3bNtWvX19TpkyxLvv1119t2vj4+Cg7O7vYY73zzjv6+++/raNX27Ztk4eHh5o0aWJXvQUZPHiwnnjiCe3atSvffVdZWVlKT0/XtddeKx8fH23dulWDBw+WJGVmZmrHjh0295jVrFlTQ4cO1dChQ9WlSxdNmDBBr7zyivUeq+LOEbgiDoQjYlQpIAABQLnk1HA1a9YsjRgxQiNHjpSUO1PbunXrNH/+fL3wwgv52gcGBtpMbrBq1Sr99ddfGjZsmE07i8Xi2veyGNm2wSpP3nuj9D50V6pUSYMGDdITTzyhc+fOaejQodZ11157rRISErR9+3ZVrVpVs2bNUkpKit3hqmfPnmratKnuvfdezZw5U6mpqTYhKu8YSUlJWrZsma6//np9+umnWrlypU2b0NBQHT16VLt371bdunVVuXJl+fr62rS5++679fTTT+u+++7TM888oz///FOPPvqohgwZYr0ksCTGjh2rTz/9VD169ND06dN1ww03qHLlytqxY4dmzJihBQsWqE2bNnrooYc0YcIEVatWTfXq1dNLL72kixcvasSIEZKkp556Su3bt1eLFi2Unp6u1atXW7+PtWrVUoUKFbR27VrVrVtXfn5+BU7aARSJkaWyR2ACABTDaeEqIyNDO3fu1KRJk2yW9+rVS9u3b7drHwsWLFDPnj3zPbfpwoULql+/vrKzs9WmTRtNnz69wNnf8uTdW5QnNTVVUu5oxOXTdmdmZsowDOXk5BR5eVmRWv53dKqg7VtMybcu7zK0vONeqWHDhmnBggWKiopS3bp1rfucMmWKjhw5ot69e8vf31/333+/+vXrp3Pnztkc9/I6Ln2fkJCg+++/Xx06dLBO0x4dHW39fvXt21djx47VI488ovT0dEVHR2vq1KmKjY217uP2229XQkKCunfvrrNnz2rBggXWEJi3Hz8/P3322WcaN26crr/+evn7++uOO+7QzJkzrfsxDKPAWvP2UxBvb2+tW7dOcXFxevPNNzV+/Hj5+/urefPmeuSRRxQWFqacnBw9//zzys7O1pAhQ3T+/HmFh4frs88+U2BgoHJycuTt7a3Jkyfr2LFjqlChgm644QYtXbpUOTk58vDwUFxcnJ599lk99dRT6tKli7744gubOnJycmQYhjIzM23uGbNHXp8tasp5uD6vFcXPIkm8KpgjESjrTgcuSeb/KSt+z8BR9Bk4ypX6jCM1WIyCbpQpAydOnNA111yjbdu22dzo//zzz+udd97Jd1nf5ZKTkxUSEqKlS5dq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tauMK4ezONpn8pw7d0733nuvevToUUaVwlWUpM8MHDhQn3/+uRYsWKADBw7o/fffV7NmzcqwajiTo31m69atuvfeezVixAj99NNPWrFihb777juNHDmyjCuHs/z999+67rrr9Prrr9vV3m0+Axtwqg4dOhijRo2yWdasWTNj0qRJBbafOHGi0axZM5tlDz74oNGpU6dSqxGuxdE+U5CwsDAjNjbW7NLgokraZwYNGmRMnTrVePrpp43rrruuFCuEq3G0z3z22WdGYGCgcfr06bIoDy7I0T7z8ssvGw0bNrRZ9uqrrxp169YttRrhuiQZK1euLLKNu3wGZuTKiTIyMrRz50716tXLZnmvXr20ffv2Arf56quv8rXv3bu3duzYoczMzFKrFa6hJH3mcjk5OTp//ryqVatWGiXCxZS0zyxatEiHDx/W008/XdolwsWUpM98/PHHCg8P10svvaRrrrlGTZo00fjx4/XPP/+URclwspL0mYiICP3+++9as2aNDMPQH3/8oQ8++EC33HJLWZQMN+Qun4G9nF1AeXbq1CllZ2erdu3aNstr166tlJSUArdJSUkpsH1WVpZOnTql4ODgUqsXzleSPnO5mTNn6u+//9bAgQNLo0S4mJL0mYMHD2rSpEnasmWLvLz4M1HelKTPHDlyRFu3bpWfn59WrlypU6dOafTo0Tpz5gz3XZUDJekzERERWrJkiQYNGqS0tDRlZWXptttu02uvvVYWJcMNuctnYEauXIDFYrF5bxhGvmXFtS9oOa5ejvaZPO+//76eeeYZLV++XLVq1Sqt8uCC7O0z2dnZGjx4sGJjY9WkSZOyKg8uyJHfMzk5ObJYLFqyZIk6dOig6OhozZo1S/Hx8YxelSOO9Jl9+/bpscce01NPPaWdO3dq7dq1Onr0qEaNGlUWpcJNucNnYP5J0olq1KghT0/PfP+qc/LkyXzJPE9QUFCB7b28vFS9evVSqxWuoSR9Js/y5cs1YsQIrVixQj179izNMuFCHO0z58+f144dO7Rr1y498sgjknI/OBuGIS8vL61fv1433XRTmdQO5yjJ75ng4GBdc801CgwMtC5r3ry5DMPQ77//rsaNG5dqzXCukvSZF154QZGRkZowYYIkqXXr1qpYsaK6dOmiZ5991mVGIeA63OUzMCNXTuTj46P27dsrMTHRZnliYqIiIiIK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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "iterations = range(1, len(cost_history) + 1)\n", "\n", "# Plotting training cost history\n", "plt.figure(figsize=(10, 6))\n", "plt.plot(iterations, cost_history, label='Training Cost', color='blue', marker='o')\n", "\n", "# Plotting validation cost history (assuming it's a list of costs per iteration)\n", "plt.plot(iterations, validation_history, label='Validation Cost', color='orange', linestyle='dashed', marker='x')\n", "\n", "# Adding labels and title\n", "plt.title(\"Learning Curve\")\n", "plt.xlabel(\"Iteration\")\n", "plt.ylabel(\"Cost / Loss\")\n", "plt.legend()\n", "plt.grid(True)\n", "\n", "# Show plot\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.12.4" } }, "nbformat": 4, "nbformat_minor": 2 }