梯度下降(Gradient Descent)小结

梯度下降(Gradient Descent)小结

    在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。这里就对梯度下降法做一个完整的总结。

1. 梯度

    在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。对于在点(x0,y0)的具体梯度向量就是(∂f/∂x0, ∂f/∂y0)T.或者▽f(x0,y0),如果是3个参数的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此类推。

    那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数f(x,y),在点(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。

     

2. 梯度下降与梯度上升

    在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。

    梯度下降法和梯度上升法是可以互相转化的。比如我们需要求解损失函数f(θ)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数 -f(θ)的最大值,这时梯度上升法就派上用场了。

    下面来详细总结下梯度下降法。        

3. 梯度下降法算法详解

3.1 梯度下降的直观解释

    首先来看看梯度下降的一个直观的解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。

    从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

3.2 梯度下降的相关概念

    在详细了解梯度下降的算法之前,我们先看看相关的一些概念。

    1. 步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。

    2.特征(feature):指的是样本中输入部分,比如2个单特征的样本

<script type="math/tex" id="MathJax-Element-1">(x^{(0)},y^{(0)}),(x^{(1)},y^{(1)})</script>

,则第一个样本特征为

<script type="math/tex" id="MathJax-Element-2">x^{(0)}</script>

,第一个样本输出为

<script type="math/tex" id="MathJax-Element-3">y^{(0)}</script>

    3. 假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为

<script type="math/tex" id="MathJax-Element-4">h_{\theta}(x)</script>

。比如对于单个特征的m个样本

<script type="math/tex" id="MathJax-Element-5">(x^{(i)},y^{(i)})(i=1,2,...m)</script>

,可以采用拟合函数如下:

<script type="math/tex" id="MathJax-Element-6">h_{\theta}(x) = \theta_0+\theta_1x</script>

    4. 损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本

<script type="math/tex" id="MathJax-Element-7">(x_i,y_i)(i=1,2,...m)</script>

,采用线性回归,损失函数为:

             

<script type="math/tex" id="MathJax-Element-8">J(\theta_0, \theta_1) = \sum\limits_{i=1}^{m}(h_\theta(x_i) - y_i)^2</script>

     其中

<script type="math/tex" id="MathJax-Element-9">x_i</script>

表示第i个样本特征,

<script type="math/tex" id="MathJax-Element-10">y_i</script>

表示第i个样本对应的输出,

<script type="math/tex" id="MathJax-Element-11">h_\theta(x_i)</script>

为假设函数。   

3.3 梯度下降的详细算法

    梯度下降法的算法可以有代数法和矩阵法(也称向量法)两种表示,如果对矩阵分析不熟悉,则代数法更加容易理解。不过矩阵法更加的简洁,且由于使用了矩阵,实现逻辑更加的一目了然。这里先介绍代数法,后介绍矩阵法。

 

3.3.1 梯度下降法的代数方式描述

    1. 先决条件: 确认优化模型的假设函数和损失函数。

    比如对于线性回归,假设函数表示为 

<script type="math/tex" id="MathJax-Element-12">h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}</script>

, 其中

<script type="math/tex" id="MathJax-Element-13">\theta_i </script>

(i = 0,1,2... n)为模型参数,

<script type="math/tex" id="MathJax-Element-14">x_i </script>

(i = 0,1,2... n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征

<script type="math/tex" id="MathJax-Element-15">x_0 = 1 </script>

,这样

<script type="math/tex" id="MathJax-Element-16">h_\theta(x_0, x_1, ...x_n) = \sum\limits_{i=0}^{n}\theta_{i}x_{i}</script>

    同样是线性回归,对应于上面的假设函数,损失函数为:

           

<script type="math/tex" id="MathJax-Element-17">J(\theta_0, \theta_1..., \theta_n) = \frac{1}{2m}\sum\limits_{j=0}^{m}(h_\theta(x_0^{(j)}, x_1^{(j)}, ...x_n^{(j)}) - y_j)^2</script>

 

    2. 算法相关参数初始化:主要是初始化

<script type="math/tex" id="MathJax-Element-18">\theta_0, \theta_1..., \theta_n</script>

,算法终止距离

<script type="math/tex" id="MathJax-Element-19">\varepsilon</script>

以及步长

<script type="math/tex" id="MathJax-Element-20">\alpha</script>

。在没有任何先验知识的时候,我喜欢将所有的

<script type="math/tex" id="MathJax-Element-21">\theta</script>

初始化为0, 将步长初始化为1。在调优的时候再 优化。

    3. 算法过程:

      1)确定当前位置的损失函数的梯度,对于

<script type="math/tex" id="MathJax-Element-22">\theta_i</script>

,其梯度表达式如下:

        

<script type="math/tex" id="MathJax-Element-23">\frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)</script>

      2)用步长乘以损失函数的梯度,得到当前位置下降的距离,即

<script type="math/tex" id="MathJax-Element-24">\alpha\frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)</script>

对应于前面登山例子中的某一步。

      3)确定是否所有的

<script type="math/tex" id="MathJax-Element-25">\theta_i</script>

,梯度下降的距离都小于

<script type="math/tex" id="MathJax-Element-26">\varepsilon</script>

,如果小于

<script type="math/tex" id="MathJax-Element-27">\varepsilon</script>

则算法终止,当前所有的

<script type="math/tex" id="MathJax-Element-28">\theta_i</script>

(i=0,1,...n)即为最终结果。否则进入步骤4.

      4)更新所有的

<script type="math/tex" id="MathJax-Element-29">\theta</script>

,对于

<script type="math/tex" id="MathJax-Element-30">\theta_i</script>

,其更新表达式如下。更新完毕后继续转入步骤1.

        

<script type="math/tex" id="MathJax-Element-31">\theta_i = \theta_i - \alpha\frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)</script>

    下面用线性回归的例子来具体描述梯度下降。假设我们的样本是

