吴恩达机器学习笔记3

分类问题  Classification

在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。】

分类问题的例子有:

  • 判断一封电子邮件是否是垃圾邮件;
  • 判断一次金融交易是否是欺诈;
  • 肿瘤分类问题的例子,区别一个肿瘤是恶性的还是良性的。
  • ...

显然,根据我们的理解,用线性回归不能解决一个分类问题。下面的内容要介绍一个常用的分类方法:逻辑回归 (Logistic Regression)

逻辑回归  Logistic Regression

假设的表示

逻辑回归模型输出变量范围始终在0和1之间。

逻辑回归模型的假设是:h_\theta (x)=g(\theta ^TX),其中,X代表特征向量g代表逻辑函数(logistic function)。Logistics函数也叫Sigmoid函数

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

该函数的图像为:

h_\theta (x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性,即h_\theta (x)=P(y=1|x;\theta )。例如,如果对于给定的x,通过已经确定的参数计算得出h_\theta (x)=0.7,则表示有70%的几率y为正向类。

决策边界  Decision Boundary

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

当时h_\theta (x)> 0.5,预测y=1

当时h_\theta (x)< 0.5,预测y=0

根据上面绘制出的Sigmoid函数图像,我们知道当

z=0时,g(z)=0.5

z> 0时,g(z)>0.5

z<0时,g(z)<0.5

又因为z=\theta ^Tx,则\theta ^Tx\geq 0时,预测y=1\theta ^Tx\leq 0时,预测y=0

假设有一个模型:

并且参数\theta =[-3,1,1]。则当-3+x_1+x_2\geq 0,即x_1+x_2\geq 3时,模型将预测y=1

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

因为需要用曲线才能分隔y=0的区域和y=1的区域,我们需要二次方特征:

                                                            h_\theta(x)=g(\theta_0+\theta _1x_1+\theta _2x_2+\theta _3x_2^2+\theta _4x_2^2)

我们可以用非常复杂的模型来适应非常复杂形状的判定边界。那么接下来如何确定\theta呢?

代价函数  Cost Function

定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的逻辑回归模型的拟合问题。

对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将h_\theta (z)=\frac{1}{1+e^{-\theta^Tz}}带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数non-convexfunction

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

线性回归的代价函数为:

                                                             \small J(\theta )=\frac{1}{m} \sum_{i=1}^{m}\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2

我们重新定义逻辑回归的代价函数为:

                                                            \small J(\theta )=\frac{1}{m} \sum_{i=1}^{m}Cost(h_\theta(x^{(i)}),y^{(i)})

其中

                                                          \small Cost(h_\theta,y)=\begin{cases} & -log(h_\theta(x),y),\text{ if } y=1 \\ & -log(1-h_\theta(x)),\text{ if } x= 0 \end{cases}

\small h_\theta(x)\small Cost(h_\theta(x}),y)关系如下图:

这样构建的函数\small Cost(h_\theta(x}),y)的特点是:

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

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

将构建\small Cost(h_\theta(x}),y)的简化如下:

在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了,算法为

 求导后得:

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))

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

高级优化  Advanced Optimization

Conjugate gradient

