1.分类问题

你要预测的变量yyy是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法。
从二元的分类问题开始讨论。
我们将因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)正向类(positive class) ,则因变量y∈0,1y \in 0,1y∈0,1 ,其中 0 表示负向类,1 表示正向类

如果我们要用线性回归算法来解决一个分类问题,对于分类,yyy取值为 0 或者1,但如果你使用的是线性回归,那么假设函数的输出值可能远大于 1,或者远小于0,即使所有训练样本的标签 yyy都等于 0 或 1。尽管我们知道标签应该取值0 或者1,但是如果算法得到的值远大于1或者远小于0的话,就会感觉很奇怪。所以我们在接下来的要研究的算法就叫做逻辑回归算法 ,这个算法的性质是:它的输出值永远在0到1之间。

逻辑回归算法是分类算法,我们将它作为分类算法使用。有时候可能因为这个算法的名字中出现了“回归”使你感到困惑,但逻辑回归算法实际上是一种分类算法,它适用于标签yyy取值离散的情况,如:1 0 0 1。

2.假说表示

在分类问题中,要用什么样的函数来表示我们的假设。我们希望分类器的输出值在0和1之间,因此,我们希望想出一个满足某个性质的假设函数,这个性质是它的预测值要在0和1之间。

根据线性回归模型我们只能预测连续的值,然而对于分类问题,我们需要输出0或1,我们可以预测:
当hθ(x)>=0.5h_{\theta}(x)>=0.5hθ​(x)>=0.5 时,预测 y=1y=1y=1。
当hθ(x)&lt;0.5h_{\theta}(x)&lt; 0.5hθ​(x)<0.5 时,预测 y=0y=0y=0。

对于上图所示的数据,这样的一个线性模型似乎能很好地完成分类任务。假使我们又观测到一个非常大尺寸的恶性肿瘤,将其作为实例加入到我们的训练集中来,这将使得我们获得一条新的直线。

这时,再使用0.5作为阀值来预测肿瘤是良性还是恶性便不合适了。可以看出,线性回归模型,因为其预测的值可以超越[0,1]的范围,并不适合解决这样的问题。

我们引入一个新的模型,逻辑回归,该模型的输出变量范围始终在0和1之间。 逻辑回归模型的假设是:hθ(x)=g(θTX)h_{\theta}(x)=g\left(\theta^{T} X\right)hθ​(x)=g(θTX) 其中: XXX代表特征向量,ggg代表逻辑函数(logistic function)是一个常用的逻辑函数为S形函数(Sigmoid function),公式为:g(z)=11+e−zg(z)=\frac{1}{1+e^{-z}}g(z)=1+e−z1​ 。
PS:函数g使得所有的θTX\theta^{T} XθTX输入到ggg中得到值域在0-1之间。

import numpy as np
def sigmoid(z):  return 1 / (1 + np.exp(-z))

函数图像为:

