diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-26 10:42:37 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-26 16:31:41 +0100 |
| commit | 6ec8a3788dd4f977d5caeb35abfeef6a80f27f89 (patch) | |
| tree | 1136060155d64eebaa433e97c1bede361d1bcacc /logistic_regression_notebook.ipynb | |
| parent | 2deef78aa7138e41dae0c7ffec93fc33e4e2fc51 (diff) | |
| download | dslr-6ec8a3788dd4f977d5caeb35abfeef6a80f27f89.tar.gz dslr-6ec8a3788dd4f977d5caeb35abfeef6a80f27f89.tar.bz2 dslr-6ec8a3788dd4f977d5caeb35abfeef6a80f27f89.zip | |
logistic regression one vs all explaination
Diffstat (limited to 'logistic_regression_notebook.ipynb')
| -rw-r--r-- | logistic_regression_notebook.ipynb | 381 |
1 files changed, 281 insertions, 100 deletions
diff --git a/logistic_regression_notebook.ipynb b/logistic_regression_notebook.ipynb index cd9f013..9a9645a 100644 --- a/logistic_regression_notebook.ipynb +++ b/logistic_regression_notebook.ipynb @@ -6,7 +6,7 @@ "source": [ "# Logistic Regression\n", "\n", - "Logistic regression is a *classification algorithm*." + "Logistic regression is a *binary classification algorithm*." ] }, { @@ -17,7 +17,7 @@ { "data": { "text/plain": [ - "Text(0.5, 1.0, 'Data representation')" + "Text(0.5, 1.0, 'Data')" ] }, "execution_count": 1, @@ -26,7 +26,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -57,25 +57,32 @@ " sep = False\n", " elif x_0 < x_1:\n", " sep = False\n", + " \n", + "X = np.hstack([X, np.ones((X.shape[0], 1))])\n", + "\n", " \n", "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)\n", "\n", - "plt.scatter(X, Y, s=10, c='b')\n", + "plt.scatter(X[:, 0], Y, s=10, c='b')\n", "plt.xlabel('feature')\n", "plt.ylabel('groups')\n", "plt.yticks([0, 1])\n", - "plt.title('Data representation')" + "plt.title('Data')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Model\n", + "## Binary target\n", + "\n", + "### Sigmoid function\n", "\n", "We have to fit a **model** trough our data. \n", - "A *sigmoid* (also called *logistic*) function is used:\n", - "$$\\sigma(x) = \\frac{1}{1 + e^{-x}}$$\n", + "The *sigmoid* (also called *logistic*) function is used:\n", + "$$\\boxed{\n", + "\\sigma(x) = \\frac{1}{1 + e^{-x}}\n", + "}$$\n", "\n", "It produce an 'S' shape like function that stays between 0 and 1" ] @@ -87,16 +94,6 @@ "outputs": [ { "data": { - "text/plain": [ - "Text(0.5, 1.0, 'Sigmoid function')" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" @@ -112,14 +109,15 @@ "def sigmoid(x):\n", " return 1 / (1 + np.exp(-x))\n", "\n", - "xs = np.linspace(-7, 7, 100)\n", - "ys = sigmoid(xs)\n", - "plt.plot(xs, ys, label=r'$\\sigma(x) = {\\frac{1}{1 + e^{-x}}}$')\n", + "xs_sig = np.linspace(-7, 7, 100)\n", + "ys_sig = sigmoid(xs_sig)\n", + "plt.plot(xs_sig, ys_sig, label=r'$\\sigma(x) = {\\frac{1}{1 + e^{-x}}}$')\n", "plt.yticks([0, 0.5, 1])\n", "plt.xlim([-7, 7])\n", "plt.legend()\n", "plt.grid()\n", - "plt.title('Sigmoid function')" + "plt.title('Sigmoid function')\n", + "plt.show()" ] }, { @@ -129,17 +127,7 @@ "outputs": [ { "data": { - "text/plain": [ - "Text(0.5, 1.0, 'Approximation')" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEICAYAAACktLTqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XmcFNW5//HPMwszwLDP4LCDOhAJ7qOIevnFXSIBjfdGRE3UeN011xg3cImJoqhRMRqNS4waxbgmbrglmKCiAi6oIKIissq+DDAwy/n98XRnmnHYu6emu7/v16tfTXdXVz1drd8+c6rqHAshICIimSUn6gJERCT5FO4iIhlI4S4ikoEU7iIiGUjhLiKSgRTuIiIZSOEuksDMKsxs50ba1j1mdlVjbEuyj+k8d2lMZvYGsCdQGkJYH3E5jcbMTgXOCCEcHHUtkh3UcpdGY2Y9gf8CAjAkRdvIS8V6RdKNwl0a00+Bd4A/Az+LP2lmf451UbxmZqvN7F9m1iPh9WBmF5rZV2a2xMxuNrOc2GunmtlbZnabmS0Ffm1mOWZ2pZnNNrNFZvawmbWJLX+Cmc0ys9axx4PMbKGZlSRsa9eEuv5gZuNi3TVvmVmpmd1uZsvN7DMz2zuhzsvN7MvYZ5hmZsfFnt8NuAcYEFvPioT1X5fw/v81sy/MbJmZPWdmnevtg7PNbKaZrTCzu8zMkvz9SAZRuEtj+inwaOx2lJntlPDaScBvgWLgw9gyiY4DyoF9gKHA6Qmv9Qe+AnYCrgdOjd0OAXYGioA7AUIIfwXeBu4wsw7AA3h3yeJN1PwT4MpYXeuBicD7scdPAbcmLPsl/pdJG+Ba4C9m1imEMB04G5gYQigKIbStvxEzOxS4Iba9TsBs4PF6iw0G9gP2iC131CZqFlG4S+Mws4OBHsATIYQpeBAOT1jkxRDCv2P98CPxVm63hNdHhxCWhRC+AW4HTkx4bX4I4fchhOoQwjr8h+LWEMJXIYQK4ApgWEKXzXnAocAbwPMhhBc2U/qzIYQpIYRK4FmgMoTwcAihBvgr8J+WewjhyRDC/BBCbexHZCaw/1buopOAP4UQ3o/tgyti+6BnwjI3hhBWxPbBeGCvrVy3ZCGFuzSWnwGvhhCWxB4/RkLXDDAn/o9YIC8DOjf0Ot6q3dRrxF6bXW/5PLxlTwhhBfAk0A/43Rbq/jbh3+saeFwUf2BmPzWzD2PdJiti6y/ewvobrDm2D5YCXRKWWZjw77WJ2xapTwefJOXMrDnejZBrZvGAKgDamtmescfdEpYvAtoD8xNW0w34NPbv7vVeq3/K13z8r4S47kA1sWA2s73wbp2xwB3A0dv1wRLEjhHcBxyGd7/UmNmHQLxffEunpW1Us5m1BDoA83a0NslOarlLYzgWqAH64l0JewG7ARPwfniAH5rZwWbWDO97fyeEkNgiv8TM2sW6an6Bd4lsyljgIjPrFfuhGAX8NYRQbWaFwF+AEcBpQBczOzcJn7ElHuCLAczsNLzlHvct0DX2+TZV82lmtpeZFcRqfjeE8HUSapMspHCXxvAz4MEQwjchhIXxG36Q8yT8L8jHgGvw7ph9gZPrrePvwBT8YOuL+IHQTfkT8Ajwb2AWUAlcEHvtBmBOCOHuWN/2ycB1Zla2Ix8whDAN7+KZiAf57sBbCYv8E//LY6GZLWng/a8DVwFPAwuAXYBhO1KTZDddxCSRM7M/A3NDCFdu4vUAlIUQvmjUwkTSmFruIiIZSOEuIpKB1C0jIpKB1HIXEclAkZ3nXlxcHHr27BnV5kVE0tKUKVOWhBBKtrRcZOHes2dPJk+eHNXmRUTSkpnN3vJS6pYREclICncRkQykcBcRyUAKdxGRDKRwFxHJQAp3EZEMpHAXEclAWwx3M/tTbJLhTzbxupnZHbGJfaea2T7JL1NERLbF1lzE9Gd83O2HN/H6IKAsdusP3B27T5kZM2DmTCgrgz59tm152PJ748vn5sLs2OUChxzy3eXjyy1YAOPHw6pVUF4O/ftDTY1v46uvYOJEGDAABg2qe++4cXXP77zzd7e3eDG88w4sWeLrGjrU1z1xInTrBp06wWuvwVtvQatWEAJUVHiN7dr54732qlvub3+DtWuhZ09fftUq6NvXHw8Y4Nt8/nnIyYF+/byWDz8EM388fbpvq1Mn2HdfKC31fRL/fPn5UFVV9zlnzPB98umn8PHHXs/JJ8PAgRt/F+PH+31uLsyZs/F+2trvIXF/xvfN1v63IZKptmrgsNgkvS+EEPo18NofgTdCCGNjj2cAPwghLNjcOsvLy8P2XKH6+YdreXTkNGqbFVJpzTn7/wrZpV9zaN4cCgs9jRLMmAGjRnlALFvmL7dr54E5YkTDgT1qlAfle+952OXnw+67w4031i0fX27BApgwATZs8ADLz4f27eHAA2HlSl+usBBqa+HOOz24xo2D88/3dVdW+jrbtPHtmcG6dV5rbW1dXTk50Lq135Ytg44dYdYs32Z9OTnQrJnfl5Z6AG9Ku3a+bE2Nb3f9eg//dev89epqKCiANWvq3pOf7wHauTPMnet1LloEJSX+NVx+Obz4on+ehQvraiwogL33ht12889QUQFff+0/OitXQnEx5OX5ftp557rvYdIkf3+zZv5DM3r0xt9bfH9WV/t6Bwzw+hr6fkXSnZlNCSGUb2m5ZAw/0IWNJyieG3vuO+FuZmcCZwJ07959uza2YMJMrn1pv7onnq23QPPm0KKF31q2ZKfqllxRUUROqyLmrSxiXV4r2nVvxaLK1lTf3BoGtPFkbdsW2rZl3gftaFXdnupmbaipySE/38OuosJbkfGwiLco16/3cIv/poTgzxUU1LW6u3SBefO8ZTlokN/n5Pjzn3/uy3Xs6MsWFnoLODG0zXwb69ZB166wfLm37EPw1+oHfAheW22tL7c51dV+v2GDB2tVlf+7ttYfx3+A4nWE4HXm5npw19R42IPf5+TAP//p+6u2tq62nBzf1sKFcNRR8M03/rnj+zYE/+GqrPT9E99GQYG/r7Cw4e8B6vZn69a+b9av9/fWX04kmzTq2DIhhHuBe8Fb7tuzjs4DenLroc9TECrJ27COoUeuo7RtpTf/1q71BFy71puaa9eSt2gNfFZBs2UL6F1ZQfOa1bRYtJrC6gqfsK3eZG2Hxm61GCtz2rE8pwMr5hdT3a6E3g+VwFslUFrKPjU78fG8UkJ1Zz61ziwPRf8J24ICD5jiYli61IO9trau+2PAAHj0UX8+N9eXiwdSdbWHZGJoh+Dh1by5d6eE4D8G8VCsz8zDMSfHW9OrV296f+bleYs4N9d3XW1tXUu+ttZvhYW+O+Pbys311+Mt9/gPRFWVr+/QQ73lnpNT9zlqa32/lJZ6sBcV+Xu+/rpuuVWr/P3xrqqaGt8veXm+jdWroUePui6duPj+jO+bgoK6bjGRbJV23TKQpD73nWvo03m1J8KKFd4vsHw5LF/OohnLWfHVMgoqllK1cCmFFUsoZjGFqxZ7UzieZgnW5rVicWE3qnbqSsEu3VjTsSdtdu/BbOvJhPm70O+ITgz6YV2XkfrcfZvqcxfZNlvbLZOMcD8GOB/4IX4g9Y4Qwv5bWueOhHukamv9R+Dbb73DfcECmD/fm7Bz53pCzZnjrydq0cJTvHdvT50+fTxd+/aFli2j+SwiknaS1uduZmOBHwDFZjYXn6E+HyCEcA/wEh7sXwBrgdO2v+w0kJMDHTr4rW/fTS+3bp33P8yaBV9+6bcvvvCm7HPPbdz679kT9tjDm9p77gn77OP9D/UODouIbK3IptlL25Z7MlRVeX/GtGke9p98AlOnej9E/BSZkpK68yoPOgj239+PGIpIVmvMs2VkW+Xn13XNHHdc3fNr13rQT5ni5/9NmgQvv1x3RHXPPeEHP/DbwIF+ho+ISAPUcm/qVq6Ed9/1o5kTJsDbb9edWtO/v59XePTR3srP0WgSIpkuqQdUU0Hhvp0qKz3sX38dXnkFJk/2ln1pKQwe7KfVHHGEnw8oIhlH4Z4tlizxrpvnn/fzAVev9ouyhg6FE07woI9fZSQiaW9rw11/x6e74mI/gfyvf/Wgf+kl78d/7jk45hi/pPWii/ykdRHJGgr3TNKsmV8B9OCDfp793/8OBx8Md93lg7rsvz888MDGA8WISEZSuGeqZs1gyBB4+mm/0GrMGA/1M87wcQMuvrjusk8RyTgK92zQoQNceKGfZjlhgrfux4zxK2Z/8hN4//2oKxSRJFO4ZxMz76Z5/HG/iOrii/2Mm3339f75iROjrlBEkkThnq26d4ebbvKumeuu89MrDzzQQ14HX0XSnsI927VtCyNH+ti7N97orfe994YTT/RxcUQkLSncxRUVwWWXeXfNiBF+KuVuu3nwV1REXZ2IbCOFu2ysbVu4/nqfIup//sfnuuvd2/vpI7rgTUS2ncJdGtalCzzyiHfTdO7s3TQ//KG6akTShMJdNu+AA/xg65gx8Oab8P3vw223bTx7t4g0OQp32bLcXD9Pfvp0OOww+OUvfb47teJFmiyFu2y9rl39QOuf/gQffOCzRz34oPriRZoghbtsGzM47TSf9bq8HE4/HU45xUejFJEmQ+Eu26dHDx9T/je/gbFj/SpXXfwk0mQo3GX75ebCVVfB+PE+ReCBB8Jjj0VdlYigcJdkGDjQ533dbz846SQ/4FpdHXVVIllN4S7JsdNO3k1zwQV+quSgQT7/q4hEQuEuyZOfD3fc4WfTvPEGHHSQxowXiYjCXZLvtNN8KOG5c6F/f5g0KeqKRLKOwl1S49BDfeiC5s39gqfXX4+6IpGsonCX1NltN3j7bZ/x6ZhjfMo/EWkUCndJrU6d4F//8guefvITuP/+qCsSyQoKd0m9du3g1VfhyCPhf/8X7rkn6opEMp7CXRpHy5bwt79598w558Af/hB1RSIZTeEujaegwPvdf/QjOO88uOuuqCsSyVgKd2lcBQXw1FMwZAicf76PKikiSadwl8bXrBk88QQccQSccYaHvYgklcJdolFQAM8+CwMGwPDhMG5c1BWJZBSFu0SnZUt44QXo1w+OP96n8xORpFC4S7TatoWXX/bz4QcPhpkzo65IJCMo3CV6HTt6wIOPJrloUbT1iGQAhbs0DWVl3kUzf7634NeujboikbSmcJemo39/ePxxmDwZTj0VamujrkgkbSncpWkZMgRuugmefNLnZxWR7ZIXdQEi33HxxTBtGlx7LXzvezBsWNQViaQdtdyl6TGDu++G//ovn/jj/fejrkgk7SjcpWmKj0NTUgI//jEsWRJ1RSJpReEuTVdJCTzzDCxcCCeeCNXVUVckkjYU7tK0lZf78MCvvw5XXhl1NSJpQ+EuTd/pp8PZZ8Po0T4mvIhskcJd0sPtt3sr/rTTYNasqKsRafIU7pIeCgp8mOAQ4IQTYMOGqCsSadIU7pI+evXyyT0mTYJLL426GpEmTeEu6eW44+AXv4AxY+C556KuRqTJUrhL+rnpJthnHz/QOn9+1NWINEkKd0k/zZrBY4/BunXw059qgDGRBijcJT316eNdM//4B/zud1FXI9LkKNwlff385z4934gRMGVK1NWINCkKd0lfZnDvvT6T0ymneDeNiAAKd0l37dv76ZHTp8PIkVFXI9JkKNwl/R15JJx7Ltx2G4wfH3U1Ik2Cwl0yw003+Tysp54KK1dGXY1I5BTukhlatoSHH4a5c+FXv4q6GpHIKdwlcxxwAFxyCdx/P7z6atTViERK4S6Z5de/9nlXzzgDVq2KuhqRyCjcJbMUFvrZM/PmeSteJEsp3CXzHHAAXHyxnwP/+utRVyMSCYW7ZKZrr4XeveHMM2HNmqirEWl0CnfJTM2bw333+axNV18ddTUijU7hLplr4EA46yyfom/SpKirEWlUCnfJbKNHQ2mpnz1TVRV1NSKNRuEuma1NG7j7bpg6FW6+OepqRBqNwl0y35Ah8N//Db/5DXzxRdTViDQKhbtkhzFjfAanc86BEKKuRiTlFO6SHTp3hhtu8PPeH3006mpEUk7hLtnj7LOhf3+46CJYujTqakRSSuEu2SM3F/74R1i+HC67LOpqRFJK4S7ZZc89veX+wAPw1ltRVyOSMgp3yT7XXAPduvnBVZ37LhlK4S7Zp6jIz575+GO4446oqxFJCYW7ZKdjj4VjjvFW/Jw5UVcjknQKd8lOZvD730NtrffBi2QYhbtkr169YORIePppeOWVqKsRSSqFu2S3X/0Kysrgggtg/fqoqxFJGoW7ZLeCArjzTpg5E265JepqRJJG4S5y5JE+sNj118PXX0ddjUhSKNxFAG69FXJy4Be/iLoSkaRQuIuAX9R01VXw3HPw0ktRVyOywxTuInEXXQR9+sCFF0JlZdTViOwQhbtIXLNmfnD1yy91cFXSnsJdJNHhh/vB1VGjYPbsqKsR2W4Kd5H6br3Vr2DVlauSxhTuIvV16wZXXgnPPqsrVyVtbVW4m9nRZjbDzL4ws8sbeP1UM1tsZh/Gbmckv1SRRvTLX/qVqxdeqCtXJS1tMdzNLBe4CxgE9AVONLO+DSz61xDCXrHb/UmuU6RxFRT4cMCffw633x51NSLbbGta7vsDX4QQvgohbAAeB4amtiyRJuDoo2HoUPjtb2Hu3KirEdkmWxPuXYDEAa/nxp6r73gzm2pmT5lZt4ZWZGZnmtlkM5u8ePHi7ShXpJHddhvU1MDFF0ddicg2SdYB1eeBniGEPYDXgIcaWiiEcG8IoTyEUF5SUpKkTYukUK9ecPnl8MQTMH581NWIbLWtCfd5QGJLvGvsuf8IISwNIcSPOt0P7Juc8kSagEsv9ZA//3zNuSppY2vCfRJQZma9zKwZMAx4LnEBM+uU8HAIMD15JYpErHlzP6g6bZpfwSqSBrYY7iGEauB84BU8tJ8IIXxqZr8xsyGxxS40s0/N7CPgQuDUVBUsEokf/QgGDfI5VxcujLoakS2yEEIkGy4vLw+TJ0+OZNsi22XmTOjXD044AR5+OOpqJEuZ2ZQQQvmWltMVqiJbq6zMp+V75BGYMCHqakQ2S+Eusi1GjIDu3eG886C6OupqRDZJ4S6yLVq29HPfP/4Y7ror6mpENknhLrKtjjsOjjoKrr5aB1elyVK4i2wrMx93Zt06uOSSqKsRaZDCXWR79O7twf6Xv8C//x11NSLfoXAX2V4jR0KPHnDuubpyVZochbvI9mrRAsaMgU8/9XuRJkThLrIjhgyBwYPh17/WsMDSpCjcRXZE/OBqTY3P3iTSRCjcRXZUr17e//7kk/Dyy1FXIwIo3EWS45JLoE8fv3J13bqoqxFRuIskRUEB3H03fPUVjBoVdTUiCneRpDnkEDjlFBg9Gj77LOpqJMsp3EWS6ZZbfPyZc86BiIbTFgGFu0hydezoLfc33tCY7xIphbtIsp1xBhx8sJ8auXhx1NVIllK4iyRbTg7cey+sXq1z3yUyCneRVNhtN7jiCh9Y7NVXo65GspDCXSRVrrjCz30/+2xYuzbqaiTLKNxFUqWw0LtnZs2Cq66KuhrJMgp3kVQaONBb7rffDu++G3U1kkUU7iKpNno0dO4MP/85rF8fdTWSJRTuIqnWujXcc4+P+37DDVFXI1lC4S7SGI45Bk46Ca6/HqZOjboayQIKd5HGMmYMdOgAP/uZpuWTlFO4izSWDh3gj3+EDz/UyJGScgp3kcY0dCicfDJcdx188EHU1UgGU7iLNLYxY6CkxLtndPaMpIjCXaSxtW/vFzd9/LFPrC2SAgp3kSgMHuyjR44eDRMmRF2NZCCFu0hUbrsNdt7ZZ29atSrqaiTDKNxFolJUBI88AnPmwIUXRl2NZBiFu0iUBgyAkSPhoYfgySejrkYyiMJdJGpXXQX9+8OZZ8Ls2VFXIxlC4S4Stfx8GDsWamth+HCoro66IskACneRpqBXL7969e234dpro65GMoDCXaSpGDYMTj/dBxf75z+jrkbSnMJdpCm54w743vfgxBNh/vyoq5E0pnAXaUpatoSnnoKKCm/Jq/9dtpPCXaSp6dsX7rvPr1wdOTLqaiRNKdxFmqLhw33u1Ztugr/9LepqJA0p3EWaqttug/328+EJpk2LuhpJMwp3kaaqsBCeeQZatIBjj4UVK6KuSNKIwl2kKevaFZ5+Gr7+2rtqamqirkjShMJdpKk7+GD4/e9h3Di44oqoq5E0kRd1ASKyFc46Cz76CG6+GXr39rHgRTZD4S6SLu64A778Es45x4crOOywqCuSJkzdMiLpIi8PnngC+vSB44+H6dOjrkiaMIW7SDpp0wZeeAEKCmDQIA1RIJukcBdJNz17wksvwdKlcPTROkVSGqRwF0lH++7r58B/9hkMHQqVlVFXJE2Mwl0kXR1xBDz8MPz73z7IWFVV1BVJE6JwF0lnw4bBnXfC3//uwxToIieJ0amQIunuvPNg7Vq49FI/0Prgg5Cjdlu2U7iLZIJLLoF16+Caa6BZM5+yTwGf1RTuIpniqqtg/XoYNcr73x94AHJzo65KIqJwF8kUZnDddd41c801HvQPPwz5+VFXJhFQuItkEjO4+moP+Msv91Mkx4714YMlq6hTTiQTXXYZjBnjszgddZQudMpCCneRTHXhhfDYYzBxIgwcqKEKsozCXSSTnXgivPgizJoFAwbA1KlRVySNROEukumOOAL+9S+oroaDDoLnn4+6ImkECneRbLDPPvDeez5c8NChcMstEELUVUkKKdxFskWXLj4OzfHH+0VPw4bB6tVRVyUponAXySYtWviEHzfeCE89Bf37a9KPDKVwF8k2Zn6q5GuvwZIlsN9+8NBD6qbJMAp3kWx16KHw/vtQXg6nngrDh+t8+AyicBfJZl27wj/+AddfD08+CXvu6Y8l7SncRbJdbi6MGAFvveXDFBx+OJx1FqxaFXVlsgMU7iLi+veHDz+EX/0K7r8f+vXzSUAkLSncRaRO8+Zw883w9tvQujUceyz86Ed+haukFYW7iHxX//7wwQd+sdP48dC3r48XX1ERdWWylRTuItKw/Hy4+GL47DNvwV93Hey6K9x3nw9lIE2awl1ENq9rVx8T/p13YJdd4Mwz4fvf9+dqa6OuTjZB4S4iW6d/f3jzTXjmGZ+ndfhw2GMPD3m15JschbuIbD0zOO44+OgjePxxb7kPHw69e8Pdd/sk3dIkKNxFZNvl5MAJJ8Ann8Czz0JJCZx7rnfhXH45fPNN1BVmPYW7iGy/nBw/2PrOOz5m/CGH+KmUvXr50MLPP68um4go3EVkx5n5VH5PPeXnxF92Gbz7LgwZAt27+2PNAtWoFO4iklzdu8OoUTBnjk/Qve++8Lvf+bg1u+/u49h89lnUVWY8hbuIpEZ+fl3XzIIFcNddftXrlVfCbrv56ZRXXukTeNfURF1txrEQ0RjO5eXlYfLkyZFsW0QiNHeuH4R9+mk/tbKmBoqL4cgjfb7Xww/3A7PSIDObEkIo3+JyCncRiczy5fDKK/Dii/Dqq7BokT/fu7f34Q8cCAcfDD17er++KNxFJM3U1vqpla+9Bm+8ARMmwMqV/lppKRxwgF9Ite++fmvfPtJyo6JwF5H0VlPjYf/mm37mzTvvwMyZda/36OEHaffYww/Ufv/7UFbmV89mMIW7iGSeZct8tMopU3yKwI8/hhkz6g7I5ub64Ga9e/utrMzHw9l5Z+jWzQ/yprmtDfe8xihGRCQp2reHww7zW1xlJUyfXnebNs1b+K+95q/F5eZCly7e4u/Rww/aduni9507Q6dO3v2TAT8AsJXhbmZHA2OAXOD+EMKN9V4vAB4G9gWWAieEEL5ObqkiIg0oLIS99/ZbotpamDcPvvrKb19+6cMizJ7t/fnz50NV1XfX16EDdOwIO+3kwyoUF/t9hw5+a9/eb23bQrt2ft8Eu4K2GO5mlgvcBRwBzAUmmdlzIYRpCYv9HFgeQtjVzIYBo4ETUlGwSDqZMcMbkWVl0KePPx4/3l875BB/bkvvzc31XocFC/y6oAEDvJdh7FiYPBlCgP3282ONNTV129pUDQDjxsEjj3i+gTda+/b1hu/8+bB2rU/KdPjhnpllZZ6PL7zgOXfiif6+eA2LFn13+T594Le/9Qb03nv7qe0TJsCKFX5stKTEu9Q/+QTWrPH6L7jA1zt+PCxc6HV//rkfV12xwl/r0QOOOaauhvg+mj3b31Na6svU1ORQVtYNSrsxfvr/Y2EelB4Ih4yMvW9GLc0rFrP847m0WLWAbnkLaLZkATXzFhK+XUSnxd/SfsFUWLLEu4M204Vdk19AaN2GvPZtoFUrP5+/VSsoKoKiIpZtKGJJZUtC85ZUNWtJwRmnULZf2234L2nbbbHP3cwGAL8OIRwVe3wFQAjhhoRlXoktM9HM8oCFQEnYzMrV5y6ZbsYMv1AzHs7DhsG993o3MfgUpaNHNxzw8fdWVPi0pqWlfvV++/beIO3QwZeJ9zo0a+avHXig58mIEXU/Jok1jBjhIX366R7I8eHYE88yTPy/NifHg7iw0Hs71qzx1/v18/upUzceCDK+/K67eoP2D3/w5WpqoEUL/9HIzfXnWrb0zxffXm6uHxMtKfFAX7QI1q9veN/m5/sJMzvt5O977z3fxurVnqm5ubD//v5cRYWvb/lyb2j37u37KDcXJk2q+/y1tX5xbXw/5+XBnXfCoEEw7oUarjp/Oe3CMtpUL+Xys5ZTvstyvp2xgjefX06L6lUUbFhF+a4raW2rfXLxVatgzRqqV1ZQtbyCguo15OAf9uIfz+LMUT03++O+Kcnsc+8CzEl4PBfov6llQgjVZrYS6AAsqVfUmcCZAN27d9+KTYukr3iLsnt37w2YONGDplUrf72iwpdp6H/w+HsLCjwwV670AGrdGpYu9RYq+HMh+G39el8+N7duvfVrmDnTg3D9+oYDvf6p5CH4tisq/D0tWsCGDb79EL47V0d8+dxceP11f66gwEO9stLXHw/S9es3/iEJwf86MfNg3dw8ILW18O23/gPRsaOHeG2th378fQUF/gOxZImvLz/f75fEUqljRx/TrLDQH1dVbbyfKyv9Oxs0CCa+l8vK/GKKuhRMK2SWAAAE+0lEQVTz0Tx4rhrKT4JJL8CLc+v279ofw+DBG9f68gs+BH7lusDU9yo5cK+11LRqu8nvPlkadfiBEMK9IYTyEEJ5SUlJY25apNGVlXnofPON3w8Y4C3G1av9VlTky2zuvevXe1i1aePht2qVB2dpqS+XGMoFBb58vGumoRrKyryOgoKNgzUeuvWZ+baLi+tCuqrKt19a6j88DS1fU+NdNFDX+i4srPshitebuE0z7x4qLvbQrb/uRDk53movKvL15+b6c1VVfp+b688XFdWtr6rK74uL696Xl+fP1dT4exL3c22t7yvw+3gXfuLzDe3fTX6XG4x1NGcpHagOuZv87pNF3TIiKaQ+9yj73OvCNr6+0lLf7/XfF19v/f08aFDdfhw3zlvy9Z9vaP9u6bvc3LJbkrTz3GNh/TlwGDAPmAQMDyF8mrDMecDuIYSzYwdUfxxC+Mnm1qtwFxHZdknrc4/1oZ8PvIKfCvmnEMKnZvYbYHII4TngAeARM/sCWAYM27HyRURkR2zVee4hhJeAl+o9d3XCvyuB/0luaSIisr00nruISAZSuIuIZCCFu4hIBlK4i4hkIIW7iEgGUriLiGSgyCbrMLPFwOxINl6nmHrj32Qofc7Mos+ZWbb1c/YIIWxx/JbIwr0pMLPJW3OlV7rT58ws+pyZJVWfU90yIiIZSOEuIpKBsj3c7426gEaiz5lZ9DkzS0o+Z1b3uYuIZKpsb7mLiGQkhbuISAbKynA3s0Ize8/MPjKzT83s2qhrSiUzyzWzD8zshahrSRUz+9rMPjazD80sY2eBMbO2ZvaUmX1mZtNjM6VlFDPrE/se47dVZvZ/UdeVbGZ2USx/PjGzsWZWmNT1Z2Ofu5kZ0DKEUGFm+cCbwC9CCO9EXFpKmNkvgXKgdQhh8JaWT0dm9jVQHkLI6ItezOwhYEII4X4zawa0CCGsiLquVDGzXHwGuP4hhKgvekwaM+uC507fEMI6M3sCeCmE8OdkbSMrW+7BVcQe5sduGfkrZ2ZdgWOA+6OuRXaMmbUBBuIznxFC2JDJwR5zGPBlJgV7gjygeWwq0xbA/GSuPCvDHf7TVfEhsAh4LYTwbtQ1pcjtwKVAbdSFpFgAXjWzKWZ2ZtTFpEgvYDHwYKyb7X4zaxl1USk2DBgbdRHJFkKYB9wCfAMsAFaGEF5N5jayNtxDCDUhhL2ArsD+ZtYv6pqSzcwGA4tCCFOirqURHBxC2AcYBJxnZgOjLigF8oB9gLtDCHsDa4DLoy0pdWLdTkOAJ6OuJdnMrB0wFP/B7gy0NLOTk7mNrA33uNifteOBo6OuJQUOAobE+qMfBw41s79EW1JqxFpChBAWAc8C+0dbUUrMBeYm/JX5FB72mWoQ8H4I4duoC0mBw4FZIYTFIYQq4BngwGRuICvD3cxKzKxt7N/NgSOAz6KtKvlCCFeEELqGEHrif97+M4SQ1NZBU2BmLc2sVfzfwJHAJ9FWlXwhhIXAHDPrE3vqMGBahCWl2olkYJdMzDfAAWbWInaCx2HA9GRuIC+ZK0sjnYCHYkfic4AnQggZe5pgFtgJeNb/HyEPeCyE8HK0JaXMBcCjsS6Lr4DTIq4nJWI/0kcAZ0VdSyqEEN41s6eA94Fq4AOSPAxBVp4KKSKS6bKyW0ZEJNMp3EVEMpDCXUQkAyncRUQykMJdRCQDKdxFRDKQwl1EJAP9f+rFPmA65SVlAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -155,20 +143,22 @@ "def sigmoid_mu_s(x, mu, s):\n", " return 1 / (1 + np.exp(-(x + mu) / s))\n", "\n", - "plt.scatter(X, Y, s=10, c='b', alpha=0.5)\n", - "sig_x = np.linspace(X.min(), X.max(), 100)\n", - "y_flip = 1 if Y[X.argmin()] == 0 else -1\n", - "sig_y = sigmoid_mu_s(sig_x, -X.mean(), y_flip * 0.5)\n", + "plt.scatter(X[:, 0], Y, s=10, c='b', alpha=0.5)\n", + "sig_x = np.linspace(X[:, 0].min(), X[:, 0].max(), 100)\n", + "y_flip = 1 if Y[X[:, 0].argmin()] == 0 else -1\n", + "sig_y = sigmoid_mu_s(sig_x, -X[:, 0].mean(), y_flip * 0.5)\n", "plt.plot(sig_x, sig_y, c='r')\n", "plt.yticks([0, 0.5, 1])\n", - "plt.title('Approximation')" + "plt.grid(axis='y')\n", + "plt.title('Approximation')\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Hypothesis and Prediction\n", + "### Hypothesis and Prediction\n", "\n", "We can tweak the sigmoid function by passing the dot product of $x$ (vector of feature) and $\\theta$ (the vector of weights).\n", "\n", @@ -217,13 +207,13 @@ "source": [ "def hypothesis(x, theta):\n", " # suppose that x_0 = 1 and isn't mentionned\n", - " return sigmoid(theta[0] + x.dot(theta[1:]))\n", + " return sigmoid(x.dot(theta))\n", "\n", "\n", "def predict(x, theta):\n", " return int(hypothesis(x, theta) >= 0.5) # a bit more clear\n", " # or\n", - " return int(theta[0] + x.dot(theta[1:]) >= 0)\n", + " return int(x.dot(theta) >= 0)\n", " # there is a nice vector interpretation for this one\n", " # and it probably compute faster" ] @@ -232,7 +222,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Cost function\n", + "### Cost function\n", "\n", "We have to evaluate our model by introducing a cost function, this one is called the *logloss*\n", "\n", @@ -261,17 +251,7 @@ "outputs": [ { "data": { - "text/plain": [ - "Text(0.5, 1.0, 'cost function')" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -283,16 +263,18 @@ } ], "source": [ - "xs = np.linspace(0.001, 0.999, 100)\n", - "ys_0 = [-np.log(1 - x) for x in xs]\n", - "ys_1 = [-np.log(x) for x in xs]\n", - "plt.plot(xs, ys_1, label=r'$y = 1, -\\ln(h(x))$')\n", - "plt.plot(xs, ys_0, label=r'$y = 0, -\\ln(1 - h(x))$')\n", + "xs_log = np.linspace(0.001, 0.999, 100)\n", + "ys_0 = [-np.log(1 - x) for x in xs_log]\n", + "ys_1 = [-np.log(x) for x in xs_log]\n", + "plt.plot(xs_log, ys_1, label=r'$y = 1, -\\ln(h(x))$')\n", + "plt.plot(xs_log, ys_0, label=r'$y = 0, -\\ln(1 - h(x))$')\n", "plt.ylim([0, 5])\n", "plt.xlim([0, 1])\n", "plt.xticks([0, 0.5, 1])\n", "plt.legend()\n", - "plt.title('cost function')" + "plt.grid()\n", + "plt.title('cost function')\n", + "plt.show()" ] }, { @@ -338,8 +320,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Optimization\n", - "\n", "### Gradient descent\n", "\n", "Finally, use gradient descent to minimize the cost function:\n", @@ -400,7 +380,7 @@ "\n", "$$\n", "\\boxed{\n", - " = \\frac{1}{n} \\sum_{i = 1}^{n} \\left( (h(x_i) - y_i) x_{ij} \\right)\n", + " = \\frac{1}{n} \\sum_{i = 1}^{n} (h(x_i) - y_i) x_{ij}\n", "}$$" ] }, @@ -410,74 +390,223 @@ "metadata": {}, "outputs": [], "source": [ - "def cost_partial_theta(xs, ys, theta, theta_j):\n", - " total = 0\n", - " for x_i, y_i in zip(xs, ys):\n", - " temp = hypothesis(x_i, theta) - y_i\n", - " if theta_j != 0:\n", - " temp *= x_i[theta_j - 1]\n", - " total += temp\n", - " return total / len(xs)\n", - "\n", - "\n", - "def cost_gradient(xs, ys, theta):\n", - " return np.array([cost_partial_theta(xs, ys, theta, i)\n", - " for i in range(len(theta))])" + "def gradient(xs, ys, theta):\n", + " g = np.array([])\n", + " for j in range(len(theta)):\n", + " g = np.append(g, [sum([(hypothesis(x, theta) - y) * x[j]\n", + " for x, y in zip(xs, ys)]) / len(xs)],\n", + " axis=0)\n", + " return g" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def gradient_descent(xs, ys, theta, alpha=1, epoch=100):\n", " for _ in range(epoch):\n", - " theta = theta - alpha * cost_gradient(xs, ys, theta) \n", + " theta = theta - alpha * gradient(xs, ys, theta) \n", " return theta" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "weights: 29.40983934878407 -5.527334155188794\n", - "train cost: 0.007186648908279271\n", - "test cost: 0.010992176598402464\n" + "weights: -2.647912220979194 15.448901536265106\n", + "train cost: 0.0020754129182815793\n", + "test cost: 0.003588729710123071\n" ] } ], "source": [ - "theta = np.random.randn(len(X_train[0]) + 1)\n", - "theta = gradient_descent(X_train, Y_train, theta, 4, 500)\n", - "print('weights: ', *theta)\n", - "print('train cost:', cost(X_train, Y_train, theta))\n", - "print('test cost: ', cost(X_test, Y_test, theta))" + "theta_binary = np.random.randn(len(X_train[0]))\n", + "theta_binary = gradient_descent(X_train, Y_train, theta_binary, 2, 2000)\n", + "print('weights: ', *theta_binary)\n", + "print('train cost:', cost(X_train, Y_train, theta_binary))\n", + "print('test cost: ', cost(X_test, Y_test, theta_binary))" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { + "image/png": "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\n", "text/plain": [ - "Text(0.5, 1.0, 'Optimized model')" + "<Figure size 432x288 with 1 Axes>" ] }, - "execution_count": 40, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X_train[:, 0], Y_train, s=8, c='b', alpha=0.4, label='train data')\n", + "plt.scatter(X_test[:, 0], Y_test, s=10, c='g', label='test data')\n", + "sig_x = np.linspace(X[:, 0].min(), X[:, 0].max(), 100)\n", + "sig_y = [hypothesis(np.array([x, 1]), theta_binary) for x in sig_x]\n", + "plt.plot(sig_x, sig_y, c='r', alpha=0.5, label='model')\n", + "plt.yticks([0, 0.5, 1])\n", + "plt.ylim([-0.1, 1.1])\n", + "plt.legend()\n", + "plt.grid(axis='y')\n", + "plt.title('Optimized model')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## One vs all\n", + "\n", + "What if we don't have a binary target but many groups (>2) to classify. \n", + "It's in this that one vs all is applied.\n", + "\n", + "Here, there is 2 features and 3 categories." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "xs_oa = np.array([[1, 1], [1, 1.3], [1.4, 1.1],\n", + " [1.5, 2], [1.6, 1.8], [1.4, 1.8],\n", + " [2.4, 1.2], [2.2, 1.5], [2.3, 1.3]])\n", + "ys_oa = np.array([0, 0, 0,\n", + " 1, 1, 1,\n", + " 2, 2, 2])\n", + "\n", + "xs_oa = np.hstack([xs_oa, np.ones((xs_oa.shape[0], 1))])\n", + "\n", + "xs_plot_spec = [\n", + " {'marker': '^', 'c': 'b', 's': 50},\n", + " {'marker': 'o', 'c': 'r', 's': 50},\n", + " {'marker': 's', 'c': 'g', 's': 50}\n", + "]\n", + "\n", + "def plot_onevsall(xs, ys):\n", + " for i, y in enumerate(ys):\n", + " plt.scatter(xs[i,0], xs[i,1], **xs_plot_spec[y])\n", + " \n", + "plot_onevsall(xs_oa, ys_oa)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The tricks is to create an hypothesis function for every target. \n", + "Each of those will compare his target to all the other one.\n", + "\n", + "For example the hypothesis function for *circle* will separate it from *triangle* and *square*" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_onevsall(xs_oa, ys_oa)\n", + "plt.plot([1.0, 2.4], [1.5, 1.9], c='r')\n", + "plt.plot([1.0, 1.8], [1.7, 1.0], c='b')\n", + "plt.plot([1.7, 2.3], [1.0, 1.8], c='g')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "def train_against(xs, ys, theta, one, alpha, epoch):\n", + " ys_ally = ys.copy()\n", + " ys_ally[ys == one] = 0\n", + " ys_ally[ys != one] = 1\n", + " return gradient_descent(xs, ys_ally, theta, alpha, epoch)\n", + "\n", + "def train_thetas(xs, ys, theta, alpha=1, epoch=1000):\n", + " thetas = []\n", + " for i in np.unique(ys):\n", + " thetas.append(train_against(xs, ys, theta, i, alpha, epoch))\n", + " return thetas" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[array([ 5.05076977, 6.31195834, -15.87703677]),\n", + " array([ 3.21813142, -10.8578558 , 12.38691428]),\n", + " array([-9.38682431, 6.49524162, 8.28589111])]" + ] + }, + "execution_count": 63, "metadata": {}, "output_type": "execute_result" - }, + } + ], + "source": [ + "theta_oa = np.random.randn(len(xs_oa[0]))\n", + "thetas_oa = train_thetas(xs_oa, ys_oa, theta_oa, alpha=1, epoch=1000)\n", + "thetas_oa" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -489,15 +618,67 @@ } ], "source": [ - "plt.scatter(X_train, Y_train, s=8, c='b', alpha=0.4, label='train data')\n", - "plt.scatter(X_test, Y_test, s=10, c='g', label='test data')\n", - "sig_x = np.linspace(X.min(), X.max(), 100)\n", - "sig_y = [hypothesis(np.array([x]), theta) for x in sig_x]\n", - "plt.plot(sig_x, sig_y, c='r', alpha=0.5, label='model')\n", - "plt.yticks([0, 0.5, 1])\n", - "plt.legend()\n", - "plt.grid(axis='y')\n", - "plt.title('Optimized model')" + "plot_onevsall(xs_oa, ys_oa)\n", + "\n", + "def plot_boundaries(xs, thetas):\n", + " for i, ti in enumerate(thetas):\n", + " xs_ti = np.array([min(xs[:, 1]) - 2, max(xs[:, 1]) + 2])\n", + " ys_ti = (-1 / ti[1]) * (ti[0] * xs_ti + ti[2]) # from https://utkuufuk.com/2018/05/19/binary-logistic-regression/\n", + " plt.plot(xs_ti, ys_ti, linewidth=2, c=xs_plot_spec[i]['c'])\n", + "\n", + "plt.xlim([xs_oa[:, 0].min() - 0.3, xs_oa[:, 0].max() + 0.3])\n", + "plt.ylim([xs_oa[:, 1].min() - 0.3, xs_oa[:, 1].max() + 0.3])\n", + "plot_boundaries(xs_oa, thetas_oa)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Prediction\n", + "\n", + "To make a prediction we get the hypothesis for each group $h^{(i)}(x)$, the predicted group is then $\\max_i h^{(i)}(x)$." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "def make_prediction(x, thetas):\n", + " ps = [hypothesis(x, ti) for ti in thetas]\n", + " return ps.index(min(ps)) " + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "xs_pred = 1.2 * np.random.rand(50, 2) + 1\n", + "xs_pred = np.hstack([xs_pred, np.ones((xs_pred.shape[0], 1))])\n", + "\n", + "ys_pred = np.array([make_prediction(x, thetas_oa) for x in xs_pred])\n", + "plot_onevsall(xs_pred, ys_pred)\n", + "plt.xlim([xs_oa[:, 0].min() - 0.3, xs_oa[:, 0].max() + 0.3])\n", + "plt.ylim([xs_oa[:, 1].min() - 0.3, xs_oa[:, 1].max() + 0.3])\n", + "plot_boundaries(xs_oa, thetas_oa)" ] } ], |
