吴恩达机器学习--中文笔记--第三周


本文是在学习吴恩达老师机器学习课程的基础上结合老师的ppt文献然后加上自身理解编写出来的,有些地方可能有遗漏或错误,欢迎大家批评指正。希望我们一起学习,一起进步!

第三个星期

1.分类和表示

1.1 分类

一般来说,分类算法可以应用在以下领域,这里有三个例子:

  1. 邮件分类:垃圾邮件/正常邮件?
  2. 在线交易:诈骗?(是/否)?
  3. 肿瘤:恶性/良性?

我们可以用 y ∈ { 0 , 1 } y∈\{0,1\} y{0,1}来表示二分类,0表示Negative Class(负类),1表示Positive Class(正类)。

有的同学可能会说,我可不可以用线性回归做分类问题呢?
答案是:不合适。
在这里插入图片描述
在这里,如果恶性肿瘤的样本出现一个极端值(如上图右上角×),使用线性回归模型,那么良恶性概率0.5的点将落在偏向恶性肿瘤的 范围内,使得模型不是很准确。

在二分类问题中, y = 0 或 者 y = 1 y=0或者y=1 y=0y=1,一般的线性回归模型, h θ ( x ) h_{\theta}(x) hθ(x)可能会>1或者<0。所以不太合适,我们就提出一种新的模型——逻辑回归(Logistic Regression),在逻辑回归中 0 ≤ h θ ( x ) ≥ 1 0≤h_{\theta}(x)≥1 0hθ(x)1

1.2 假设的表示

为了保证满足 0 ≤ h θ ( x ) ≤ 1 0≤h_{\theta}(x)≤1 0hθ(x)1,我们引入Logistic Function-逻辑函数,因为它的值域是(0,1)。
逻辑函数的定义为 g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1,图像为:
在这里插入图片描述
接下来,我们让 z = θ T x z=\theta^Tx z=θTx,令 h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_{\theta}(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}} hθ(x)=g(θTx)=1+eθTx1
问题来了,现在 h θ ( x ) h_{\theta}(x) hθ(x)的含义是什么呢?
在这里,我们可以将之理解为一种概率,一种使得输出为1的概率,例如:在上一节的肿瘤问题中, h θ ( x ) = 0.7 h_{\theta}(x)=0.7 hθ(x)=0.7代表肿瘤为恶性的概率为0.7。
另外,公式之间的转化如下:
h θ ( x ) = P ( y = 1 ∣ x ; θ ) = 1 − P ( y = 0 ∣ x ; θ ) h_{\theta}(x)=P(y=1|x;\theta)=1-P(y=0|x;\theta) hθ(x)=P(y=1x;θ)=1P(y=0x;θ)
P ( y = 0 ∣ x ; θ ) + P ( y = 1 ∣ x ; θ ) = 1 P(y=0|x;\theta)+P(y=1|x;\theta)=1 P(y=0x;θ)+P(y=1x;θ)=1

1.3决策边界

本节,我们用图像来展示一下逻辑回归的决策边界。
首先,我们进行一些必要的解释和推理。假设 y = 1 y=1 y=1也就是说 h θ ( x ) ≥ 0.5 h_{\theta}(x)≥0.5 hθ(x)0.5,可以得到, g ( z ) ≥ 0.5 , ∴ z ≥ 0 , ∴ θ T x ≥ 0 g(z)≥0.5,∴z≥0,∴\theta^Tx≥0 g(z)0.5z0θTx0
反之 y = 0 y=0 y=0,则 θ T x < 0 \theta^Tx<0 θTx<0
举个栗子(下饭):
在这里插入图片描述
可以看出,我们给出这样一个数据集和一个假设函数 h θ ( x ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 ) , 这 里 θ = [ − 3      1      1 ] T h_{\theta}(x)=g(\theta_{0}+\theta_1x_1+\theta_2x_2),这里\theta=[-3 \;\;1\;\; 1]^T hθ(x)=g(θ0+θ1x1+θ2x2)θ=[311]T,在 y = 1 y=1 y=1时, h θ ( x ) ≥ 0.5 = > θ 0 + θ 1 x 1 + θ 2 x 2 ≥ 0.5 h_\theta(x)≥0.5=>\theta_{0}+\theta_1x_1+\theta_2x_2≥0.5 hθ(x)0.5=>θ0+θ1x1+θ2x20.5。这样,我们就得到了一条决策线过 ( 0 , 3 ) 和 ( 3 , 0 ) (0,3)和(3,0) (0,3)(3,0)两个点。线的上方就是分类为1的点。
另外还有一个例子供大家参考:
在这里插入图片描述
原理一样,这里就不多说了。