合起来,我们得到逻辑回归模型的假设:
对模型的理解:g(z)=11+e−zg(z)=\frac{1}{1+e^{-z}}g(z)=1+e−z1​
hθ(x)h_{\theta}(x)hθ​(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量y=1y=1y=1的可能性(estimated probablity)即hθ(x)=P(y=1∣x;θ)h_{\theta}(x)=P(y=1 | x ; \theta)hθ​(x)=P(y=1∣x;θ) 。
例如,如果对于给定的xxx,通过已经确定的参数计算得出hθ(x)=0.7h_{\theta}(x)=0.7hθ​(x)=0.7,则表示有70%的几率yyy为正向类,相应地yyy为负向类的几率为1−0.7=0.31-0.7=0.31−0.7=0.3。

3.判定边界

决策边界(decision boundary)

在逻辑回归中,我们预测:

当hθ(x)&gt;=0.5h_{\theta}(x)&gt;=0.5hθ​(x)>=0.5 时,预测 y=1y=1y=1。
当hθ(x)&lt;0.5h_{\theta}(x)&lt; 0.5hθ​(x)<0.5 时,预测 y=0y=0y=0。

根据上面绘制出的 S 形函数图像,我们知道当
z=0时,g(z)=0.5z=0时,g(z)=0.5z=0时,g(z)=0.5
z&gt;0时,g(z)&gt;0.5z&gt;0时,g(z)&gt;0.5z>0时,g(z)>0.5
z&lt;0时,g(z)&lt;0.5z&lt;0时,g(z)&lt;0.5z<0时,g(z)<0.5

又z=θTxz=\theta^{T}xz=θTx ,即:
θTx&gt;=0\theta^{T}x&gt;=0θTx>=0 时,预测y=1y=1y=1
θTx&lt;0\theta^{T}x&lt;0θTx<0 时,预测y=0y=0y=0

现在假设我们有一个模型:

并且参数θ\thetaθ 是向量[-3 1 1]。 则当−3+x1+x2≥0-3+x_{1}+x_{2} \geq 0−3+x1​+x2​≥0,即x1+x2≥3x_{1}+x_{2} \geq 3x1​+x2​≥3时,模型将预测 y=1y=1y=1。 我们可以绘制直线x1+x2=3x_{1}+x_{2}=3x1​+x2​=3,这条线便是我们模型的分界线,将预测为1的区域和预测为 0的区域分隔开。

假使我们的数据呈现这样的分布情况,怎样的模型才能适合呢?

因为需要用曲线才能分隔y=0y=0y=0 的区域和 y=1y=1y=1 的区域,我们需要二次方特征:hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22)h_{\theta}(x)=g\left(\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\theta_{3} x_{1}^{2}+\theta_{4} x_{2}^{2}\right)hθ​(x)=g(θ0​+θ1​x1​+θ2​x2​+θ3​x12​+θ4​x22​)且θ=[−1001]\theta=\left[ \begin{array}{c}{-1} \\ {0} \\ {0} \\ {1}\end{array}\right]θ=⎣⎢⎢⎡​−1001​⎦⎥⎥⎤​,则我们得到的判定边界恰好是圆点在原点且半径为1的圆形。
我们可以用非常复杂的模型来适应非常复杂形状的判定边界。

4.代价函数

那么我们如何拟合逻辑回归模型的参数θ\thetaθ呢?

训练集:{(x(1),y(1)),(x(2),y(2)),⋯&ThinSpace;,(x(m),y(m))}\left\{\left(x^{(1)}, y^{(1)}\right),\left(x^{(2)}, y^{(2)}\right), \cdots,\left(x^{(m)}, y^{(m)}\right)\right\}{(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))}

m examples: x∈[x0x1⋯xn]x0=1,y∈{0,1}x \in \left[ \begin{array}{l}{x_{0}} \\ {x_{1}} \\ {\cdots} \\ {x_{n}}\end{array}\right] \quad x_{0}=1, y \in\{0,1\}x∈⎣⎢⎢⎡​x0​x1​⋯xn​​⎦⎥⎥⎤​x0​=1,y∈{0,1}
hθ(x)=11+e−θTxh_{\theta}(x)=\frac{1}{1+e^{-\theta^{T} x}}hθ​(x)=1+e−θTx1​
对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将hθ(x)=11+e−θTxh_{\theta}(x)=\frac{1}{1+e^{-\theta^{T} x}}hθ​(x)=1+e−θTx1​带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction)。

这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。

线性回归的代价函数为:J(θ)=1m∑i=1m12(hθ(x(i))−y(i))2J(\theta)=\frac{1}{m} \sum_{i=1}^{m} \frac{1}{2}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}J(θ)=m1​∑i=1m​21​(hθ​(x(i))−y(i))2

逻辑回归的代价函数为:J(θ)=1m∑i=1mcost⁡(hθ(x(i)),y(i))J(\theta)=\frac{1}{m} \sum_{i=1}^{m} \operatorname{cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right)J(θ)=m1​∑i=1m​cost(hθ​(x(i)),y(i))

