done ex1
This commit is contained in:
1 parent
a71160f863
commit
a61e837b26
1 file changed
+257
-36
+257
-36
@@ -11,7 +11,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 468,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
@@ -42,7 +42,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 469,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"is_executing": false
|
||||
@@ -58,16 +58,29 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 470,
|
||||
"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": [
|
||||
"X_train, y_train = read_data(\"ex1-data-train.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 471,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
@@ -85,15 +98,29 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 472,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"is_executing": false
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"P(C0) = 0.4, P(C1) = 0.6\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# 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"
|
||||
]
|
||||
},
|
||||
@@ -106,27 +133,62 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 473,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"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": [
|
||||
"# TODO: Compute histograms\n",
|
||||
"\n",
|
||||
"X_train = np.array(X_train)\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",
|
||||
"\n",
|
||||
"plt.figure(figsize=(16,6))\n",
|
||||
"\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",
|
||||
"plt.xlabel('Likelihood hist - Exam 1')\n",
|
||||
"\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",
|
||||
"plt.xlabel('Likelihood hist - Exam 2')\n",
|
||||
"\n",
|
||||
@@ -142,7 +204,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 474,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"is_executing": false
|
||||
@@ -153,7 +215,38 @@
|
||||
"def likelihood_hist(x: float, hist_values: np.ndarray, bin_edges: np.ndarray) -> float:\n",
|
||||
" # TODO: compute likelihoods from histograms outputs\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",
|
||||
"execution_count": null,
|
||||
"execution_count": 476,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"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": [
|
||||
"X_test, y_test = read_data(\"ex1-data-test.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 477,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"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": [
|
||||
"# TODO: predict on test set in the 3 cases described above\n",
|
||||
"\n",
|
||||
"y_pred = []\n",
|
||||
"y_pred_x1 = []\n",
|
||||
"\n",
|
||||
"...\n",
|
||||
"X_test = np.array(X_test)\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": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
@@ -223,7 +376,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"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",
|
||||
"execution_count": null,
|
||||
"execution_count": 478,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"is_executing": false
|
||||
@@ -253,12 +408,15 @@
|
||||
"def likelihood_univariate_gaussian(x: float, mean: float, var: float) -> float:\n",
|
||||
" # TODO: compute likelihoods from histograms outputs\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",
|
||||
"execution_count": null,
|
||||
"execution_count": 479,
|
||||
"metadata": {
|
||||
"pycharm": {
|
||||
"is_executing": false
|
||||
@@ -267,22 +425,85 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 480,
|
||||
"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": [
|
||||
"# TODO: predict on test set in the 3 cases\n",
|
||||
"\n",
|
||||
"y_pred = []\n",
|
||||
"y_pred_x1 = []\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",
|
||||
"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": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"display_name": ".venv",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
@@ -316,7 +537,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.7"
|
||||
"version": "3.12.3"
|
||||
},
|
||||
"pycharm": {
|
||||
"stem_cell": {
|
||||
|
||||
Reference in new issue
Block a user