|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551 |
- {
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 逻辑回归\n",
- "\n",
- "逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数,使得逻辑回归模型能够输出类别的概率。逻辑回归的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计。\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1. 什么是回归\n",
- "\n",
- "一说回归最先想到的是终结者那句:I'll be back\n",
- "\n",
- "regress中,re表示back,gress等于go,数值go back to mean value,也就是I'll be back 的意思\n",
- "\n",
- "在数理统计中,回归是确定多种变量相互依赖的定量关系的方法\n",
- "\n",
- "> 通俗理解:越来越接近期望值的过程,***回归*** 于事物的本质\n",
- "\n",
- "最简单的回归是线性回归(Linear Regression),也就是通过最小二乘等方法得到模型的参数。线性回归假设输出变量是若干输出变量的线性组合,并根据这一关系求解线性组合中的最优系数。\n",
- "\n",
- "通俗理解:输出一个线性函数,例如$y=f(x; \\theta)$,通过寻找最优的参数$\\theta$使得观测数据与模型数据相吻合。\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "## 2. 逻辑回归模型\n",
- "回归是一种比较容易理解的模型,就相当于$y=f(x)$,表明自变量$x$与因变量$y$的关系。\n",
- "\n",
- "以常见的看医举例,医生治病时的望、闻、问、切,之后判定病人是否生病或生了什么病,其中的望闻问切就是获取自变量$x$,即特征数据,判断是否生病就相当于获取因变量$y$,即预测分类。$X$为数据点——肿瘤的大小,$Y$为观测值——是否是恶性肿瘤。通过构建线性回归模型,如$h_\\theta(x)$所示,构建线性回归模型后,即可以根据肿瘤大小,预测是否为恶性肿瘤$h_\\theta(x)) \\ge 0.5$为恶性,$h_\\theta(x) \\lt 0.5$为良性。\n",
- "\n",
- "\n",
- "\n",
- "然而线性回归的鲁棒性很差,例如在上图的数据集上建立回归,因最右边噪点的存在,使回归模型在训练集上表现都很差。这主要是由于线性回归在整个实数域内敏感度一致,而分类范围,需要在$[0,1]$。\n",
- "\n",
- "逻辑回归就是一种减小预测范围,将预测值限定为$[0,1]$间的一种回归模型,其回归方程与回归曲线如下图所示。逻辑曲线在$z=0$时,十分敏感,在$z>>0$或$z<<0$处,都不敏感,将预测值限定为$(0,1)$。\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "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.savefig(\"fig-res-logstic_fuction.pdf\")\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 2.1 逻辑回归表达式\n",
- "\n",
- "这个函数称为Logistic函数(Logistic Function),也称为Sigmoid函数(Sigmoid Function)。函数公式如下:\n",
- "\n",
- "$$\n",
- "g(z) = \\frac{1}{1+e^{-z}}\n",
- "$$\n",
- "\n",
- "Logistic函数:\n",
- "* 当$z$趋近于无穷大时,$g(z)$趋近于1;\n",
- "* 当$z$趋近于无穷小时,$g(z)$趋近于0。\n",
- "\n",
- "Logistic函数的图形如上图所示。Logistic函数求导时有一个特性,这个特性将在下面的推导中用到,这个特性为:\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",
- "$$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数映射,即先把特征线性求和,然后使用函数$g(z)$将做为假设函数来预测。$g(z)$可以将连续值映射到0到1之间。线性回归模型的表达式带入$g(z)$,就得到逻辑回归的表达式:\n",
- "\n",
- "$$\n",
- "h_\\theta(x) = g(\\theta^T x) = \\frac{1}{1+e^{-\\theta^T x}}\n",
- "$$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 2.2 逻辑回归的软分类\n",
- "\n",
- "现在我们将y的取值$h_\\theta(x)$通过Logistic函数归一化到(0,1)间,$y$的取值有特殊的含义,它表示结果取1的概率,因此对于输入$x$分类结果为类别1和类别0的概率分别为:\n",
- "\n",
- "$$\n",
- "P(y=1|x,\\theta) = h_\\theta(x) \\\\\n",
- "P(y=0|x,\\theta) = 1 - h_\\theta(x)\n",
- "$$\n",
- "\n",
- "对上面的表达式合并一下就是:\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": [
- "### 2.3 梯度上升\n",
- "\n",
- "得到了逻辑回归的表达式,下一步跟线性回归类似,构建似然函数,然后最大似然估计,最终推导出$\\theta$的迭代更新表达式。只不过这里用的不是梯度下降,而是梯度上升,因为这里是最大化似然函数。\n",
- "\n",
- "假设训练样本相互独立,那么似然函数表达式为:\n",
- "\n",
- "\n",
- "同样对似然函数取log,转换为:\n",
- "\n",
- "\n",
- "转换后的似然函数对$\\theta$求偏导,在这里我们以只有一个训练样本的情况为例:\n",
- "\n",
- "\n",
- "这个求偏导过程中:\n",
- "* 第一步是对$\\theta$偏导的转化,依据偏导公式:$y=lnx$, $y'=1/x$。\n",
- "* 第二步是根据$g(z)$求导的特性$g'(z) = g(z)(1 - g(z))$ 。\n",
- "* 第三步就是普通的变换。\n",
- "\n",
- "这样我们就得到了梯度上升每次迭代的更新方向,那么$\\theta$的迭代表达式为:\n",
- "$$\n",
- "\\theta = \\theta + \\eta (y^i - h_\\theta(x^i)) x_j^i\n",
- "$$\n",
- "\n",
- "其中$\\eta$是学习速率。"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 1.4 示例程序"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [],
- "source": [
- "%matplotlib inline\n",
- "\n",
- "#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": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Text(0.5, 1.0, 'Original Data')"
- ]
- },
- "execution_count": 6,
- "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",
- "plt.scatter(data[:,0], data[:,1], c=label)\n",
- "plt.savefig(\"fig-res-logistic_train_data.pdf\")\n",
- "plt.title(\"Original Data\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "def plot_decision_boundary(predict_func, data, label, figName=None):\n",
- " \"\"\"画出结果图\n",
- " Args:\n",
- " pred_func (callable): 预测函数\n",
- " data (numpy.ndarray): 训练数据集合\n",
- " label (numpy.ndarray): 训练数据标签\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",
- " if figName != None: plt.savefig(figName)\n",
- " plt.show()\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [],
- "source": [
- "\n",
- "def sigmoid(x):\n",
- " return 1.0 / (1 + np.exp(-x))\n",
- "\n",
- "class Logistic(object):\n",
- " \"\"\"logistic回归模型\"\"\"\n",
- " def __init__(self, data, label):\n",
- " self.data = data\n",
- " self.label = label\n",
- "\n",
- " # parameters\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",
- " \"\"\"随机梯度上升算法\n",
- " Args:\n",
- " num_iteration (int): 迭代次数\n",
- " \"\"\"\n",
- " # 学习速率\n",
- " alpha = 0.01\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",
- " rand_index = int(np.random.uniform(0, len(data_index)))\n",
- " error = self.label[rand_index] - \\\n",
- " 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",
- " \"\"\"预测函数\"\"\"\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": 9,
- "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, \"logistic_pred_res.pdf\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 3. 如何用sklearn解决逻辑回归问题?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "accuracy train = 0.816667\n",
- "accuracy test = 0.850000\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": [
- "%matplotlib inline\n",
- "\n",
- "import sklearn.datasets\n",
- "from sklearn.linear_model import LogisticRegression\n",
- "from sklearn.metrics import confusion_matrix\n",
- "from sklearn.metrics import accuracy_score\n",
- "import matplotlib.pyplot as plt\n",
- "\n",
- "# 生成模拟数据\n",
- "data, label = sklearn.datasets.make_moons(200, noise=0.30)\n",
- "\n",
- "# 计算得到训练、测试数据个数\n",
- "N = len(data)\n",
- "N_train = int(N*0.6)\n",
- "N_test = N - N_train\n",
- "\n",
- "# 分割成训练、测试数据\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",
- "# 进行逻辑回归\n",
- "lr = LogisticRegression()\n",
- "lr.fit(x_train,y_train)\n",
- "\n",
- "# 预测\n",
- "pred_train = lr.predict(x_train)\n",
- "pred_test = lr.predict(x_test)\n",
- "\n",
- "# 计算训练/测试精度\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",
- "# 绘制混淆矩阵\n",
- "cm = confusion_matrix(y_test,pred_test)\n",
- "\n",
- "plt.matshow(cm)\n",
- "plt.title('Confusion Matrix')\n",
- "plt.colorbar()\n",
- "plt.ylabel('Groundtruth')\n",
- "plt.xlabel(u'Predict')\n",
- "plt.savefig('fig-res-logistic_confusion_matrix.pdf')\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 4. 多类识别问题"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 4.1 加载显示数据"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "scrolled": false
- },
- "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": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(1797, 64)\n",
- "accuracy train = 1.000000, accuracy_test = 0.905556\n",
- "score_train = 1.000000, score_test = 0.905556\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/home/bushuhui/anaconda3/envs/dl/lib/python3.7/site-packages/sklearn/linear_model/_logistic.py:765: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
- "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
- "\n",
- "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
- " https://scikit-learn.org/stable/modules/preprocessing.html\n",
- "Please also refer to the documentation for alternative solver options:\n",
- " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
- " extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)\n"
- ]
- }
- ],
- "source": [
- "from sklearn.datasets import load_digits\n",
- "from sklearn.linear_model import LogisticRegression\n",
- "from sklearn.metrics import accuracy_score\n",
- "from sklearn.manifold import Isomap\n",
- "\n",
- "import matplotlib.pyplot as plt \n",
- "\n",
- "# 加载示例数据\n",
- "digits, dig_label = load_digits(return_X_y=True)\n",
- "print(digits.shape)\n",
- "\n",
- "# 计算训练/测试数据个数\n",
- "N = len(digits)\n",
- "N_train = int(N*0.8)\n",
- "N_test = N - N_train\n",
- "\n",
- "# 分割训练/测试数据集\n",
- "x_train = digits[:N_train, :]\n",
- "y_train = dig_label[:N_train]\n",
- "x_test = digits[N_train:, :]\n",
- "y_test = dig_label[N_train:]\n",
- "\n",
- "# 进行逻辑回归分类\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",
- "# 计算测试、训练精度\n",
- "acc_train = accuracy_score(y_train, pred_train)\n",
- "acc_test = accuracy_score(y_test, pred_test)\n",
- "print(\"accuracy train = %f, accuracy_test = %f\" % (acc_train, acc_test))\n",
- "\n",
- "score_train = lr.score(x_train, y_train)\n",
- "score_test = lr.score(x_test, y_test)\n",
- "print(\"score_train = %f, score_test = %f\" % (score_train, score_test))\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 4.2 可视化特征\n",
- "\n",
- "针对机器学习的问题,一个比较好的方法是通过降维的方法将原始的高维特征降到2-3维并可视化处理,通过这样的方法可以对所要处理的数据有一个初步的认识。这里介绍最简单的降维方法主成分分析(Principal Component Analysis, PCA)。PCA寻求具有最大方差的特征的正交线性组合,因此可以更好地了解数据的结构。在这里,我们将使用Randomized PCA,因为当数据个数$N$比较大时,计算的效率更好。\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
|