|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504 |
- {
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Logistic Regression\n",
- "\n",
- "Logistic Regression model is actually apply a logical function at the basis of linear regression. Beacause this method is simple and effective, it has become a shining star at the field of machine learning and the core of computational advertising. This chapter is mainly introducing the basis of logistic regression. \n",
- "\n",
- "\n",
- "## 1. Logestic regression model\n",
- "Logestic is a model which can be understood easily, which is equal to $y=f(x)$, shows the relationship between independent variable $x$ and dependent variable $y$. The most common questions are like the doctor's observation, hearing, asking and cutting during treatment, and then determining whether the patient is ill or what kind of disease he has. The observation, hearing and cutting is to obtain the independent variable $x$, that is, the characteristic data, while the determination of whether the patient is ill is equivalent to the acquisition of the dependent variable $y$, that is, the prediction classification.\n",
- "\n",
- "The most simple regression is linear regression. Using Andrew NG's handout, as shown in the figure, $X$ is number point -- tumor size, $Y$ is the observed value -- whether a malignant tumor or not. By building a linear regression model, as shown in $h_\\theta(x)$, we can predict whether $h_\\theta(x)) \\ge 0.5$ is malignant and $h_\\theta(x) \\lt 0.5$ is benign according to the size of the tumor.\n",
- "\n",
- "\n",
- "\n",
- "However the linear regression have poor robust, for example if we want to built regression in upper graph, the regression model perform badly in the training set because of the noise point on the right. This is mainly because that the linear regression have a same sensitivity in the whole real number field, however for the range for sort is in $[0,1]$.\n",
- "\n",
- "Logestic regression is a kind of regression model which decrease the predict range and limit the prediction value to $[0,1]$, the regression function and curve is shown in graph 2. When the logestic curve is in $z=0$, it is very sensitive, while at $z>>0$ or $z<<0$, the result is not sensitive, we set the predict value to $(0,1)$.\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "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": [
- "%matplotlib inline\n",
- "import matplotlib.pyplot as plt\n",
- "import numpy as np\n",
- "\n",
- "plt.figure()\n",
- "plt.axis([-10,10,0,1])\n",
- "plt.grid(True)\n",
- "X=np.arange(-10,10,0.1)\n",
- "y=1/(1+np.e**(-X))\n",
- "plt.plot(X,y,'b-')\n",
- "plt.title(\"Logistic function\")\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 1.1 Logestic regression expression\n",
- "\n",
- "The function of logestic function, which is also called sigmoid function. The formula of function is defined as:\n",
- "\n",
- "$$\n",
- "g(z) = \\frac{1}{1+e^{-z}}\n",
- "$$\n",
- "\n",
- "For logistic function, when $z$ is approach infinity, $g(z)$ is approach to 1. While $z$ is approach minus infinity, $g(z)$ is approach to 0. The graph for logestic function is shown as upper figure. Logistic funciton has an attribute when doing derivative which will be used in the following derivation, the characteristic is:\n",
- "\n",
- "$$\n",
- "g'(z) = \\frac{d}{dz} \\frac{1}{1+e^{-z}} \\\\\n",
- " = \\frac{1}{(1+e^{-z})^2}(e^{-z}) \\\\\n",
- " = \\frac{1}{(1+e^{-z})} (1 - \\frac{1}{(1+e^{-z})}) \\\\\n",
- " = g(z)(1-g(z))\n",
- "$$\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "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": [
- "%matplotlib inline\n",
- "import matplotlib.pyplot as plt\n",
- "import numpy as np\n",
- "\n",
- "plt.figure()\n",
- "plt.axis([-10,10,0,1])\n",
- "plt.grid(True)\n",
- "X=np.arange(-10,10,0.1)\n",
- "y=1/(1+np.e**(-X))\n",
- "plt.plot(X,y,'b-')\n",
- "plt.title(\"Logistic function\")\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Logistic regression is essentially linear regression, only add a layer of function map in the mapping from characteristic and result, which is add linear characteristic first and then use function $g(z)$ as the hypothesis function to predict. $g(z)$ can map continuous value between 0 and 1. We put the expression of logestic model into $g(z)$ to get the expression of logestic regression\n",
- "\n",
- "$$\n",
- "h_\\theta(x) = g(\\theta^T x) = \\frac{1}{1+e^{-\\theta^T x}}\n",
- "$$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 1.2 Soft classification of logestic regression\n",
- "\n",
- "Now we normalize the value of y $h_\\theta(x)$ to between (0,1) by Logistic function. The value of $y$ have special meaning, which represent the probability that the result getting 1. Therefore the probabilities of input $x$ classification result as category 1 and category 0 are respectively:\n",
- "\n",
- "$$\n",
- "P(y=1|x,\\theta) = h_\\theta(x) \\\\\n",
- "P(y=0|x,\\theta) = 1 - h_\\theta(x)\n",
- "$$\n",
- "\n",
- "We merge the upper function can get:\n",
- "\n",
- "$$\n",
- "p(y|x,\\theta) = (h_\\theta(x))^y (1 - h_\\theta(x))^{1-y}\n",
- "$$\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 1.3 Gradient rise\n",
- "\n",
- "When we get the expression for logestic regression, the next step is similar to linear regerssion. We bulid likelihood function then do the maximum likelihood estimation to derive the iteration udate expression for $\\theta$. However we use gradient rise rather than gradient descent beacuse this is maximum likelihood function.\n",
- "\n",
- "We assume that the training sample are independent with each other, so that the linkelihood function expression is:\n",
- "\n",
- "\n",
- "Similarly, take the log of likelihood function, we can get:\n",
- "\n",
- "\n",
- "\n",
- "Takes the partial derivative of $\\theta$ to converted likelihood function, we take a case where there is only one training sample:\n",
- "\n",
- "\n",
- "\n",
- "In the process of getting patial derivative:\n",
- "* The first step is to convert the partial derivative of $\\theta$, according to the partial formula: $y= LNX $, $y'=1/x$.\n",
- "* The second step is to use the characteristic of $g(z)$ when doing derivative: $g'(z) = g(z)(1 - g(z))$ \n",
- "* The third step was normal translation.\n",
- "\n",
- "In this way, we get the update direction of graient rise in every iteration, so that the iteration expression of $\\theta$ is: \n",
- "\n",
- "$$\n",
- "\\theta_j := \\theta_j + \\alpha(y^i - h_\\theta(x^i)) x_j^i\n",
- "$$\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 1.4 The sample program"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {},
- "outputs": [],
- "source": [
- "from __future__ import division\n",
- "import numpy as np\n",
- "import sklearn.datasets\n",
- "import matplotlib.pyplot as plt\n",
- "\n",
- "np.random.seed(0)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "data = [[ 0.694565 0.42666408]\n",
- " [ 1.68353008 -0.80016643]\n",
- " [-0.25046823 0.24392224]\n",
- " [-1.13337973 -0.6112787 ]\n",
- " [ 1.76905577 -0.31025439]\n",
- " [ 2.00225511 -0.18592 ]\n",
- " [ 0.91169861 0.46995543]\n",
- " [ 0.88211794 -0.46701178]\n",
- " [ 0.75006972 0.33995342]\n",
- " [ 1.30208867 -0.72334923]]\n",
- "label = [0 1 1 0 1 1 0 1 0 1]\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- "Text(0.5, 1.0, 'Original Data')"
- ]
- },
- "execution_count": 24,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "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": [
- "# load sample data\n",
- "data, label = sklearn.datasets.make_moons(200, noise=0.30)\n",
- "\n",
- "print(\"data = \", data[:10, :])\n",
- "print(\"label = \", label[:10])\n",
- "\n",
- "plt.scatter(data[:,0], data[:,1], c=label)\n",
- "plt.title(\"Original Data\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {},
- "outputs": [],
- "source": [
- "def plot_decision_boundary(predict_func, data, label):\n",
- " \"\"\"Draw result\n",
- " Args:\n",
- " pred_func (callable): Predict function\n",
- " data (numpy.ndarray): Training data set\n",
- " label (numpy.ndarray): Training data label\n",
- " ravel() split the data, without changing the original data\n",
- " \"\"\"\n",
- " x_min, x_max = data[:, 0].min() - .5, data[:, 0].max() + .5\n",
- " y_min, y_max = data[:, 1].min() - .5, data[:, 1].max() + .5\n",
- " h = 0.01\n",
- "\n",
- " xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n",
- "\n",
- " Z = predict_func(np.c_[xx.ravel(), yy.ravel()])\n",
- " Z = Z.reshape(xx.shape)\n",
- "\n",
- " plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)\n",
- " plt.scatter(data[:, 0], data[:, 1], c=label, cmap=plt.cm.Spectral)\n",
- " plt.show()\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 34,
- "metadata": {},
- "outputs": [],
- "source": [
- "def sigmoid(x):\n",
- " return 1.0 / (1 + np.exp(-x))\n",
- "\n",
- "class Logistic(object):\n",
- " \"\"\"logestic regression model\"\"\"\n",
- " def __init__(self, data, label):\n",
- " self.data = data\n",
- " self.label = label\n",
- "\n",
- " self.data_num, n = np.shape(data)\n",
- " self.weights = np.ones(n)\n",
- " self.b = 1\n",
- "\n",
- " def train(self, num_iteration=150):\n",
- " \"\"\"Random gradient rise algorithm\n",
- " Args:\n",
- " data (numpy.ndarray): Training data set\n",
- " labels (numpy.ndarray): Training label\n",
- " num_iteration (int): Iteration times\n",
- " \"\"\"\n",
- " for j in range(num_iteration):\n",
- " data_index = list(range(self.data_num))\n",
- " for i in range(self.data_num):\n",
- " # learning rate\n",
- " alpha = 0.01\n",
- " rand_index = int(np.random.uniform(0, len(data_index))) #Choose trianing radomly\n",
- " error = self.label[rand_index] - sigmoid(sum(self.data[rand_index] * self.weights + self.b))\n",
- " self.weights += alpha * error * self.data[rand_index]\n",
- " self.b += alpha * error\n",
- " del(data_index[rand_index]) \n",
- "\n",
- " def predict(self, predict_data):\n",
- " \"\"\"Predict function\"\"\"\n",
- " result = list(map(lambda x: 1 if sum(self.weights * x + self.b) > 0 else 0,\n",
- " predict_data))\n",
- " return np.array(result)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 40,
- "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": [
- "logistic = Logistic(data, label)\n",
- "logistic.train(200)\n",
- "plot_decision_boundary(lambda x:logistic.predict(x) , data, label) #lambda generate callable function"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 2. How to use sklearn solve logestic regression?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "accuracy train = 0.825000\n",
- "accuracy test = 0.900000\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 288x288 with 2 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "from sklearn.linear_model.logistic import LogisticRegression\n",
- "from sklearn.metrics import confusion_matrix\n",
- "from sklearn.metrics import accuracy_score\n",
- "import matplotlib.pyplot as plt\n",
- "\n",
- "# calculate train/test data number\n",
- "N = len(data)\n",
- "N_train = int(N*0.8)\n",
- "N_test = N - N_train\n",
- "\n",
- "# split train/test data\n",
- "x_train = data[:N_train, :]\n",
- "y_train = label[:N_train]\n",
- "x_test = data[N_train:, :]\n",
- "y_test = label[N_train:]\n",
- "\n",
- "# do logistic regression\n",
- "lr=LogisticRegression()\n",
- "lr.fit(x_train,y_train)\n",
- "\n",
- "pred_train = lr.predict(x_train)\n",
- "pred_test = lr.predict(x_test)\n",
- "\n",
- "# calculate train/test accuracy\n",
- "acc_train = accuracy_score(y_train, pred_train)\n",
- "acc_test = accuracy_score(y_test, pred_test)\n",
- "print(\"accuracy train = %f\" % acc_train)\n",
- "print(\"accuracy test = %f\" % acc_test)\n",
- "\n",
- "# plot confusion matrix\n",
- "cm = confusion_matrix(y_test,pred_test)\n",
- "\n",
- "plt.matshow(cm)\n",
- "plt.title(u'Confusion Matrix')\n",
- "plt.colorbar()\n",
- "plt.ylabel(u'Groundtruth')\n",
- "plt.xlabel(u'Predict')\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 3. Multiple recognition problem"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 3.1 Load display data"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 432x432 with 64 Axes>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "import matplotlib.pyplot as plt \n",
- "from sklearn.datasets import load_digits\n",
- "\n",
- "# load data\n",
- "digits = load_digits()\n",
- "\n",
- "# copied from notebook 02_sklearn_data.ipynb\n",
- "fig = plt.figure(figsize=(6, 6)) # figure size in inches\n",
- "fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)\n",
- "\n",
- "# plot the digits: each image is 8x8 pixels\n",
- "for i in range(64):\n",
- " ax = fig.add_subplot(8, 8, i + 1, xticks=[], yticks=[])\n",
- " ax.imshow(digits.images[i], cmap=plt.cm.binary)\n",
- " \n",
- " # label the image with the target value\n",
- " ax.text(0, 7, str(digits.target[i]))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 3.2 Visual characteristics\n",
- "\n",
- "For the problem in machine learing, one good way is to reduce original high dimension to 2-3 dimension by dimension reduction and visual processing. In this way, we can have a preliminary understanding of the data to be processed. The simplist dimension reduction method Principal Component Analysisi(PCA) is introduced.\n",
- "\n",
- "PCA seeks orthogonal linear combinations of features with maximum variance so that we can better understand the structure of the data. At here, we will use Randomized PCA, because it will ahcieve a better computational effenciency when the data number $N$ is relatively large.\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "<matplotlib.colorbar.Colorbar at 0x7f9a151d86d8>"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
|