{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Intro" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "LogisticsRegression is a *** classification*** ML model that predict the possibility of an event would happen (or not) based on ***threshold***\n", "- 0 or 1 ( 2 group case)\n", "- a, b, c ... (multiple groups cases)\n", "\n", "---\n", "\n", "Here we define logistics function as \n", "$$\n", "\\begin{equation}\n", "logistics(p)=\\log\\frac{p}{1-p}\\ \n", "\\end{equation}\n", "$$\n", "\n", "\n", "p : possibility of an event would happen \n", "\n", "\n", "Based on \"threshold\". Set ***p*** within $0 0 if p > 0.5 and < 0 while p < 0.5,\n", "this can be a property that make LogisticsRegression be able to do classication with certain threshold.\n", "\n", "---\n", "\n", "Here we do tricks get **sigmoid function** which can tell the probability \n", "of an event happen or not via logistics function :\n", "\n", "\n", "$$\n", "\\begin{equation}\n", "\\begin{split}\n", "z &= \\log\\frac{p}{1-p} \\\\\n", "e^{-z}&=\\frac{1}{p}-1 \\\\\n", "p &= \\frac{1}{1+e^{z}}\\\n", "\\end{split}\n", "\\end{equation}\n", "$$\n", "\n", "\n", "\n", "Make $\\phi(z)$ as $p$ as an objactive function\n", "$$\n", "\\begin{equation}\n", "\\phi(z) = \\frac{1}{1+e^{z}}\\ \n", "\\end{equation}\n", "$$\n", "\n", "Notice that with some given z make $\\phi(z)$ > 0.5 then we can \n", "say this event is going to happen (not happen) possibly. \n", "***z*** is the thing would be learned during model training. \n" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "fitting data via logistics regression \n", "(via the S shape sigmoid function) \n", "\n" ] }, { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAGYAjMDASIA\nAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA\nAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3\nODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm\np6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA\nAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\nBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK\nU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3\nuLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iii\nigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK\nACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA\nKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo\noooAKK+M/wDgoz4o8TeB/wDgn1+3N408FeItd8IeMfCP7IP7SPibwp4s8L6vqHh/xL4Y8SaF8HvG\nOp6J4g8Pa7pNxaapout6PqVrbahpWq6bdW1/p99bwXdpcQ3EMci/k9+zrdWms/Ej9hzWv2OtS/4K\n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\nGM8Q6OYNUcBUnRwzrY7L8wr1qeX1K0JVcP7POMXQwmUYyvTxGIy3LMuyqvKjjcXg8VHOuui8JKrg\n1OOI+r0q1CE/rNRRxFTC4TNsP9Vji61Pn5nWyiliHmrhGMcTjsfjZx9lSlhYZf4/+zB8WP2v5/2h\nviB8BP2qNc/Zs8YyaH+zv8Fvjj4d8V/s+/Db4m/DCOHVfiX4y+K/hTxL4M1nRfiH8YvjINW07wvJ\n8PLFtC8X6frWjz+KU1K6vb7wp4XMEOnP+h1fmX+wJ/wTwvP2NfEvxK8f+MPivp3xV8eePvBnw2+F\n2nzeHdH+PGleGPCfww+FV74z1fwn4bsZf2mv2qf2zfjFez22qePtfgt7OX43W/w48M+HbLw/onw/\n+GfgyaPxVqvjD9NK1xLov2HsnB/uZOp7Om6ajKpjMyrUqMlzzVSrhcDWy3B1q0ZONathak4yqXlX\nxHn0VVTq+1k5vmoRVSyhGrOnl+XUcXiKVCy+q0MXmVLMsbQwl5fVaOLhQi1ClCFMooormNwooooA\nKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo\noooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii\nigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK\nACiiigAooooAKKKKACiiigAooooA/9k=\n", "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "print (\"\"\"fitting data via logistics regression \n", "(via the S shape sigmoid function) \n", "\"\"\")\n", "Image(filename='logistics_demo.jpeg') \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "# import analysis library\n", "import pandas as pd, numpy as np \n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "%pylab inline\n", "plt.style.use('ggplot')\n", "# ML\n", "from sklearn import datasets\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.linear_model import LogisticRegression" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# credit \n", "# http://nbviewer.jupyter.org/github/JWarmenhoven/Machine-Learning/blob/master/notebooks/Programming%20Exercise%202%20-%20Logistic%20Regression.ipynb#Logistic-regression-hypothesis\n" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# define sigmoid function \n", "def sigmoid(z):\n", " return(1 / (1 + np.exp(-z)))" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "x = np.arange(-10,10)\n", "y = sigmoid(x)\n", "# take a view of sigmoid\n", "#plt.plot(x,y)\n", "#plt.xlabel('x')\n", "#plt.ylabel('y')\n", "#plt.title('sigmoid function')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \n", "$h_\\theta\\ (x^{(i)}) = \\phi(z)$ \n", "\n", "\n", "\n", "- Cost Function\n", " $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\big[-y^{(i)}\\, log\\,( h_\\theta\\,(x^{(i)}))-(1-y^{(i)})\\,log\\,(1-h_\\theta(x^{(i)}))\\big]$$\n", " \n", " \n", "- Vectorized Cost Function\n", " $$ J(\\theta) = \\frac{1}{m}\\big((\\,log\\,(g(X\\theta))^Ty+(\\,log\\,(1-g(X\\theta))^T(1-y)\\big)$$\n", "\n", "\n", "- Partial derivative\n", "\n", " $$ \\frac{\\delta J(\\theta)}{\\delta\\theta_{j}} = \\frac{1}{m}\\sum_{i=1}^{m} ( h_\\theta (x^{(i)})-y^{(i)})x^{(i)}_{j} $$ \n", " \n", "- Vectorized Partial derivative\n", "\n", "$$ \\frac{\\delta J(\\theta)}{\\delta\\theta_{j}} = \\frac{1}{m} X^T(g(X\\theta)-y)$$ \n", "\n", "- Only run the non-vectorize version in this nb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Quick fitting " ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{0, 1, 2}\n" ] } ], "source": [ "iris = datasets.load_iris()\n", "X = iris.data[:, [2,3]]\n", "y = iris.target\n", "print (set(y))" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "def data_preprocess(X,y):\n", " X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2 )\n", " sc = StandardScaler()\n", " sc.fit(X_train)\n", " X_train_std = sc.transform(X_train)\n", " X_test_std = sc.transform(X_test)\n", " return X_train_std,X_test_std ,X_train, X_test, y_train, y_test\n", "\n", "def logistics_fit(X,y):\n", " logistics = LogisticRegression() \n", " logistics.fit(X, y)\n", " return logistics\n" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "X_train_std,X_test_std,X_train, X_test, y_train, y_test = data_preprocess(X,y)\n" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": true }, "outputs": [], "source": [ "logistics_ = logistics_fit(X_train_std, y_train)" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "input data : \n", "[-1.3401922 -1.31435097]\n", "predict probability : \n", "[[ 8.08685733e-01 1.91040537e-01 2.73729559e-04]]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "//anaconda/envs/g_dash/lib/python3.4/site-packages/sklearn/utils/validation.py:395: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n", " DeprecationWarning)\n" ] } ], "source": [ "print ('input data : ')\n", "print (X_test_std[10,:])\n", "print ('predict probability : ')\n", "print (logistics_.predict_proba(X_test_std[10,:]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the input data, the logistics model predict there is \n", "- 80% probability the data is group 0\n", "- 19% probability the data is group 1\n", "- 0.0002% probability the data is group 2\n" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "input data : \n", "[-1.3401922 -1.31435097]\n", "predict probability : \n", "[0]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "//anaconda/envs/g_dash/lib/python3.4/site-packages/sklearn/utils/validation.py:395: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n", " DeprecationWarning)\n" ] } ], "source": [ "print ('input data : ')\n", "print (X_test_std[10,:])\n", "print ('predict probability : ')\n", "print (logistics_.predict(X_test_std[10,:]))" ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# dev \n", "# http://rstudio-pubs-static.s3.amazonaws.com/230133_fb9cb3c35ca345d0b9e5726ed3f45a21.html\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# L1 Regularization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# L2 Regularization" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": true }, "outputs": [], "source": [ "##############" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# define cost function \n", "def costFunction(theta, X, y):\n", " m = y.size\n", " h = sigmoid(X.dot(theta))\n", " \n", " J = -1*(1/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y))\n", " \n", " if np.isnan(J[0]):\n", " return(np.inf)\n", " return(J[0])\n", "\n", "# define gradient method \n", "def gradient(theta, X, y):\n", " m = y.size\n", " h = sigmoid(X.dot(theta.reshape(-1,1)))\n", " \n", " grad =(1/m)*X.T.dot(h-y)\n", "\n", " return(grad.flatten())" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#np.random.randint(30,size=10)\n", "#np.random.random_integers(0,1,size=10)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "//anaconda/envs/g_dash/lib/python3.4/site-packages/ipykernel_launcher.py:4: DeprecationWarning: This function is deprecated. Please call randint(0, 1 + 1) instead\n", " after removing the cwd from sys.path.\n" ] } ], "source": [ "#x.shape([1])\n", "toydata = pd.DataFrame({'a':np.random.randint(10,30,size=30),\n", " 'b':np.random.randint(40,50,size=30),\n", " 'c':np.random.random_integers(0,1,size=30)})" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789...20212223242526272829
a28241323161712162119...10202129142110182028
b43474047404345414447...43424046464047424941
c0000111110...0000110001
\n", "

3 rows × 30 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 ... 20 21 22 23 24 25 26 27 \\\n", "a 28 24 13 23 16 17 12 16 21 19 ... 10 20 21 29 14 21 10 18 \n", "b 43 47 40 47 40 43 45 41 44 47 ... 43 42 40 46 46 40 47 42 \n", "c 0 0 0 0 1 1 1 1 1 0 ... 0 0 0 0 1 1 0 0 \n", "\n", " 28 29 \n", "a 20 28 \n", "b 49 41 \n", "c 0 1 \n", "\n", "[3 rows x 30 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "toydata.T" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = np.array(toydata.iloc[:,:2])\n", "y = np.array(toydata.iloc[:,2:])" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(toydata.a,toydata.b,c=toydata.c)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cost: \n", " 0.69314718056\n", "Grad: \n", " [ 1.65 3.33333333]\n" ] } ], "source": [ "# let's run toy data with costfunction and gradient function\n", "initial_theta = np.zeros(x.shape[1])\n", "cost = costFunction(initial_theta, x, y)\n", "grad = gradient(initial_theta, x, y)\n", "print('Cost: \\n', cost)\n", "print('Grad: \\n', grad)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Optimize cost function" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ " fun: 0.6804054820575545\n", " hess_inv: array([[ 0.13268925, -0.06001118],\n", " [-0.06001118, 0.02925761]])\n", " jac: array([ 1.10104879e-06, 1.74732876e-06])\n", " message: 'Optimization terminated successfully.'\n", " nfev: 8\n", " nit: 4\n", " njev: 8\n", " status: 0\n", " success: True\n", " x: array([-0.01806774, 0.00125377])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from scipy.optimize import minimize\n", "# https://docs.scipy.org/doc/scipy-0.19.1/reference/generated/scipy.optimize.minimize.html\n", "res = minimize(costFunction, initial_theta, args=(x,y), method=None, jac=gradient, options={'maxiter':400})\n", "res" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Predict " ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def predict(theta, X, threshold=0.5):\n", " p = sigmoid(X.dot(theta.T)) >= threshold\n", " return(p.astype('int'))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#x" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.509586781003\n", "Train accuracy 56.666666666666664%\n", "\n", "---------\n", "0.185527344184\n", "Train accuracy 56.666666666666664%\n" ] } ], "source": [ "# let's test the simple preidct with new import : [1,45], [85,45]\n", "# Predict using the optimized Theta values from above (res.x)\n", "\n", "p = predict(res.x, x) \n", "print (sigmoid(np.array([1,45]).dot(res.x.T)))\n", "print('Train accuracy {}%'.format(100*sum(p == y.ravel())/p.size))\n", "print ('')\n", "print ('---------')\n", "p = predict(res.x, x) \n", "print (sigmoid(np.array([85,45]).dot(res.x.T)))\n", "print('Train accuracy {}%'.format(100*sum(p == y.ravel())/p.size))\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Decision boundary" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "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.4.5" } }, "nbformat": 4, "nbformat_minor": 2 }