其中:
cost⁡(hθ(x),y)={−log⁡(hθ(x))if y=1−log⁡(1−hθ(x))if y=0\operatorname{cost}\left(h_{\theta}(x), y\right)=\left\{\begin{array}{cl}{-\log \left(h_{\theta}(x)\right)} &amp; {\text { if } y=1} \\ {-\log \left(1-h_{\theta}(x)\right)} &amp; {\text { if } y=0}\end{array}\right.cost(hθ​(x),y)={−log(hθ​(x))−log(1−hθ​(x))​ if y=1 if y=0​

为什么用log还有点懵逼,弹幕说是最大似然,学了之后再回来填坑~

hθxh_\theta{x}hθ​x与 cost⁡(hθ(x),y)\operatorname{cost}\left(h_{\theta}(x), y\right)cost(hθ​(x),y)之间的关系如下图所示:

这样构建的cost⁡(hθ(x),y)\operatorname{cost}\left(h_{\theta}(x), y\right)cost(hθ​(x),y)函数的特点是:

  1. 当实际的 y=1y=1y=1 且hθ(x)h_\theta(x)hθ​(x)也为 1 时误差为 0,当 y=1y=1y=1 但hθ(x)h_\theta(x)hθ​(x)不为1时误差随着hθ(x)h_\theta(x)hθ​(x)变小而变大;
  2. 当实际的 y=0y=0y=0且hθ(x)h_\theta(x)hθ​(x)也为 0 时代价为 0,当 y=0y=0y=0但不为hθ(x)h_\theta(x)hθ​(x) 0时误差随着 hθ(x)h_\theta(x)hθ​(x)的变大而变大。

将构建的 cost⁡(hθ(x),y)\operatorname{cost}\left(h_{\theta}(x), y\right)cost(hθ​(x),y)简化如下:
cost⁡(hθ(x),y)=−y×log⁡(hθ(x))−(1−y)×log⁡(1−hθ(x))\operatorname{cost}\left(h_{\theta}(x), y\right)=-y \times \log \left(h_{\theta}(x)\right)-(1-y) \times \log \left(1-h_{\theta}(x)\right)cost(hθ​(x),y)=−y×log(hθ​(x))−(1−y)×log(1−hθ​(x))
带入代价函数得到:
J(θ)=1m∑i=1m[−y(i)log⁡(hθ(x(i)))−(1−y(i))log⁡(1−hθ(x(i)))]J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\left[-y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)-\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]J(θ)=m1​i=1∑m​[−y(i)log(hθ​(x(i)))−(1−y(i))log(1−hθ​(x(i)))]
即:
J(θ)=−1m∑i=1m[y(i)log⁡(hθ(x(i)))+(1−y(i))log⁡(1−hθ(x(i)))]J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]J(θ)=−m1​i=1∑m​[y(i)log(hθ​(x(i)))+(1−y(i))log(1−hθ​(x(i)))]
Python代码实现:

import numpy as np
def cost(theta, X, y):theta = np.matrix(theta)X = np.matrix(X)y = np.matrix(y)first = np.multiply(-y, np.log(sigmoid(X* theta.T)))second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T)))return np.sum(first - second) / (len(X))

在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:
Repeat {θj:=θj−α∂∂θjJ(θ)(simultaneously update all )}\text { Repeat }\left\{\theta_{j} :=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta)(\text { simultaneously update all })\right\} Repeat {θj​:=θj​−α∂θj​∂​J(θ)( simultaneously update all )}
PS : 我们没必要对所有的J(θ)J(\theta)J(θ)都求导,∇J(θ)=(∂J(θ)∂θ0∂J(θ)∂θ1⋯∂J(θ)∂θn)\nabla J(\theta)=\left( \begin{array}{c}{\frac{\partial J(\theta)}{\partial \theta_{0}}} \\ {\frac{\partial J(\theta)}{\partial \theta_{1}}} \\ {\cdots} \\ {\frac{\partial J(\theta)}{\partial \theta_{n}}}\end{array}\right)∇J(θ)=⎝⎜⎜⎜⎛​∂θ0​∂J(θ)​∂θ1​∂J(θ)​⋯∂θn​∂J(θ)​​⎠⎟⎟⎟⎞​,求了其中一个之后,整个矩阵就都知道了。

求导后得到:
Repeat {θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)(simultaneously update all) }\text { Repeat }\left\{\theta_{j} :=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} \text { (simultaneously update all) }\right\} Repeat {θj​:=θj​−αm1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​ (simultaneously update all) }
在这个视频中,我们定义了单训练样本的代价函数,凸性分析的内容是超出这门课的范围的,但是可以证明我们所选的代价值函数会给我们一个凸优化问题。代价函数J(θ)J(\theta)J(θ)会是一个凸函数,并且没有局部最优值,求出来就是全局最优解。

