From 16e70e29f645d68fcfe7ee2384f167d6962169c5 Mon Sep 17 00:00:00 2001 From: Geoff <3062872548@qq.com> Date: Wed, 5 Aug 2020 22:00:23 +0800 Subject: [PATCH] add changes to logestic regression --- 3_kmeans/2-kmeans-color-vq.ipynb | 24 +++---- 3_kmeans/3-ClusteringAlgorithms.ipynb | 13 ++-- 4_logistic_regression/1-Least_squares.ipynb | 2 +- 4_logistic_regression/1-Least_squares_EN.ipynb | 86 ++++++++++++++------------ 4 files changed, 65 insertions(+), 60 deletions(-) diff --git a/3_kmeans/2-kmeans-color-vq.ipynb b/3_kmeans/2-kmeans-color-vq.ipynb index 52351a3..31f99ea 100644 --- a/3_kmeans/2-kmeans-color-vq.ipynb +++ b/3_kmeans/2-kmeans-color-vq.ipynb @@ -4,12 +4,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Color Quantization by K-Means\n", + "# 用K-means进行颜色量化\n", "\n", - "Performs a pixel-wise **Vector Quantization (VQ)** of an image of the summer palace (China), reducing the number of colors required to show the image from 96,615 unique colors to 64, while preserving the overall appearance quality.\n", + "对圆明园的图像进行**像素矢量量化(VQ)**,将显示图像所需的颜色从96,615种减少到64种,同时保持整体外观质量。\n", "\n", - "In this example, pixels are represented in a 3D-space and K-means is used to find 64 color clusters. In the image processing literature, the codebook obtained from K-means (the cluster centers) is called the color palette. Using a single byte, up to 256 colors can be addressed, whereas an RGB encoding requires 3 bytes per pixel. The GIF file format, for example, uses such a palette.\n", "\n", + "在本例中,像素在3d空间中表示,使用K-means找到64个颜色簇。在图像处理文献中,由K-means(聚类中心)得到的码本称为调色板。使用单个字节,最多可以寻址256种颜色,而RGB编码需要每个像素3个字节。例如,GIF文件格式就使用了这样一个调色板。\n", "\n" ] }, @@ -64,15 +64,15 @@ "source": [ "n_colors = 64\n", "\n", - "# Load the Summer Palace photo\n", + "# 加载圆明园的图像\n", "china = load_sample_image(\"china.jpg\")\n", "\n", - "# Convert to floats instead of the default 8 bits integer coding. Dividing by\n", - "# 255 is important so that plt.imshow behaves works well on float data (need to\n", - "# be in the range [0-1])\n", + "# 转化为浮点数而不是默认的8位整数编码。\n", + "# 除以255是重要的这样plt.imshow在浮点数(需要在[0-1]的范围)上的表现会很好 \n", + "\n", "china = np.array(china, dtype=np.float64) / 255\n", "\n", - "# Load Image and transform to a 2D numpy array.\n", + "# 加载图像并转化成2D的numpy数组。\n", "w, h, d = original_shape = tuple(china.shape)\n", "assert d == 3\n", "image_array = np.reshape(china, (w * h, d))\n", @@ -83,7 +83,7 @@ "kmeans = KMeans(n_clusters=n_colors, random_state=0).fit(image_array_sample)\n", "print(\" done in %0.3fs.\" % (time() - t0))\n", "\n", - "# Get labels for all points\n", + "# 获得所有点的标签\n", "print(\"Predicting color indices on the full image (k-means)\")\n", "t0 = time()\n", "labels = kmeans.predict(image_array)\n", @@ -140,7 +140,7 @@ } ], "source": [ - "# draw original image\n", + "# 画出原始图像\n", "plt.figure(1)\n", "plt.clf()\n", "ax = plt.axes([0, 0, 1, 1])\n", @@ -178,7 +178,7 @@ } ], "source": [ - "# 64 VQ image\n", + "# 64 VQ 图像\n", "plt.figure(2)\n", "plt.clf()\n", "ax = plt.axes([0, 0, 1, 1])\n", @@ -206,7 +206,7 @@ } ], "source": [ - "# Random VQ image\n", + "# 随机VQ图像\n", "plt.figure(3)\n", "plt.clf()\n", "ax = plt.axes([0, 0, 1, 1])\n", diff --git a/3_kmeans/3-ClusteringAlgorithms.ipynb b/3_kmeans/3-ClusteringAlgorithms.ipynb index 8d14f1f..6194a9e 100644 --- a/3_kmeans/3-ClusteringAlgorithms.ipynb +++ b/3_kmeans/3-ClusteringAlgorithms.ipynb @@ -4,11 +4,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Comparing different clustering algorithms on toy datasets\n", + "# 在玩具数据集上比较不同的聚类算法\n", "\n", - "This example shows characteristics of different clustering algorithms on datasets that are “interesting” but still in 2D. With the exception of the last dataset, the parameters of each of these dataset-algorithm pairs has been tuned to produce good clustering results. Some algorithms are more sensitive to parameter values than others.\n", - "The last dataset is an example of a ‘null’ situation for clustering: the data is homogeneous, and there is no good clustering. For this example, the null dataset uses the same parameters as the dataset in the row above it, which represents a mismatch in the parameter values and the data structure.\n", - "While these examples give some intuition about the algorithms, this intuition might not apply to very high dimensional data." + "这个例子展示了不同的聚类算法在数据集上的特征,这些数据集虽然有趣但仍然是2D的。除了最后一个数据集以外,每一个数据集的参数都经过调整为了产生更好的效果。一些算法对于参数值比其他算法更加敏感。\n", + "最后一个数据集是一个\"null\"情况下的聚类:数据是同构的,没有良好的聚类。对于本例,null数据集使用与上面一行中的数据集相同的参数,这表示参数值和数据结构不匹配。\n", + "这些例子\n", + "虽然这些例子给出了一些关于算法的直觉,但这种直觉可能不适用于非常高维的数据。" ] }, { @@ -44,8 +45,8 @@ "np.random.seed(0)\n", "\n", "# ============\n", - "# Generate datasets. We choose the size big enough to see the scalability\n", - "# of the algorithms, but not too big to avoid too long running times\n", + "# 生成数据集,我们选择足够大的数据来观察算法的可伸缩性,\n", + "# 但是不能太大以免需要较长的运行时间。\n", "# ============\n", "n_samples = 1500\n", "noisy_circles = datasets.make_circles(n_samples=n_samples, factor=.5,\n", diff --git a/4_logistic_regression/1-Least_squares.ipynb b/4_logistic_regression/1-Least_squares.ipynb index 690605e..c883166 100644 --- a/4_logistic_regression/1-Least_squares.ipynb +++ b/4_logistic_regression/1-Least_squares.ipynb @@ -149,7 +149,7 @@ "A1 = np.array([[S_X2, S_X], \n", " [S_X, N]])\n", "B1 = np.array([S_XY, S_Y])\n", - "\n", + "# numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、求特征值、解线性方程组以及求解行列式等。\n", "coeff = np.linalg.inv(A1).dot(B1)\n", "\n", "print('a = %f, b = %f' % (coeff[0], coeff[1]))\n", diff --git a/4_logistic_regression/1-Least_squares_EN.ipynb b/4_logistic_regression/1-Least_squares_EN.ipynb index 690605e..02b8bd3 100644 --- a/4_logistic_regression/1-Least_squares_EN.ipynb +++ b/4_logistic_regression/1-Least_squares_EN.ipynb @@ -4,24 +4,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# 最小二乘(Generalized Least Squares)\n", + "# Generalized Least Squares\n", "\n", - "## 1. 最小二乘的基本\n", + "## 1. The basis of generalized least squares\n", "\n", - "最小二乘法(generalized least squares)是一种数学优化技术,它通过最小化误差的平方和找到一组数据的最佳函数匹配。 最小二乘法通常用于曲线拟合、求解模型。很多其他的优化问题也可通过最小化能量或最大化熵用最小二乘形式表达。最小二乘原理的一般形式为:\n", + "Generalized least squares is a math optiaml technics, it can find the best functional match for a set of data by minimizing the sum of squares of errors. Generalized Least Squares are usually used in curve fitting, model solving. Many other optimization problem can be represented in generalized least squares by minimizing energy or maximum entropy.\n", + "The general form of generalized least squares is:\n", "$$\n", "L = \\sum (V_{obv} - V_{target}(\\theta))^2\n", "$$\n", - "其中$V_{obv}$是我们观测的多组样本值,$V_{target}$是我们假设拟合函数的输出值,$\\theta$为构造模型的参数。$L$是目标函数,如果通过调整模型参数$\\theta$,使得$L$下降到最小则表明,拟合函数与观测最为接近,也就是找到了最优的模型。\n" + "Among them $V_{obv}$ is the multiple sample values, $V_{target}$ is the output values that we assume to fit the function, $\\theta$ is the parameter that consturcted the model. $L$ is target function, if the $L$ descrease to minimum by adjusting model parameter $\\theta$, fitting function is most close to observation, which means that we found the optimal model.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 1.1 示例\n", + "### 1.1 Demo\n", "\n", - "假设我们有下面的一些观测数据,我们希望找到他们内在的规律。" + "Assume we have the following observation data, we hope to find their inner rules.\n" ] }, { @@ -31,7 +32,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -52,7 +53,6 @@ "\n", "# load data\n", "d = datasets.load_diabetes()\n", - "\n", "X = d.data[:, 2]\n", "Y = d.target\n", "\n", @@ -67,50 +67,50 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 1.2 数学原理\n", - "有$N$个观测数据为:\n", + "### 1.2 Math principle\n", + "There are $N$ observation data:\n", "$$\n", "\\mathbf{X} = \\{x_1, x_2, ..., x_N \\} \\\\\n", "\\mathbf{Y} = \\{y_1, y_2, ..., y_N \\}\n", "$$\n", - "其中$\\mathbf{X}$为自变量,$\\mathbf{Y}$为因变量。\n", + "Among them $\\mathbf{X}$ is the independent variable,$\\mathbf{Y}$is the dependent variable。\n", "\n", - "我们希望找到一个模型能够解释这些数据,假设我们使用最简单的线性模型来拟合数据:\n", + "We hope that we can find a model to explain these data, assuming that we can use the most simple linear model to fit data:\n", "$$\n", "y = ax + b\n", "$$\n", - "那么问题就变成求解参数$a$, $b$能够使得模型输出尽可能和观测数据有比较小的误差。\n", + "Then the problem will be transfer to solve parameter $a$, $b$ can make the output of the model have relatively small error with the observation data as far as possible\n", + "\n", + "How to construct function to evaluate the error between model output and observation data is a key problem, here we use the sum suqare between observation data and model output as the evaluate funciton(also called Loss function)\n", "\n", - "如何构建函数来评估模型输出与观测数据之间的误差是一个关键问题,这里我们使用观测数据与模型输出的平方和来作为评估函数(也被称为损失函数Loss function):\n", "$$\n", "L = \\sum_{i=1}^{N} (y_i - a x_i - b)^2 \\\\\n", "L = \\sum_{i=1}^{N} \\{y_i - (a x_i + b)\\}^2\n", "$$\n", "\n", - "使误差函数最小,那么我们就可以求出模型的参数:\n", + "To minimize loss function, we can get the parameter of model:\n", "$$\n", "\\frac{\\partial L}{\\partial a} = -2 \\sum_{i=1}^{N} (y_i - a x_i - b) x_i \\\\\n", "\\frac{\\partial L}{\\partial b} = -2 \\sum_{i=1}^{N} (y_i - a x_i - b)\n", "$$\n", - "既当偏微分为0时,误差函数为最小,因此我们可以得到:\n", + "When the partial derivative is 0, the error function is the minimum, so we can get:\n", "$$\n", "-2 \\sum_{i=1}^{N} (y_i - a x_i - b) x_i = 0 \\\\\n", "-2 \\sum_{i=1}^{N} (y_i - a x_i - b) = 0 \\\\\n", "$$\n", - "\n", - "将上式调整一下顺序可以得到:\n", + "Adjust the order of upper formula we can get:\n", "$$\n", "a \\sum x_i^2 + b \\sum x_i = \\sum y_i x_i \\\\\n", "a \\sum x_i + b N = \\sum y_i\n", - "$$\n", - "通过求解二元一次方程组,我们即可求出模型的最优参数。" + "$$\\\n", + "By solving two dimensional system of first order equations, we can get the optimal parameter for the model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 1.3 求解程序" + "### 1.3 Program solving" ] }, { @@ -149,7 +149,8 @@ "A1 = np.array([[S_X2, S_X], \n", " [S_X, N]])\n", "B1 = np.array([S_XY, S_Y])\n", - "\n", + "# numpy.linalg module contains function including linear algebra.\n", + "#Using this module, we can calculate inverse matrix and eigen values, solve linear system of equation and caluculate determinant.\n", "coeff = np.linalg.inv(A1).dot(B1)\n", "\n", "print('a = %f, b = %f' % (coeff[0], coeff[1]))\n", @@ -169,46 +170,49 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 2. 如何使用迭代的方法求出模型参数\n", - "\n", - "当数据比较多的时候,或者模型比较复杂,无法直接使用解析的方式求出模型参数。因此更为常用的方式是,通过迭代的方式逐步逼近模型的参数。\n", + "## 2. How to calculate model parameters using iteration method\n", "\n", - "### 2.1 梯度下降法\n", - "在机器学习算法中,对于很多监督学习模型,需要对原始的模型构建损失函数,接下来便是通过优化算法对损失函数进行优化,以便寻找到最优的参数。在求解机器学习参数的优化算法中,使用较多的是基于梯度下降的优化算法(Gradient Descent, GD)。\n", + "When we have too much datas or complicated model, it is difficult to use analytic approach calculate the model parameters. Therefore, the more common way is to approximate the parameter of model using iteration.\n", "\n", - "梯度下降法有很多优点,其中最主要的优点是,在梯度下降法的求解过程中只需求解损失函数的一阶导数,计算的代价比较小,这使得梯度下降法能在很多大规模数据集上得到应用。梯度下降法的含义是通过当前点的梯度方向寻找到新的迭代点。\n", + "### 2.1 Grediant descent method\n", + "In the program of machine learning, for many supervised model, it is needed to build loss function, the next step is to optimise the loss function by optimise algorithm in order to find the optimal parameter.\n", + "In the optimization algorithm that solving machine learining parameters, the commonly used method is the optimization algorithm based on Gradient Descent.\n", "\n", - "梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。\n", + "There are many advantages in Gradient Descent method, the main advantage is that when using Gradient Descent method, we only need to calcualte the first grade deverative of loss function, which has a little computational cost. Therefore, Gradient Descent can be applied in many large dataset. The meaning of Gradient Descent method is to use the current gredient direction to find new iteration point.\n", "\n", + "The basic method of Gradient Descent method is analogous to a descent down a mountain. Assume a scenario: a man was trapped in a mountain, they need to come down from the mountain(i.e. find the lowest point of the moutain, which is the valley). However, beacuse the frog is very dense at the moutain and cause a low visibility. Therefore, the path down the mountain is uncertain, he must use the message that around himself to find the path down the moutain. At this time, he can use Grediant Descent method to help himself down the mountain. To be specifically, based on his current position, ook for the steepest part of this position and then walk towards the down height of the mountain. In the same way, if our goal is to climb the mountain, which is to climb to the top, then we should go upwards toward the steepest direction of the moutain. After a short distance, we can use the same method repeatly and reach the valley successfully in the end.\n", "\n", - "我们同时可以假设这座山最陡峭的地方是无法通过肉眼立马观察出来的,而是需要一个复杂的工具来测量,同时,这个人此时正好拥有测量出最陡峭方向的能力。所以,此人每走一段距离,都需要一段时间来测量所在位置最陡峭的方向,这是比较耗时的。那么为了在太阳下山之前到达山底,就要尽可能的减少测量方向的次数。这是一个两难的选择,如果测量的频繁,可以保证下山的方向是绝对正确的,但又非常耗时,如果测量的过少,又有偏离轨道的风险。所以需要找到一个合适的测量方向的频率,来确保下山的方向不错误,同时又不至于耗时太多!\n", - "\n", + "We can assume the steepest place of the moutain can not be observed immediately and we need a more complicate tool to measure. At the same time, this person happens to have the ability to measure the steepest direction of the moutain. Therefore, after a little distance, it is needed to take a time to measure the steepest direction in current place, which is preety time consuming. In order to arrive at the foot of the moutain, we need to reduce the times to measure the direction as much as possible. This is a dilemma, if we measure frequently, we can assure the direction to go down the mountain is absolutely correct, but it is time consuming, and if measured too little, there is a risk of going off course. So you need to find a suitable frequency to measure the direction of the mountain, to make sure that the direction of the mountain is not wrong, but not too time-consuming!\n", "\n", "![gradient_descent](images/gradient_descent.png)\n", "\n", - "如上图所示,得到了局部最优解。x,y表示的是$\\theta_0$和$\\theta_1$,z方向表示的是花费函数,很明显出发点不同,最后到达的收敛点可能不一样。当然如果是碗状的,那么收敛点就应该是一样的。\n", + "As shown in upper graph, we can get the local optimal solution. x, y represent $\\theta_0$ and $\\theta_1$, z direction represent cost function, it is obvious that when the start point is different, the convergence point that arrived in the end may be different. However, if the cost function is in bowl shape, then we may get the same convergence point.\n", "\n", - "对于某一个损失函数\n", + "For an loss function\n", "$$\n", "L = \\sum_{i=1}^{N} (y_i - a x_i - b)^2\n", "$$\n", "\n", - "我们更新的策略是:\n", + "The strage that we used to update is:\n", "$$\n", "\\theta^1 = \\theta^0 - \\alpha \\triangledown L(\\theta)\n", "$$\n", - "其中$\\theta$代表了模型中的参数,例如$a$, $b$\n", + "Among them $\\theta$ represent the parameter in the model, such as $a$,$b$\n", + "\n", + "The meaning of this formula is: $L$ is a function about $\\theta$, we are at currently at point $\\theta_0$, if we need t go from this point to the minimum point of L, which is the foot of the mountain. Firstly, we need to determine the current direction, which is the inverse direction of the grediant, then we go a step size of distance $\\alpha$, after finish this ditance, we reached at point $\\theta_1$.\n", + "\n", + "Here are some commonly appeared question:\n", "\n", - "此公式的意义是:$L$是关于$\\theta$的一个函数,我们当前所处的位置为$\\theta_0$点,要从这个点走到L的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是$\\alpha$,走完这个段步长,就到达了$\\theta_1$这个点!\n", "\n", - "下面就这个公式的几个常见的疑问:\n", + "* **What is the meaning of $\\alpha$?**\n", + "$\\alpha$ are called learning rate or step size in Grediant descent method, this means that we can control every step distance to make sure lower step to avoid misssing the lowest point. At the same time we need to make sure you don't walk so slowly that the sun goes down before you reach the foot of the mountain. So the choice of $\\alpha$is often important in gradient descent.\n", "\n", - "* **$\\alpha$是什么含义?**\n", - "$\\alpha$在梯度下降算法中被称作为学习率或者步长,意味着我们可以通过$\\alpha$来控制每一步走的距离,以保证不要步子跨的太大,错过了最低点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以$\\alpha$的选择在梯度下降法中往往是很重要的。\n", "![gd_stepsize](images/gd_stepsize.png)\n", "\n", - "* **为什么要梯度要乘以一个负号?**\n", - "梯度前加一个负号,就意味着朝着梯度相反的方向前进!梯度的方向实际就是函数在此点上升最快的方向,而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号。\n", + "* **Why the grediant need to multiply a minus sign?**\n", + "\n", + "A minus sign before means towards the inverse direction of grediant. The direction of grediant is actually the direction in which the function rises most rapidly at this point, while we need to go according to the direction decrese most whcih is the inverse direction of the gredient, therefore we need to add minus sign.\n", + "\n", "\n" ] },