斯坦福大学《Machine Learning》第3周学习笔记

Logistic Regression逻辑回归

逻辑回归是一种将数据分类为离散结果的方法。 例如,我们可以使用逻辑回归将电子邮件分类为垃圾邮件或非垃圾邮件。 在这个模块中,我们介绍分类的概念,逻辑回归的代价函数,以及逻辑回归在多类分类中的应用。

我们将介绍正则化,这有助于防止模型过度拟合训练数据。

Classification and Representation分类与表示

Classification分类问题

我们先讨论二元分类问题,如何开发一个分类算法?对于分类问题,我们使用最广泛的一种学习算法是逻辑回归算法

在所有的这些问题中 我们想要预测的变量 y 我们可以认为 它能够取两个值 0 或 1 标记为0的类 还有一个名字 叫做负类 (negative class) 标记为1的类 也叫做正类 (positive class) 

为什么不能用线性回归手段解决逻辑回归问题?线性回归是给定连续型自变量,预测出连续型输出,本质就是一个简单的多项式函数(或其他),用于直接拟合训练集的点;而逻辑回归,首先,其输出是离散的,有限的,这是一个分类问题,最常见的是二元分类,是或否,为了限制输出,必须进行映射,逻辑上,我们将是的点映射到一边,将否的点映射到另一边。

图中是用线性回归模型拟合分类问题,很明显不好,因此我们发现这个算法有以下的一些性质

1.它的输出值永远在 0 到 1 之间 并不会大于 1 也不会小于 0 (后面会讲为什么)

2.特征值大于某个临界值的时候,y的值为1,小于这个临界值时,y为0

后面我们会根据这些性质来拟合学习算法

顺便说一下 逻辑回归算法 是分类算法 并且我们将它作为分类算法使用

Hypothesis Representation假设函数表达式

分类问题的假设函数如何构造?

定义 函数g如下: 当z是一个实数时 g(z)=1/(1+e^(-z)) 这称为 S 型函数 (sigmoid function) 或逻辑函数, S 型函数的特点是,当输入大于0向正无穷大靠近时,收敛于1,输入小于0向负无穷大靠近时,收敛于0;

之前说到逻辑回归问题的两个特点,满足S型函数,因此我们结合S型函数来构造我们的假设函数如上所示,这个假设函数实际上是个复合函数。

有了这个假设函数 我们需要做的是 和之前一样 用参数θ拟合我们的数据对于新输入样本 x 的 y 等于1的概率的估计值,由于我们的y只有1和0两个取值,我的假设函数等于 P(y=1|x;θ)表示在给定 x 的条件下 y=1 的概率,那么就有P(y=1|x;θ)+P(y=0|x;θ) = 1

通过这个图,我们可以得到一些信息,那就是只要该假设函数 输出y=1的概率 大于或等于0.5 那么这表示 y更有可能 等于1而不是0,如果 预测y=1 的概率 小于0.5 那么我们应该预测y=0,也就是只要 θ转置乘以x小于0 我们就预测y等于0,通过转换,我们最终考虑的问题就是θTx与0的大小关系

Decision Boundary判定边界

上节已经明确了假设函数的公式,也已经知道了其输出结果的意义。这里我们想知道,什么时候假设函数会预测1(或0)?根据逻辑函数性质,当内层大于0,逻辑函数就会大于0.5,就会预测1;内层就是θTx,就是我们下面要说的决策边界;最后决策边界θTx上面的点都会被预测得到1。

现在看我们如何用参数θ拟合我们的数据

前面已经分析出我们要拟合数据集最终考虑的问题就是θTx与0的大小关系,对于图中的训练集,我们很容易得到一条直线如图,然后计算出θ值,这条直线就是x1+x2-3=0;这条线被称为 决策边界(decision boundary)我们看出决策边界右边的部分就是y=1的部分,也就是x1+x2-3>0的部分,决策边界左边也就是x1+x2-3<0的部分,就是y=0的部分。这样我们就找到了拟合我们数据集的θ值。

本例子是一个线性的决策边界,下面是一个非线性的决策边界问题,我们可以添加额外的高阶多项式来拟合我们的数据集

Logistic Regression Model逻辑回归模型

Cost Function代价函数

对于逻辑回归问题,将假设函数(非线性的S型)带入代价函数(平方误差函数)以后,我们发现 它会变成参数θ的非凸函数,如下图,那么我们很难用梯度下降来拟合出θ

那么我们将重新构造我们的代价函数,使它成为凸函数,以便于我们最优化。之前线性回归问题的代价函数我们使用的是平方误差函数,那么很明显对于逻辑回归问题它不再适用了。新的代价函数如下(这里只针对一个数据)

 