<script type="math/tex" id="MathJax-Element-32">(x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0), (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)},y_1), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_m)</script>

,损失函数如前面先决条件所述:

    

<script type="math/tex" id="MathJax-Element-33">J(\theta_0, \theta_1..., \theta_n) = \frac{1}{2m}\sum\limits_{j=0}^{m}(h_\theta(x_0^{(j)}, x_1^{(j)}, ...x_n^{(j)})- y_j)^2</script>

    则在算法过程步骤1中对于

<script type="math/tex" id="MathJax-Element-34">\theta_i</script>

的偏导数计算如下:   

     

<script type="math/tex" id="MathJax-Element-35">\frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)= \frac{1}{m}\sum\limits_{j=0}^{m}(h_\theta(x_0^{(j)}, x_1^{(j)}, ...x_n^{(j)}) - y_j)x_i^{(j)}</script>

    由于样本中没有

<script type="math/tex" id="MathJax-Element-36">x_0</script>

上式中令所有的

<script type="math/tex" id="MathJax-Element-37">x_0^{j}</script>

为1.

    步骤4中

<script type="math/tex" id="MathJax-Element-38">\theta_i</script>

的更新表达式如下:

           

<script type="math/tex" id="MathJax-Element-39">\theta_i = \theta_i - \alpha\frac{1}{m}\sum\limits_{j=0}^{m}(h_\theta(x_0^{(j)}, x_1^{(j)}, ...x_n^{j}) - y_j)x_i^{(j)}</script>

    从这个例子可以看出当前点的梯度方向是由所有的样本决定的,加

<script type="math/tex" id="MathJax-Element-40">\frac{1}{m}</script>

是为了好理解。由于步长也为常数,他们的乘机也为常数,所以这里

<script type="math/tex" id="MathJax-Element-41">\alpha\frac{1}{m}</script>

可以用一个常数表示。

    在下面第4节会详细讲到的梯度下降法的变种,他们主要的区别就是对样本的采用方法不同。这里我们采用的是用所有样本。

3.3.2 梯度下降法的矩阵方式描述

    这一部分主要讲解梯度下降法的矩阵方式表述,相对于3.3.1的代数法,要求有一定的矩阵分析的基础知识,尤其是矩阵求导的知识。

    1. 先决条件: 和3.3.1类似, 需要确认优化模型的假设函数和损失函数。对于线性回归,假设函数

<script type="math/tex" id="MathJax-Element-42">h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}</script>

的矩阵表达方式为:

     

<script type="math/tex" id="MathJax-Element-43">h_\mathbf{\theta}(\mathbf{x}) = \mathbf{X\theta}</script>

,其中, 假设函数

<script type="math/tex" id="MathJax-Element-44">h_\mathbf{\theta}(\mathbf{X})</script>

为mx1的向量,

<script type="math/tex" id="MathJax-Element-45">\mathbf{\theta}</script>

为nx1的向量,里面有n个代数法的模型参数。

<script type="math/tex" id="MathJax-Element-46">\mathbf{X}</script>

为mxn维的矩阵。m代表样本的个数,n代表样本的特征数。

             损失函数的表达式为:

<script type="math/tex" id="MathJax-Element-47">J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})</script>

, 其中

<script type="math/tex" id="MathJax-Element-48">\mathbf{Y}</script>

是样本的输出向量,维度为mx1.

    2. 算法相关参数初始化:

<script type="math/tex" id="MathJax-Element-49">\theta</script>

向量可以初始化为默认值,或者调优后的值。算法终止距离

<script type="math/tex" id="MathJax-Element-50">\varepsilon</script>

,步长

<script type="math/tex" id="MathJax-Element-51">\alpha</script>

和3.3.1比没有变化。

    3. 算法过程:

      1)确定当前位置的损失函数的梯度,对于

<script type="math/tex" id="MathJax-Element-52">\theta</script>

向量,其梯度表达式如下:

        

<script type="math/tex" id="MathJax-Element-53">\frac{\partial}{\partial\mathbf\theta}J(\mathbf\theta)</script>

      2)用步长乘以损失函数的梯度,得到当前位置下降的距离,即

<script type="math/tex" id="MathJax-Element-54">\alpha\frac{\partial}{\partial\theta}J(\theta)</script>

对应于前面登山例子中的某一步。

      3)确定

<script type="math/tex" id="MathJax-Element-55">\mathbf\theta</script>

向量里面的每个值,梯度下降的距离都小于

<script type="math/tex" id="MathJax-Element-56">\varepsilon</script>

,如果小于

<script type="math/tex" id="MathJax-Element-57">\varepsilon</script>

则算法终止,当前

<script type="math/tex" id="MathJax-Element-58">\mathbf\theta</script>

向量即为最终结果。否则进入步骤4.

      4)更新

<script type="math/tex" id="MathJax-Element-59">\theta</script>

向量,其更新表达式如下。更新完毕后继续转入步骤1.

        

<script type="math/tex" id="MathJax-Element-60">\mathbf\theta= \mathbf\theta - \alpha\frac{\partial}{\partial\theta}J(\mathbf\theta)</script>

   

    还是用线性回归的例子来描述具体的算法过程。

    损失函数对于

<script type="math/tex" id="MathJax-Element-61">\theta</script>

向量的偏导数计算如下:

      

<script type="math/tex" id="MathJax-Element-62">\frac{\partial}{\partial\mathbf\theta}J(\mathbf\theta) = \mathbf{X}^T(\mathbf{X\theta} - \mathbf{Y})</script>

    步骤4中

<script type="math/tex" id="MathJax-Element-63">\theta</script>

向量的更新表达式如下:

