11月 25

机器学习之逻辑回归和线性回归

Published at Nov 25, 2015 • Machine Learning Cousera

一. 前言

这是Cousera上Andrew Ng的机器学习入门公开课,11周的课程马上就要结束了。整体上,我觉得这11周的课程相对比较简单,很容易听懂,少去很多数学的原理推导,很适合初学者,也让初学者建立了机器学习领域的一些宏观概念。

之前,很多人推荐李航博士的《统计学习方法》作为入门教程,看完Andrew Ng的课程视频后,再去阅读《统计学习方法》,会轻松很多

我先总结Week 1~3,主要涉及到监督学习中的线性回归和逻辑回归,避免过拟合等内容

二. Week One

2.1 Introduction

2.1.1 环境的建立

教你搭建Octave/MATLAB,这部分不多说

2.1.2 Introduction

说明什么是监督学习,什么是非监督学习

监督学习:

  • 对于离散变量,主要是分类问题
  • 对于连续变量,主要是回归问题

非监督学习:数据集没有明确的标签,我们需要在这堆数据中寻找他们的数据结构,常见的:聚类问题

2.2 Linear Regression with One Variable

一元线性回归问题

2.2.1 描述一个简单机器学习模型

首先,说明在一个机器学习模型中,要用到的几个字母变量(符号)的定义:

  • E: Experience
  • T: Tasks
  • P: Performance
  • x: 特征变量
  • y: 目标变量
  • m: 训练集的数目
  • (x, y): 训练样本
  • (x(i), y(i)): 第i个训练样本
  • h: 预测函数

好了,有了这些符号,我们就可以表示一个机器学习模型了:

首先,既然是线程回归问题,我们就先假设预测函数h的公式为:

其中,,我们称为模型参数

然后,学习算法(learning algorithm)会通过training set训练集,得到一个最优的预测函数h(对应一个模型参数)。之后,从测试集中取出x,通过预测函数的映射,即可得到预测的目标变量y

需要说明的是:如何得到一个最优的预测函数h?

很简答,就是通过代价函数,寻找使得代价函数最小的模型参数θ

平方误差是解决回归问题的常用方法,定义一个代价函数J就很简单:

通过某种方法,寻找到使得代价函数最小的那个模型参数θ,即是我们最终需要的结果

2.2.2 如何求解模型参数θ(专业地说:如何进行参数学习)

cousera上介绍了一种最经典的算法:梯度下降算法

大致的工作过程即,从某个随机的θ0, θ1开始,不停地改变θ0, θ1的值,以保证J(θ0, θ1)不断地减小,直至在某个最小值处结束(不停地在迭代运行)

来张图理解一下(仿佛一个人下山的过程)

梯度下降算法定义:

其中,α叫做学习速率(learning rate),α很大,下山的步伐会迈的很大;α很小,下山的步伐会迈的相对较小。α用以控制我们以多大的幅度去更新参数θj

α不宜设置过大,否则容易出现波动,难以收敛

再看看α后面的偏导数项,它代表什么意思呢?

先看上面的图,偏导数表示红色线的斜率,此时斜率为正,那么θ1就会减去α*一个正数,θ1会逐渐变小,直至最低点

下面的图,斜率为负,θ1会逐渐变大,直至最低点

ok,梯度下降算法定义解释完毕。在本例中,hθ(x)=θ0+θ1*x,那么梯度下降算法的具体步骤为:

此时,已经具体到了θ0和θ1的具体变换过程

需要注意的是:θ0和θ1是需要同时更新变化执行迭代的

三. Week Two

3.1 Linear Regression with Multiple Variables

多元线性回归问题

既然已经不止一个特征变量了,那么之前用x表示特征变量,现在要换一种表示方法了:

  • n: 表示特征值的个数
  • xj(i):第i个训练样本的第j个特征的值

此时预测函数h表示为:hθ(x) = θT*x

为了符号的方便表示,我们总是定义x(j)0为1

下面,解释在多元线性回归中的梯度下降算法:

首先,是它的代价函数

然后是θj的变换过程

ok,下面再介绍梯度下降算法在实际应用中的两个注意点:

  • 特征缩放
  • 学习速率的选择

特征缩放:

假设,现有一个房价预测系统,若现有两个特征:x1, x2。x1表示房屋的面积,取值范围:0~2000,x2表示房间的个数,取值范围:1~5

这两个特征的取值的取值规模不在一个级别,使用梯度下降算法时,收敛不快,且容易发生波动。应使用特征缩放方法将两个特征的取值范围约束到大体一致的范围:

  • 一种方法是:x1=x1/2000,每个特征处以该特征值的最大值。这样,取值范围都被缩小为0~1。一般-1~1, -1/3~1/3和-3~3均可接受
  • 第二种方法,归一化处理:(xi-平均值)/(MAX-MIN)

学习速率α

上面已经解释了learning rate的意义。正常的梯度下降算法,随着迭代次数的增加,代价函数逐渐减小;不正常的工作流程,有可能出现波动现象