现在讲述为什么用这个作为逻辑回归的代价函数,首先我们呀理解代价函数的意义是什么-假设算法要付的代价或者惩罚 假如说预测值h(x) 而实际值是y,那么h(x)与y偏离得越大就会受到很大的惩罚或者代价。

我们继续看图,当y=1时,代价函数的曲线图如上左,当预测值h(x) = 1时,代价函数是0,表示预测正确,不会受到惩罚,而当预测值h(x) 越偏离1,代价函数就会越来越大,当y=0时的情况也是如此。

之前说到假设函数 h 的值永远在 0 到 1 之间,这里解释为什么,因为超过这个范围,Cost(h(x), y) 就会小于0了,这样,J(θ) 的最小化意义就不大了。

Simplified Cost Function and Gradient Descent简化的代价函数和梯度下降模型

我们可以将Cost(h(x), y) 整合起来,最后写成 -y log(h(x))- (1-y) log(1-h(x)),那么逻辑回归的代价函数如下,他有一个最大的优点,就是它是个凸函数

根据这个代价函数 为了拟合出参数θ 我们怎么办呢?通过求导,得出我们的梯度下降算法如下:

它和线性回归的算法是一样的。也就是更新参数的 规则看起来基本相同 但由于假设的定义 发生了变化 所以逻辑函数的梯度下降 跟线性回归的梯度下降实际上是两个完全不同的东西 之前谈论线性回归的 梯度下降法时 我们谈到了如何监控 梯度下降法以确保其收敛 我通常也把同样的方法 用在逻辑回归中 来监测梯度下降 以确保它正常收敛 

我们可以使用 for 循环来更新这些参数 所以 for i=1 to n 或者 for i=1 to n+1 用一个 for 循环来更新这些参数值 我们更提倡使用向量化的实现 

特征缩放的方法 也适用于逻辑回归 如果你的特征范围差距很大的话 那么应用特征缩放的方法 同样也可以让逻辑回归中 梯度下降收敛更快

Advanced Optimization高级优化算法

Conjugate gradient(共轭梯度法) BFGS (变尺度法) 和 L-BFGS (限制变尺度法) 是一些更高级的优化算法 它们需要有一种方法来计算 J(θ) 以及需要一种方法 计算导数项 然后使用比梯度下降更复杂 的算法来最小化代价函数

这三种算法有许多优点 一个是 使用这其中任何一个算法 你通常 不需要手动选择学习率 α    所以对于 这些算法的一种思路是 给出 计算导数项和代价函数的方法 你可以认为算法有一个智能的内部循环 而且 事实上 他们确实有一个智能的内部循环 称为线性搜索(line search)算法 它可以自动 尝试不同的 学习速率 α 并自动 选择一个好的学习速率 α 因此它甚至可以 为每次迭代选择不同的学习速率 那么你就不需要自己选择    这些算法实际上在做 更复杂的事情 而不仅仅是 选择一个好的学习速率 所以它们往往最终 收敛得远远快于梯度下降   

举例如上 右上角的代码是我们要完成的,它的任务是能返回  代价函数值 以及梯度值 fminunc 表示 Octave 里无约束最小化函数 调用它的方式如下 你要设置几个 options 这个 options 变量 作为一个数据结构可以存储你想要的 options 所以 GradObj 和 On 这里设置梯度目标参数为打开(on) 这意味着你现在确实要给这个算法提供一个梯度 然后设置最大 迭代次数 比方说 100 我们给出一个 θ 的猜测初始值 它是一个2×1的向量 那么这个命令就调用 fminunc 这个@符号表示 指向我们刚刚定义的    costFunction 函数的指针 如果你调用它 它就会 使用众多高级优化算法中的一个 当然你也可以把它当成梯度下降 只不过它能自动选择 学习速率α 你不需要自己来做 然后它会尝试 使用这些高级的优化算法 就像加强版的梯度下降法 为你找到最佳的 θ 值 让我告诉你它在 Octave 里什么样 costFunction 函数以文件的形式存在本地 

 

切换Octave窗口如上 输入完算法敲回车 这个就会运行优化算法  它很快返回值 它们找到 theta 的最优值 是 theta(1) 为5 theta(2) 也为5 这正是我们希望的 functionVal 的值 实际上是10的-30次幂 所以 这基本上就是0 这也是我们所希望的 exitFlag为1 这说明它的状态 是已经收敛了的 这里我得指出 用 Octave 运行的时候 向量θ的值 θ的参数向量 必须是大于等于2维的 

因此当我有一个很大的 机器学习问题时 我会选择这些高级算法 而不是梯度下降    有了这些概念 你就应该能将逻辑回归 和线性回归应用于 更大的问题中 这就是高级优化的概念    

Multiclass Classification多类别分类

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

