This commit is contained in:
Joachim Bach committed 2025-10-02 15:59:25 +02:00
1 parent a71160f863
commit a61e837b26
1 file changed
+257 -36
+257 -36
View File
@@ -11,7 +11,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 468,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -42,7 +42,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 469,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false "is_executing": false
@@ -58,16 +58,29 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 470,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" x1 x2 y\n",
"0 34.623660 78.024693 0\n",
"1 30.286711 43.894998 0\n",
"2 35.847409 72.902198 0\n",
"3 60.182599 86.308552 1\n",
"4 79.032736 75.344376 1\n"
]
}
],
"source": [ "source": [
"X_train, y_train = read_data(\"ex1-data-train.csv\")" "X_train, y_train = read_data(\"ex1-data-train.csv\")"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 471,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -85,15 +98,29 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 472,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false "is_executing": false
} }
}, },
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"P(C0) = 0.4, P(C1) = 0.6\n"
]
}
],
"source": [ "source": [
"# TODO: Compute the priors\n", "# TODO: Compute the priors\n",
"\n",
"unique, counts = np.unique(y_train, return_counts=True)\n",
"\n",
"P_c0 = counts[0] / (counts[0] + counts[1])\n",
"P_c1 = counts[1] / (counts[0] + counts[1])\n",
"print(f\"P(C0) = {P_c0}, P(C1) = {P_c1}\")\n",
"\n" "\n"
] ]
}, },
@@ -106,27 +133,62 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 473,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false "is_executing": false
} }
}, },
"outputs": [], "outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABQcAAAINCAYAAACDAcneAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQXpJREFUeJzt3XmUVPW5LuCv6ZYGGQWFbhJGRXBABjGIkohHbpAoajRKPERBjBqDAsHrQAwqccB4PAaMionnRDwJTvEqjqhoxCEiCAhqNIDaAlGQRAUEpEF63z+MdWwBqYbqLmA/z1q1lrX3rtpf/7qMb97eVVWQJEkSAAAAAEDq1Mr3AAAAAABAfigHAQAAACCllIMAAAAAkFLKQQAAAABIKeUgAAAAAKSUchAAAAAAUko5CAAAAAAppRwEAAAAgJQqyvcAX1VRURHvv/9+NGjQIAoKCvI9DgBAlSVJEp988km0aNEiatXyt9idkUwKAOzMqpJHd7hy8P3334+WLVvmewwAgO22ZMmS+OY3v5nvMdgGMikAsCvIJo/ucOVggwYNIuLz4Rs2bJjnaQAAqm7VqlXRsmXLTK5h5yOTAgA7s6rk0R2uHPzibRsNGzYUxACAnZq3o+68ZFIAYFeQTR71ITgAAAAAkFLKQQAAAABIKeUgAAAAAKTUDveZgwDA1iVJEp999lls3Lgx36OkUmFhYRQVFflMQQAgteTR/MtVJlUOAsBOZv369bF06dJYu3ZtvkdJtd133z1KS0ujdu3a+R4FAKBGyaM7jlxkUuUgAOxEKioqoqysLAoLC6NFixZRu3ZtV6/VsCRJYv369fGPf/wjysrKon379lGrlk9qAQDSQR7dMeQykyoHAWAnsn79+qioqIiWLVvG7rvvnu9xUqtu3bqx2267xaJFi2L9+vVRp06dfI8EAFAj5NEdR64yqT9zA8BOyJVq+ed3AACkmSy0Y8jF78FvEgAAAABSSjkIAAAAACnlMwcBYBcx6v7XauxcY0/sVOXHJEkS55xzTtx3333x8ccfxyuvvBJdunTZ4vHvvvtutG3bNnPctGnT4sgjj4yPP/44GjduvM2zt2nTJkaMGBEjRozY5ucAAGBTNZlHI6qeSeXRzVMOAgA14vHHH4+JEyfGtGnTol27drHnnnt+7fEtW7aMpUuXbvU4AADIhjy6ecpBAKBGvP3221FaWhqHHXZYVscXFhZGSUlJNU8FAEBayKOb5zMHAYBqN3jw4Dj//PNj8eLFUVBQEG3atInHH388evXqFY0bN46mTZvGscceG2+//XbmMe+++24UFBTE3Llzt/i8L7zwQnz729+OunXrRsuWLWPYsGGxZs2azP7ly5dH//79o27dutG2bduYNGlSdf6YAADsoOTRLVMOAgDVbvz48fHLX/4yvvnNb8bSpUvj5ZdfjjVr1sTIkSNj1qxZ8fTTT0etWrXi+9//flRUVGT1nG+//XYcffTRcdJJJ8Wrr74a99xzT7zwwgtx3nnnZY4ZPHhwLFmyJJ555pm477774pZbbonly5dX148JAMAOSh7dsiqXg88991z0798/WrRoEQUFBTF58uRNjnnzzTfjuOOOi0aNGkW9evXikEMOicWLF+diXgBgJ9SoUaNo0KBB5q0Ze+21V5x00klx4oknxj777BNdunSJ3//+9/Haa6/FG2+8kdVzjh07NgYOHBgjRoyI9u3bx2GHHRY33nhj/M///E+sW7cuFixYEFOmTInbbrstDj300Dj44IPjv//7v+PTTz+t5p+W6iaPAgBVJY9uWZXLwTVr1kTnzp3j5ptv3uz+t99+O3r16hUdO3aMadOmxauvvhqjR4+OOnXqbPewAMCuY+HChXHqqadGu3btomHDhtGmTZuIiKwLnHnz5sXEiROjfv36mVvfvn2joqIiysrK4s0334yioqI4+OCDM4/p2LHjdn2zHDsGeRQAyAV59HNV/kKSfv36Rb9+/ba4/9JLL43vfe97cd1112W27b333ts2HQCwy+rfv3+0bt06brvttmjRokVUVFTEgQceGOvXr8/q8atXr45zzjknhg0btsm+Vq1axYIFC3I9MjsIeRQAyAV59HM5/czBioqKePTRR2PfffeNvn37RrNmzaJHjx6bfavHF8rLy2PVqlWVbgDAru3DDz+M+fPnxy9+8Ys46qijYr/99ouPP/64Ss/RrVu3eOONN2KfffbZ5Fa7du3o2LFjfPbZZzF79uzMY+bPnx8rVqzI8U/DjmRb8miETAoAaSOP/q8qXzn4dZYvXx6rV6+Oa6+9Nq666qr41a9+FY8//niceOKJ8cwzz8QRRxyxyWPGjh0bY8aMyeUYAGyrh4fne4L86D8+3xOkzh577BFNmzaN3/3ud1FaWhqLFy+OSy65pErPcfHFF8ehhx4a5513Xvz4xz+OevXqxRtvvBFTp06Nm266KTp06BBHH310nHPOOTFhwoQoKiqKESNGRN26davpp2JHsC15NEIm3dGNuv+1fI+wwxt7Yqd8jwCwU5FH/1dOy8Evvs3l+OOPj5/97GcREdGlS5d48cUX49Zbb91sGBs1alSMHDkyc3/VqlXRsmXLXI4FAKmwM/0fw1q1asXdd98dw4YNiwMPPDA6dOgQN954Y/Tu3Tvr5zjooIPi2WefjUsvvTS+/e1vR5Iksffee8eAAQMyx9x+++3x4x//OI444oho3rx5XHXVVTF69Ohq+InYUWxLHo2QSQEgF+TRnTOP5rQc3HPPPaOoqCj233//Stv322+/eOGFFzb7mOLi4iguLs7lGADADmjEiBExYsSIzP0+ffps8k1wSZJk/rlNmzaV7vfu3bvS/YiIQw45JJ588sktnrOkpCQeeeSRSttOO+20bRmfncS25NEImRQA0kAe3bycfuZg7dq145BDDon58+dX2r5gwYJo3bp1Lk8FAACbkEcBAKqmylcOrl69Ot56663M/bKyspg7d240adIkWrVqFRdeeGEMGDAgvvOd78SRRx4Zjz/+eDz88MMxbdq0XM4NAEBKyaMAALlT5XJw1qxZceSRR2buf/HZLIMGDYqJEyfG97///bj11ltj7NixMWzYsOjQoUP8v//3/6JXr165mxoAgNSSRwEAcqfK5eDm3l/9VUOGDIkhQ4Zs81AAALAl8igAQO7k9DMHAQAAAICdh3IQAAAAAFJKOQgAAAAAKaUcBAAAAICUUg4CAGzGFVdcEV26dMn3GAAApFRN5dEqf1sxALCDenh4zZ2r//iaOxcAADuHmsyjETJpjrhyEAAAAABSSjkIANSI3r17x3nnnRfnnXdeNGrUKPbcc88YPXp0JEkSERF/+MMfonv37tGgQYMoKSmJf//3f4/ly5dnHv/xxx/HwIEDY6+99oq6detG+/bt4/bbb4+IiPXr18d5550XpaWlUadOnWjdunWMHTs289gVK1bEj3/849hrr72iYcOG8W//9m8xb968SvNde+210bx582jQoEGceeaZsW7duhpYFQAAaoo8unnKQQCgxtxxxx1RVFQUM2fOjPHjx8cNN9wQ//Vf/xURERs2bIgrr7wy5s2bF5MnT4533303Bg8enHns6NGj44033ogpU6bEm2++GRMmTIg999wzIiJuvPHGeOihh+Lee++N+fPnx6RJk6JNmzaZx5588smxfPnymDJlSsyePTu6desWRx11VHz00UcREXHvvffGFVdcEddcc03MmjUrSktL45ZbbqmxdQEAoGbIo5vymYMAQI1p2bJl/PrXv46CgoLo0KFDvPbaa/HrX/86zjrrrBgyZEjmuHbt2sWNN94YhxxySKxevTrq168fixcvjq5du0b37t0jIiqFrcWLF0f79u2jV69eUVBQEK1bt87se+GFF2LmzJmxfPnyKC4ujoiI66+/PiZPnhz33XdfnH322TFu3Lg488wz48wzz4yIiKuuuiqeeuopVw8CAOxi5NFNuXIQAKgxhx56aBQUFGTu9+zZMxYuXBgbN26M2bNnR//+/aNVq1bRoEGDOOKIIyLi86AVEXHuuefG3XffHV26dImLLrooXnzxxczzDB48OObOnRsdOnSIYcOGxZNPPpnZN2/evFi9enU0bdo06tevn7mVlZXF22+/HRERb775ZvTo0aPSrD179qy2dQAAID/k0U25chAAyLt169ZF3759o2/fvjFp0qTYa6+9YvHixdG3b99Yv359RET069cvFi1aFI899lhMnTo1jjrqqBg6dGhcf/310a1btygrK4spU6bEU089Faecckr06dMn7rvvvli9enWUlpbGtGnTNjlv48aNa/YHBQBgh5TmPKocBABqzIwZMyrdf+mll6J9+/bxt7/9LT788MO49tpro2XLlhERMWvWrE0ev9dee8WgQYNi0KBB8e1vfzsuvPDCuP766yMiomHDhjFgwIAYMGBA/OAHP4ijjz46Pvroo+jWrVssW7YsioqKKr3148v222+/mDFjRpx++umVZgMAYNcij25KOQgA1JjFixfHyJEj45xzzok5c+bEb37zm/jP//zPaNWqVdSuXTt+85vfxE9+8pN4/fXX48orr6z02MsuuywOPvjgOOCAA6K8vDweeeSR2G+//SIi4oYbbojS0tLo2rVr1KpVK/70pz9FSUlJNG7cOPr06RM9e/aME044Ia677rrYd9994/33349HH300vv/970f37t1j+PDhMXjw4OjevXscfvjhMWnSpPjrX/8a7dq1y8cyAQBQTeTRTSkHAYAac/rpp8enn34a3/rWt6KwsDCGDx8eZ599dhQUFMTEiRPj5z//edx4443RrVu3uP766+O4447LPLZ27doxatSoePfdd6Nu3brx7W9/O+6+++6IiGjQoEFcd911sXDhwigsLIxDDjkkHnvssahV6/OPV37sscfi0ksvjTPOOCP+8Y9/RElJSXznO9+J5s2bR0TEgAED4u23346LLroo1q1bFyeddFKLine truncated
"text/plain": [
"<Figure size 1600x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [ "source": [
"# TODO: Compute histograms\n", "# TODO: Compute histograms\n",
"\n", "\n",
"X_train = np.array(X_train)\n",
"\n", "\n",
"\n", "\n",
"x1_combined = np.column_stack((X_train[:,0], y_train))\n",
"\n",
"x1_c0 = x1_combined[y_train == 0]\n",
"x1_c1 = x1_combined[y_train == 1]\n",
"\n",
"x1_c0_hist, x1_c0_bins = np.histogram(x1_c0[:,0], bins=\"auto\")\n",
"x1_c1_hist, x1_c1_bins = np.histogram(x1_c1[:,0], bins=\"auto\")\n",
"\n",
"\n",
"x2_combined = np.column_stack((X_train[:,1], y_train))\n",
"\n",
"x2_c0 = x2_combined[y_train == 0]\n",
"x2_c1 = x2_combined[y_train == 1]\n",
"\n",
"x2_c0_hist, x2_c0_bins = np.histogram(x2_c0[:,0], bins=\"auto\")\n",
"x2_c1_hist, x2_c1_bins = np.histogram(x2_c1[:,0], bins=\"auto\")\n",
"\n",
"# TODO: plot histograms\n", "# TODO: plot histograms\n",
"\n", "\n",
"plt.figure(figsize=(16,6))\n", "plt.figure(figsize=(16,6))\n",
"\n", "\n",
"plt.subplot(1, 2, 1)\n", "plt.subplot(1, 2, 1)\n",
"plt.hist(x1_c0[:,0], bins=\"auto\", alpha=0.6, label=\"failed\")\n",
"plt.hist(x1_c1[:,0], bins=\"auto\", alpha=0.6, label=\"passed\")\n",
"plt.legend()\n",
"...\n", "...\n",
"plt.xlabel('Likelihood hist - Exam 1')\n", "plt.xlabel('Likelihood hist - Exam 1')\n",
"\n", "\n",
"plt.subplot(1, 2, 2)\n", "plt.subplot(1, 2, 2)\n",
"plt.hist(x2_c0[:,0], bins=\"auto\", alpha=0.6, label=\"failed\")\n",
"plt.hist(x2_c1[:,0], bins=\"auto\", alpha=0.6, label=\"passed\")\n",
"plt.legend()\n",
"...\n", "...\n",
"plt.xlabel('Likelihood hist - Exam 2')\n", "plt.xlabel('Likelihood hist - Exam 2')\n",
"\n", "\n",
@@ -142,7 +204,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 474,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false "is_executing": false
@@ -153,7 +215,38 @@
"def likelihood_hist(x: float, hist_values: np.ndarray, bin_edges: np.ndarray) -> float:\n", "def likelihood_hist(x: float, hist_values: np.ndarray, bin_edges: np.ndarray) -> float:\n",
" # TODO: compute likelihoods from histograms outputs\n", " # TODO: compute likelihoods from histograms outputs\n",
"\n", "\n",
" return ..." " bin_index = np.digitize(x, bin_edges) - 1\n",
"\n",
" if bin_index >= len(hist_values) or bin_index < 0:\n",
" return 0\n",
"\n",
" # print(f\"edges = {bin_edges}\")\n",
" # print(f\"values = {hist_values}\")\n",
" # print(f\"selected bin = {bin_index}\")\n",
"\n",
" count = hist_values[bin_index]\n",
" return count/np.sum(hist_values)"
]
},
{
"cell_type": "code",
"execution_count": 475,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"np.float64(0.4)"
]
},
"execution_count": 475,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hist, edges = np.histogram(x2_y0[:,0], bins=\"auto\")\n",
"likelihood_hist(45, hist, edges)"
] ]
}, },
{ {
@@ -168,34 +261,101 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 476,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false "is_executing": false
} }
}, },
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" x1 x2 y\n",
"0 39.196334 78.530294 0\n",
"1 40.448499 86.839470 1\n",
"2 65.571920 44.303497 0\n",
"3 79.648113 70.806564 1\n",
"4 66.260221 41.672703 0\n"
]
}
],
"source": [ "source": [
"X_test, y_test = read_data(\"ex1-data-test.csv\")" "X_test, y_test = read_data(\"ex1-data-test.csv\")"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 477,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false "is_executing": false
} }
}, },
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pred accuracy with x1 0.64\n",
"Pred accuracy with x2 0.72\n",
"Pred accuracy with x1 and x2 0.87\n"
]
}
],
"source": [ "source": [
"# TODO: predict on test set in the 3 cases described above\n", "# TODO: predict on test set in the 3 cases described above\n",
"\n", "\n",
"y_pred = []\n", "y_pred_x1 = []\n",
"\n", "\n",
"...\n", "X_test = np.array(X_test)\n",
"\n", "\n",
"accuracy_score(y_test, y_pred)" "for i in range(len(X_test)):\n",
" P_c0_x1 = likelihood_hist(X_test[i,0], x1_c0_hist, x1_c0_bins)*P_c0\n",
" P_c1_x1 = likelihood_hist(X_test[i,0], x1_c1_hist, x1_c1_bins)*P_c1\n",
"\n",
" if P_c0_x1 > P_c1_x1:\n",
" y_pred_x1.append(0)\n",
" else:\n",
" y_pred_x1.append(1)\n",
"\n",
"print(f\"Pred accuracy with x1 {accuracy_score(y_test, y_pred_x1)}\")\n",
"\n",
"\n",
"\n",
"y_pred_x2 = []\n",
"\n",
"for i in range(len(X_test)):\n",
" P_c0_x2 = likelihood_hist(X_test[i,1], x2_c0_hist, x2_c0_bins)*P_c0\n",
" P_c1_x2 = likelihood_hist(X_test[i,1], x2_c1_hist, x2_c1_bins)*P_c1\n",
"\n",
" if P_c0_x2 > P_c1_x2:\n",
" y_pred_x2.append(0)\n",
" else:\n",
" y_pred_x2.append(1)\n",
"\n",
"print(f\"Pred accuracy with x2 {accuracy_score(y_test, y_pred_x2)}\")\n",
"\n",
"\n",
"\n",
"\n",
"y_pred_x1_x2 = []\n",
"\n",
"for i in range(len(X_test)):\n",
"# for i in range(0,1):\n",
" P_c0_x1 = likelihood_hist(X_test[i,0], x1_c0_hist, x1_c0_bins)*P_c0\n",
" P_c1_x1 = likelihood_hist(X_test[i,0], x1_c1_hist, x1_c1_bins)*P_c1\n",
" P_c0_x2 = likelihood_hist(X_test[i,1], x2_c0_hist, x2_c0_bins)*P_c0\n",
" P_c1_x2 = likelihood_hist(X_test[i,1], x2_c1_hist, x2_c1_bins)*P_c1\n",
"\n",
" if P_c0_x2*P_c0_x1 > P_c1_x1*P_c1_x2:\n",
" y_pred_x1_x2.append(0)\n",
" else:\n",
" y_pred_x1_x2.append(1)\n",
"\n",
"print(f\"Pred accuracy with x1 and x2 {accuracy_score(y_test, y_pred_x1_x2)}\")\n",
"\n"
] ]
}, },
{ {
@@ -205,13 +365,6 @@
"outputs": [], "outputs": [],
"source": [] "source": []
}, },
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
@@ -223,7 +376,9 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"TODO: answer" "The system with both variables is clearly the better one and this makes sense, because the chance of success of a student is clearly related to the performance of both exams, not just one. The system with one variable only can only make better decisions when the student has really highly failed or succeded an exam, which would mean the second variable could be less important. For example, if one has 0 on the first exam, it is really not probable that he will pass, even if we don't know the second grade.\n",
"\n",
"All in all, more variables in this case mean a better approximation."
] ]
}, },
{ {
@@ -242,7 +397,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 478,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false "is_executing": false
@@ -253,12 +408,15 @@
"def likelihood_univariate_gaussian(x: float, mean: float, var: float) -> float:\n", "def likelihood_univariate_gaussian(x: float, mean: float, var: float) -> float:\n",
" # TODO: compute likelihoods from histograms outputs\n", " # TODO: compute likelihoods from histograms outputs\n",
"\n", "\n",
" return ..." " sqrt = np.sqrt(2*np.pi*var)\n",
" exp = np.exp(-(1/(2*var)) * (x - mean)**2)\n",
"\n",
" return (1/sqrt) * exp"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 479,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false "is_executing": false
@@ -267,22 +425,85 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"# TODO: Compute mean and variance for each classes and each features (8 values)\n", "# TODO: Compute mean and variance for each classes and each features (8 values)\n",
"\n",
"mean_x1_c0 = np.mean(X_train[:,0][y_train == 0])\n",
"mean_x1_c1 = np.mean(X_train[:,0][y_train == 1])\n",
"\n",
"mean_x2_c0 = np.mean(X_train[:,1][y_train == 0])\n",
"mean_x2_c1 = np.mean(X_train[:,1][y_train == 1])\n",
"\n",
"var_x1_c0 = np.var(X_train[:,0][y_train == 0])\n",
"var_x1_c1 = np.var(X_train[:,0][y_train == 1])\n",
"\n",
"var_x2_c0 = np.var(X_train[:,1][y_train == 0])\n",
"var_x2_c1 = np.var(X_train[:,1][y_train == 1])\n",
"\n",
"\n",
"\n" "\n"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 480,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pred accuracy with x1 0.71\n",
"Pred accuracy with x2 0.72\n",
"Pred accuracy with x1 and x2 0.92\n"
]
}
],
"source": [ "source": [
"# TODO: predict on test set in the 3 cases\n", "# TODO: predict on test set in the 3 cases\n",
"\n", "\n",
"y_pred = []\n", "y_pred_x1 = []\n",
"\n", "\n",
"...\n", "for i in range(len(X_test)):\n",
" P_c0_x1 = likelihood_univariate_gaussian(X_test[i,0], mean_x1_c0, var_x1_c0)*P_c0\n",
" P_c1_x1 = likelihood_univariate_gaussian(X_test[i,0], mean_x1_c1, var_x1_c1)*P_c1\n",
"\n", "\n",
"accuracy_score(y_test, y_pred)" " if P_c0_x1 > P_c1_x1:\n",
" y_pred_x1.append(0)\n",
" else:\n",
" y_pred_x1.append(1)\n",
"\n",
"print(f\"Pred accuracy with x1 {accuracy_score(y_test, y_pred_x1)}\")\n",
"\n",
"y_pred_x2 = []\n",
"\n",
"for i in range(len(X_test)):\n",
" P_c0_x2 = likelihood_univariate_gaussian(X_test[i,1], mean_x2_c0, var_x2_c0)*P_c0\n",
" P_c1_x2 = likelihood_univariate_gaussian(X_test[i,1], mean_x2_c1, var_x2_c1)*P_c1\n",
"\n",
" if P_c0_x2 > P_c1_x2:\n",
" y_pred_x2.append(0)\n",
" else:\n",
" y_pred_x2.append(1)\n",
"\n",
"print(f\"Pred accuracy with x2 {accuracy_score(y_test, y_pred_x2)}\")\n",
"\n",
"\n",
"\n",
"\n",
"y_pred_x1_x2 = []\n",
"\n",
"for i in range(len(X_test)):\n",
"# for i in range(0,1):\n",
" P_c0_x1 = likelihood_univariate_gaussian(X_test[i,0], mean_x1_c0, var_x1_c0)*P_c0\n",
" P_c1_x1 = likelihood_univariate_gaussian(X_test[i,0], mean_x1_c1, var_x1_c1)*P_c1\n",
" P_c0_x2 = likelihood_univariate_gaussian(X_test[i,1], mean_x2_c0, var_x2_c0)*P_c0\n",
" P_c1_x2 = likelihood_univariate_gaussian(X_test[i,1], mean_x2_c1, var_x2_c1)*P_c1\n",
"\n",
" if P_c0_x2*P_c0_x1 > P_c1_x1*P_c1_x2:\n",
" y_pred_x1_x2.append(0)\n",
" else:\n",
" y_pred_x1_x2.append(1)\n",
"\n",
"print(f\"Pred accuracy with x1 and x2 {accuracy_score(y_test, y_pred_x1_x2)}\")\n"
] ]
}, },
{ {
@@ -302,7 +523,7 @@
], ],
"metadata": { "metadata": {
"kernelspec": { "kernelspec": {
"display_name": "Python 3 (ipykernel)", "display_name": ".venv",
"language": "python", "language": "python",
"name": "python3" "name": "python3"
}, },
@@ -316,7 +537,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.8.7" "version": "3.12.3"
}, },
"pycharm": { "pycharm": {
"stem_cell": { "stem_cell": {