<script type="math/tex" id="MathJax-Element-64">\mathbf\theta= \mathbf\theta - \alpha\mathbf{X}^T(\mathbf{X\theta} - \mathbf{Y})</script>

    对于3.3.1的代数法,可以看到矩阵法要简洁很多。这里面用到了矩阵求导链式法则,和两个矩阵求导的公式。

      公式1:

<script type="math/tex" id="MathJax-Element-65">\frac{\partial}{\partial\mathbf{X}}(\mathbf{XX^T}) =2\mathbf{X}</script>

      公式2:

<script type="math/tex" id="MathJax-Element-66">\frac{\partial}{\partial\mathbf\theta}(\mathbf{X\theta}) =\mathbf{X^T}</script>

    如果需要熟悉矩阵求导建议参考张贤达的《矩阵分析与应用》一书。

 

3.4 梯度下降的算法调优

    在使用梯度下降时,需要进行调优。哪些地方需要调优呢?

    1. 算法的步长选择。在前面的算法描述中,我提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。

    2. 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。

    3.归一化。由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望

<script type="math/tex" id="MathJax-Element-67">\overline{x}</script>

和标准差std(x),然后转化为:

      

<script type="math/tex" id="MathJax-Element-68">\frac{x - \overline{x}}{std(x)}</script>

    这样特征的新期望为0,新方差为1,迭代次数可以大大加快。

4. 梯度下降法大家族(BGD,SGD,MBGD)

4.1 批量梯度下降法(Batch Gradient Descent)

    批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新,这个方法对应于前面3.3.1的线性回归的梯度下降算法,也就是说3.3.1的梯度下降算法就是批量梯度下降法。  

    

<script type="math/tex" id="MathJax-Element-69">\theta_i = \theta_i - \alpha\sum\limits_{j=0}^{m}(h_\theta(x_0^{(j)}, x_1^{(j)}, ...x_n^{(j)}) - y_j)x_i^{(j)}</script>

    由于我们有m个样本,这里求梯度的时候就用了所有m个样本的梯度数据。

4.2 随机梯度下降法(Stochastic Gradient Descent)

    随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。对应的更新公式是:

    

<script type="math/tex" id="MathJax-Element-70">\theta_i = \theta_i - \alpha (h_\theta(x_0^{(j)}, x_1^{(j)}, ...x_n^{(j)}) - y_j)x_i^{(j)}</script>

    随机梯度下降法,和4.1的批量梯度下降法是两个极端,一个采用所有数据来梯度下降,一个用一个样本来梯度下降。自然各自的优缺点都非常突出。对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。对于收敛速度来说,由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。

    那么,有没有一个中庸的办法能够结合两种方法的优点呢?有!这就是4.3的小批量梯度下降法。

4.3 小批量梯度下降法(Mini-batch Gradient Descent)

  小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。一般可以取x=10,当然根据样本的数据,可以调整这个x的值。对应的更新公式是:

    

<script type="math/tex" id="MathJax-Element-71">\theta_i = \theta_i - \alpha \sum\limits_{j=t}^{t+x-1}(h_\theta(x_0^{(j)}, x_1^{(j)}, ...x_n^{(j)}) - y_j)x_i^{(j)}</script>

5. 梯度下降法和其他无约束优化算法的比较

    在机器学习中的无约束优化算法,除了梯度下降以外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。

    梯度下降法和最小二乘法相比,梯度下降法需要选择步长,而最小二乘法不需要。梯度下降法是迭代求解,最小二乘法是计算解析解。如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度下降法比较有优势。

    梯度下降法和牛顿法/拟牛顿法相比,两者都是迭代求解,不过梯度下降法是梯度求解,而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。相对而言,使用牛顿法/拟牛顿法收敛更快。但是每次迭代的时间比梯度下降法长。

(欢迎转载,转载请注明出处。欢迎沟通交流: [email protected]) 

    

分类:   0081. 机器学习
标签:   梯度下降
45
0

