​ 分类问题和线性回归问题很像,只是在分类问题中我们预测的 yyy 值包含在一个小的离散数据集里。首先,认识一下二元分类(binary classification),在二元分类中,y" role="presentation" style="position: relative;">yyy 的取值只能是 0 和 1。例如,我们要做一个垃圾邮件分类器,则 x(i)x(i)x^{(i)} 为邮件的特征,而对于 yyy,当它为1,则为垃圾邮件,为0 则表示邮件为正常邮件。所以 0 称之为负类(negative class),1为正类(positive class) 。

逻辑回归

​ 我们知道线性回归问题只能预测连续的值,而分类问题,往往是分成几个类,或者是某一类(y=1" role="presentation" style="position: relative;">y=1y=1y = 1),不是某一类(y=0y=0y =0)。对于后者,若已知 y∈{0,1}y∈{0,1}y \in \{0,1\} ,则 hθ(x)hθ(x)h_{\theta}(x) 大于1,或者小于0都是没有意义的。To fix this,我们选择:

hθ(x)=g(θTx)=11+eθTxhθ(x)=g(θTx)=11+eθTx

h_{\theta}(x) = g(\theta^Tx) = \frac{1}{1+e^{\theta^Tx}}

g(z)=11+ezg(z)=11+ez

g(z) = \frac{1}{1+e^z}

g(z)g(z)g(z) 是逻辑函数,或者叫==sigmoid函数== ,如下图所示。

​ 虽然其他平滑函数,只要能使 hθ(x)hθ(x)h_{\theta}(x) 的值限制到 [0,1] 也是可以的,其实选择sigmoid函数是很自然的,具体将在 讲GLM 算法的时候讲。

​ g(z)g(z)g(z) 的导数有个很重要的属性:

g(z)′====ddz11+eze−z(1+e−z)211+e−z−1(1+e−z)2g(z)[1−g(z)](119)(120)(121)(122)(119)g(z)′=ddz11+ez(120)=e−z(1+e−z)2(121)=11+e−z−1(1+e−z)2(122)=g(z)[1−g(z)]

\begin{eqnarray} g(z)' &=& \frac{d}{dz}\frac{1}{1+e^z}\\ &=&\frac{e^{-z}}{(1+e^{-z})^2}\\ &=& \frac{1}{1+e^{-z}}-\frac{1}{(1+e^{-z})^2}\\ &=& g(z)[1-g(z)] \end{eqnarray}
​ 那么,给定逻辑回归模型,我们如何拟合出合适的 θθ\theta ? 根据由最大似然估计得到 LSR,我们赋予分类模型一组概率假设,然后通过最大似然函数得到合适的参数。

p(y=1|x;θ)p(y=0|x;θ)==hθ(x)1−hθ(x)(123)(124)(123)p(y=1|x;θ)=hθ(x)(124)p(y=0|x;θ)=1−hθ(x)

\begin{eqnarray} p(y=1|x;\theta) &=& h_{\theta}(x)\\ p(y=0|x;\theta) &=& 1-h_{\theta}(x) \end{eqnarray}
​ 合并起来可以写成下面的形式:

p(y|x;θ)=(hθ(x))y(1−hθ(x))1−yp(y|x;θ)=(hθ(x))y(1−hθ(x))1−y

p(y|x;\theta) = (h_{\theta}(x))^y(1-h_{\theta}(x))^{1-y}
​ 假设 mmm 个训练样本是独立的,则参数的似然函数如下:

(125)L(θ)=p(y→|X;θ)(126)=∏i=1mp(y(i)|x(i);θ)(127)=∏i=1m(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)" role="presentation">L(θ)===p(y⃗ |X;θ)∏i=1mp(y(i)|x(i);θ)∏i=1m(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)(125)(126)(127)(125)L(θ)=p(y→|X;θ)(126)=∏i=1mp(y(i)|x(i);θ)(127)=∏i=1m(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)

\begin{eqnarray} L(\theta) &=& p(\vec y |X;\theta)\\ &=& \prod\limits_{i=1}^m p(y^{(i)}|x^{(i)};\theta)\\ &=& \prod\limits_{i=1}^m(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}} \end{eqnarray}