推导过程:

J(θ)=−1m∑i=1m[y(i)log⁡(hθ(x(i)))+(1−y(i))log⁡(1−hθ(x(i)))]J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]J(θ)=−m1​∑i=1m​[y(i)log(hθ​(x(i)))+(1−y(i))log(1−hθ​(x(i)))]

考虑到hθ(x(i))=11+e−θTα(i)h_{\theta}\left(x^{(i)}\right)=\frac{1}{1+e^{-\theta T_{\alpha}(i)}}hθ​(x(i))=1+e−θTα​(i)1​,所以:

注:虽然得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,但是这里的hθ(x)=g(θTX)h_\theta(x)=g(\theta^{T}X)hθ​(x)=g(θTX)与线性回归中不同,所以实际上是不一样的。另外,在运行梯度下降算法之前,进行特征缩放依旧是非常必要的。

一些梯度下降算法之外的选择: 除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS) ,fminunc是 matlab和octave 中都带的一个最小值优化函数,使用时我们需要提供代价函数和每个参数的求导,下面是 octave 中使用 fminunc 函数的代码示例:

function [jVal, gradient] = costFunction(theta)jVal = [...code to compute J(theta)...];gradient = [...code to compute derivative of J(theta)...];
end
options = optimset('GradObj', 'on', 'MaxIter', '100');
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

5.简化的成本函数和梯度下降

逻辑回归的代价函数:
J(θ)=1m∑i=1mcost⁡(hθ(x(i)),y(i))J(\theta)=\frac{1}{m} \sum_{i=1}^{m} \operatorname{cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right)J(θ)=m1​i=1∑m​cost(hθ​(x(i)),y(i))
cost⁡(hθ(x),y)={−log⁡(hθ(x))if y=1−log⁡(1−hθ(x))if y=0\operatorname{cost}\left(h_{\theta}(x), y\right)=\left\{\begin{array}{cc}{-\log \left(h_{\theta}(x)\right)} &amp; {\text { if } y=1} \\ {-\log \left(1-h_{\theta}(x)\right)} &amp; {\text { if } y=0}\end{array}\right.cost(hθ​(x),y)={−log(hθ​(x))−log(1−hθ​(x))​ if y=1 if y=0​
Ps:y=0或y=1Ps: y=0或y=1Ps:y=0或y=1
这个式子可以合并成:
cost⁡(hθ(x),y)=−y×log⁡(hθ(x))−(1−y)×log⁡(1−hθ(x))\operatorname{cost}\left(h_{\theta}(x), y\right)=-y \times \log \left(h_{\theta}(x)\right)-(1-y) \times \log \left(1-h_{\theta}(x)\right)cost(hθ​(x),y)=−y×log(hθ​(x))−(1−y)×log(1−hθ​(x))
即逻辑回归的代价函数:
cost⁡(hθ(x),y)=−y×log⁡(hθ(x))−(1−y)×log⁡(1−hθ(x))=−1m∑i=1m[y(i)log⁡(hθ(x(i)))+(1−y(i))log⁡(1−hθ(x(i)))]\operatorname{cost}\left(h_{\theta}(x), y\right)=-y \times \log \left(h_{\theta}(x)\right)-(1-y) \times \log \left(1-h_{\theta}(x)\right)\\=-\frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right] cost(hθ​(x),y)=−y×log(hθ​(x))−(1−y)×log(1−hθ​(x))=−m1​i=1∑m​[y(i)log(hθ​(x(i)))+(1−y(i))log(1−hθ​(x(i)))]

根据这个代价函数,为了拟合出参数,该怎么做呢?我们要试图找尽量让J(θ)J(\theta)J(θ) 取得最小值的参数θ\thetaθ。 min⁡θJ(θ)\min _{\theta} J(\theta)minθ​J(θ)所以我们想要尽量减小这一项,这将我们将得到某个参数θ\thetaθ。 如果我们给出一个新的样本,假如某个特征xxx ,我们可以用拟合训练样本的参数θ\thetaθ,来输出对假设的预测。 另外,我们假设的输出,实际上就是这个概率值:p(y=1∣x;θ)p(y=1 | x ; \theta)p(y=1∣x;θ),就是关于 xxx以θ\thetaθ为参数, y=1y=1y=1的概率,你可以认为我们的假设就是估计 的概率,所以,接下来就是弄清楚如何最大限度地最小化代价函数J(θ)J(\theta)J(θ),作为一个关于θ\thetaθ的函数,这样我们才能为训练集拟合出参数θ\thetaθ。

最小化代价函数的方法,是使用梯度下降法(gradient descent)。这是我们的代价函数:
J(θ)=−1m∑i=1m[y(i)log⁡(hθ(x(i)))+(1−y(i))log⁡(1−hθ(x(i)))]J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]J(θ)=−m1​i=1∑m​[y(i)log(hθ​(x(i)))+(1−y(i))log(1−hθ​(x(i)))]

最小化 min⁡θJ(θ)\min _{\theta} J(\theta)minθ​J(θ)

反复更新每个参数,用这个式子来更新,就是用它自己减去学习率 α\alphaα乘以后面的微分项。求导后得到:

如果你计算一下的话,你会得到这个等式:
θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)\theta_{j} :=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}θj​:=θj​−αm1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​把它写在这里,将后面这个式子,在 i=1i=1i=1 到 mmm 上求和,其实就是预测误差乘以xj(i)x^{(i)}_jxj(i)​,所以你把这个偏导数项∂∂θjJ(θ)\frac{\partial}{\partial \theta_{j}} J(\theta)∂θj​∂​J(θ) 放回到原来式子这里,我们就可以将梯度下降算法写作如下形式:
θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)\theta_{j} :=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}θj​:=θj​−αm1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​
所以,如果你有 nnn个特征,也就是说:θ=[θ0θ1θ2…θn]\theta=\left[ \begin{array}{c}{\theta_{0}} \\ {\theta_{1}} \\ {\theta_{2}} \\ {\dots} \\ {\theta_{n}}\end{array}\right]θ=⎣⎢⎢⎢⎢⎡​θ0​θ1​θ2​…θn​​⎦⎥⎥⎥⎥⎤​参数向量θ\thetaθ包括θ0\theta_0θ0​ θ1\theta_1θ1​θ2\theta_2θ2​ 一直到θn\theta_nθn​,那么你就需要用这个式子:
θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)\theta_{j} :=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}θj​:=θj​−αm1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​

