Files
AI4DigitalForensics/lectures/05_binary_classification/0_binary_classification.ipynb
2025-05-01 19:03:03 -04:00

452 lines
97 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "912e0758",
"metadata": {},
"source": [
"# Binary classfication probelm with tumor data\n",
"- Example tumor sizes for non-malignant\n",
"- Example tumor sizes for malignant"
]
},
{
"cell_type": "markdown",
"id": "770d2176",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "24c1c26c",
"metadata": {},
"source": [
"### Visualize tumor data"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "5eedde1f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlEAAAGwCAYAAACJjDBkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAALQdJREFUeJzt3Xl01NX9//HXkAUCWdiykBI2ZTcIiHgC5wuIKCjli0IRzkGQzaKi7LQoWvhWATegYItoRWitomBBQUWhECAE2SRBEMoaSMBAlEASZAlk7u8PfowMSTC5TJhJ8nycMwfn3s/nzvvOoJ+Xn8+dzziMMUYAAAAolgreLgAAAKA0IkQBAABYIEQBAABYIEQBAABYIEQBAABYIEQBAABYIEQBAABY8Pd2AWWV0+nUDz/8oJCQEDkcDm+XAwAAisAYo5ycHEVHR6tChRufayJElZAffvhBMTEx3i4DAABYSEtLU+3atW+4DSGqhISEhEi68iGEhoZ6uRoAAFAU2dnZiomJcR3Hb4QQVUKuXsILDQ0lRAEAUMoUZSkOC8sBAAAsEKIAAAAsEKIAAAAsEKIAAAAsEKIAAAAsEKIAAAAsEKIAAAAsEKIAAAAsEKIAAAAseD1EnTp1ShERETpy5Mgteb2vvvpKLVu2lNPpvCWvBwBFlpUlHTtWcN+xY1f6S4OyMg+p7MyFeZQIr4eoqVOnqmfPnqpXr94teb1u3bopICBAH3zwwQ23+/7779W7d2/Vq1dPDodDf/nLX25JfQDKqawsqVs3qWNHKS3NvS8t7Up7t26+f7ArK/OQys5cmEeJ8WqIOnfunObPn6+hQ4fe0tcdNGiQ5syZc8Ntzp07pwYNGuiVV15RVFTULaoMQLmVkyNlZEiHD0udOv1ykEhLu/L88OEr/Tk53qzy15WVeUhlZy7Mo+QYL1qyZIkJDw93PXc6nea2224zr7/+utt2SUlJRpI5cOCAMcaY06dPm6FDh5qaNWuakJAQc++995rk5GTX9snJyaZTp04mODjYhISEmNatW5tt27a5+o8ePWokmYMHDxapzrp165pZs2YVa25ZWVlGksnKyirWfgDKsdRUYxo0MEa68mdiovvz1FRvV1g0ZWUexpSduTCPIivO8durZ6ISEhJ01113uZ47HA4NGTJECxYscNtuwYIF6tChg26//XZJUp8+fZSRkaGVK1fq22+/VevWrXXfffcpMzNTktS/f3/Vrl1b27Zt07fffquJEycqICDANV6dOnUUGRmphIQEj83l4sWLys7OdnsAQLHExEjr1kkNGlz5v+r27a/82aDBlfaYGG9XWDRlZR5S2ZkL8ygRXg1RR48eVXR0tFvboEGDtG/fPm3dulWSdOnSJX344YcaMmSIJGnjxo3aunWrlixZojZt2qhhw4Z64403VLVqVX3yySeSpNTUVHXp0kVNmjRRw4YN1adPH915551urxMdHa2jR496bC7Tp09XWFiY6xFTWv5CAvAtMTHS+++7t73/fuk5yF1VVuYhlZ25MA+P82qIOn/+vCpVquTWFh0dre7du+u9996TJK1YsUIXL15Unz59JEk7d+7U2bNnVaNGDQUHB7seKSkpOnTokCRp7NixGjZsmLp06aJXXnnF1X6toKAgnTt3zmNzee6555SVleV6pF2/6A0AiiItTRowwL1twID8C2l9XVmZh1R25sI8PM6rIapmzZo6ffp0vvZhw4bpo48+0vnz57VgwQL17dtXlStXliSdPXtWtWrVUnJysttj3759mjBhgiRpypQp+v7779W9e3etXbtWzZo107Jly9xeIzMzU+Hh4R6bS8WKFRUaGur2AIBiuXaBbIMGUmLiL5ctrl1I6+vKyjyksjMX5lEybnoF1k14/fXXzZ133pmv/fLlyyY6OtrMmDHD+Pv7m02bNrn6Vq1aZfz8/ExKSkqRX6dfv36mR48erufnz583AQEB5j//+U+R9mdhOYASl5ZW8ALZ6xfSpqV5t85fU1bmYUzZmQvzKJZSs7C8a9eu+v777/OdjfLz89OgQYP03HPPqWHDhoqLi3P1denSRXFxcXr44Ye1atUqHTlyRJs2bdKkSZO0fft2nT9/Xs8884zWrVuno0ePKjExUdu2bVPTpk1dY2zevFkVK1Z0G/d6ubm5rrNcubm5On78uJKTk3Xw4EHPvxEAEBIiRUTkXyB77ULaiIgr2/mysjIPqezMhXmUnJuKax7Qtm1bM2/evHzthw4dMpLMa6+9lq8vOzvbPPvssyY6OtoEBASYmJgY079/f5OammouXrxo+vXrZ2JiYkxgYKCJjo42zzzzjDl//rxr/9///vdm+PDhN6wrJSXFSMr36NixY5HmxZkoAMV25kzh/xedlnalvzQoK/MwpuzMhXkU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PFhjxozR/fffr759++qRRx7xaIEAAAC+yOq385xOp5xOp/z9r3y57+OPP1ZiYqIaNmyoJ598UgEBAR4vtLTht/MAACh9inP8tv4B4gsXLui7775TRkaGnE7nLwM6HOrRo4fNkGUKIQoAgNKnOMdvq/tEffXVVxowYIBOnTqVr8/hcCgvL89mWAAAgFLDak3Us88+q0cffVTp6emuS3tXHwQoAABQHliFqJMnT2rs2LGKjIz0dD0AAAClglWI+t3vfqd169Z5uBQAAIDSw2ph+blz59SnTx+Fh4crNjY237fxRo4c6bECSysWlgMAUPqU+MLyRYsWadWqVapUqZLWrVsnh8Ph6nM4HIQoAABQ5lmFqEmTJun//u//NHHiRFWoYHVFEAAAoFSzSkC5ubnq27cvAQoAAJRbVino8ccf18cff+zpWgAAAEoNq8t5eXl5eu211/T111+rRYsW+RaWz5w50yPFAQAA+CqrELVr1y61atVKkrR79263vmsXmQMAAJRVViEqPj7e03UAAACUKqwMBwAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECIAgAAsECI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ww9r37593i4Lkl555RU5HA6NHj3a26WUa8ePH9djjz2mGjVqKCgoSLGxsdq+fbu3yyqX8vLy9OKLL6p+/foKCgrSbbfdppdeeqlIv6uGm7dhwwb16NFD0dHRcjgc+vTTT936jTH605/+pFq1aikoKEhdunTRgQMHbll9hCjccuvXr9eIESO0efNmrV69WpcuXdIDDzygn3/+2dullWvbtm3T22+/rRYtWni7lHLt9OnTat++vQICArRy5Urt2bNHM2bMULVq1bxdWrn06quv6q233tJf//pX7d27V6+++qpee+01vfnmm94urVz4+eefdeedd+pvf/tbgf2vvfaa5syZo3nz5mnLli2qUqWKunbtqgsXLtyS+rjFAbzuxx9/VEREhNavX68OHTp4u5xy6ezZs2rdurXmzp2rl19+WS1bttRf/vIXb5dVLk2cOFGJiYlKSEjwdimQ9Nvf/laRkZGaP3++q613794KCgrSv/71Ly9WVv44HA4tW7ZMDz/8sKQrZ6Gio6M1btw4jR8/XpKUlZWlyMhILVy4UP369SvxmjgTBa/LysqSJFWvXt3LlZRfI0aMUPfu3dWlSxdvl1LuLV++XG3atFGfPn0UERGhVq1a6e9//7u3yyq32rVrpzVr1mj//v2SpJ07d2rjxo168MEHvVwZUlJSdOLECbf/boWFhemee+7RN998c0tq4AeI4VVOp1OjR49W+/btdccdd3i7nHLpo48+0o4dO7Rt2zZvlwJJhw8f1ltvvaWxY8fq+eef17Zt2zRy5EgFBgbq8ccf93Z55c7EiROVnZ2tJk2ayM/PT3l5eZo6dar69+/v7dLKvRMnTkiSIiMj3dojIyNdfSWNEAWvGjFihHbv3q2NGzd6u5RyKS0tTaNGjdLq1atVqVIlb5cDXfkfizZt2mjatGmSpFatWmn37t2aN28eIcoLFi9erA8++EAffvihmjdvruTkZI0ePVrR0dF8HuByHrznmWee0eeff674+HjVrl3b2+WUS99++60yMjLUunVr+fv7y9/fX+vXr9ecOXPk7++vvLw8b5dY7tSqVUvNmjVza2vatKlSU1O9VFH5NmHCBE2cOFH9+vVTbGysBgwYoDFjxmj69OneLq3ci4qKkiSdPHnSrf3kyZOuvpJGiMItZ4zRM888o2XLlmnt2rWqX7++t0sqt+677z7t2rVL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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Data points\n",
"x_non_malignant = [1, 2, 3, 4, 5] # Example tumor sizes for non-malignant\n",
"y_non_malignant = [0] * 5\n",
"x_malignant = [6, 7, 8, 9, 10] # Example tumor sizes for malignant\n",
"y_malignant = [1] * 5\n",
"\n",
"# Plotting\n",
"plt.scatter(x_non_malignant, y_non_malignant, marker='x', color='blue', label='Non-malignant')\n",
"plt.scatter(x_malignant, y_malignant, marker='x', color='red', label='Malignant')\n",
"\n",
"# Labels and title\n",
"plt.xlabel('tumor size x (diameter in cm)')\n",
"plt.ylabel('malignant?')\n",
"plt.yticks([0, 1], ['(no) 0', '(yes) 1'])\n",
"plt.grid(False)\n",
"\n",
"# Show plot\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "40f52e25",
"metadata": {},
"source": [
"# Visualize Sigmoid function"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "c6fcc605",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAIjCAYAAAAQgZNYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAYDpJREFUeJzt3XucjHX/x/H3zO7sCevMonXsIMkhsvfqgCyKRLckHRySyiHVdpDuWIp0UCl1p1J03+VOKqo7OUYSOesg/CKnsEvEYjGzO9fvj+ueYe3M2l27c+3MvJ6Pxzzmmmuua67P9XFZb9d+57pshmEYAgAAAIKQ3eoCAAAAgKIizAIAACBoEWYBAAAQtAizAAAACFqEWQAAAAQtwiwAAACCFmEWAAAAQYswCwAAgKBFmAUAAEDQIswCCFl169ZVv379rC4jX9OmTZPNZtOOHTvOuWww7E9RtW3bVm3btrW6DABBiDALIOj8/PPPuuWWW1SnTh3FxMSoVq1a6tChgyZNmmR1aaWCzWbz+UhISLC0rl9//VWjR48uUHAHgIKyGYZhWF0EABTU8uXL1a5dO9WuXVt9+/ZVQkKCdu/erR9++EHbtm3T1q1bvcueOnVKdrtdDofDworzl5OTI5fLpejoaNlstnyXrVu3rtq2batp06blu5zNZlOHDh3Up0+fXPNjY2PVo0eP8y25yD755BP17NlTixcvznMW1ul0SpKioqIsqAxAMIu0ugAAKIxx48apfPnyWr16tSpUqJDrvf379+d6HR0dHcDKiiYiIkIRERHF/rkXX3yx7rzzzmL/3JJCiAVQVAwzABBUtm3bpssuuyxPkJWkatWq5Xrta4zpTz/9pDZt2ig2NlYXXHCBxo4dq6lTp+YZt1q3bl3deOONWrJkiVq2bKnY2FhdfvnlWrJkiSTps88+0+WXX66YmBi1aNFC69evz1PPN998o2uuuUZlypRRhQoV1K1bN23atCnXMr7GzBqGobFjx+qCCy5QXFyc2rVrp40bNxaqT/np16+f6tatm2f+6NGj85wdttlsGjp0qGbPnq3GjRsrOjpal112mebOnZtn/T179mjAgAGqWbOmoqOjVa9ePQ0aNEhOp1PTpk1Tz549JUnt2rXzDn3w9NPXmNn9+/drwIABql69umJiYtS0aVO9//77uZbZsWOHbDabJkyYoLffflsNGjRQdHS0rrzySq1evbroTQIQNDgzCyCo1KlTRytWrNAvv/yixo0bF2rdPXv2eIPUiBEjVKZMGU2ZMsXvGdytW7fq9ttv13333ac777xTEyZMUNeuXTV58mQ9+eSTGjx4sCRp/PjxuvXWW7VlyxbZ7eY5goULF+qGG25Q/fr1NXr0aJ04cUKTJk3SVVddpXXr1vkMkx6jRo3S2LFj1blzZ3Xu3Fnr1q1Tx44dvb+KL4iTJ0/qzz//zDWvXLlyRTpbvWzZMn322WcaPHiwypUrp9dee009evTQrl27VLlyZUnS3r171apVKx0+fFj33nuvGjZsqD179uiTTz5RVlaWrr32Wg0bNkyvvfaannzySV166aWS5H0+24kTJ9S2bVtt3bpVQ4cOVb169TRz5kz169dPhw8f1oMPPphr+enTp+vo0aO67777ZLPZ9MILL+jvf/+7fv/991I9zARAMTAAIIjMnz/fiIiIMCIiIozk5GTj8ccfN+bNm2c4nc48y9apU8fo27ev9/UDDzxg2Gw2Y/369d55Bw8eNCpVqmRIMrZv355rXUnG8uXLvfPmzZtnSDJiY2ONnTt3eue/9dZbhiRj8eLF3nnNmjUzqlWrZhw8eNA778cffzTsdrvRp08f77ypU6fm2vb+/fuNqKgoo0uXLobb7fYu9+STTxqScu2PP5J8PqZOnWoYhmH07dvXqFOnTp710tLSjLP/WZBkREVFGVu3bs21H5KMSZMmeef16dPHsNvtxurVq/N8rmc/Zs6cmadPHm3atDHatGnjfT1x4kRDkvHBBx945zmdTiM5OdkoW7askZmZaRiGYWzfvt2QZFSuXNk4dOiQd9nPP//ckGR8+eWX/hsFICQwzABAUOnQoYNWrFihm266ST/++KNeeOEFderUSbVq1dIXX3yR77pz585VcnKymjVr5p1XqVIl3XHHHT6Xb9SokZKTk72vk5KSJEnXXXedateunWf+77//Lknat2+fNmzYoH79+qlSpUre5Zo0aaIOHTpozpw5fmtcuHChnE6nHnjggVy/8n/ooYfy3bezdevWTQsWLMj16NSpU6E+wyMlJUUNGjTwvm7SpIni4+O9++t2uzV79mx17dpVLVu2zLP+ub7Y5sucOXOUkJCg3r17e+c5HA4NGzZMx44d07fffptr+V69eqlixYre19dcc42k038mAEIXwwwABJ0rr7xSn332mZxOp3788UfNmjVLr7zyim655RZt2LBBjRo18rnezp07c4VTjwsvvNDn8mcGVkkqX768JCkxMdHn/L/++su7HUm65JJL8nzmpZdeqnnz5un48eMqU6aMzxol6aKLLso1v2rVqrnC2rlccMEFSklJKfDy+Tm7D5JUsWJF7/4eOHBAmZmZhR72kZ+dO3fqoosu8g7b8PAMS/D0yV+Nnl55agQQujgzCyBoRUVF6corr9Szzz6rN998Uy6XSzNnziy2z/d3lQF/840gudKhvzOlOTk5PucHw/4GQ40ASgZhFkBI8Px6e9++fX6XqVOnTq7r0Hr4mnc+6tSpI0nasmVLnvc2b96sKlWq+Dwre+a6v/32W675Bw4cKLazjBUrVtThw4fzzD/7bGdBVa1aVfHx8frll1/yXa4www3q1Kmj3377TW63O9f8zZs3e98HAIkwCyDILF682OfZNs84VF+/2vfo1KmTVqxYoQ0bNnjnHTp0SB9++GGx1lijRg01a9ZM77//fq7Q+Msvv2j+/Pnq3Lmz33VTUlLkcDg0adKkXPs5ceLEYquvQYMGOnLkiH766SfvvH379mnWrFlF+jy73a7u3bvryy+/1Jo1a/K879kPT4D3FaTP1rlzZ6Wnp2vGjBneednZ2Zo0aZLKli2rNm3aFKlWAKGHMbMAgsoDDzygrKws3XzzzWrYsKGcTqeWL1+uGTNmqG7duurfv7/fdR9//HF98MEH6tChgx544AHvpblq166tQ4cOFemLSv68+OKLuuGGG5ScnKwBAwZ4L81Vvnx5jR492u96VatW1aOPPqrx48frxhtvVOfOnbV+/Xp9/fXXqlKlSrHUdtttt2n48OG6+eabNWzYMGVlZenNN9/UxRdfrHXr1hXpM5999lnNnz9fbdq00b333qtLL71U+/bt08yZM7Vs2TJVqFBBzZo1U0REhJ5//nkdOXJE0dHRuu666/JcH1iS7r33Xr311lvq16+f1q5dq7p16+qTTz7R999/r4kTJ6pcuXLn2wYAIYIwCyCoTJgwQTNnztScOXP09ttvy+l0qnbt2ho8eLCeeuopnzdT8EhMTNTixYs1bNgwPfvss6pataqGDBmiMmXKaNiwYYqJiSm2OlNSUjR37lylpaVp1KhRcjgcatOmjZ5//nnVq1cv33XHjh2rmJgYTZ48WYsXL1ZSUpLmz5+vLl26FEttlStX1qxZs5SamqrHH39c9erV0/jx4/Xbb78VOczWqlVLK1eu1MiRI/Xhhx8qMzNTtWrV0g033KC4uDhJUkJCgiZPnqzx48drwIABysnJ0eLFi32G2djYWC1ZskRPPPGE3n//fWVmZuqSSy7R1KlT89wIA0B4sxmMjgcQ5h566CG99dZbOnbsWIncWhYAUHIYMwsgrJw4cSLX64MHD+rf//63rr76aoIsAAQhhhkACCvJyclq27atLr30UmVkZOjdd99VZmamRo4caXVpAIAiIMwCCCudO3fWJ598orfffls2m01XXHGF3n33XV177bVWlwYAKALGzAIAACBoMWYWAAAAQYswCwAAgKAVdmNm3W639u7dq3LlyhXrBdIBAABQPAzD0NGjR1WzZk3Z7fmfew27MLt3714lJiZaXQYAAADOYffu3brgggvyXSbswqznFoi7d+9WfHx8iW/P5XJp/vz56tixoxwOR4lvL5jQG9/oi3/0xjf64h+98Y2++EdvfAt0XzIzM5WYmFigW1eHXZj1DC2Ij48PWJiNi4tTfHw8fynOQm98oy/+0Rvf6It/9MY3+uIfvfHNqr4UZEgoXwADAABA0CLMAgAAIGgRZgEAABC0wm7MbEEYhqHs7Gzl5OSc92e5XC5FRkbq5MmTxfJ5oYTe+JZfXyIiIhQZGcll5QAA+B/C7FmcTqf27dunrKysYvk8wzCUkJCg3bt3E0DOQm98O1df4uLiVKNGDUVFRVlQHQAApQth9gxut1vbt29XRESEatasqaioqPMOWW63W8eOHVPZsmXPedHfcENvfPPXF8Mw5HQ6deDAAW3fvl0XXXQRfQMAhD3C7BmcTqfcbrcSExMVFxdXLJ/pdrvldDoVExND8DgLvfEtv77ExsbK4XBo586d3mUAAAhnJAgfCFYozTg+AQA4jX8VAQAAELQIswAAAAhahNkwYrPZNHv2bKvL0JIlS2Sz2XT48GG/y0ybNk0VKlQIWE3FpSD7BgAAig9hNkQcOHBAgwYNUu3atRUdHa2EhAR16tRJ33//vXeZffv26YYbbrCwSlPr1q21b98+lS9f/rw+x2az5XlcffXVxVTlubVt21YPPfRQrnnFtW8AAKBguJpBiOjRo4ecTqfef/991a9fXxkZGVq0aJEOHjzoXSYhIcHCCk+LiopSQkKC3G73eX/W1KlTdf311+f6bCt59g0AAAQGZ2bPwTCk48eteRhGwWo8fPiwvvvuOz3//PNq166d6tSpo1atWmnEiBG66aabvMudPcxg+fLlatasmWJiYtSyZUvNnj1bNptNGzZskHT6V+bz5s1T8+bNFRsbq+uuu0779+/X119/rUsvvVTx8fG6/fbbc91k4tSpUxo2bJiqVaummJgYXX311Vq9erX3fV+/ip82bZpq166tuLg43XzzzblCeH4qVKighIQE76NSpUo+99Wz7LRp0yRJO3bskM1m02effaZ27dopLi5OTZs21YoVK3Kt8/3336tt27aKi4tTxYoV1alTJ/3111/q16+fvv32W7366qves8I7duzwuW+ffvqpLrvsMkVHR6tu3bp66aWXcm2jbt26evbZZ3X33XerXLlyqlu3rrdOAACQP0vD7NKlS9W1a1fVrFmzwOM5lyxZoiuuuELR0dG68MILS/wf/awsqWzZoj/i4+264IIKio+3F3rdgt6ErGzZsipbtqxmz56tU6dOFWidzMxMde3aVZdffrnWrVunZ555RsOHD/e57OjRo/X6669r+fLl2r17t2699VZNnDhR06dP11dffaX58+dr0qRJ3uUff/xxffrpp3r//fe1bt06XXjhherUqZMOHTrk8/NXrlypAQMGaOjQodqwYYPatWunsWPHFmznz9M//vEPPfroo9qwYYMuvvhi9e7dW9nZ2ZKkDRs2qH379mrUqJFWrFihZcuWqWvXrsrJydGrr76q5ORkDRw4UPv27dO+ffuUmJiY5/PXrl2rW2+9Vbfddpt+/vlnjR49WiNHjsxz3L700ktq2bKl1q9fr0GDBumRRx7Rli1bAtECAACCm2GhOXPmGP/4xz+Mzz77zJBkzJo1K9/lf//9dyMuLs5ITU01fv31V2PSpElGRESEMXfu3AJv88iRI4Yk48iRI3neO3HihPHrr78aJ06c8M47dswwzHOkgX8cO1bg3TI++eQTo2LFikZMTIzRunVrY8SIEcaPP/6Ya5kze/zmm28alStXzrWv77zzjiHJWL9+vWEYhrF48WJDkrFw4ULvMuPHjzckGdu2bfPOu++++4xOnTr9r1/HDIfDYXz44Yfe951Op1GzZk3jhRdeyPW5Bw8eNP766y/jtttuMzp37pyr1l69ehnly5fPd58l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UkW6916rqwEQrAizAICAc7ulcePM6dRUqUwZa+sBELwIswCAgPvsM2nzZqlCBWnIEKurARDMCLMAgIAyjNM3Rhg2TIqPt7YeAMGNMAsACKj//lf68UfzMlwPPmh1NQCCHWEWABAwZ56VHTJEqlTJ2noABD/CLAAgYBYulFatkmJjzS9+AcD5IswCAALGc1b23nulatWsrQVAaCDMAgACYtUqaelSyeGQHn3U6moAhArCLAAgICZNMp9vu0264AJrawEQOgizAIASl5EhzZhhTj/wgLW1AAgthFkAQIl7+23J5ZKSkqQrr7S6GgChhDALAChRLpc0ebI5zVlZAMXN8jD7xhtvqG7duoqJiVFSUpJWrVqV7/ITJ07UJZdcotjYWCUmJurhhx/WyZMnA1QtAKCwPvtM2rtXql5d6tnT6moAhBpLw+yMGTOUmpqqtLQ0rVu3Tk2bNlWnTp20f/9+n8tPnz5dTzzxhNLS0rRp0ya9++67mjFjhp588skAVw4AKKjXXjOf779fioqythYAocfSMPvyyy9r4MCB6t+/vxo1aqTJkycrLi5O7733ns/lly9frquuukq333676tatq44dO6p3797nPJsLALDGunXS8uVSZKR0331WVwMgFEVatWGn06m1a9dqxIgR3nl2u10pKSlasWKFz3Vat26tDz74QKtWrVKrVq30+++/a86cObrrrrv8bufUqVM6deqU93VmZqYkyeVyyeVyFdPe+OfZRiC2FWzojW/0xT9641tp7surr0ZIsqtHD7eqVMlRoEsszb2xEn3xj974Fui+FGY7NsMwjBKsxa+9e/eqVq1aWr58uZKTk73zH3/8cX377bdauXKlz/Vee+01PfroozIMQ9nZ2br//vv15ptv+t3O6NGjNWbMmDzzp0+frri4uPPfEQCAT0eOROmeezrK5YrQc88tVcOGf1ldEoAgkZWVpdtvv11HjhxRfHx8vstadma2KJYsWaJnn31W//znP5WUlKStW7fqwQcf1DPPPKORI0f6XGfEiBFKPeMG4JmZmUpMTFTHjh3P2Zzi4HK5tGDBAnXo0EEOh6PEtxdM6I1v9MU/euNbae3L88/b5XJF6Ior3Hr44WTZbIGvobT2xmr0xT9641ug++L5TXpBWBZmq1SpooiICGVkZOSan5GRoYSEBJ/rjBw5UnfddZfuueceSdLl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W2vfvn25Hvfcc4/q1aunli1b5rvuwIEDc633wgsvBKjqwHn66adz7eMDDzyQ7/IPP/ywvvzyS82cOVPffvut9u7dq7///e8BqjYwNm/eLLfbrbfeeksbN27UK6+8osmTJ+vJJ58857qhdMzMmDFDqampSktL07p169S0aVN16tRJ+/fv97n88uXL1bt3bw0YMEDr169X9+7d1b17d/3yyy8BrrxkffvttxoyZIh++OEHLViwQC6XSx07dtTx48fzXS8+Pj7XsbFz584AVRw4l112Wa59XLZsmd9lw+V4kaTVq1fn6suCBQskST179vS7TigeL8ePH1fTpk31xhtv+Hz/hRde0GuvvabJkydr5cqVKlOmjDp16qSTJ0/6/czC/pwqVgaKzdSpU43y5cvnmT9nzhzDbrcb6enp3nlvvvmmER8fb5w6dcrnZ/3666+GJGP16tXeeV9//bVhs9mMPXv2FHvtVnA6nUbVqlWNp59+Ot/l2rRpYzz44IOBKcoiderUMV555ZUCL3/48GHD4XAYM2fO9M7btGmTIclYsWJFCVRYerzwwgtGvXr18l0m1I6ZVq1aGUOGDPG+zsnJMWrWrGmMHz/e5/K33nqr0aVLl1zzkpKSjPvuu69E67Ta/v37DUnGt99+63cZfz+nQ0laWprRtGnTAi8frseLYRjGgw8+aDRo0MBwu90+3w+H40WSMWvWLO9rt9ttJCQkGC+++KJ33uHDh43o6GjjP//5j9/PKezPqeLEmdkAWLFihS6//HJVr17dO69Tp07KzMzUxo0b/a5ToUKFXGcsU1JSZLfbtXLlyhKvORC++OILHTx4UP379z/nsh9++KGqVKmixo0ba8SIEcrKygpAhYH13HPPqXLlymrevLlefPHFfIehrF27Vi6XSykpKd55DRs2VO3atbVixYpAlGuZI0eOqFKlSudcLlSOGafTqbVr1+b6s7bb7UpJSfH7Z71ixYpcy0vmz5xwODYknfP4OHbsmOrUqaPExER169bN78/hYPbbb7+pZs2aql+/vu644w7t2rXL77Lherw4nU598MEHuvvuu2Wz2fwuFw7Hy5m2b9+u9PT0XMdE+fLllZSU5PeYKMrPqeIUWeJbgNLT03MFWUne1+np6X7XqVatWq55kZGRqlSpkt91gs27776rTp066YILLsh3udtvv1116tRRzZo19dNPP2n48OHasmWLPvvsswBVWvKGDRumK664QpUqVdLy5cs1YsQI7du3Ty+//LLP5dPT0xUVFZVnjHb16tVD5vjwZevWrZo0aZImTJiQ73KhdMz8+eefysnJ8fkzZPPmzT7X8fczJ5SPDbfbrYceekhXXXWVGjdu7He5Sy65RO+9956aNGmiI0eOaMKECWrdurU2btx4zp9FwSIpKUnTpk3TJZdcon379mnMmDG65ppr9Msvv6hcuXJ5lg/H40WSZs+ercOHD6tfv35+lwmH4+Vsnj/3whwTRfk5VZwIs3488cQTev755/NdZtOmTeccVB8OitKrP/74Q/PmzdPHH398zs8/c5zw5Zdfrho1aqh9+/batm2bGjRoUPTCS1hh+pKamuqd16RJE0VFRem+++7T+PHjS+WtA89XUY6ZPXv26Prrr1fPnj01cODAfNcN1mMGRTdkyBD98ssv+Y4NlaTk5GQlJyd7X7du3VqXXnqp3nrrLT3zzDMlXWZA3HDDDd7pJk2aKCkpSXXq1NHHH3+sAQMGWFhZ6fLuu+/qhhtuUM2aNf0uEw7HSyggzPrxyCOP5Pu/NUmqX79+gT4rISEhzzf6PN86T0hI8LvO2YOms7OzdejQIb/rWKUovZo6daoqV66sm266qdDbS0pKkmSepSvNweR8jqGkpCRlZ2drx44duuSSS/K8n5CQIKfTqcOHD+c6O5uRkVHqjg9fCtubvXv3ql27dmrdurXefvvtQm8vWI4ZX6pUqaKIiIg8V6rI7886ISGhUMsHu6FDh3q/JFvYs2UOh0PNmzfX1q1bS6g661WoUEEXX3yx330Mt+NFknbu3KmFCxcW+rc14XC8eP7cMzIyVKNGDe/8jIwMNWvWzOc6Rfk5VZwIs35UrVpVVatWLZbPSk5O1rhx47R//37v0IEFCxYoPj5ejRo18rvO4cOHtXbtWrVo0UKS9M0338jtdnv/YS4tCtsrwzA0depU9enTRw6Ho9Db27BhgyTl+ktWGp3PMbRhwwbZ7fY8Q008WrRoIYfDoUWLFqlHjx6SpC1btmjXrl25ziKUVoXpzZ49e9SuXTu1aNFCU6dOld1e+KH+wXLM+BIVFaUWLVpo0aJF6t69uyTzV+qLFi3S0KFDfa6TnJysRYsW6aGHHvLOW7BgQVAcG4VhGIYeeOABzZo1S0uWLFG9evUK/Rk5OTn6+eef1blz5xKosHQ4duyYtm3bprvuusvn++FyvJxp6tSpqlatmrp06VKo9cLheKlXr54SEhK0aNEib3jNzMzUypUr/V61qSg/p4pViX/FLAzs3LnTWL9+vTFmzBijbNmyxvr1643169cbR48eNQzDMLKzs43GjRsbHTt2NDZs2GDMnTvXqFq1qjFixAjvZ6xcudK45JJLjD/++MM77/rrrzeaN29urFy50li2bJlx0UUXGb179w74/hW3hQsXGpKMTZs25Xnvjz/+MC655BJj5cqVhmEYxtatW42nn37aWLNmjbF9+3bj888/N+rXr29ce+21gS67xCxfvtx45ZVXjA0bNhjbtm0zPvjgA6Nq1apGnz59vMuc3RfDMIz777/fqF27tvHNN98Ya9asMZKTk43k5GQrdqHE/PHHH8aFF15otG/f3vjjjz+Mffv2eR9nLhPqx8xHH31kREdHG9OmTTN+/fVX49577zUqVKjgvULKXXfdZTzxxBPe5b///nsjMjLSmDBhgrFp0yYjLS3NcDgcxs8//2zVLpSIQYMGGeXLlzeWLFmS69jIysryLnN2b8aMGWPMmzfP2LZtm7F27VrjtttuM2JiYoyNGzdasQsl4pFHHjGWLFlibN++3fj++++NlJQUo0qVKsb+/fsNwwjf48UjJyfHqF27tjF8+PA874XL8XL06FFvVpFkvPzyy8b69euNnTt3GoZhGM8995xRoUIF4/PPPzd++ukno1u3bka9evWMEydOeD/juuuuMyZNmuR9fa6fUyWJMFsM+vbta0jK81i8eLF3mR07dhg33HCDERsba1SpUsV45JFHDJfL5X1/8eLFhiRj+/bt3nkHDx40evfubZQtW9aIj483+vfv7w3Iwax3795G69atfb63ffv2XL3btWuXce211xqVKlUyoqOjjQsvvNB47LHHjCNHjgSw4pK1du1aIykpyShfvrwRExNjXHrppcazzz5rnDx50rvM2X0xDMM4ceKEMXjwYKNixYpGXFyccfPNN+cKeaFg6tSpPv9unfn/8HA5ZiZNmmTUrl3biIqKMlq1amX88MMP3vfatGlj9O3bN9fyH3/8sXHxxRcbUVFRxmWXXWZ89dVXAa645Pk7NqZOnepd5uzePPTQQ94+Vq9e3ejcubOxbt26wBdfgnr16mXUqFHDiIqKMmrVqmX06tXL2Lp1q/f9cD1ePObNm2dIMrZs2ZLnvXA5XjyZ4+yHZ9/dbrcxcuRIo3r16kZ0dLTRvn37PP2qU6eOkZaWlmtefj+nSpLNMAyj5M//AgAAAMWP68wCAAAgaBFmAQAAELQIswAAAAhahFkAAAAELcIsAAAAghZhFgAAAEGLMAsAAICgRZgFAABA0CLMAgAAIGgRZgEAABC0CLMAAAAIWoRZAAhSO3bskM1my/No27at1aUBQMBEWl0AAKBoEhMTtW/fPu/r9PR0paSk6Nprr7WwKgAILJthGIbVRQAAzs/JkyfVtm1bVa1aVZ9//rnsdn7xBiA8cGYWAELA3XffraNHj2rBggUEWQBhhTALAEFu7NixmjdvnlatWqVy5cpZXQ4ABBTDDAAgiH366afq3bu3vv76a7Vv397qcgAg4AizABCkfvnlFyUlJSk1NVVDhgzxzo+KilKlSpUsrAwAAocwCwBBatq0aerfv3+e+W3atNGSJUsCXxAAWIAwCwAAgKDFV14BAAAQtAizAAAACFqEWQAAAAQtwiwAAACCFmEWAAAAQYswCwAAgKBFmAUAAEDQIswCAAAgaBFmAQAAELQIswAAAAhahFkAAAAErf8HYmyI/5QDoLEAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"# Sigmoid function\n",
"def sigmoid(z):\n",
" return 1 / (1 + np.exp(-z))\n",
"\n",
"# Range of z values\n",
"z_values = np.linspace(-10, 10, 100)\n",
"\n",
"# Compute sigmoid values\n",
"sigmoid_values = sigmoid(z_values)\n",
"\n",
"# Plotting\n",
"plt.figure(figsize=(8, 6))\n",
"plt.plot(z_values, sigmoid_values, 'b-', label='Sigmoid Function')\n",
"plt.title('Sigmoid Function')\n",
"plt.xlabel('z')\n",
"plt.ylabel('σ(z)')\n",
"plt.grid(True)\n",
"plt.legend()\n",
"\n",
"# Save the plot\n",
"plt.savefig('sigmoid_function.png')"
]
},
{
"cell_type": "markdown",
"id": "371ec6f8",
"metadata": {},
"source": [
"### Adjust w and b to classify tumor's type (malignant vs. non-malignant)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "84f1138d",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5e6e9c624a174e8cb81e1a20ad547086",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(FloatSlider(value=20.0, description='w', max=200.0, min=-50.0), FloatSlider(value=-7.0, …"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<function __main__.plot_neuron(w=20.0, b=-7.0)>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from ipywidgets import interact\n",
"import ipywidgets as widgets\n",
"\n",
"# Sigmoid function\n",
"def sigmoid(z):\n",
" return 1 / (1 + np.exp(-z))\n",
"\n",
"# Function to plot the neuron and sigmoid curve\n",
"def plot_neuron(w=20.0, b=-7.0):\n",
" # Create a figure with two subplots\n",
" fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4), gridspec_kw={'width_ratios': [1, 2]})\n",
"\n",
" # Subplot 1: Neuron diagram\n",
" ax1.set_xlim(-0.5, 2.5)\n",
" ax1.set_ylim(-0.5, 0.5)\n",
" ax1.axis('off')\n",
"\n",
" # Draw circles (input and summation nodes)\n",
" circle1 = plt.Circle((0, 0), 0.3, fill=False)\n",
" circle2 = plt.Circle((2, 0), 0.3, fill=False)\n",
" ax1.add_patch(circle1)\n",
" ax1.add_patch(circle2)\n",
"\n",
" # Draw arrow connecting circles\n",
" ax1.arrow(0.3, 0, 1.4, 0, head_width=0.05, head_length=0.1, fc='k', ec='k')\n",
"\n",
" # Labels\n",
" ax1.text(0, 0, 'x', ha='center', va='center', fontsize=12)\n",
" ax1.text(2, 0, 'Σ', ha='center', va='center', fontsize=12)\n",
" ax1.text(1, 0.2, f'w = {w}', ha='center', va='center', fontsize=12)\n",
" ax1.text(1, -0.4, f'b = {b}', ha='center', va='center', fontsize=12)\n",
"\n",
" # Subplot 2: Sigmoid plot\n",
" x = np.linspace(-1, 1, 100) # Input range from -1 to 1\n",
" z = w * x + b\n",
" y = sigmoid(z)\n",
"\n",
" ax2.plot(x, y, 'r-', label='Sigmoid Output')\n",
" ax2.set_xlim(-1, 1)\n",
" ax2.set_ylim(-0.05, 1.05)\n",
" ax2.set_xlabel('x')\n",
" ax2.set_ylabel('y')\n",
" ax2.grid(True)\n",
" ax2.legend()\n",
"\n",
" plt.tight_layout()\n",
" plt.show()\n",
"\n",
"# Create interactive sliders for w and b\n",
"interact(plot_neuron,\n",
" w=widgets.FloatSlider(min=-50, max=200, step=0.1, value=20.0, description='w'),\n",
" b=widgets.FloatSlider(min=-50, max=200, step=0.1, value=-7.0, description='b'))"
]
},
{
"cell_type": "markdown",
"id": "cc72c31e",
"metadata": {},
"source": [
"# Tumor Data and sigmoid plotting"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "e347fec9",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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x4+rb9++KlOmTJavNTk5WceOHXNa5u/v7+i6ktr06dP1yCOPKDY2Vo899pgkqUKFClk+F1DgGQCQhxYuXGh4e3sb3t7eRqNGjYxnn33WWLBggZGUlOS03a5duwwvLy+jU6dORnJystO6lJQUx/z58+fTnOPxxx83AgMDjYsXLzqWtW/f3oiOjk6z7YYNGwxJxpQpU9Kco1KlSkabNm3SnK9cuXJG69atHctGjhxpSDLuv//+LH0GS5cuNSQZn332mXH06FHj8OHDxty5c42YmBjDZrMZGzZsMAzDMPbt25emtrp16xolS5Y0jh8/7li2ZcsWw8vLy+jVq5dj2VtvvWVIMvbt25dpPcnJyUZISIjx7LPPOq69WLFiRpcuXQxvb2/jzJkzhmEYxvjx4w0vLy/j5MmTjn0lGSNHjszSeSUZvr6+xu7du51ql2S8++67163xyJEjRokSJQxJRtWqVY1+/foZM2bMME6dOpVm2969ezt91999950hyXjnnXecrrlly5ZpPt/evXsbkozRo0c7lp08edIICAgwbDab8eWXXzqW//nnn2mu/6mnnjIkGXFxcY5lZ86cMcqVK2fExMQ4fpYz+m4jIiKcrmnhwoWGpHR/dq912223GZLSTL179zYM4+rPaWpBQUGO9QCyh+4ZAPJU69attWbNGt19993asmWLxo4dqzZt2qh06dL68ccfHdvNnj1bKSkpGjFihLy8nH81pf4Tc0BAgGP+zJkzOnbsmJo2barz589nOGJAVmzevFm7du3SAw88oOPHj+vYsWM6duyYzp07p9tvv10rVqxIc7NZv379snWOhx56SCVKlFBkZKTat2/v+FN5/fr1090+Pj5emzdvVp8+fVS0aFHH8tq1a6t169b6+eefs3+hkry8vNS4cWOtWLFCkrRjxw4dP35cw4cPl2EYWrNmjSSz9blmzZo3dINfq1atnFoza9eurZCQkExHDSlVqpS2bNmifv366eTJk/roo4/0wAMPqGTJknrttdeu27I/f/58+fj46NFHH3W65gEDBmS4zyOPPOKYDwsLU5UqVRQUFKSuXbs6llepUkVhYWFOtf/888+KjY116p4THBysxx57TPv379f27dvTPZ/9u+3du7dCQ0Mdy1u3bq3q1atnWOe1YmJitGjRIqfp2WefzfL+ALKO7hkA8lyDBg00a9YsJSUlacuWLfr+++81YcIE3Xfffdq8ebOqV6+uPXv2yMvLK9PA8Mcff+ill17SkiVLdPr0aad1iYmJOa5x165dknTdrgCJiYkqUqSI4739T/RZNWLECDVt2lTe3t4qXry4qlWrdt0btQ4cOCDJDGvXqlatmhYsWJClGxDT07RpU0d3j7i4OEVEROimm25SnTp1FBcXp9atW2vlypVOoTEnypYtm2ZZkSJFdPLkyUz3jYiI0IcffqgPPvhAu3bt0oIFC/Tmm29qxIgRioiIcAq6qR04cEAREREKDAx0Wl6xYsV0t/f390/TlSU0NFRlypRJM85xaGioU+0HDhxQw4YN0xyzWrVqjvXpdUuyf7eVKlVKs65KlSrauHFjurVeKygoSK1atcrStgBuDKEZQL7x9fVVgwYN1KBBA1WuXFl9+/bVN998o5EjR2Zp/1OnTum2225TSEiIXn31VVWoUEH+/v7auHGjnnvuuRsadsy+71tvvZXhUHTX9hNN3eqdFbVq1XKZgHPrrbfq8uXLWrNmjeLi4hz9u5s2baq4uDj9+eefOnr0qGN5Tnl7e6e7/Hotxdey2WyqXLmyKleurPbt26tSpUr64osvMgzNuVVjbtQOwHMQmgFYwt4lIT4+XpJ5Q1JKSoq2b9+eYWhdtmyZjh8/rlmzZjndnJbe6BMZPQkto+X2LgQhISEuE2yjo6MlSTt37kyz7s8//1Tx4sUdrczZffJbbGysfH19FRcXp7i4OMcoGM2aNdPkyZO1ePFix/vrye8nzpUvX15FihRx/NykJzo6WkuXLtX58+edWpt3796d6/VER0dn+P3Y12e0n3T1LxyppXe83MITAoGco08zgDy1dOnSdFvm7P1x7V0P7rnnHnl5eenVV19N02Js39/e8pf6eElJSfrggw/SHD8oKCjd7hr2kHntE+xuvvlmVahQQePGjUv3aXNHjx7N8BrzSkREhOrWratp06Y51btt2zYtXLhQd955p2NZRteVEX9/fzVo0EAzZ87UwYMHnVqaL1y4oEmTJqlChQqKiIi47nGye96sWrdunc6dO5dm+fr163X8+PF0u6zYtWnTRpcvX9bkyZMdy1JSUhzDyOWmO++8U+vXr3f0A5fMMbs//vhjxcTEZNjdKPV3m/rndNGiRRn2g84NQUFB+f7USMBT0NIMIE8NHDhQ58+fV6dOnVS1alUlJSVp9erV+uqrrxQTE6O+fftKMvubvvjii3rttdfUtGlT3XvvvfLz89OGDRsUGRmpMWPGqHHjxipSpIh69+6tQYMGyWazafr06emG8ptvvllfffWVhgwZogYNGig4OFgdOnRQhQoVFBYWpo8++kiFCxdWUFCQGjZsqHLlyumTTz5Ru3btVKNGDfXt21elS5fWP//8o6VLlyokJEQ//fRTfn98euutt9SuXTs1atRIDz/8sGPIudDQUMd4yfbrlczh9rp37y4fHx916NDhuv2dmzZtqjfeeEOhoaGqVauWJHPs7CpVqmjnzp1ZGsM3J+fNiunTp+uLL75Qp06ddPPNN8vX11c7duzQZ599Jn9/f73wwgsZ7nvPPfcoNjZWzzzzjHbv3q2qVavqxx9/1IkTJyTlbmvr8OHDNXPmTLVr106DBg1S0aJFNW3aNO3bt0/fffddmptaUxszZozat2+vW2+9VQ899JBOnDihd999VzVq1Mizx4TffPPN+uWXXzR+/HhFRkaqXLly6fbJBpAO6wbuAFAQzJs3z3jooYeMqlWrGsHBwYavr69RsWJFY+DAgca///6bZvvPPvvMqFevnuHn52cUKVLEuO2224xFixY51q9atcq45ZZbjICAACMyMtIxhJ0kY+nSpY7tzp49azzwwANGWFhYmiG8fvjhB6N69epGoUKF0gwDtmnTJuPee+81ihUrZvj5+RnR0dFG165djcWLFzu2sQ/ldfTo0Sx9BvYh57755pvrbpfesGSGYRi//PKL0aRJEyMgIMAICQkxOnToYGzfvj3N/q+99ppRunRpw8vLK0vDz82dO9eQZLRr185p+SOPPGJIMj799NM0++iaIdeud15JxoABA9IcIzo6OtNhz37//Xdj2LBhxk033WQULVrUKFSokBEREWF06dLF2Lhxo9O21w45ZxiGcfToUeOBBx4wChcubISGhhp9+vQxVq1aZUhyGkaud+/eRlBQUJrz33bbbUaNGjXSrb19+/ZOy/bs2WPcd999RlhYmOHv72/ExsYac+bMcdomo+/2u+++M6pVq2b4+fkZ1atXN2bNmpXu9aQnoxrt0hty7s8//zSaNWtmBAQEOA1PByBzNsPgjgYAgOebPXu2OnXqpJUrV6pJkyZWlwPAzRCaAQAe58KFC06jmyQnJ+uOO+7Qr7/+qiNHjmR75BMAoE8z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bT0ArENoRrYcPXpU/fv3V9myZeXn56fw8HC1adNGq1atcmwTHx+vdu3aWVilqXHjxoqPj1foDT4Z0WazpZluvfVWRUVFKT4+XjVr1pSUtZAOwH2sWyc9/LA5P3y42UUDQMHFw02QLZ07d1ZSUpKmTZum8uXL699//9XixYt1/Phxxzbh4eEWVniVr69vrtUyZcoUtW3b1unY3t7eLnOtAHLX8ePSvfdeHYv59detrgiA1WhpdhGGIZ07Z81kGFmr8dSpU4qLi9Obb76pFi1aKDo6WrGxsXr++ed19913O7a7tnvG6tWrVbduXfn7+6t+/fqaPXu2U7cGewvtggULVK9ePQUEBKhly5ZKSEjQvHnzVK1aNYWEhOiBBx7Q+fPnHce9dOmSBg0apJIlS8rf31+33nqrNmzY4FifXsvv1KlTVbZsWQUGBqpTp05OYf96wsLCFB4e7piKFi3q1D1j//79atGihSSpSJEistls6tOnT9Y+WAAuxTCk/v2lw4elqlWlzz+XvPi/JVDg0dLsIs6fl4KDrTn32bNZuxM8ODhYwcHBmj17tm655Rb5ZeERWKdPn1aHDh105513asaMGTpw4ICeeuqpdLcdNWqU3nvvPQUGBqpr167q2rWr/Pz8NGPGDJ09e1adOnXSu+++q+eee06S9Oyzz+q7777TtGnTFB0drbFjx6pNmzbavXu3ihYtmub469at08MPP6wxY8bonnvu0fz58zVy5MjMLzwLoqKi9N1336lz587auXOnQkJCFBAQkCvHBpC/Zs40H1pSqJA0fbpUuLDVFQFwBfzbGVlWqFAhTZ06VdOmTVNYWJiaNGmiF154Qb///nuG+8yYMUM2m02TJ09W9erV1a5dOw0bNizdbf/zn/+oSZMmqlevnh5++GEtX75cH374oerVq6emTZvqvvvu09KlSyVJ586d04cffqi33npL7dq1U/Xq1TV58mQFBATo008/Tff4EydOVNu2bfXss8+qcuXKGjRokNq0aZOla7///vsd/2iw/8MhNW9vb0dQL1mypMLDw2+4LzWA/Pf339KAAeb8yy9L9etbWw8A10FLs4sIDDRbfK06d1Z17txZ7du3V1xcnNauXat58+Zp7Nix+uSTT9LtjrBz507Vrl1b/v7+jmWxsbHpHrt27dqO+VKlSikwMFDly5d3WrZ+/XpJ0p49e3T5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AAAAZILQ7CH8/Pw0cuRI+fn5WV0KrsF345r4XlwX341r4ntxXXw3+YMbAQEAAIBM0NIMAAAAZILQDAAAAGSC0AwAAABkgtAMAAAAZILQ7CHef/99xcTEyN/fXw0bNtT69eutLqnAGzNmjBo0aKDChQurZMmSuueee7Rz506ry8I13njjDdlsNj311FNWl1Lg/fPPP3rwwQdVrFgxBQQEqFatWvr111+tLqvAS05O1ssvv6xy5copICBAFSpU0GuvvSbGEch/K1asUIcOHRQZGSmbzabZs2c7rTcMQyNGjFBERIQCAgLUqlUr7dq1y5piPRCh2QN89dVXGjJkiEaOHKmNGzeqTp06atOmjRISEqwurUBbvny5BgwYoLVr12rRokW6fPmy7rjjDp07d87q0vA/GzZs0P/93/+pdu3aVpdS4J08eVJNmjSRj4+P5s2bp+3bt+vtt99WkSJFrC6twHvzzTf14Ycf6r333tOOHTv05ptvauzYsXr33XetLq3AOXfunOrUqaP3338/3fVjx47VpEmT9NFHH2ndunUKCgpSmzZtdPHixXyu1DMx5JwHaNiwoRo0aKD33ntPkpSSkqKoqCgNHDhQw4cPt7g62B09elQlS5bU8uXL1axZM6vLKfDOnj2rm266SR988IH+85//qG7dunrnnXesLqvAGj58uFatWqW4uDirS8E17rrrLpUqVUqffvqpY1nnzp0VEBCgzz//3MLKCjabzabvv/9e99xzjySzlTkyMlLPPPOMhg4dKklKTExUqVKlNHXqVHXv3t3Caj0DLc1uLikpSb/99ptatWrlWObl5aVWrVppzZo1FlaGayUmJkqSihYtanElkKQBAwaoffv2Tv/twDo//vij6tevry5duqhkyZKqV6+eJk+ebHVZkNS4cWMtXrxYf/31lyRpy5YtWrlypdq1a2dxZUht3759OnLkiNPvtNDQUDVs2JA8kEsKWV0AbsyxY8eUnJysUqVKOS0vVaqU/vzzT4uqwrVSUlL01FNPqUmTJqpZs6bV5RR4X375pTZu3KgNGzZYXQr+Z+/evfrwww81ZMgQvfDCC9qwYYMGDRokX19f9e7d2+ryCrThw4fr9OnTqlq1qry9vZWcnKzXX39dPXr0sLo0pHLkyBFJSjcP2NfhxhCagXwwYMAAbdu2TStXrrS6lALv0KFDGjx4sBYtWiR/f3+ry8H/pKSkqH79+ho9erQkqV69etq2bZs++ugjQrPFvv76a33xxReaMWOGatSooc2bN+upp55SZGQk3w0KFLpnuLnixYvL29tb//77r9Pyf//9V+Hh4RZVhdSefPJJzZkzR0uXLlWZMmWsLqfA++2335SQkKCbbrpJhQoVUqFChbR8+XJNmjRJhQoVUnJystUlFkgRERGqXr2607Jq1arp4MGDFlUEu2HDhmn48OHq3r27atWqpZ49e+rpp5/WmDFjrC4Nqdj/n08eyDuEZjfn6+urm2++WYsXL3YsS0lJ0eLFi9WoUSMLK4NhGHryySf1/fffa8mSJSpXrpzVJUHS7bffrq1bt2rz5s2OqX79+urRo4c2b94sb29vq0sskJo0aZJmSMa//vpL0dHRFlUEu/Pnz8vLyzkueHt7KyUlxaKKkJ5y5copPDzcKQ+cPn1a69atIw/kErpneIAhQ4aod+/eql+/vmJjY/XOO+/o3Llz6tu3r9WlFWgDBgzQjBkz9MMPP6hw4cKOPmWhoaEKCAiwuLqCq3Dhwmn6lQcFBalYsWL0N7fQ008/rcaNG2v06NHq2rWr1q9fr48//lgff/yx1aUVeB06dNDrr7+usmXLqkaNGtq0aZPGjx+vhx56yOrSCpyzZ89q9+7djvf79u3T5s2bVbRoUZUtW1ZPPfWU/vOf/6hSpUoqV66cXn75ZUVGRjpG2MANMuAR3n33XaNs2bKGr6+vERsba6xdu9bqkgo8SelOU6ZMsbo0XOO2224zBg8ebHUZBd5PP/1k1KxZ0/Dz8zOqVq1qfPzxx1aXBMMwTp8+bQwePNgoW7as4e/vb5QvX9548cUXjUuXLlldWoGzdOnSdP+/0rt3b8MwDCMlJcV4+eWXjVKlShl+fn7G7bffbuzcudPaoj0I4zQDAAAAmaBPMwAAAJAJQjMAAACQCUIzAAAAkAlCMwAAAJAJQjMAAACQCUIzAAAAkAlCMwAAAJAJQjMAAACQCUIzAOSTZcuWyWaz6dSpU1aXkkazZs00Y8aM625js9k0e/ZsSdL+/ftls9m0efPmvC/OYqNGjVLdunWtLiON+fPnq27dukpJSbG6FKBAIDQDcEnNmzfXU089ZXUZuapx48aKj49XaGio1aU4+fHHH/Xvv/+qe/fuWd4nKipK8fHxqlmzZh5WljV9+vTRPffck2fHHzp0qBYvXpxnx8+ptm3bysfHR1988YXVpQAFAqEZAHIgKSkp2/v4+voqPDxcNpstDyrKuUmTJqlv377y8sr6/xK8vb0VHh6uQoUK5WFl+Suj7zQ4OFjFihXL52qypk+fPpo0aZLVZQAFAqEZgMvp06ePli9frokTJ8pms8lms2n//v2aOnWqwsLCnLadPXu2Uwi1/yn9s88+U9myZRUcHKwnnnhCycnJGjt2rMLDw1WyZEm9/vrrTsc5ePCgOnbsqODgYIWEhKhr1676999/0xz3k08+Ubly5eTv759u7QcOHFCHDh1UpEgRBQUFqUaNGvr5558lpe2e0bx5c8f1pZ72798vSTp16pQeeeQRlShRQiEhIWrZsqW2bNmS4ef23//+V8HBwdq1a5dj2RNPPKGqVavq/Pnz6e5z9OhRLVmyRB06dHBavmvXLjVr1kz+/v6qXr26Fi1a5LT+2u4ZycnJevjhh1WuXDkFBASoSpUqmjhxotM+9hbh0aNHq1SpUgoLC9Orr76qK1euaNiwYSpatKjKlCmjKVOmOO136NAhde3aVWFhYSpatKg6duzo+IxGjRqladOm6YcffnB8fsuWLct0v9T1vP7664qMjFSVKlXS/Yyu7Z5h32/cuHGKiIhQsWLFNGDAAF2+fDnd/e1++uknNWjQQP7+/ipevLg6derkWBcTE6P//Oc/6tWrl4KDgxUdHa0ff/xRR48edfxc1q5dW7/++qvTMTt06KBff/1Ve/bsue65Adw4QjMAlzNx4kQ1atRIjz76qOLj4xUfH6+oqKgs779nzx7NmzdP8+fP18yZM/Xpp5+qffv2+vvvv7V8+XK9+eabeumll7Ru3TpJUkpKijp27KgTJ05o+fLlWrRokfbu3atu3bo5HXf37t367rvvNGvWrAz78g4YMECXLl3SihUrtHXrVr355psKDg5Od9tZs2Y5ri8+Pl733nuvqlSpolKlSkmSunTpooSEBM2bN0+//fabbrrpJt1+++06ceJEusfr1auX7rzzTvXo0UNXrlzR3Llz9cknn+iLL75QYGBguvusXLlSgYGBqlatmmNZSkqK7r33Xvn6+mrdunX66KOP9Nxzz133M09JSVGZMmX0zTffaPv27RoxYoReeOEFff31107bLVmyRIcPH9aKFSs0fvx4jRw5UnfddZeKFCmidevWqV+/fnr88cf1999/S5IuX76sNm3aqHDhwoqLi9OqVasUHBystm3bKikpSUOHDlXXrl3Vtm1bx+fYuHHjTPezW7x4sXbu3KlFixZpzpw5173G1JYuXao9e/Zo6dKlmjZtmqZOnaqpU6dmuP3cuXPVqVMn3Xnnndq0aZMWL16s2NhYp20mTJigJk2aaNOmTWrfvr169uypXr166cEHH9TGjRtVoUIF9erVS4ZhOPYpW7asSpUqpbi4uCzXDiCHDABwQbfddpsxePBgp2VTpkwxQkNDnZZ9//33RupfZSNHjjQCAwON06dPO5a1adPGiImJMZKTkx3LqlSpYowZM8YwDMNYuHCh4e3tbRw8eNCx/o8//jAkGevXr3cc18fHx0hISLhu3bVq1TJGjRqV7rqlS5cakoyTJ0+mWTd+/HgjLCzM2Llzp2EYhhEXF2eEhIQYFy9edNquQoUKxv/93/9leP4TJ04YZcqUMfr372+UKlXKeP31169b74QJE4zy5cs7LVuwYIFRqFAh459//nEsmzdvniHJ+P777w3DMIx9+/YZkoxNmzZleOwBAwYYnTt3drzv3bu3ER0dneZ7aNq0qeP9lStXjKCgIGPmzJmGYRjG9OnTjSpVqhgpKSmObS5dumQEBAQYCxYscBy3Y8eOTufO6n6lSpUyLl26dL2PyBg5cqRRp06dNNdx5coVx7IuXboY3bp1y/AYjRo1Mnr06JHh+ujoaOPBBx90vI+PjzckGS+//LJj2Zo1awxJRnx8vNO+9erVy/BnDkDu8ZzOaADwPzExMSpcuLDjfalSpeTt7e3UZ7dUqVJKSEiQJO3YsUNRUVFOrdnVq1dXWFiYduzYoQYNGkiSoqOjVaJEieuee9CgQerfv78WLlyoVq1aqXPnzqpdu/Z195k3b56GDx+un376SZUrV5YkbdmyRWfPnk3Tl/bChQvX/VN8kSJF9Omnn6pNmzZq3Lixhg8fft1zX7hwIU1XE/vnERkZ6VjWqFGj6x5Hkt5//3199tlnOnjwoC5cuKCkpKQ0o07UqFEjzfeQ+mZCb29vFStWzPHdbNmyRbt373b6PiXp4sWL1/0csrpfrVq15Ovrm+m1XatGjRry9vZ2vI+IiNDWrVsz3H7z5s169NFHr3vM1D8n9r821KpVK82yhIQEhYeHO5YHBARk2P0GQO4hNANwG15eXk5/mpaUbj9SHx8fp/c2my3dZdkdqisoKCjTbR555BG1adNGc+fO1cKFCzVmzBi9/fbbGjhwYLrbb9++Xd27d9cbb7yhO+64w7H87NmzioiIcPTPTe3aft3XWrFihby9vRUfH69z586lCY6pFS9eXCdPnsz0ujLz5ZdfaujQoXr77bfVqFEjFS5cWG+99ZajC4xddr+bs2fP6uabb053hIjr/QMmq/tl5TtNT3Z/ngICArJ1THs//fSWXXueEydOZPqPOQA3jj7NAFySr6+vkpOTnZaVKFFCZ86c0blz5xzLcmOc4GrVqunQoUM6dOiQY9n27dt16tQpVa9ePdvHi4qKUr9+/TRr1iw988wzmjx5crrbHTt2TB06dFDnzp319NNPO6276aabdOTIERUqVEgVK1Z0mooXL57huVevXq0333xTP/30k4KDg/Xkk09et9Z69erpyJEjTsHZ/nnEx8c7lq1du/a6x1m1apUaN26sJ554QvXq1VPFihVz5ea0m266Sbt27VLJkiXTfA72ofvS+1nJyn75qXbt2nkybJ295bxevXq5fmwAzgjNAFxSTEyM1q1bp/379+vYsWNKSUlRw4YNFRgYqBdeeEF79uzRjBkzrnvzVVa1atVKtWrVUo8ePbRx40atX79evXr10m233ab69etn61hPPfWUFixYoH379mnjxo1aunSp0012qXXu3FmBgYEaNWqUjhw54piSk5PVqlUrNWrUSPfcc48WLlyo/fv3a/Xq1XrxxRfTjKBgd+bMGfXs2VODBg1Su3bt9MUXX+irr77St99+m2G99erVU/HixbVq1Sqnz6Ny5crq3bu3tmzZori4OL344ovXve5KlSrp119/1YIFC/TXX3/p5Zdf1oYNG7LwiV1fjx49VLx4cXXs2FFxcXHat2+fli1bpkGDBjluFoyJidHvv/+unTt36tixY7p8+XKW9stPI0eO1MyZMzVy5Ejt2LHDcZPojVq7dq38/Pyy1H0GwI0hNANwSUOHDpW3t7eqV6+uEiVK6ODBgypatKg+//xz/fzzz6pVq5ZmzpypUaNG3fC5bDabfvjhBxUpUkTNmjVTq1atVL58eX311VfZPlZycrIGDBigatWqqW3btqpcubI++OCDdLddsWKFtm3bpujoaEVERDimQ4cOyWaz6eeff1azZs3Ut29fVa5cWd27d9eBAwccfVuvNXjwYAUFBWn06NGSzP6wo0eP1uOPP65//vkn3X28vb3Vt29fp24MXl5e+v7773XhwgXFxsbqkUceSTNE37Uef/xx3XvvverWrZsaNmyo48eP64knnsjKR3ZdgYGBWrFihcqWLat7771X1apV08MPP6yLFy8qJCREkvToo4+qSpUqql+/vkqUKKFVq1Zlab/81Lx5c33zzTf68ccfVbduXbVs2VLr16+/4ePOnDlTPXr0yHB0FAC5x2Zc20EQAFCgHDlyRDVq1NDGjRsVHR1tdTnIomPHjqlKlSr69ddfVa5cOavLATweLc0AUMCFh4fr008/1cGDB60uBdmwf/9+ffDBBwRmIJ/Q0gwAAABkgpZmAAAAIBOEZgAAACAThGYAAAAgE4RmAAAAIBOEZgAAACAThGYAAAAgE4RmAAAAIBOEZgAAACAThGYAAAAgE/8P32X1cm1M3YIAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"# Sigmoid function\n",
"def sigmoid(z):\n",
" return 1 / (1 + np.exp(-z))\n",
"\n",
"# Data points (approximated from the scatter plot)\n",
"x_non_malignant = [1, 2, 3, 4, 5]\n",
"y_non_malignant = [0] * 5\n",
"x_malignant = [6, 7, 8, 9, 10]\n",
"y_malignant = [1] * 5\n",
"\n",
"# Combine data for plotting\n",
"x_data = x_non_malignant + x_malignant\n",
"y_data = y_non_malignant + y_malignant\n",
"\n",
"# Sigmoid curve\n",
"x_range = np.linspace(0, 11, 100)\n",
"w = 2 # Weight\n",
"b = -11 # Bias\n",
"z = w * x_range + b\n",
"sigmoid_values = sigmoid(z)\n",
"\n",
"# Plotting\n",
"plt.figure(figsize=(8, 6))\n",
"# Scatter plot\n",
"plt.scatter(x_non_malignant, y_non_malignant, marker='x', color='blue', label='Non-malignant')\n",
"plt.scatter(x_malignant, y_malignant, marker='x', color='red', label='Malignant')\n",
"# Sigmoid curve\n",
"plt.plot(x_range, sigmoid_values, 'b-', label='Sigmoid Fit')\n",
"\n",
"# Labels and title\n",
"plt.xlabel('tumor size x (diameter in cm)')\n",
"plt.ylabel('malignant?')\n",
"plt.yticks([0, 1], ['(no) 0', '(yes) 1'])\n",
"plt.title('Scatter Plot with Sigmoid Fit')\n",
"plt.grid(False)\n",
"plt.legend()\n",
"\n",
"# Save the plot\n",
"plt.savefig('scatter_with_sigmoid.png')"
]
},
{
"cell_type": "markdown",
"id": "cab71385",
"metadata": {},
"source": [
"# tumor preditioin with Pytorch"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "326de3e1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch [100/1000], Loss: 0.4540\n",
"Epoch [200/1000], Loss: 0.4371\n",
"Epoch [300/1000], Loss: 0.4216\n",
"Epoch [400/1000], Loss: 0.4074\n",
"Epoch [500/1000], Loss: 0.3943\n",
"Epoch [600/1000], Loss: 0.3822\n",
"Epoch [700/1000], Loss: 0.3710\n",
"Epoch [800/1000], Loss: 0.3607\n",
"Epoch [900/1000], Loss: 0.3510\n",
"Epoch [1000/1000], Loss: 0.3421\n",
"\n",
"Tumor Sizes: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
"True Labels: [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]\n",
"Predicted Probabilities: [0.18069209158420563, 0.2570095658302307, 0.35172295570373535, 0.4597426652908325, 0.5716820359230042, 0.6767361760139465, 0.7665457725524902, 0.8373993635177612, 0.8898391723632812, 0.9268442988395691]\n",
"Predicted Labels: [0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]\n"
]
}
],
"source": [
"import torch\n",
"import torch.nn as nn\n",
"\n",
"# Data\n",
"x_non_malignant = [1, 2, 3, 4, 5]\n",
"y_non_malignant = [0] * 5\n",
"x_malignant = [6, 7, 8, 9, 10]\n",
"y_malignant = [1] * 5\n",
"\n",
"# Combine data\n",
"X = x_non_malignant + x_malignant\n",
"Y = y_non_malignant + y_malignant\n",
"\n",
"# Convert to tensors\n",
"X_tensor = torch.tensor(X, dtype=torch.float32).reshape(-1, 1) # Shape: (10, 1)\n",
"Y_tensor = torch.tensor(Y, dtype=torch.float32).reshape(-1, 1) # Shape: (10, 1)\n",
"\n",
"# Define the logistic regression model\n",
"class LogisticRegression(nn.Module):\n",
" def __init__(self):\n",
" super(LogisticRegression, self).__init__()\n",
" self.linear = nn.Linear(1, 1) # One input (tumor size), one output (logit)\n",
" \n",
" def forward(self, x):\n",
" return torch.sigmoid(self.linear(x)) # Apply sigmoid to get probability\n",
"\n",
"# Initialize model, loss, and optimizer\n",
"model = LogisticRegression()\n",
"criterion = nn.BCELoss() # Binary cross-entropy loss\n",
"optimizer = torch.optim.SGD(model.parameters(), lr=0.01)\n",
"\n",
"# Training loop\n",
"num_epochs = 1000\n",
"for epoch in range(num_epochs):\n",
" # Forward pass\n",
" outputs = model(X_tensor)\n",
" loss = criterion(outputs, Y_tensor)\n",
" \n",
" # Backward pass and optimization\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n",
" \n",
" # Print progress\n",
" if (epoch + 1) % 100 == 0:\n",
" print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')\n",
"\n",
"# Evaluate the model\n",
"model.eval()\n",
"with torch.no_grad():\n",
" predictions = model(X_tensor)\n",
" predicted_labels = (predictions >= 0.5).float() # Threshold at 0.5\n",
"\n",
"# Print results\n",
"print(\"\\nTumor Sizes:\", X)\n",
"print(\"True Labels:\", Y)\n",
"print(\"Predicted Probabilities:\", predictions.flatten().tolist())\n",
"print(\"Predicted Labels:\", predicted_labels.flatten().tolist())\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "de9d2f63",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Unseen Tumor Size: 5.5\n",
"Predicted Probability of Malignancy: 0.6257\n",
"Predicted Label: 1.0 (Malignant)\n",
"\n",
"Model Parameters: w = 0.4501, b = -1.9618\n"
]
}
],
"source": [
"# Test unseen input\n",
"unseen_input = torch.tensor([[5.5]], dtype=torch.float32) # Unseen tumor size\n",
"model.eval()\n",
"with torch.no_grad():\n",
" prediction = model(unseen_input)\n",
" predicted_label = (prediction >= 0.5).float()\n",
"\n",
"# Print results\n",
"print(f\"\\nUnseen Tumor Size: {unseen_input.item()}\")\n",
"print(f\"Predicted Probability of Malignancy: {prediction.item():.4f}\")\n",
"print(f\"Predicted Label: {predicted_label.item()} ({'Malignant' if predicted_label.item() == 1 else 'Non-malignant'})\")\n",
"\n",
"# Print model parameters for insight\n",
"weight = model.linear.weight.item()\n",
"bias = model.linear.bias.item()\n",
"print(f\"\\nModel Parameters: w = {weight:.4f}, b = {bias:.4f}\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "746a5bbb",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.13.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}