2.逻辑回归(Logistic Regression)模型

2.1代价函数

在逻辑回归中,它的代价函数不可能像线性回归一样,因为逻辑函数的输出是一种震荡型的,有很多的局部最优点。所以逻辑回归的代价函数我们准备这样定义:
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J(\theta) = \dfrac{1}{m} \sum_{i=1}^m \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) J(θ)=m1i=1mCost(hθ(x(i)),y(i))
C o s t ( h θ ( x ) , y ) = − log ⁡ ( h θ ( x ) )    if y = 1 \mathrm{Cost}(h_\theta(x),y) = -\log(h_\theta(x)) \; \text{if y = 1} Cost(hθ(x),y)=log(hθ(x))if y = 1
C o s t ( h θ ( x ) , y ) = − log ⁡ ( 1 − h θ ( x ) )    if y = 0 \mathrm{Cost}(h_\theta(x),y) = -\log(1-h_\theta(x)) \; \text{if y = 0} Cost(hθ(x),y)=log(1hθ(x))if y = 0
通过观察上面的公式,我们也大致对公式有了一定的认识,接下来我们将它们的图像画出来看一看。
y = 1 y=1 y=1时,我们画出 J ( θ ) J(\theta) J(θ) h θ ( x ) h_\theta(x) hθ(x)变化的图像
在这里插入图片描述
y = 0 y=0 y=0时,我们画出 J ( θ ) J(\theta) J(θ) h θ ( x ) h_\theta(x) hθ(x)变化的图像
在这里插入图片描述
我们单独把Cost()拿出来讨论一下。
C o s t ( h θ ( x ) , y ) = 0  if  h θ ( x ) = y \mathrm{Cost}(h_\theta(x),y) = 0 \text{ if } h_\theta(x) = y Cost(hθ(x),y)=0 if hθ(x)=y
C o s t ( h θ ( x ) , y ) → ∞  if  y = 0    a n d    h θ ( x ) → 1 \mathrm{Cost}(h_\theta(x),y) \rightarrow \infty \text{ if } y = 0 \; \mathrm{and} \; h_\theta(x) \rightarrow 1 Cost(hθ(x),y) if y=0andhθ(x)1
C o s t ( h θ ( x ) , y ) → ∞  if  y = 1    a n d    h θ ( x ) → 0 \mathrm{Cost}(h_\theta(x),y) \rightarrow \infty \text{ if } y = 1 \; \mathrm{and} \; h_\theta(x) \rightarrow 0 Cost(hθ(x),y) if y=1andhθ(x)0

2.2简易的代价函数和梯度下降方法