<script type="text/javascript"> currentDiggType = 0; </script>

            5行
	</div>
	<div class="postDesc">posted @ <span id="post-date">2016-10-17 22:49</span> <a href="http://www.cnblogs.com/pinard/">刘建平Pinard</a> 阅读(<span id="post_view_count">114502</span>) 评论(<span id="post_comment_count">75</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=5970503" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(5970503);return false;">收藏</a></div>
</div>
<script type="text/javascript">var allowComments=true,cb_blogId=311024,cb_entryId=5970503,cb_blogApp=currentBlogApp,cb_blogUserGuid='7d95b75d-b891-e611-845c-ac853d9f53ac',cb_entryCreatedDate='2016/10/17 22:49:00';loadViewCount(cb_entryId);var cb_postType=1;</script>
< Prev 1 2

            10行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3913807" class="layer">#51楼</a><a name="3913807" id="comment_anchor_3913807"></a>[<span class="louzhu">楼主</span>]  <span class="comment_date">2018-03-02 10:44</span> <a id="a_comment_author_3913807" href="http://www.cnblogs.com/pinard/" target="_blank">刘建平Pinard</a> <a href="http://msg.cnblogs.com/send/%E5%88%98%E5%BB%BA%E5%B9%B3Pinard" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3913807" class="blog_comment_body"><a href="#3912474" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3912474);">@</a>

liuhuisen
你好,的确是写错了,已经改正,感谢指出错误。



            34行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3914938" class="layer">#52楼</a><a name="3914938" id="comment_anchor_3914938"></a>  <span class="comment_date">2018-03-05 09:10</span> <a id="a_comment_author_3914938" href="http://home.cnblogs.com/u/1342077/" target="_blank">钱大爷</a> <a href="http://msg.cnblogs.com/send/%E9%92%B1%E5%A4%A7%E7%88%B7" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3914938" class="blog_comment_body">你好,请教一下,为什么采用Logistic Regression是,对分类型数据要采用OneHot编码方式,而不能采用LabelEncoder.谢谢.</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3914938,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3914938,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3921415" class="layer">#53楼</a><a name="3921415" id="comment_anchor_3921415"></a>  <span class="comment_date">2018-03-13 10:45</span> <a id="a_comment_author_3921415" href="http://www.cnblogs.com/shichuang/" target="_blank">卡卡麓</a> <a href="http://msg.cnblogs.com/send/%E5%8D%A1%E5%8D%A1%E9%BA%93" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3921415" class="blog_comment_body">你好,写的很棒,看完受益匪浅。<br>在 3.4 梯度下降的算法调优中,第三点,归一化中,有点小看法。减去均值再除以标准差,应该叫标准化。归一化则又称正则化,是对样本的行做L1或L2正则的操作。</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3921415,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3921415,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3921481" class="layer">#54楼</a><a name="3921481" id="comment_anchor_3921481"></a>[<span class="louzhu">楼主</span>]  <span class="comment_date">2018-03-13 11:29</span> <a id="a_comment_author_3921481" href="http://www.cnblogs.com/pinard/" target="_blank">刘建平Pinard</a> <a href="http://msg.cnblogs.com/send/%E5%88%98%E5%BB%BA%E5%B9%B3Pinard" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3921481" class="blog_comment_body"><a href="#3921415" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3921415);">@</a>

卡卡麓
你好,现在标准化和归一化这两个词经常混用。直接说标准化或者归一化还不能确定真正的方法。
比如最常用的z-score标准化,也就是我上面讲到了转化为均值0,方差1.
还有max-min归一化,用所有值减去min然后除以(max-min)。
当然还有你说的L1,L2正则化的标准化方法。

对应sklearn的库:
max-min归一化 preprocessing.MinMaxScaler
z-score标准化 preprocessing.StandardScaler
L1/L2归一化 preprocessing.Normalizer (可以参数选择L1还是L2)



            22行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3921568" class="layer">#55楼</a><a name="3921568" id="comment_anchor_3921568"></a>  <span class="comment_date">2018-03-13 13:17</span> <a id="a_comment_author_3921568" href="http://www.cnblogs.com/sonderxixing/" target="_blank">sonderxixing</a> <a href="http://msg.cnblogs.com/send/sonderxixing" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3921568" class="blog_comment_body">受教了</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3921568,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3921568,'Bury',this)">反对(0)</a></div><span id="comment_3921568_avatar" style="display:none;">http://pic.cnblogs.com/face/1208174/20170727144800.png</span>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3922416" class="layer">#56楼</a><a name="3922416" id="comment_anchor_3922416"></a>  <span class="comment_date">2018-03-14 10:16</span> <a id="a_comment_author_3922416" href="http://www.cnblogs.com/shichuang/" target="_blank">卡卡麓</a> <a href="http://msg.cnblogs.com/send/%E5%8D%A1%E5%8D%A1%E9%BA%93" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3922416" class="blog_comment_body"><a href="#3921481" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3921481);">@</a>

刘建平Pinard 
感谢回复,受教了,这几个概念确实混乱,在不同的书上有不同表述。



            70行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3924205" class="layer">#57楼</a><a name="3924205" id="comment_anchor_3924205"></a>  <span class="comment_date">2018-03-15 18:05</span> <a id="a_comment_author_3924205" href="http://www.cnblogs.com/lihuafengzi/" target="_blank">小溏</a> <a href="http://msg.cnblogs.com/send/%E5%B0%8F%E6%BA%8F" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3924205" class="blog_comment_body">写的真好!赞一万个!</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3924205,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3924205,'Bury',this)">反对(0)</a></div><span id="comment_3924205_avatar" style="display:none;">http://pic.cnblogs.com/face/775232/20160519163708.png</span>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3924848" class="layer">#58楼</a><a name="3924848" id="comment_anchor_3924848"></a>  <span class="comment_date">2018-03-16 11:42</span> <a id="a_comment_author_3924848" href="http://www.cnblogs.com/flowyourheart/" target="_blank">骑猪去流浪</a> <a href="http://msg.cnblogs.com/send/%E9%AA%91%E7%8C%AA%E5%8E%BB%E6%B5%81%E6%B5%AA" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3924848" class="blog_comment_body">支持支持~学习了</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3924848,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3924848,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3925457" class="layer">#59楼</a><a name="3925457" id="comment_anchor_3925457"></a>  <span class="comment_date">2018-03-17 09:15</span> <a id="a_comment_author_3925457" href="http://home.cnblogs.com/u/1320820/" target="_blank">Rock_CG</a> <a href="http://msg.cnblogs.com/send/Rock_CG" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3925457" class="blog_comment_body">您好,看了您的文章收获很大,感谢您。</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3925457,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3925457,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3928314" class="layer">#60楼</a><a name="3928314" id="comment_anchor_3928314"></a>  <span class="comment_date">2018-03-20 14:43</span> <a id="a_comment_author_3928314" href="http://www.cnblogs.com/TinyLaughing/" target="_blank">TinyLaughing</a> <a href="http://msg.cnblogs.com/send/TinyLaughing" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3928314" class="blog_comment_body">博主,写的真赞,学习了!<br>之前一直有关于损失函数前面系数不一致的疑惑,看了这篇文章后,明白了。<br>谢谢博主!</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3928314,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3928314,'Bury',this)">反对(0)</a></div><span id="comment_3928314_avatar" style="display:none;">http://pic.cnblogs.com/face/1354045/20180317110524.png</span>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3931029" class="layer">#61楼</a><a name="3931029" id="comment_anchor_3931029"></a>  <span class="comment_date">2018-03-23 11:32</span> <a id="a_comment_author_3931029" href="http://home.cnblogs.com/u/941488/" target="_blank">楊義Sunshine</a> <a href="http://msg.cnblogs.com/send/%E6%A5%8A%E7%BE%A9Sunshine" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3931029" class="blog_comment_body"><span class="MathJax_Preview" style="color: inherit; display: none;"></span><span class="MathJax" id="MathJax-Element-72-Frame" tabindex="0" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mo stretchy=&quot;false&quot;>(</mo><msubsup><mi>x</mi><mn>1</mn><mrow class=&quot;MJX-TeXAtom-ORD&quot;><mo stretchy=&quot;false&quot;>(</mo><mi>m</mi><mo stretchy=&quot;false&quot;>)</mo></mrow></msubsup><mo>,</mo><msubsup><mi>x</mi><mn>2</mn><mrow class=&quot;MJX-TeXAtom-ORD&quot;><mo stretchy=&quot;false&quot;>(</mo><mi>m</mi><mo stretchy=&quot;false&quot;>)</mo></mrow></msubsup><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><msubsup><mi>x</mi><mi>n</mi><mrow class=&quot;MJX-TeXAtom-ORD&quot;><mo stretchy=&quot;false&quot;>(</mo><mi>m</mi><mo stretchy=&quot;false&quot;>)</mo></mrow></msubsup><mo>,</mo><msub><mi>y</mi><mi>n</mi></msub><mo stretchy=&quot;false&quot;>)</mo></math>" role="presentation" style="position: relative;"><nobr aria-hidden="true"><span class="math" id="MathJax-Span-1457" style="width: 12.305em; display: inline-block;"><span style="display: inline-block; position: relative; width: 9.726em; height: 0px; font-size: 126%;"><span style="position: absolute; clip: rect(0.995em, 1009.66em, 2.781em, -999.997em); top: -2.245em; left: 0em;"><span class="mrow" id="MathJax-Span-1458"><span class="mo" id="MathJax-Span-1459" style="font-family: MathJax_Main;">(</span><span class="msubsup" id="MathJax-Span-1460"><span style="display: inline-block; position: relative; width: 1.789em; height: 0px;"><span style="position: absolute; clip: rect(3.31em, 1000.53em, 4.17em, -999.997em); top: -3.965em; left: 0em;"><span class="mi" id="MathJax-Span-1461" style="font-family: MathJax_Math-italic;">x</span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span><span style="position: absolute; clip: rect(3.244em, 1001.26em, 4.368em, -999.997em); top: -4.494em; left: 0.599em;"><span class="texatom" id="MathJax-Span-1462"><span class="mrow" id="MathJax-Span-1463"><span class="mo" id="MathJax-Span-1464" style="font-size: 70.7%; font-family: MathJax_Main;">(</span><span class="mi" id="MathJax-Span-1465" style="font-size: 70.7%; font-family: MathJax_Math-italic;">m</span><span class="mo" id="MathJax-Span-1466" style="font-size: 70.7%; font-family: MathJax_Main;">)</span></span></span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span><span style="position: absolute; clip: rect(3.31em, 1000.4em, 4.17em, -999.997em); top: -3.634em; left: 0.599em;"><span class="mn" id="MathJax-Span-1467" style="font-size: 70.7%; font-family: MathJax_Main;">1</span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span></span></span><span class="mo" id="MathJax-Span-1468" style="font-family: MathJax_Main;">,</span><span class="msubsup" id="MathJax-Span-1469" style="padding-left: 0.202em;"><span style="display: inline-block; position: relative; width: 1.789em; height: 0px;"><span style="position: absolute; clip: rect(3.31em, 1000.53em, 4.17em, -999.997em); top: -3.965em; left: 0em;"><span class="mi" id="MathJax-Span-1470" style="font-family: MathJax_Math-italic;">x</span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span><span style="position: absolute; clip: rect(3.244em, 1001.26em, 4.368em, -999.997em); top: -4.494em; left: 0.599em;"><span class="texatom" id="MathJax-Span-1471"><span class="mrow" id="MathJax-Span-1472"><span class="mo" id="MathJax-Span-1473" style="font-size: 70.7%; font-family: MathJax_Main;">(</span><span class="mi" id="MathJax-Span-1474" style="font-size: 70.7%; font-family: MathJax_Math-italic;">m</span><span class="mo" id="MathJax-Span-1475" style="font-size: 70.7%; font-family: MathJax_Main;">)</span></span></span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span><span style="position: absolute; clip: rect(3.31em, 1000.4em, 4.17em, -999.997em); top: -3.634em; left: 0.599em;"><span class="mn" id="MathJax-Span-1476" style="font-size: 70.7%; font-family: MathJax_Main;">2</span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span></span></span><span class="mo" id="MathJax-Span-1477" style="font-family: MathJax_Main;">,</span><span class="mo" id="MathJax-Span-1478" style="font-family: MathJax_Main; padding-left: 0.202em;">.</span><span class="mo" id="MathJax-Span-1479" style="font-family: MathJax_Main; padding-left: 0.202em;">.</span><span class="mo" id="MathJax-Span-1480" style="font-family: MathJax_Main; padding-left: 0.202em;">.</span><span class="msubsup" id="MathJax-Span-1481" style="padding-left: 0.202em;"><span style="display: inline-block; position: relative; width: 1.789em; height: 0px;"><span style="position: absolute; clip: rect(3.31em, 1000.53em, 4.17em, -999.997em); top: -3.965em; left: 0em;"><span class="mi" id="MathJax-Span-1482" style="font-family: MathJax_Math-italic;">x</span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span><span style="position: absolute; clip: rect(3.244em, 1001.26em, 4.368em, -999.997em); top: -4.494em; left: 0.599em;"><span class="texatom" id="MathJax-Span-1483"><span class="mrow" id="MathJax-Span-1484"><span class="mo" id="MathJax-Span-1485" style="font-size: 70.7%; font-family: MathJax_Main;">(</span><span class="mi" id="MathJax-Span-1486" style="font-size: 70.7%; font-family: MathJax_Math-italic;">m</span><span class="mo" id="MathJax-Span-1487" style="font-size: 70.7%; font-family: MathJax_Main;">)</span></span></span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span><span style="position: absolute; clip: rect(3.442em, 1000.53em, 4.17em, -999.997em); top: -3.833em; left: 0.599em;"><span class="mi" id="MathJax-Span-1488" style="font-size: 70.7%; font-family: MathJax_Math-italic;">n</span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span></span></span><span class="mo" id="MathJax-Span-1489" style="font-family: MathJax_Main;">,</span><span class="msubsup" id="MathJax-Span-1490" style="padding-left: 0.202em;"><span style="display: inline-block; position: relative; width: 0.995em; height: 0px;"><span style="position: absolute; clip: rect(3.31em, 1000.47em, 4.368em, -999.997em); top: -3.965em; left: 0em;"><span class="mi" id="MathJax-Span-1491" style="font-family: MathJax_Math-italic;">y<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span><span style="position: absolute; top: -3.833em; left: 0.466em;"><span class="mi" id="MathJax-Span-1492" style="font-size: 70.7%; font-family: MathJax_Math-italic;">n</span><span style="display: inline-block; width: 0px; height: 3.972em;"></span></span></span></span><span class="mo" id="MathJax-Span-1493" style="font-family: MathJax_Main;">)</span></span><span style="display: inline-block; width: 0px; height: 2.252em;"></span></span></span><span style="display: inline-block; overflow: hidden; vertical-align: -0.496em; border-left: 0px solid; width: 0px; height: 1.921em;"></span></span></nobr><span class="MJX_Assistive_MathML" role="presentation"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><msubsup><mi>x</mi><mn>1</mn><mrow class="MJX-TeXAtom-ORD"><mo stretchy="false">(</mo><mi>m</mi><mo stretchy="false">)</mo></mrow></msubsup><mo>,</mo><msubsup><mi>x</mi><mn>2</mn><mrow class="MJX-TeXAtom-ORD"><mo stretchy="false">(</mo><mi>m</mi><mo stretchy="false">)</mo></mrow></msubsup><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><msubsup><mi>x</mi><mi>n</mi><mrow class="MJX-TeXAtom-ORD"><mo stretchy="false">(</mo><mi>m</mi><mo stretchy="false">)</mo></mrow></msubsup><mo>,</mo><msub><mi>y</mi><mi>n</mi></msub><mo stretchy="false">)</mo></math></span></span><script type="math/tex" id="MathJax-Element-72">(x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_n)</script><br>代数法最后一个y的下标应该是m。</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3931029,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3931029,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3932751" class="layer">#62楼</a><a name="3932751" id="comment_anchor_3932751"></a>[<span class="louzhu">楼主</span>]  <span class="comment_date">2018-03-25 18:37</span> <a id="a_comment_author_3932751" href="http://www.cnblogs.com/pinard/" target="_blank">刘建平Pinard</a> <a href="http://msg.cnblogs.com/send/%E5%88%98%E5%BB%BA%E5%B9%B3Pinard" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3932751" class="blog_comment_body"><a href="#3931029" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3931029);">@</a>

楊義Sunshine
你好,是写错啦,感谢指正,已经修改了。



            22行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3941017" class="layer">#63楼</a><a name="3941017" id="comment_anchor_3941017"></a>  <span class="comment_date">2018-04-03 09:48</span> <a id="a_comment_author_3941017" href="http://home.cnblogs.com/u/928393/" target="_blank">永不息的舞步</a> <a href="http://msg.cnblogs.com/send/%E6%B0%B8%E4%B8%8D%E6%81%AF%E7%9A%84%E8%88%9E%E6%AD%A5" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3941017" class="blog_comment_body">楼主,请教一下,z-socre标准化,max-min归一化,和l1,l2标准化的使用场合?</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3941017,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3941017,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3941147" class="layer">#64楼</a><a name="3941147" id="comment_anchor_3941147"></a>[<span class="louzhu">楼主</span>]  <span class="comment_date">2018-04-03 11:27</span> <a id="a_comment_author_3941147" href="http://www.cnblogs.com/pinard/" target="_blank">刘建平Pinard</a> <a href="http://msg.cnblogs.com/send/%E5%88%98%E5%BB%BA%E5%B9%B3Pinard" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3941147" class="blog_comment_body"><a href="#3941017" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3941017);">@</a>

永不息的舞步
你好,这看你的问题需要。这里只举一个例子:
比如我们要做线性回归,我们期望所有的数据度量衡一致,那么我们可以用z-score标准化或者max-min归一化。但是如果我们是要做PCA,那么就不能用z-score标准化了,为什么呢?因为我们需要方差的差异来选择合适的降维的对应维度,如果都是方差1,那么就没法弄了。



            10行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3941151" class="layer">#65楼</a><a name="3941151" id="comment_anchor_3941151"></a>  <span class="comment_date">2018-04-03 11:30</span> <a id="a_comment_author_3941151" href="http://home.cnblogs.com/u/928393/" target="_blank">永不息的舞步</a> <a href="http://msg.cnblogs.com/send/%E6%B0%B8%E4%B8%8D%E6%81%AF%E7%9A%84%E8%88%9E%E6%AD%A5" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3941151" class="blog_comment_body"><a href="#3941147" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3941147);">@</a>

刘建平Pinard
好的,谢谢您的指导



            22行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3948621" class="layer">#66楼</a><a name="3948621" id="comment_anchor_3948621"></a>  <span class="comment_date">2018-04-11 14:15</span> <a id="a_comment_author_3948621" href="http://www.cnblogs.com/ymwhat/" target="_blank">拉卡拉卡</a> <a href="http://msg.cnblogs.com/send/%E6%8B%89%E5%8D%A1%E6%8B%89%E5%8D%A1" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3948621" class="blog_comment_body">看了楼主很多文章!写的太棒了!反复看感觉都不一样~<br>想打印下来,楼主有没有导出过pdf版本呀,求分享~<br>谢谢!</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3948621,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3948621,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3948644" class="layer">#67楼</a><a name="3948644" id="comment_anchor_3948644"></a>[<span class="louzhu">楼主</span>]  <span class="comment_date">2018-04-11 14:32</span> <a id="a_comment_author_3948644" href="http://www.cnblogs.com/pinard/" target="_blank">刘建平Pinard</a> <a href="http://msg.cnblogs.com/send/%E5%88%98%E5%BB%BA%E5%B9%B3Pinard" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3948644" class="blog_comment_body"><a href="#3948621" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3948621);">@</a>

拉卡拉卡
你好,那倒没有,主要原因是LaTex是直接手写的。不过web版的想打印应该也可以的。你可以试一试。



            10行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3948660" class="layer">#68楼</a><a name="3948660" id="comment_anchor_3948660"></a>  <span class="comment_date">2018-04-11 14:43</span> <a id="a_comment_author_3948660" href="http://www.cnblogs.com/ymwhat/" target="_blank">拉卡拉卡</a> <a href="http://msg.cnblogs.com/send/%E6%8B%89%E5%8D%A1%E6%8B%89%E5%8D%A1" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3948660" class="blog_comment_body"><a href="#3948644" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3948644);">@</a>

刘建平Pinard
好的,谢谢回复



            34行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3948734" class="layer">#69楼</a><a name="3948734" id="comment_anchor_3948734"></a>  <span class="comment_date">2018-04-11 15:24</span> <a id="a_comment_author_3948734" href="http://www.cnblogs.com/ppc791021347/" target="_blank">水来浪去</a> <a href="http://msg.cnblogs.com/send/%E6%B0%B4%E6%9D%A5%E6%B5%AA%E5%8E%BB" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3948734" class="blog_comment_body">总结的很好,收益了!</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3948734,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3948734,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3948799" class="layer">#70楼</a><a name="3948799" id="comment_anchor_3948799"></a>  <span class="comment_date">2018-04-11 16:05</span> <a id="a_comment_author_3948799" href="http://home.cnblogs.com/u/1372913/" target="_blank">訫无杂念</a> <a href="http://msg.cnblogs.com/send/%E8%A8%AB%E6%97%A0%E6%9D%82%E5%BF%B5" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3948799" class="blog_comment_body">博主你好,有个问题需要向你请教一下,原文中说,用步长乘以损失函数的梯度,得到当前位置下降的距离,步长就是斜边距离,损失函数梯度可以理解为斜率,下降距离也就是垂直距离,不知道怎么算出来的。望指教,谢谢</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3948799,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3948799,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3948831" class="layer">#71楼</a><a name="3948831" id="comment_anchor_3948831"></a>[<span class="louzhu">楼主</span>]  <span class="comment_date">2018-04-11 16:17</span> <a id="a_comment_author_3948831" href="http://www.cnblogs.com/pinard/" target="_blank">刘建平Pinard</a> <a href="http://msg.cnblogs.com/send/%E5%88%98%E5%BB%BA%E5%B9%B3Pinard" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3948831" class="blog_comment_body"><a href="#3948799" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3948799);">@</a>

訫无杂念
你好,损失函数梯度是一个关于样本特征的函数,而步长是一个定值。对于每一个样本,我们都可以计算它对应于损失函数梯度的取值。而对于所有的训练样本,我们可以得到所有的训练样本损失函数梯度的取值。
将这些取值加起来取平均值,就是我们需要计算的梯度值。



            34行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3948858" class="layer">#72楼</a><a name="3948858" id="comment_anchor_3948858"></a>  <span class="comment_date">2018-04-11 16:23</span> <a id="a_comment_author_3948858" href="http://home.cnblogs.com/u/1372913/" target="_blank">訫无杂念</a> <a href="http://msg.cnblogs.com/send/%E8%A8%AB%E6%97%A0%E6%9D%82%E5%BF%B5" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3948858" class="blog_comment_body">谢谢。我有点不明白步长*损失函数梯度=当前位置下降距离,我推了一下没有推出来</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3948858,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3948858,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3950474" class="layer">#73楼</a><a name="3950474" id="comment_anchor_3950474"></a>  <span class="comment_date">2018-04-13 09:50</span> <a id="a_comment_author_3950474" href="http://home.cnblogs.com/u/1374921/" target="_blank">wensss</a> <a href="http://msg.cnblogs.com/send/wensss" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3950474" class="blog_comment_body">博主您好,有个问题想请教你一下,在梯度下降法中用梯度下降的距离小于阈值来跳出循环,那么,每次得到的梯度是个二维矩阵,这时候它的下降距离应该怎么衡量呢?</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3950474,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3950474,'Bury',this)">反对(0)</a></div>
		</div>
	</div>

	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3951803" class="layer">#74楼</a><a name="3951803" id="comment_anchor_3951803"></a>[<span class="louzhu">楼主</span>]  <span class="comment_date">2018-04-14 23:19</span> <a id="a_comment_author_3951803" href="http://www.cnblogs.com/pinard/" target="_blank">刘建平Pinard</a> <a href="http://msg.cnblogs.com/send/%E5%88%98%E5%BB%BA%E5%B9%B3Pinard" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3951803" class="blog_comment_body"><a href="#3950474" title="查看所回复的评论" onclick="commentManager.renderComments(0,50,3950474);">@</a>

wensss
你好,对于向量来说,那么如果这个向量的各个维度的标量改变都小于阈值,则跳出。
对于矩阵来说,可以看所有的位置的值改变是否小于阈值。



            13行
	<div class="feedbackItem">
		<div class="feedbackListSubtitle">
			<div class="feedbackManage">
				&nbsp;&nbsp;<span class="comment_actions"></span>
			</div>
			<a href="#3955402" class="layer">#75楼</a><a name="3955402" id="comment_anchor_3955402"></a><span id="comment-maxId" style="display:none;">3955402</span><span id="comment-maxDate" style="display:none;">2018/4/19 11:31:18</span>  <span class="comment_date">2018-04-19 11:31</span> <a id="a_comment_author_3955402" href="http://home.cnblogs.com/u/1373184/" target="_blank">lujianhan</a> <a href="http://msg.cnblogs.com/send/lujianhan" title="发送站内短消息" class="sendMsg2This">&nbsp;</a>
		</div>
		<div class="feedbackCon">
			<div id="comment_body_3955402" class="blog_comment_body">andrew ng的视频搬过来的</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3955402,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" onclick="return voteComment(3955402,'Bury',this)">反对(0)</a></div>
		</div>
	</div>
<div id="comments_pager_bottom"><div class="pager"><a href="#!comments" onclick="commentManager.renderComments(1,50);return false;">&lt; Prev</a><a href="#!comments" onclick="commentManager.renderComments(1,50);return false;">1</a><span class="current">2</span></div></div></div><script type="text/javascript">var commentManager = new blogCommentManager();commentManager.renderComments(0);</script>
腾讯云0423

<script type="text/javascript"> fixPostBody(); setTimeout(function () { incrementViewCount(cb_entryId); }, 50); deliverAdT2(); deliverAdC1(); deliverAdC2(); loadNewsAndKb(); loadBlogSignature(); LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid); GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate, cb_postType); loadOptUnderPost(); GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate); </script>

            6行