来同时更新所有θ\thetaθ的值。
现在,如果你把这个更新规则和我们之前用在线性回归上的进行比较的话,你会惊讶地发现,这个式子正是我们用来做线性回归梯度下降的。

那么,线性回归和逻辑回归是同一个算法吗?要回答这个问题,我们要观察逻辑回归看看发生了哪些变化。实际上,假设的定义发生了变化。

对于线性回归假设函数:
hθ(x)=θTX=θ0x0+θ1x1+θ2x2+…+θnxnh_{\theta}(x)=\theta^{T} X=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n}hθ​(x)=θTX=θ0​x0​+θ1​x1​+θ2​x2​+…+θn​xn​
而现在逻辑函数假设函数:
hθ(x)=11+e−θTXh_{\theta}(x)=\frac{1}{1+e^{-\theta^{T} X}}hθ​(x)=1+e−θTX1​
因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。

在先前的视频中,当我们在谈论线性回归的梯度下降法时,我们谈到了如何监控梯度下降法以确保其收敛,我通常也把同样的方法用在逻辑回归中,来监测梯度下降,以确保它正常收敛。

当使用梯度下降法来实现逻辑回归时,我们有这些不同的参数θ\thetaθ,就是θ0\theta_0θ0​ θ1\theta_1θ1​θ2\theta_2θ2​ 一直到θn\theta_{n}θn​ ,我们需要用这个表达式来更新这些参数。我们还可以使用 for 循环来更新这些参数值,用 for i=1 to n,或者for i=1 to n+1。当然,不用 for 循环也是可以的,理想情况下,我们更提倡使用向量化的实现,可以把所有这些 个参数同时更新。