因为 y = 0    o r    y = 1 y=0\;or\;y=1 y=0ory=1,从数学的角度,我们可以将上一节的代价函数进行一个整合,结果如下:
C o s t ( h θ ( x ) , y ) = − y    l o g ( h θ ( x ) ) − ( 1 − y )    l o g ( 1 − h θ ( x ) ) ) Cost(h_\theta(x),y)=-y\;log(h_\theta(x))-(1-y)\;log(1-h_\theta(x))) Cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x)))
这样一来, J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=\frac{1}{m}\sum\limits_{i=1}^{m}[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(1-h_\theta(x^{(i)}))] J(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))]
如果用向量来表示,我们可以这样写:
h = g ( X θ ) h=g(X\theta) h=g(Xθ)
J ( θ ) = 1 m ⋅ ( − y T log ⁡ ( h ) − ( 1 − y ) T log ⁡ ( 1 − h ) ) J(\theta)=\frac{1}{m}\cdot \left(-y^{T}\log(h)-(1-y)^{T}\log(1-h)\right) J(θ)=m1(yTlog(h)(1y)Tlog(1h))
接下来,就是梯度下降的方法,常规下,梯度下降这样来表示:
R e p e a t {        θ j : = θ j − α ∂ ∂ θ j J ( θ ) } Repeat\{ \newline\;\;\;\theta_j:=\theta_j-\alpha \dfrac{\partial}{\partial \theta_j}J(\theta) \newline\} Repeat{θj:=θjαθjJ(θ)}
我们将 J ( θ ) J(\theta) J(θ)展开计算,结果如下。
R e p e a t {        θ j : = θ j − α 1 m ∑ i = 1 m [ ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ] } Repeat\{ \newline\;\;\;\theta_j:=\theta_j-\alpha \frac{1}{m}\sum\limits_{i=1}^{m}[(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}] \newline\} Repeat{θj:=θjαm1i=1m[(hθ(x(i))y(i))xj(i)]}
注意: θ \theta θ同时更新。
如果用向量来表示更新过程,那么
θ : = θ − α 1 m X T ( g ( X θ ) − y ) \theta:=\theta-\alpha\frac{1}{m}X^T(g(X\theta)-y) θ:=θαm1XT(g(Xθ)y)

2.3高级优化方案

除了gradient decent(梯度下降)。在这里,还有很多用于计算 m i n ( J ( θ ) ) min(J(\theta)) min(J(θ))的方法。比如conjugate gradient(共轭梯度),BFGS,L-BFGS等。
这些方法相对于梯度下降有下面的优缺点:

  1. 优点
    不需要手动的选择学习率 α \alpha α;并且速度比梯度下降要快
  2. 缺点
    相较于梯度下降更为复杂

鉴于这些方法比较复杂,同时matlab/octave工具箱内也包含了相应的计算工具,这里就不再展开讲解,有兴趣的同学可以看看相应的博客讲解。
从代码层面来讲,无论使用什么方法,都要计算 J ( θ ) J(\theta) J(θ)及其导数

function [jVal, gradient] = costFunction(theta)
  jVal = [...code to compute J(theta)...];
  gradient = [...code to compute derivative of J(theta)...];
end

如果决定使用这些高级优化方法,matlab工具箱提供了fminunc()方法来进行计算。下面是一个代码例子。