不正常的工作现象:

看了公开课后的结论是:α一般从0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1开始选择

截至目前,我们一直都在使用梯度下降算法求解最优的模型参数。梯度下降算法最显著的特征就是,需要不停地迭代

视频中还介绍了另一种求解方法:正规方程(Normal Equation)

θ=(xT*x)-1*xT*y(证明略…)

它一步即可得到最优的模型参数值

现在,我们来比较一下:

梯度下降算法(Gradient Descent) 正规方程(Normal Equation)
需要选择学习速率α 不需要选择学习速率α
需要多次迭代 不需要迭代,一步得结果
当特征数目n特别大时,也可以正常工作 当特征数目n特别大时,矩阵纬度很大,计算非常慢(n=100,1000还好,n为千万时,计算非常慢)

四. Week Three 逻辑回归

4.1 分类问题

先从两元分类问题进行研究:

y∈{0, 1},定义y=0时,属于Negtive Class;y=1时,属于Positive Class

那么,怎样让预测函数 0 <= hθ(x) <= 1?

这里介绍S型函数g(z)=1/(1 + e-z)

S型函数的取值范围在(0, 1),则hθ(x) = 1/(1 + e-(θT*x));而且hθ(x) = P(y=1 | x;θ) = 1 - P(y=0 | x;θ)

  • 当θT*x >= 0,hθ(x) >= 0.5,y为1
  • 当θT*x < 0,hθ(x) < 0.5,y为0

举例:hθ(x) = -3 + x1 + x2;当-3 + x1 + x2 >= 0,预测y=1;此时决策边界为 x1 + x2 = 3

需要注意的是:我们不是用训练集来定义决策边界的,而是用来拟合参数θ的,θ决定了决策边界

4.2 代价函数和梯度下降算法

之前在线性回归中定义的平方误差代价函数,是否能用到逻辑回归中呢?

答案是:不能

因为逻辑回归中的预测函数hθ(x)是非线性函数,得到的代价函数将是非凸函数,可能是这样:

它有许多局部最优值,梯度下降算法不能保证收敛到全局最优值。所以,我们希望代价函数是有类似于“单弓形”函数,能确保找到全局最小值

我们需要重新定义逻辑回归的代价函数了

当 y = 1,hθ(x) -> 0, cost -> ∞

当 y = 0,hθ(x) -> 1, cost -> ∞

ok,新定义的代价函数,符合我们的要求

此时的代价函数公式,用一行表示为:

使用梯度下降算法,迭代并同时更新θ0~θn

和线性回归的一样,只不过hθ(x)的表达式不同

当然,特征缩放也是适用于逻辑回归的

4.3 高级算法

除了梯度下降,正规方程,还有许多可以计算出最优模型参数θ的算法

视频中还提到了:BFGS, L-BFGS和Conjugate gradient

这些高级算法比梯度下降要快,无需选择学习速率,但是更复杂。具体编程时,可以考虑使用现成的类库,帮助我们快速解决问题

4.4 多元分类问题

三元分类问题

可以转换为三个两元分类问题来做

hθ(i)(x) = P(y = i | x:θ),其中 i=1,2,3

训练的出θ后,预测时,选择hθ(i)(x)最大的那个i,就是目标变量的分类

4.5 过拟合问题

4.5.1 什么是过拟合?什么是欠拟合?
  • 欠拟合:预测模型没有能很好的拟合训练数据,拟合效果差。产生高偏差
  • 过拟合:能很好地拟合训练数据。但预测函数变量过多,而没有足够多的数据去约束变量的个数(预测测试集,效果会非常差,即泛化效果差)。产生高方差

高偏差;高仿差..click for infos

*泛化:一个测试模型应用到新样本的能力

这里,先不讲如何识别过拟合问题,后面的课程讲解了如果利用工具去识别过拟合问题(后续整理)

往往,我们往预测模型中,增加了太多太多的特征,容易导致过拟合问题

如何避免过拟合问题:

  • 减少特征变量数目(缺点:同时也会丢失一些重要信息)
  • 正则化(进行某种惩罚措施):保留所有的特征变量,但是降低模型参数θj的数量级或者值

正则化技术非常有效,由于是在我们预测模型中有许多特征变量,每个特征变量都能帮助我们预测目标变量,这样我们就可以不用舍弃任何一个特征变量了

4.5.2 线性回归代价函数中使用正则化技术:

重写线性回归中的代价函数:

λ为正则化参数。λ越大,惩罚程度越大,模型参数θj会越小,有可能会导致欠拟合问题

4.5.3 线性回归梯度下降算法中使用正则化技术:

注意θ0是单独的一种

4.5.4 正规方程中使用正则化技术:

4.5.5 逻辑回归代价函数中使用正则化技术:

4.5.6 逻辑回归梯度下降算法中使用正则化技术:

这个和线性回归中的一样,hθ(x)不同而已