之前我们已经通过逻辑回归算法解决二元分类问题,本节内容是使用逻辑回归 (logistic regression) 来解决多类别分类问题

 

现在我们有一个训练集 如图所示 将其分成三个二元分类问题  我们先从用三角形代表的类别1开始 拟合出一个合适的分类器 我们称其为 h 下标 θ 上标(1) (x) 这里的三角形是正样本 而圆形代表负样本 可以这样想 设置三角形的值为1 圆形的值为0 下面我们来训练一个标准的逻辑回归分类器 这样我们就得到一个正边界 这里上标(1)表示类别1  我们用同样的方法分析出第2,3个分类器。

所以 h(i) 实际上是在计算 给定x 以 θ 为参数时 y的值为i的 概率是多少 

总之 我们已经把要做的做完了 现在要做的就是训练这个 逻辑回归分类器 h(i) 其中 i 对应每一个可能的 y=i 最后 为了做出预测 我们给出输入一个新的 x 值 用这个做预测 我们要做的 就是 在我们三个分类器 里面输入 x 然后 我们选择一个让 h 最大的 i 你现在知道了 基本的挑选分类器的方法 选择出哪一个分类器是 可信度最高效果最好的 那么就可认为得到一个正确的分类 无论i值是多少 我们都有最高的概率值 我们预测 y 就是那个值  
这就是多类别分类问题 以及一对多的方法 通过这个小方法 你现在也可以将 逻辑回归分类器 用在多类分类的问题上

Regularization正则化-防止过度拟合

Solving the Problem of Overfitting解决过度拟合问题

The Problem of Overfitting过度拟合问题

那么什么是过度拟合呢? 让我们继续使用 那个用线性回归 来预测房价的例子 我们通过建立 以住房面积为自变量的函数来预测房价 我们可以 对该数据做线性回归 如果这么做 

第一个图我们用直线去拟合 这不是一个很好的模型 我们看看这些数据 很明显 随着房子面积增大 住房价格的变化趋于稳定 或者越往右越平缓 因此该算法 没有很好拟合训练数据 我们把这个问题称为欠拟合(underfitting) 这个问题的另一个术语叫做 高偏差(bias) 

第二个图我们用二次函数来拟合它 这个拟合效果很好 

第三个图我们拟合一个四次多项式 因此在这里我们有五个参数 θ0到θ4 这样我们可以拟合一条曲线 通过我们的五个训练样本 你可以得到看上去如此的一条曲线 一方面 似乎 对训练数据 做了一个很好的拟合 因为这条曲线通过了所有的训练实例 但是 这仍然是一条扭曲的曲线 事实上 我们并不认为它是一个预测房价的好模型 所以 这个问题我们把他叫做 过度拟合或过拟合(overfitting) 另一个描述该问题的术语是 高方差(variance) 高方差是另一个 历史上的叫法 但是 从第一印象上来说 如果我们拟合一个 高阶多项式 那么 这个函数能很好的拟合训练集 能拟合几乎所有的 训练数据 这就面临可能函数太过庞大的问题 变量太多 同时如果我们没有足够的数据 去约束这个变量过多的模型 那么这就是过度拟合 

概括地说 过度拟合的问题 将会在变量过多的时候 发生 这种时候训练出的方程总能很好的拟合训练数据 所以 你的代价函数 实际上可能非常接近于0 或者 就是0 但是 这样的曲线 它千方百计的拟合于训练数据 这样导致 它无法泛化到 新的数据样本中 以至于无法预测新样本价格 在这里 术语"泛化" 指的是一个假设模型能够应用到新样本的能力 新样本数据是 没有出现在训练集中的房子 

在这张幻灯片上 我们看到了 线性回归情况下的过拟合 类似的方法同样可以应用到逻辑回归 这里是一个以x1与x2为变量的 逻辑回归 

在今后课程中 我们会讲到调试和诊断 诊断出导致学习算法故障的东西 我们告诉你如何用 专门的工具来识别 过拟合 和可能发生的欠拟合 

解决过度拟合有两个办法

第一个办法是要尽量减少选取变量的数量  在今后的课程中 我们会提到模型选择算法 这种算法是为了自动选择 采用哪些特征变量 自动舍弃不需要的变量 这种减少特征变量 的做法是非常有效的 并且可以减少过拟合的发生 但是其缺点是 舍弃一部分特征变量 你也舍弃了问题中的一些信息 

第二个选择就是正则化 正则化中我们将保留 所有的特征变量 

Cost Function代价函数

我们看到了 如果说我们要 用一个二次函数来 拟合这些数据 它给了我们一个对数据很好的拟合 然而 如果我们 用一个更高次的 多项式去拟合 我们最终 可能得到一个曲线 能非常好地拟合训练集 但是 这真的不是一个好的结果 它过度拟合了数据 因此 一般性并不是很好 