options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
   [optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

3.多类别分类

在二分类中,分类情形比较简单,我们仅仅需要单条回归线即可解决,但是在多类别分类中,我们该如何解决呢?其实也不难,你可以把当前类别分为该类别(1)和其他类别(0),这样就转化为了二分类问题,不同的是在多分类中,需要多条回归线分类解决。
假设 y ∈ { 0 , 1... n } y∈\{0,1...n\} y{0,1...n},针对0至n类别,我们的不同假设函数将表达下列含义:
h θ ( 0 ) ( x ) = P ( y = 0 ∣ x ; θ ) h_\theta^{(0)}(x)=P(y=0|x;\theta) hθ(0)(x)=P(y=0x;θ)
h θ ( 1 ) ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta^{(1)}(x)=P(y=1|x;\theta) hθ(1)(x)=P(y=1x;θ)

h θ ( n ) ( x ) = P ( y = n ∣ x ; θ ) h_\theta^{(n)}(x)=P(y=n|x;\theta) hθ(n)(x)=P(y=nx;θ)
p r e d i c t i o n = max ⁡ i ( h θ ( i ) ( x ) ) prediction=\max\limits_{i}(h_\theta^{(i)}(x)) prediction=imax(hθ(i)(x))
下面是一个例子
在这里插入图片描述
需要注意的一点是,在预测时,我们需要将输入值 X X X代入到每一个 h θ ( i ) ( x ) h_\theta^{(i)}(x) hθ(i)(x)中,选取可能性最大的那一个作为最终的分类类别(因为 h θ ( i ) ( x ) h_\theta^{(i)}(x) hθ(i)(x)本身是一个概率值)。

4.解决过拟合问题

4.1什么是过拟合问题

首先来看几张图
在这里插入图片描述
最左面的那张图使用的假设模型是 y = θ 0 + θ 1 x y=\theta_0+\theta_1x y=θ0+θ1x,但是从效果上来看,直线的拟合度似乎没有那么好,事实上,这个假设模型它发挥它天大的本事也没能把训练集数据拟合的特别好,更别说让它去预测了,这种我们称之为underfitting(欠拟合)
然后来看最右面那张图,它使用的假设模型是 y = ∑ j = 0 5 θ j x j y=\sum\limits_{j=0}^{5}\theta_jx^j y=j=05θjxj,从直观效果上来看,我们的假设曲线Amazing地穿过了每一个数据点,非常的精确,然而,呵呵,轮到它去预测的时候会让你大跌眼镜,比如当x=0时,从图上找一找,几乎达到了最大值啊,肉眼可见的不准确。这种训练猛如虎,预测250的行为我们称之为overfitting(过拟合)
你再看中间那张图就很舒服啦,它的假设模型为 y = θ 0 + θ 1 x + θ 2 x 2 y=\theta_0+\theta_1x+\theta_2x^2 y=θ0+θ1x+θ2x2,从效果上来看,在训练的时候基本上穿过了每一个点,在预测的时候也会比较合情合理。这样的就属于正常人啦。
那么上面那两个妖怪(underfitting和overfitting)是怎么形成的呢
underfitting欠拟合是因为假设模型中的参数太简单或者说特征太少,导致假设模型没有能力表现出数据所想表达的姿态。
overfitting过拟合是因为假设模型太复杂或者说无用特征太多,导致假设模型太敏感而延伸一些不必要的曲线和角度,与数据大相庭径。
对于underfitting欠拟合,我们多发现几个关键特征,提升一下维度或许就可以解决。
对于overfitting过拟合,我们一般采取下面的方法予以解决。

  1. 减少特征的数量
  • 手动筛选所要保留的特征
  • 使用模型筛选算法
  1. 正则化
  • 保持所有特征不变,削减参数 θ j \theta_j θj的权重
  • 当我们有很多稍微有用的特性时,正则化效果很好

4.2代价函数

上节我们提到,遇到overfitting的情况,我们可以采取削减参数 θ j \theta_j θj权重的方式来解决。
假设 h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3+\theta_4x^4 hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4,我们认为, x 3 a n d x 4 x^3 and x^4 x3andx4是比较干扰的项,所以我们修改 J ( θ ) J(\theta) J(θ)
m i n θ 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 + 1000 ∗ θ 3 2 + 1000 ∗ θ 4 4 min_\theta\frac{1}{2m}\sum\limits_{i=1}^{m}(h(x^{(i)})-y^{(i)})^2+1000*\theta_3^2+1000*\theta_4^4 minθ2m1i=1m(h(x(i))y(i))2+1000θ32+1000θ44
在这里可以看出,我们添加了 1000 ∗ θ 3 2 + 1000 ∗ θ 4 4 1000*\theta_3^2+1000*\theta_4^4 1000θ32+1000θ44项,这样会使 θ 3 a n d θ 4 \theta_3and\theta_4 θ3andθ4比较小,从而使得 x 3 a n d x 4 x^3 and x^4 x3andx4的影响力降低,达到相应的效果。
然而一般来说,我们不知道要削减的参数具体是哪个,所以可以进行统一正则化,如下。
m i n θ 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 min_\theta\frac{1}{2m}\sum\limits_{i=1}^{m}(h(x^{(i)})-y^{(i)})^2+λ\sum\limits_{j=1}^{n}\theta_j^2 minθ2m1i=1m(h(x(i))y(i))2+λj=1nθj2
其中, λ λ λ是正则参数, λ λ λ过小,还是会过拟合 λ λ λ过大,就会欠拟合
注意,正则项是从 θ 1 \theta_1 θ1开始的,除非必要,一般不会动 θ 0 \theta_0 θ0

4.3线性回归正则化

上节讲到,我们不会对 θ 0 \theta_0 θ0进行正则化,所以梯度下降算法这样写:
Repeat  { \text{Repeat}\ \lbrace Repeat {
θ 0 : = θ 0 − α   1 m   ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \theta_0 := \theta_0 - \alpha\ \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)} θ0:=θ0α m1 i=1m(hθ(x(i))y(i))x0(i)
θ j : = θ j − α   [ ( 1 m   ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ) + λ m θ j ]   j ∈ { 1 , 2... n } \theta_j := \theta_j - \alpha\ \left[ \left( \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} \right) + \frac{\lambda}{m}\theta_j \right] \ j \in \lbrace 1,2...n\rbrace θj:=θjα [(m1 i=1m(hθ(x(i))y(i))xj(i))+mλθj] j{1,2...n}
} \rbrace }
θ j \theta_j θj的更新而言,我们也可以将其整理成下面这个样子:
θ j : = θ j ( 1 − α λ m ) − α m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j:=\theta_j(1-\alpha\frac{\lambda}{m})-\frac{\alpha}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_{j}^{(i)} θj:=θj(1αmλ)mαi=1m(hθ(x(i))y(i))xj(i)
这里面 ( 1 − α λ m ) (1-\alpha\frac{\lambda}{m}) (1αmλ)项总是小于1
我们知道对于线性回归,还有一种解法就是使用正规方程,那么添加正则化之后的正规方程将如何改变?
原正规方程: θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)1XTy
正则化: θ = ( X T X + λ Z ) − 1 X T y , Z = [ 0 0 . . . 0 0 0 1 0 . . . 0 . . . 0 0 . . . 1 0 0 0 . . . 0 1 ] \theta=(X^TX+\lambda Z)^{-1}X^Ty,Z=\left[ \begin{matrix} 0 & 0 & ... & 0 & 0\\ 0& 1 & 0 & ... & 0 \\ & & ... & & \\ 0 & 0 & ... & 1 & 0 \\ 0 & 0 & ... & 0 & 1\end{matrix} \right] θ=(XTX+λZ)1XTy,Z=00000100...0.........0...100001
Z其实就是单位矩阵第一个元素将1换为了0
在这里插入图片描述
值得注意的一点是假设样本数m小于特征数n, ( X T X ) (X^TX) (XTX)是不可逆的,但是我们加上了 λ Z \lambda Z λZ之后, ( X T X + λ Z ) (X^TX+\lambda Z) (XTX+λZ)整体会变得可逆。

4.4逻辑回归的正则化

类似于线性回归的正则化,我们可以向下面这张图所示的那样去对逻辑回归进行正则化。
在这里插入图片描述
原来的逻辑回归代价函数为: J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ]            ( 1 ) J(\theta)=-\frac{1}{m}\left[ \sum\limits_{i=1}^{m}y^{(i)}log\left(h_\theta(x^{(i)})\right)+(1-y^{(i)})log\left( 1-h_\theta(x^{(i)})\right)\right]\;\;\;\;\;(1) J(θ)=m1[i=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))](1)
增加正则项的逻辑回归代价函数为: J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2            ( 2 ) J(\theta)=-\frac{1}{m}\left[ \sum\limits_{i=1}^{m}y^{(i)}log\left(h_\theta(x^{(i)})\right)+(1-y^{(i)})log\left( 1-h_\theta(x^{(i)})\right)\right]+\frac{\lambda}{2m}\sum\limits_{j=1}^{n}\theta_j^2\;\;\;\;\;(2) J(θ)=m1[i=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]+2mλj=1nθj2(2)
对(2)式进行求导、梯度下降,结果为:
在这里插入图片描述

参考文献

链接: Coursera Machine Learning.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值