最后还有一点,我们之前在谈线性回归时讲到的特征缩放,我们看到了特征缩放是如何提高梯度下降的收敛速度的,这个特征缩放的方法,也适用于逻辑回归。如果你的特征范围差距很大的话,那么应用特征缩放的方法,同样也可以让逻辑回归中,梯度下降收敛更快。

就是这样,现在你知道如何实现逻辑回归,这是一种非常强大,甚至可能世界上使用最广泛的一种分类算法。

6.高级优化

CS229学习笔记(3)逻辑回归(Logistic Regression)相关推荐

  1. Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)”

    Coursera公开课笔记: 斯坦福大学机器学习第六课"逻辑回归(Logistic Regression)" 斯坦福大学机器学习第六课"逻辑回归"学习笔记,本次 ...

  2. 机器学习笔记04:逻辑回归(Logistic regression)、分类(Classification)

    之前我们已经大概学习了用线性回归(Linear Regression)来解决一些预测问题,详见: 1.<机器学习笔记01:线性回归(Linear Regression)和梯度下降(Gradien ...

  3. 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码

    吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...

  4. 斯坦福大学机器学习第四课“逻辑回归(Logistic Regression)”

    斯坦福大学机器学习第四课"逻辑回归(Logistic Regression)" 本次课程主要包括7部分: 1) Classification(分类) 2) Hypothesis R ...

  5. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  6. 线性回归 Linear Regression 与逻辑回归 Logistic Regression

    1 线性回归 Linear Regression 理论 线性回归模型研究多个变量x与y之间的关系,通过回归模型预测位置样本的数据. 假设函数 损失函数 损失函数寻优,最小二乘法 即: 注:最小二乘法需 ...

  7. 札记_ML——《统计学习方法》逻辑回归logistic regression)

    统计学习方法:五. 逻辑回归logistic regression 逻辑回归logistic regression Logistic的起源 1).概念logistic回归又称logistic回归分析, ...

  8. 逻辑回归(Logistic Regression

    6.1 分类问题 参考文档: 6 - 1 - Classification (8 min).mkv 在这个以及接下来的几个视频中,开始介绍分类问题. 在分类问题中,你要预测的变量 y y y 是离散的 ...

  9. 吴恩达机器学习 8.6 逻辑回归(Logistic Regression)

    6.1 分类问题 参考文档: 6 - 1 - Classification (8 min).mkv 在这个以及接下来的几个视频中,开始介绍分类问题. 在分类问题中,你要预测的变量 $y$ 是离散的值, ...

最新文章

  1. 一文看懂人脸识别技术发展脉络
  2. c语言编译时字符黑色,C语言黑与白问题
  3. hdu5375(格雷码问题+简单DP)
  4. 讨论群问题:Linux 下的批量操作,第2种很赞
  5. ps cc 生成html,使用photoshop生成网页的方法
  6. 一元多项式 java_java实现一元多项式加法
  7. 图文详解——将本地项目上传到码云(gitee)远程仓库
  8. 电脑窗口切换常用的快捷键有哪些
  9. HBuilderX运行微信小程序启动失败
  10. LaTeX错误“Unable to read an entire line---bufsize=200000. Please increase buf_size in texmf.cnf.”
  11. 量化金融入门笔记(一)
  12. fastdfs断点续传
  13. LinuxC学习日记
  14. 分析师不死心 仍坚信微软终将成功并购雅虎
  15. Linux 系统进程管理
  16. ios开发工具_7个基本的ios开发人员工具
  17. 基于SHCAN智能仪表的ECU检测系统ETest的开发
  18. struts2漏洞监测_struts2 漏洞 测试方案 与 解决方案
  19. (Visio)重新编辑画好的任意多边形
  20. 基于51单片机的无线遥控器制作

热门文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_3_Map接口中的常用方法...
  2. 突然情怀就上来啦,‘闭包’ 今天咱们讲一下子
  3. C# AE 对图层筛选要素后显示/只显示符合条件的要素
  4. 接收POst数据流数据
  5. VIM快捷键(转载)
  6. pku1363 Rails
  7. windows Server 2008+iis 7.5 部署应用程序
  8. pytorch-tensorflow版本选择-cuda8-cudnn5.1
  9. 数据结构上机实践第七周项目3 - 负数把正数赶出队列
  10. 数据结构上机实践第八周项目6- 猴子选大王(数组版)