现在我们来综合两个曲线的优势,二次曲线拟合得不错,但是均方误差比高次曲线的要大,那么我们可以找到这样一个函数,接近二次曲线的高次曲线,要实现这个函数,我们只需要θ3 和 θ4设置得足够小,接近0就可以了

这里给出了正规化背后的思路:如果我们 的参数值 对应一个较小值的话 就是说 参数值比较小 那么往往我们会得到一个 形式更简单的假设 

对于房屋价格预测我们 可能有上百种特征 我们谈到了一些可能的特征 比如说 x1 是房屋的尺寸 x2 是卧室的数目 x3 是房屋的层数等等 那么我们可能就有一百个特征 ,但是我们并不知道要将哪几个θ设置得足够小,也不知道要去缩小几个θ,因此我们可以通过添加一个额外的正则化项,来缩小我们前面的所有θ(注意,正则化项是从θ1开始的并且 λ 在这里我们称做正规化参数  

λ 要做的就是 1. 使假设更好地拟合训练数据 2.我们想要保持参数值较小 

在正规化线性回归中 如果 正规化参数值 被设定为非常大 那么我们 会使所有这些参数接近于零的  θ1 将接近零 θ2 将接近零 θ3 和 θ4 最终也会接近于零 如果我们这么做 那么就是 我们的假设中 相当于去掉了这些项 并且使 我们只是留下了一个简单的假设 这个假设只能表明 那就是 房屋价格 就等于 θ0 的值 那就是类似于拟合了 一条水平直线 对于数据来说 这就是一个 欠拟合 (underfitting) 这种情况下这一假设 它是条失败的直线 对于训练集来说 这只是一条平滑直线 它没有任何趋势 它不会去趋向大部分训练样本的任何值 这句话的另​​一种方式来表达就是 这种假设有 过于强烈的"偏见" 或者 过高的偏差 (bais) 认为预测的价格只是 等于 θ0 并且 尽管我们的数据集 选择去拟合一条 扁平的直线 仅仅是一条 扁平的水平线 我画得不好 对于数据来说  这只是一条水平线 因此 为了使正则化运作良好 我们应当注意一些方面 应该去选择一个不错的 正则化参数 λ 并且当我们以后讲到多重选择时 在后面的课程中 我们将讨论 一种方法 一系列的方法来自动选择 正则化参数 λ 所以 这就是高度正则化的思路 

Regularized Linear Regression线性回归正则化

这是正则化以后的代价函数的梯度下降迭代算法

具体来说 (1-αλ/m ) 通常是一个具体的实数 而且小于1  αλ/m很小 所以(1-αλ/m )将是一个比1小一点点的值 所以我们可以把它想成 一个像0.99一样的数字   所以 对 θj 更新的结果 我们可以看作是 被替换为 θj 的0.99倍 另外 θj 后边的第二项 这实际上 与我们原来的 梯度下降更新完全一样 跟我们加入了正则项之前一样  当我们使用正则化线性回归时 我们需要做的就是 在每一个被正规化的参数 θj 上 乘以了一个 比1小一点点的数字 也就是把参数压缩了一点 然后 我们执行跟以前一样的更新   

这是正则化以后的代价函数的正规方程

关于不可逆性的问题  如果你的样本数量m 比特征数量n小的话 那么这个矩阵 X 转置乘以 X 将是 不可逆或奇异的(singluar)  或者用另一种说法是 这个矩阵是 退化(degenerate)的 如果你在 Octave 里运行它 无论如何 你用函数 pinv 取伪逆矩阵 这样计算 理论上方法是正确的 但实际上 你不会得到一个很好的假设  正规化也 为我们解决了这个问题 具体地说 只要正则参数是严格大于0的  这个矩阵将不是奇异的 即该矩阵将是可逆的   因此 使用正则化还可以 照顾一些 X 转置乘以 X 不可逆的问题 

Regularized Logistic Regression逻辑回归正则化

对于逻辑回归,我们之前已经看到,如果您使用这种非常高阶的多项式拟合逻辑回归,也可能容易出现过度拟合。

以上我们通过惩罚参数θθ2等等直到θn。如果你这样做,那么它会产生这样的效果,即使你正在拟合一个具有很多参数的非常高阶的多项式。只要你应用正则化并保持参数小,你就更有可能获得决策边界。(玫红色曲线) 分离正面和负面的例子看起来更合理。

这是逻辑回归的梯度下降更新算法,它和线性回归是一样的,但是实际上不一样,因为假设函数是不一样的。

 

参考资料

 

https://www.coursera.org/learn/machine-learning/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值