共轭梯度法 BFGS (变尺度法

L-BFGS (限制变尺度法)

优点:

一个是使用这其中任何一个算法,你通常不需要手动选择学习率\alpha,所以对于这些算法的一种思路是,给出计算导数项和代价函数的方法,你可以认为算法有一个智能的内部循环,而且,事实上,他们确实有一个智能的内部循环,称为线性搜索(line search)算法,它可以自动尝试不同的学习速率\alpha,并自动选择一个好的学习速率\alpha

多类别分类:一对多  Multiclass Classification_ One-vs-all

如何使用逻辑回归 (logistic regression)来解决多类别分类问题?可以通过一个叫做"一对多" (one-vs-all) 的分类算法。

对于一个多类分类问题,数据集或许看起来像这样:

对于右图的训练集,三种类别分别用三角,方块,叉号表示。

我们先从用三角形代表的类别1开始,实际上我们可以创建一个,新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。

这里的三角形是正样本,而圆形代表负样本。下面就要训练一个标准的逻辑回归分类器,这样就得到一个正边界。

为了能实现这样的转变,我们将多个类中的一个类标记为正向类(y=1),然后将其他所有类都标记为负向类,这个模型记作h_\theta^{(1)}(x)。接着,类似地第我们选择另一个类标记为正向类(y=2),再将其它类都标记为负向类,将这个模型记作h_\theta^{(2)}(x) ,依此类推。最后我们得到一系列的模型简记为:

                                                                             h_\theta^{(i)}(x)=p(y=i|x;\theta),

其中,i=1,2,...,k

最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。我们要做的就是在我们三个分类器里面输入x,然后我们选择一个让 最大的h_\theta^{(i)}(x),即\max_{i}h_\theta^{(i)}(x)

正则化  Regularization

过拟合的问题  Overfitting

当将线性回归和逻辑回归等算法应用到某些特定的机器学习应用时,会遇到过拟合(over-fitting)的问题,可能会导致它们效果很差。

例如在分类问题中:

以多项式拟合为例,x的次数越高,拟合的越好,但相应的预测的能力就可能变差。

那么如果我们发现了过拟合问题,应该如何处理?

  1. 丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA)。但是可能会导致舍弃部分数据。
  2. 正则化。 保留所有的特征,但是减少参数的大小(magnitude)。

代价函数  Cost Function

上面的回归问题中如果我们的模型是:

                                                              h_\theta(x)= \theta_0+\theta_1x_1+\theta_2x_2^2+\theta_3x_3^3+\theta_4x_4^4

可以从之前的事例中看出,正是那些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于0的话,我们就能很好的拟合了。 所以我们要做的就是在一定程度上减小这些参数\theta的值,这就是正则化的基本方法。

假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了一个较为简单的能防止过拟合问题的假设:

                                                             J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2+\lambda \sum_{j=1}^{n}\theta_j^2]

其中\lambda又称为正则化参数(Regularization Parameter

注意:根据惯例,我们不对\theta_0进行惩罚。

经过正则化处理的模型与原模型的可能对比如下图所示:

那为什么增加的一项 \lambda \sum_{j=1}^{n}\theta_j^2可以使\theta的值减小呢?因为如果我们令\lambda的值很大的话,为了使Cost Function尽可能的小,所有的 的\theta值(不包括\theta _0)都会在一定程度上减小。但若\lambda的值太大了,那么\theta值(不包括\theta _0)都会趋近于0,这样我们所得到的只能是一条平行于x轴的直线。 所以对于正则化,我们要取一个合理的\lambda的值,这样才能更好的应用正则化。

正则化线性回归 Regularized Linear Regression

对于线性回归的求解,两种学习算法:一种基于梯度下降,一种基于正规方程(见第2周笔记)。

正则化线性回归的代价函数为:

                                                         J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}[((h_\theta(x^{(i)})-y^{(i)})^2+\lambda \sum_{j=1}^{n}\theta_j^2)]

即:

                                                         \theta_j:=\theta_j(1-\alpha \frac{\lambda}{m})-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}

可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令\theta值减少了一个额外的值。

同样也可以利用正规方程来求解正则化线性回归模型,方法如下所示:

                                                     \theta=(X^TX+\lambda\begin{bmatrix} 0 & & & &\\ & 1 & & &\\ & & 1 & &\\ & & & ... &\\ & & & & 1 \end{bmatrix})^{-1}X^Ty

公式中矩阵尺寸为(n+1)*(n+1)

正则化的逻辑回归模型  Regularized Logistic Regression

针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数J(\theta),接下来学习了更高级的优化算法,这些高级优化算法需要你自己设计代价函数J(\theta)

自己计算导数同样对于逻辑回归,我们也给代价函数增加一个正则化的表达式,得到代价函数:

                                     J(\theta)=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(-1h_\theta(x^{(i)}))]+\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2

要最小化该代价函数,通过求导,得出梯度下降算法为:

repeat \ until \ convergence \left\{\\ {\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({​{x}^{(i)}})-{​{y}^{(i)}})x_{0}^{(i)}})\\ {\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({​{x}^{(i)}})-{​{y}^{(i)}})x_{j}^{\left( i \right)}}+\frac{\lambda }{m}{\theta_j}]\\ j=1,2,...n\\ \right\}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值