</div><!--end: forFlow -->
</div><!--end: mainContent 主体内容容器-->

<div id="sideBar">
	<div id="sideBarMain">

公告

★珠江追梦,饮岭南茶,恋鄂北家★
昵称: 刘建平Pinard
园龄: 1年6个月
粉丝: 1295
关注: 13

<script>getFollowStatus('7d95b75d-b891-e611-845c-ac853d9f53ac')</script>

<script type="text/javascript">loadBlogNews();</script>

            5行
		<div id="blog-calendar" style=""><table id="blogCalendar" class="Cal" cellspacing="0" cellpadding="0" title="Calendar">
<tbody><tr><td colspan="7"><table class="CalTitle" cellspacing="0">
	<tbody><tr><td class="CalNextPrev"><a href="javascript:void(0);" onclick="loadBlogCalendar('2018/03/01');return false;">&lt;</a></td><td align="center">2018年4月</td><td class="CalNextPrev" align="right"><a href="javascript:void(0);" onclick="loadBlogCalendar('2018/05/01');return false;">&gt;</a></td></tr>
</tbody></table></td></tr><tr><th class="CalDayHeader" align="center" abbr="日" scope="col">日</th><th class="CalDayHeader" align="center" abbr="一" scope="col">一</th><th class="CalDayHeader" align="center" abbr="二" scope="col">二</th><th class="CalDayHeader" align="center" abbr="三" scope="col">三</th><th class="CalDayHeader" align="center" abbr="四" scope="col">四</th><th class="CalDayHeader" align="center" abbr="五" scope="col">五</th><th class="CalDayHeader" align="center" abbr="六" scope="col">六</th></tr><tr><td class="CalOtherMonthDay" align="center">25</td><td class="CalOtherMonthDay" align="center">26</td><td class="CalOtherMonthDay" align="center">27</td><td class="CalOtherMonthDay" align="center">28</td><td class="CalOtherMonthDay" align="center">29</td><td class="CalOtherMonthDay" align="center">30</td><td class="CalOtherMonthDay" align="center">31</td></tr><tr><td class="CalWeekendDay" align="center">1</td><td align="center">2</td><td align="center">3</td><td align="center">4</td><td align="center">5</td><td align="center">6</td><td class="CalWeekendDay" align="center">7</td></tr><tr><td class="CalWeekendDay" align="center">8</td><td align="center">9</td><td align="center">10</td><td align="center">11</td><td align="center">12</td><td align="center">13</td><td class="CalWeekendDay" align="center">14</td></tr><tr><td class="CalWeekendDay" align="center">15</td><td align="center">16</td><td align="center">17</td><td align="center">18</td><td align="center">19</td><td align="center">20</td><td class="CalWeekendDay" align="center">21</td></tr><tr><td class="CalWeekendDay" align="center">22</td><td align="center">23</td><td class="CalTodayDay" align="center">24</td><td align="center">25</td><td align="center">26</td><td align="center">27</td><td class="CalWeekendDay" align="center">28</td></tr><tr><td class="CalWeekendDay" align="center">29</td><td align="center">30</td><td class="CalOtherMonthDay" align="center">1</td><td class="CalOtherMonthDay" align="center">2</td><td class="CalOtherMonthDay" align="center">3</td><td class="CalOtherMonthDay" align="center">4</td><td class="CalOtherMonthDay" align="center">5</td></tr>

<script type="text/javascript">loadBlogDefaultCalendar();</script>

            3行
		<div id="leftcontentcontainer">
			<div id="blog-sidecolumn"><div id="sidebar_search" class="sidebar-block"></div><div id="sidebar_shortcut" class="sidebar-block">

<script type="text/javascript">loadBlogSideColumn();</script>

            4行
	</div><!--end: sideBarMain -->
</div><!--end: sideBar 侧边栏容器 -->
<div class="clear"></div>
</div>

猜你喜欢

转载自blog.csdn.net/hengxingheng/article/details/80070316
今日推荐