|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555 |
- {
- "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": 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.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": 2,
- "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": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Text(0.5, 1.0, 'Original Data')"
- ]
- },
- "execution_count": 3,
- "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": 4,
- "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": 7,
- "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",
- " FIXME: change to same API to sklean\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",
- " \n",
- " error = self.label[rand_index] - \\\n",
- " sigmoid(sum(self.data[rand_index] * self.weights + self.b))\n",
- " \n",
- " self.weights += alpha * error * self.data[rand_index]\n",
- " self.b += alpha * error\n",
- " \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": 8,
- "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": 10,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "accuracy train = 0.891667\n",
- "accuracy test = 0.825000\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQYAAAD4CAYAAAAO2kjhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAWjklEQVR4nO3df5RcdX3/8ecr4UdQAhKCNEYgnIq0FCVovlaxWqBFg7XFVm2LlqKlRVvx2yqtou3XX7U/PPVXf6A9sVAoWKwiVgoIIsJBxApJGpCAiILUQCQECiZIQ7L7+v5x7+rs7GbnzmZm7p2d1+Oce3bunTufee+enfd8ft3PlW0iIlrNqzuAiGieJIaImCKJISKmSGKIiCmSGCJiiiSGiJgiiaEBJO0l6T8kPSrpM7tQzmslfbGXsdVB0hcknVp3HKMsiaELkl4jabWkrZI2lv/AP9eDol8FHAjsb/vVsy3E9idtv6QH8Uwi6VhJlvS5tuNHlcevq1jOeyRd2Ok82yfaPn+W4UYPJDFUJOmtwEeBv6T4EB8MfAw4qQfFHwJ8y/aOHpTVLw8CL5C0f8uxU4Fv9eoNVMj/ZBPYztZhA/YFtgKvnuGcPSkSx/3l9lFgz/K5Y4ENwJnAJmAj8PryufcCTwDby/c4DXgPcGFL2csAA7uV+68D7ga2APcAr205fkPL644BbgYeLX8e0/LcdcCfA18ty/kisHgnv9tE/P8IvKk8Nh+4D3gXcF3LuX8LfA/4AbAGeFF5fGXb73lLSxx/UcbxOPCM8tjvls9/HPhsS/kfAK4BVPf/xVzekp2reQGwAPjcDOf8KfB8YDlwFPA84M9anv8JigSzlOLDf7ak/Wy/m6IW8m+297Z9zkyBSHoy8HfAibYXUnz4101z3iLg8vLc/YEPA5e3feO/Bng98FRgD+CPZ3pv4F+A3y4fvxS4jSIJtrqZ4m+wCPhX4DOSFti+su33PKrlNacApwMLgXvbyjsTeJak10l6EcXf7lSXWSL6I4mhmv2BzZ65qv9a4H22N9l+kKImcErL89vL57fbvoLiW/PwWcYzDhwpaS/bG22vn+acXwLusn2B7R22LwK+Cfxyyzn/bPtbth8HPk3xgd4p2zcCiyQdTpEg/mWacy60/VD5nh+iqEl1+j3Ps72+fM32tvJ+SPF3/DBwIfBm2xs6lBe7KImhmoeAxZJ2m+GcpzH52+7e8tiPymhLLD8E9u42ENuPAb8BvBHYKOlyST9VIZ6JmJa27H9/FvFcAJwBHMc0NShJfyzpjnKE5RGKWtLiDmV+b6YnbX+doukkigQWfZbEUM3XgG3AK2Y4536KTsQJBzO1ml3VY8CTWvZ/ovVJ21fZPgFYQlEL+ESFeCZium+WMU24APgD4Iry2/xHyqr+24BfB/az/RSK/g1NhL6TMmdsFkh6E0XN4/6y/JiGpAWSbpJ0i6T1kt5bHj9P0j2S1pXb8k5lzfQNGCXbj0p6F0W/wA6KjrrtwC8Cx9l+G3AR8GeSbqb4R38XRdV3NtYBb5d0MMUH6x0TT0g6kKIv40sUnXVbKZoW7a4A/l7Sayi+ZV8JHAFcNsuYALB9j6Sfp/gGb7cQ2EExgrGbpLOAfVqefwA4QdI829PFPIWkZwLvp+gA/SFwk6Qv2F43+99iztoGHG97q6TdgRskfaF87k9sX1y1oNQYKirby2+l6FB8kKL6ewbw7+Up7wdWA7cC3wDWlsdm815XA/9WlrWGyR/meWUc9wMPAz8P/P40ZTwEvJyi8+4him/al9vePJuY2sq+wfZ0taGrgCsphjDvBf6Xyc2EiclbD0la2+l9yqbbhcAHbN9i+y7gncAFkvbcld9hLnJha7m7e7nNqpNW6dyNmDskzaf4MnkGcLbtt0s6j2JkbRvFUO9ZtrfNWE4SQ0R9Xnrck7z54UqtKtbeum09RS1swirbq6Y7V9JTKDqH30xRY/w+xZD0KuA7tt8303uljyGiRpsfHuPGK5d2PhFY8LR7/tf2iirn2n5E0rXAStsfLA9vk/TPdJ6vkj6GiDoZGMeVtk4kHVDWFJC0F3AC8E1JS8pjohhZu61TWakxRNRsfNpBpVlZApxf9jPMAz5t+zJJX5Z0AMWw8TqKOTAzSmKIqJExYz3q57N9K3D0NMeP77asNCVmSdJKSXdK+nY5Xh89JOlcSZskdaz2DrteNSV6KYlhFsqq2tnAiRSThk6WdES9Uc0551FckTmnGRjDlbZBSlNidp4HfNv23QCSPkWxLsPttUY1h9i+XtKyuuPoNwPbq00CHajUGGZnKZNn9G1g8sVJEZWNV9wGKTWGiBq5hmZCFUkMs3MfcFDL/tPZ9asWYxQZxpqXF9KUmKWbgcMkHSppD+A3gUtrjimGUDHBqXlNiSSGWSgXXDmD4mrCOygmkky3ilLMkqSLKNbBOFzSBkmn1R1Tf4ixitsgpSkxS+XybFfUHcdcZfvkumMYBAPjDWxKJDFE1MjAEw2suCcxRNRs3INtJlSRxBBRo2LmYxJDRLQwYixNiYho18SmRPNS1RCRdHrdMcx1c/1vPNGUaNpwZRLDrpnT/7QNMcf/xmLM8yptg5SmRESNDGxnft1hTNGoxLB40XwvO2j3usOo7OClu7HiqAUNnJ6yc3fdsU/nkxpkwfy92XePpw7V3/jxHVt4YvzxSnV/WwOvDVTRqMSw7KDduemqgzqfGLP2S895ad0hzHk3bu7u9prjGa6MiFZF52NqDBExSZoSEdGmuOw6iSEi2ow1cIJTEkNEjYzY7uZ9DJsXUcQISedjRExhlKZEREyVzseImMQmw5UR0U6Z+RgRkxl4okejEpIWANcDe1J8ti+2/W5JhwKfAvYH1gCn2H5iprKaV4eJGCFGjLvaVsE24HjbRwHLgZWSng98APiI7WcA/wN0XIo/iSGiZmPMq7R14sLWcnf3cjNwPHBxefx84BWdykpiiKhRcV+JeZW2KiTNl7QO2ARcDXwHeKS8SRJUvAFz+hgiatXVsm2LJa1u2V9le1XrCbbHgOWSngJ8Dvip2USVxBBRo4kaQ0Wbba+oVK79iKRrgRcAT5G0W1lrqHQD5jQlImrWq8VgJR1Q1hSQtBdwAsW9Va8FXlWedirw+U5lpcYQUSNbbB/v2cdwCXC+pPkUX/qftn2ZpNuBT0l6P/BfwDmdCkpiiKhRsR5DbyY42b4VOHqa43cDz+umrCSGiFplBaeIaFN0PmZKdES0yXoMETHJxJTopkliiKhZ1mOIiEls2D6exBARLYqmRBJDRLQZ9C3uq0hiiKhRhisjYhppSkTENLLmY0RMUqwSncQQES2M2DE+v+4wpkhiiKhZmhIRMUlGJSJiWhmViIjJqt8zYqCSGCJq1MsVnHopiSGiZqkxRMQkBnY08OrKvkYkaaWkOyV9W9JZ/XyviGHU43tX9kzfEkO5hPXZwInAEcDJko7o1/tFDKtxVGkbpH7WGJ4HfNv23eUttz8FnNTH94sYPqaRNYZ+9jEsBb7Xsr8B+Nk+vl/E0MkEp52QdDpwOsDBS2sPJ2LgRi0x3Acc1LI/7c00y7v1rgJYcdQC9zGeiMYxYmzERiVuBg6TdKikPYDfBC7t4/tFDKUmdj72rcZge4ekM4CrgPnAubbX9+v9IoaRPXpNCWxfAVzRz/eIGHYetcQQEZ008yKq5vV6RIwYW5W2TiQdJOlaSbdLWi/pD8vj75F0n6R15fayTmWlxhBRox7PY9gBnGl7raSFwBpJV5fPfcT2B6sWlMQQUaceLgZreyOwsXy8RdIdFBMNu5amRESNTO+aEq0kLQOOBr5eHjpD0q2SzpW0X6fXJzFE1KqrqysXS1rdsp0+bYnS3sBngT+y/QPg48BPAsspahQf6hRVmhIRNXP1+b6bba+Y6QRJu1MkhU/avqQo3w+0PP8J4LJOb5QaQ0TNejgqIeAc4A7bH245vqTltF8FbutUVmoMETWyezrB6YXAKcA3JK0rj72TYi2U5RRdGt8F3tCpoCSGiJr1arjS9g0w7UUVXc8+TmKIqNn4ePNmPlZKDJL2BF4JLGt9je339SesiNFguh+KHISqNYbPA48Ca4Bt/QsnYvQ0cRGSqonh6bZX9jWSiFHU287Hnqk6XHmjpGf1NZKIUeWK2wDNWGOQ9A2KkHYDXi/pboqmhADbfnb/Q4yY25pYY+jUlHj5QKKIGGFdzHwcmBkTg+17ASRdYPuU1uckXUAxmSIiZskGN3Ax2Kqdjz/TulPeZeq5vQ8nYvQ0scYwY6qS9A5JW4BnS/qBpC3l/iaKIcyI2FUN7HycMTHY/ivbC4G/sb2P7YXltr/tdwwoxog5rNoFVIPuoKzalPiCpBe3H7R9fY/jiRg9DWxKVE0Mf9LyeAHFDWvXAMf3PKKIUdLQCU6VEoPtX27dl3QQ8NF+BBQxcoa4xtBuA/DTvQwkYmQNa41B0t/z47w2j2LtuLV9iilitAxxjWF1y+MdwEW2v9qHeCJGixnOGkM5mekltl87gHgiRs7QTXACsD0GHFLeyj4ieq2BE5yqNiXuBr4q6VLgsYmDrSvRRsQsDWNTovSdcpsHLCyPNbACFDFkDBqvO4ipqiaG221/pvWApFf3IZ6IEaNG1hiqXu853XURuVYioheGrY9B0onAy4Clkv6u5al9KIYtI2JXNbBR3qkpcT/FNRG/Uv6csAV4S7+Cihgpw5YYbN8C3CLpk7a3DyimiNExjBOcWhaDpbhf5mRZDDZi12nYagz8eDHYN5U/Lyh//haNrABFDKEGfpKqLgZ7gu2jW556u6S1wFm9DOZbtz6Jlz5teS+LjDa/fefqzifFLvnmr/2wq/ObWGOoOlwpSS9s2Tmmi9dGxEysalsHkg6SdK2k2yWtl/SH5fFFkq6WdFf5c79OZVX9cJ8GfEzSdyXdC3wM+J2Kr42Inak6h6FarWIHcKbtI4DnA2+SdARFzf4a24cB11Chpl91Bac1wFGS9i33H60UZkR01qOmhO2NwMby8RZJdwBLgZOAY8vTzgeuA94+U1lVF2rZE3glsAzYbWKEwvb7ug0+IibrRx+DpGXA0cDXgQPLpAHwfeDATq+veq3E54FHKSY5bes+zIjYqeqJYbGk1t7jVbZXtZ8kaW/gs8Af2f5B61QD25Y6p6KqieHptldWPDciKlJ3V1dutr1ixvKk3SmSwidtX1IefkDSEtsbJS2huGHUjKp2Pt4o6VkVz42IbvRuVELAOcAdbWulXAqcWj4+lQp3kataY/g54HWS7qFoSoiiVpKZjxG7qnd9DC+kuNH0NyStK4+9E/hr4NOSTgPuBX69U0FVE8OJswgyIiroVeej7RsovrSn8wvdlFU1MTRwblbEHNHAT1fVxHA5RfiiuEXdocCdwM/0Ka6I0eBmTomuOsFpUsejpOcAf9CXiCJGzbAmhna210r62V4HEzGKhnYxWElvbdmdBzyHYnWniJiDqtYYFrY83kHR5/DZ3ocTMYKGtSlh+73wo6mW2N7az6AiRkZDOx8rzXyUdKSk/wLWA+slrZF0ZH9DixgRDVw+vuqU6FXAW20fYvsQ4MzyWETsqgYmhqp9DE+2fe3Eju3rJD25TzFFjAzRzKZE5ZvaSvp/TF4M9u7+hBQxQhp678qqTYnfAQ4ALqEYjVhMlnaL6I1hbEpImg9cYvu4AcQTMXoa2JToWGOwPQaMT6z3GBG9JVfbBqlqH8NWimu8rwYemzho+//2JaqIUdLAGkPVxHBJucGPf43m3XAvYtjU0H9QRad7V55Esd7j2eX+TRSdkKbD8tMRUc0wjkq8jWK9uAl7AM+lWKP+jX2KKWKkDGMfwx62v9eyf4Pth4GHM8EpokeGrSkBTLrHne0zWnYP6H04ESOmoX0MnZoSX5f0e+0HJb0BuKk/IUWMDnWxDVKnGsNbgH+X9BpgbXnsucCewCv6GFfE6GhgjWHGxGB7E3CMpOP58cKvl9v+ct8jixgRQ3sRVZkIkgwi+qGBw5WzWgw2InqkoSs4JTFE1C2JISLapcYQEVMlMUREu9QYImKyIZ35GBF9JIqrK6tslcqTzpW0SdJtLcfeI+k+SevK7WWdykliiKhbb9d8PA9YOc3xj9heXm5XdCqkb4lhuswVEVPJrrRVYft64OFdjamfNYbzmD5zRcSEqrWFXe+HOEPSreUX9n6dTu5bYuhV5oqY67pYqGWxpNUt2+kV3+LjwE8Cy4GNwIc6vSCjEhF1q14b2Gx7RdfF2w9MPJb0CeCyTq+pvfNR0ukTGXA72+oOJ2Lg+r20m6QlLbu/CnTs96u9xmB7FeUNcvfRogaO6Eb0UY9vUSfpIoo1WRdL2gC8GzhW0vLi3fgu8IZO5dSeGCJGXg+/Dm2fPM3hc7otp5/DlRcBXwMOl7RB0mn9eq+IYTVxt+thWyV61naSuSKiXcU5CoOUpkREzXIRVURM1tCLqJIYImrWxFvUJTFE1CyJISImM+l8jIip0vkYEVMlMUREq4kJTk2TxBBRJzt9DBExVUYlImKKNCUiYjID483LDEkMEXVrXl5IYoioW5oSETFVRiUiol1qDBExiQxK52NETJF5DBHRrurt5wYpiSGiTlnBKSKmyrUSETGNjEpExFSpMUTEJAaNJTFERLvm5YUkhoi6ZbgyIqZqYGLo201tI6ICU8x8rLJVIOlcSZsk3dZybJGkqyXdVf7cr1M5SQwRNRJGrrZVdB6wsu3YWcA1tg8Drin3Z5TEEFG3iQVhO22VivL1wMNth08Czi8fnw+8olM56WOIqJOB/g9XHmh7Y/n4+8CBnV6QxBBRsy6aCYslrW7ZX2V7VTfvZdtS57mWSQwRdaueGDbbXjGLd3hA0hLbGyUtATZ1ekH6GCJqVbF/YdeGNC8FTi0fnwp8vtMLkhgi6jRxt+seJQZJFwFfAw6XtEHSacBfAydIugv4xXJ/RmlKRNSthys42T55J0/9QjflJDFE1CxToiNiMgNjzVv0MYkholZZwamjLfzP5i/54nvrjqMLi4HNdQfRjS89s+4IujZ0f2PgkK7OTmKYme0D6o6hG5JWz3JcOSoaib9xEkNETJK7XUfEVAan83Gu6WqeeszK3P4bN3RUIjMfd0G3F7D0gqQxSesk3SbpM5KetAtlnSfpVeXjf5J0xAznHivpmNm+12zV8TceuP5Pie5aEsPwedz2cttHAk8Ab2x9UtKsaoG2f9f27TOcciww8MQwEpIYose+Ajyj/Db/iqRLgdslzZf0N5JulnSrpDcAqPAPku6U9CXgqRMFSbpO0ory8UpJayXdIukaScsoEtBbytrKiwb/q85VA7mIqmvpYxhSZc3gRODK8tBzgCNt3yPpdOBR2/9H0p7AVyV9ETgaOBw4gmKxjtuBc9vKPQD4BPDisqxFth+W9I/AVtsfHMgvOCoMjDevjyGJYfjsJWld+fgrwDkUVfybbN9THn8J8OyJ/gNgX+Aw4MXARbbHgPslfXma8p8PXD9Rlu32ZcKi1zKPIXrgcdvLWw9IAnis9RDwZttXtZ33sr5HF91rYGJIH8PcdBXw+5J2B5D0TElPBq4HfqPsg1gCHDfNa/8TeLGkQ8vXLiqPbwEW9j/0EWPjsbFK2yClxjA3/ROwDFirojrxIMXKwJ8DjqfoW/hvigU9JrH9YNlHcYmkeRTLgJ0A/AdwsaSTKGojXxnA7zEaGjjzUW5gNSZiVOy72wF+wcKTKp171SPnrBnUdSOpMUTUyc6oRERMo4G19iSGiJo5NYaImCwrOEVEOwMDHoqsIokhokYG3MDhyiSGiDo5C7VExDRSY4iIqRpYY8jMx4gaSbqSYon8KjbbXtnPeCYkMUTEFLm6MiKmSGKIiCmSGCJiiiSGiJgiiSEipvj/xGX+BfMFGU4AAAAASUVORK5CYII=\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": 11,
- "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": 12,
- "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": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
|