ℓ(θ)==lnL(θ)∑i=1m[y(i)lnhθ(x(i))+(1−y(i))ln(1−hθ(x(i)))](31)(32)(31)ℓ(θ)=lnL(θ)(32)=∑i=1m[y(i)lnhθ(x(i))+(1−y(i))ln(1−hθ(x(i)))]

\begin{eqnarray} \ell (\theta) &=& ln L(\theta) \\ &=&\sum\limits_{i=1}^m [y^{(i)}lnh_{\theta}(x^{(i)}) + (1-y^{(i)})ln(1-h_{\theta}(x^{(i)}))] \end{eqnarray}

​ 最大化似然函数的方法有两种。一种和线性回的推导相似,梯度上升的方法;另一种是牛顿法。

(1)梯度上升法

​ 用向量来表示的话 ,我们可以用下式来更新参数:

θ:=θ+α∇θℓ(θ)θ:=θ+α∇θℓ(θ)

\theta : = \theta + \alpha \nabla_{\theta}\ell(\theta)
​ 需要注意的是,这里是 + 不是 - ,因为是最大化似然函数。下面先假设只有一个训练样本 (x,y)(x,y)(x , y ) ,使用随机梯度上升规则。

∂ℓ(θ)∂θj=====∂∂θj[ylnhθ(x)+(1−y)ln(1−hθ(x))][y1hθ(x)−(1−y)11−hθ(x)]∂hθ(x)∂θj[y1g(θTx)−(1−y)11−g(θTx)]g(θTx)(1−g(θTx))∂θTx∂θj(y(1−g(θTx))−(1−y)g(θTx))xj(y−hθ(x))xj(33)(34)(35)(36)(37)(33)∂ℓ(θ)∂θj=∂∂θj[ylnhθ(x)+(1−y)ln(1−hθ(x))](34)=[y1hθ(x)−(1−y)11−hθ(x)]∂hθ(x)∂θj(35)=[y1g(θTx)−(1−y)11−g(θTx)]g(θTx)(1−g(θTx))∂θTx∂θj(36)=(y(1−g(θTx))−(1−y)g(θTx))xj(37)=(y−hθ(x))xj

\begin{eqnarray} \frac{\partial{\ell (\theta)}}{\partial{\theta_j}} &=& \frac{\partial}{\partial{\theta_j}}{[ylnh_{\theta}(x) + (1-y)ln(1-h_{\theta}(x))]} \\ &=& [y \frac{1}{h_{\theta}(x)} - (1-y)\frac{1}{1-h_{\theta}(x)}]\frac{\partial{h_{\theta}(x)}}{\partial{\theta_j}} \\ &=& [y \frac{1}{g({\theta}^Tx)} - (1-y)\frac{1}{1-g({\theta}^Tx)}]g({\theta}^Tx)(1-g({\theta}^Tx))\frac{\partial{{\theta}^Tx}}{\partial{\theta_j}} \\ &=& (y(1-g({\theta}^Tx)) - (1-y)g({\theta}^Tx))x_j \\ &=& (y - h_{\theta}(x))x_j \\ \end{eqnarray}

⇒θ:=θ+α(y−hθ(x))xj⇒θ:=θ+α(y−hθ(x))xj

\Rightarrow \quad \theta : = \theta + \alpha (y - h_{\theta}(x))x_j

​ 如果我们将其与LMS更新规则进行比较,我们会发现它看起来差不多; 但这不是相同的算法,因为 hθ(x(i))hθ(x(i))h_{\theta}(x^{(i)}) 现在被定义为 θTx(i)θTx(i)\theta^Tx^{(i)} 的非线性函数。 尽管如此,我们最终得到了相同的更新规则以获得相当不同的算法和学习问题。这是巧合吗,具体原因请移步GLM Model。

(11212\frac{1}{2})插叙:感知学习算法

​ 我们现在离题谈论一个具有一定历史意义的算法, 考虑修改逻辑回归的方法以“强制”它输出0或1或精确值。 要做到这一点,将 ggg 的定义更改为阈值函数似乎很自然:

g(z)={1(ifz≥0)0(ifz&lt;0)" role="presentation">g(z)={10(ifz≥0)(ifz<0)g(z)={1(ifz≥0)0(ifz<0)

g(z) = \left\{ \begin{array}{ll} 1 & (if \quad z\ge 0)\\0 & (if \quad z
​ 同样,令 hθ(x)=g(θTx)hθ(x)=g(θTx)h_{\theta}(x) = g(\theta^Tx) ,ggg 的定义如上式(22),同样用更新规则:

θ:=θ+α(y−hθ(x))xj" role="presentation" style="position: relative;">θ:=θ+α(y−hθ(x))xjθ:=θ+α(y−hθ(x))xj\theta : = \theta + \alpha (y - h_{\theta}(x))x_j ,这样便得到了==感知学习算法== (perceptron learning algorithm)

​ 在20世纪60年代,这种“感知机”被认为是解释大脑中各个神经元如何工作的粗略模型。尽管感知器可能在美学上与我们所讨论的其他算法相似,但它实际上是一种非常不同类型的算法,而不是逻辑回归和LSR。

(2)牛顿法

​ 回到逻辑回归,另一种最大化似然函数的方法是==牛顿法== (Newton’s method)。

​ 牛顿法的核心思想是找 0。假设有函数 f:R↦Rf:R↦Rf : \mathbb R \mapsto \mathbb R . 我们要找到一个 θθ\theta 使得 f(θ)=0f(θ)=0f(\theta) = 0 成立,θ∈Rθ∈R\theta \in \mathbb R,是一个实数。此时牛顿法的更新规则如下:

θ:=θ−f(θ)f′(θ)θ:=θ−f(θ)f′(θ)

\theta := \theta - \frac{f(\theta)}{f'(\theta)}
​ 这种方法有一个自然的解释,我们可以把它看作是通过线性函数逼近函数 fff ,线性函数在当前猜测 θ" role="presentation" style="position: relative;">θθ\theta 处与 fff 相切,求解线性函数等于零的位置,并让 θ" role="presentation" style="position: relative;">θθ\theta 的下一个猜测 θθ\theta 成为线性函数为零的地方。下面是牛顿法的图解:

​ 牛顿方法给出了一种获得 f(θ)=0f(θ)=0f(\theta) = 0 的方法。如果我们想用它来最大化函数 ℓℓ\ell 该怎么办呢?函数 ℓℓ\ell 的最大值对应其一阶导数 ℓ′ℓ′\ell' 为零的点。 因此,可以令

f(θ)=ℓ′(θ)f(θ)=ℓ′(θ)f(\theta) = \ell'(\theta) 。我们同样用更新规则的方式最大化 ℓℓ\ell :

θ:=θ−ℓ′(θ)ℓ′′(θ)θ:=θ−ℓ′(θ)ℓ″(θ)

\theta := \theta - \frac{\ell'(\theta)}{\ell''(\theta)}
​ 最后,在我们的逻辑回归数据中, θθ\theta 是向量,因此我们需要将牛顿方法推广到这些数据上。 牛顿法对这种多维数据的推广(称为==Newton-Raphson法==)由下式给出:

θ:=θ−H−1∇θℓ(θ)θ:=θ−H−1∇θℓ(θ)

\theta := \theta - H^{-1} \nabla_{\theta} \ell(\theta)
​ HHH 是 n×n" role="presentation" style="position: relative;">n×nn×nn \times n 的矩阵(实际上,如果加上截距项,则大小为 (n+1)×(n+1)(n+1)×(n+1)(n+1) \times (n+1) )。 HHH called ==Hessian== , 它的项的形式如下:

Hij=∂2ℓ(θ)∂θi∂θj" role="presentation">Hij=∂2ℓ(θ)∂θi∂θjHij=∂2ℓ(θ)∂θi∂θj

H_{ij} = \frac{\partial^2{\ell (\theta)}}{\partial{\theta_i}\partial{\theta_j}}
​ 牛顿法通常比 (batch) gradient descent更快收敛,并且需要更少的迭代次数就能达到非常接近最小值。 然而,牛顿法的一次迭代可能比一次梯度下降迭代代价更昂贵,因为它需要找到一个 n×nn×nn \times n 的Hessian矩阵,并求逆。但只要 nnn 不是太大,整体通常要快得多。牛顿方法用于最大化逻辑回归对数似然函数 ℓ(θ)" role="presentation" style="position: relative;">ℓ(θ)ℓ(θ)\ell (\theta)时,称为Fisher scoring 。

分类和逻辑回归(Classification and logistic regression)
斯坦福机器学习课程Lecture 1(cs229-notes1)

机器学习2 分类与逻辑回归相关推荐

  1. 机器学习(一)——线性回归、分类与逻辑回归

    http://antkillerfarm.github.io/ 序 这是根据Andrew Ng的<机器学习讲义>,编写的系列blog. http://www.cnblogs.com/jer ...

  2. 机器学习入门与Python实战(三):分类与逻辑回归 Logistic Regression

    目录 现实案例 分类预测 通过股价预测任务区分回归任务与分类任务 分类问题求解 更适合于分类场景的模型:逻辑回归 逻辑回归处理更复杂的分类任务 逻辑回归模型求解 Python实战:商业异常消费数据预测 ...

  3. 逻辑回归二分类算法python_机器学习第七周--二分类算法逻辑回归

    一.Logistic分类算法 逻辑回归(Logistic Regression, LR)是传统机器学习中的一种分类模型,由于算法的简单和高效,解释性好以及容易扩展等优点,被广泛应用于点击率预估(CTR ...

  4. 机器学习02-分类、逻辑回归

    目录 一.分类问题 Classification 二.分类问题的估值 Hypothesis Representation 三.分类问题的决策边界 Decision Boundary 四.分类问题的代价 ...

  5. Lesson 4.1-4.2 逻辑回归模型构建与多分类学习方法逻辑回归参数估计

    Lesson 4.1 逻辑回归模型构建与多分类学习方法 首先我们来讨论关于逻辑回归的基本原理,当然,在此过程中,我们也将进一步补充机器学习数学理论基础. 逻辑回归的基本原理,从整体上来划分可以分为两个 ...

  6. 机器学习系列(1)_逻辑回归初步

    转载自: 机器学习系列(1)_逻辑回归初步 - 寒小阳 - 博客频道 - CSDN.NET http://blog.csdn.net/han_xiaoyang/article/details/4912 ...

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

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

  8. Scikit-Learn 机器学习笔记 -- 线性回归、逻辑回归、softmax回归

    Scikit-Learn 机器学习笔记 – 线性回归.逻辑回归.softmax回归 参考文档: handson-ml import numpy as np from matplotlib import ...

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

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

最新文章

  1. 如何设置PHP常量,我应该如何保持我的常量在PHP
  2. AOP具体的实现写法
  3. 图解Oracle dump 命令初步
  4. php写接口的注意事项,接口的调用注意事项
  5. Android之SwipeRefreshLayout
  6. fn:substring()函数
  7. 水晶底是什么材质_都是红酒杯,水晶的和玻璃的有什么区别?
  8. mybatis-plus忽略映射字段
  9. linux 清空history以及记录原理
  10. python c语言实现 书_用C语言实现python的扩展模块
  11. ThinkPhp报错:thinkphp\library\think\Template.php Line(1243) template not exists:...test\...\index.html
  12. 堆排序(Java语言实现)
  13. mysql优化(关联查询优化)
  14. css td 强制换行,css表格强制换行
  15. 程序员如何写项目经历
  16. Lambda-Stream应用
  17. C盘满了,要怎么清理才不会误删?
  18. 如何选挂耳式运动耳机?六款挂耳式运动耳机推荐
  19. 坚鹏:苏州银行《银行数字化运营之行动篇》课程培训圆满结束
  20. html 鼠标悬停显示文字

热门文章

  1. SpringCloud + Gateway + Nacos, 服务注册在Nacos后,出现nacos后台服务列表有时候刷不出来服务,导致服务失效。
  2. jitter 如何优化网络_PLL jitter 测试过大,如何优化?
  3. Python基础2——open函数
  4. MATLAB 实现 歌曲《两只老虎》 播放
  5. RVIZ 的菜单背景变成黑色
  6. 做为一个新手如何架设传奇
  7. SpringBoot——JPA的使用、构建restful风格的JPA
  8. 无法启用IE代理,EasyConnect不支持自动检测设置,请手动配置代理服务器的IP和端口后重试
  9. 【笔记】ARM架构和ARM芯片(三)
  10. android轻量级数据存储框架Hawk