吴恩达机器学习3——逻辑回归、正则化

本文深入探讨了机器学习中的逻辑回归算法,详细解释了如何使用逻辑回归解决分类问题,包括二分类和多分类。同时,文章介绍了正则化技术,以防止过拟合现象,确保模型在新数据上的良好泛化能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、逻辑回归

1. 分类问题

在监督学习的分类中,我们了解到有回归问题和分类问题。回归问题我们采用线性回归和梯度下降算法进行求解,我们在之前已经进行过学习。在分类问题中,要预测的变量 y 为离散的值。我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用的一种分类算法。

1.1 分类的概念

先来谈谈二分类问题。课程中先给出了几个例子。

  • 邮件是垃圾邮件还是非垃圾邮件;
  • 网上交易是的欺骗性(Y or N);
  • 肿瘤是恶性的还是良性的。
    对于这些问题,我们可以通过输出值y ϵ {0, 1} 来表示。
    注意:分类结果是离散值,这是分类的根本特点。

1.2 使用线性回归来解决分类模型

我们将因变量(dependant variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),则因变量在这里插入图片描述,其中 0 表示负向类,1 表示正向类。
如果我们使用线性回归进行分类模型的求解,y的取值只有0和1,训练集画出来如下图所示,我们用线性回归得到粉色直线,如果认为模拟直线的取值小于0.5时则预测值就为0,如果模拟直线的取值大于0.5时预测值就为1,感觉还不错。但是将圆圈中点加入后,线性回归得到的蓝色直线,就显得不是很完美了。并且我们知道所有得到的预测值要是0或者1,经过线性回归求解得到大量的小于0和大于1的数据,所以经过大量的实验证明,线性回归不适合这种训练集。
在这里插入图片描述
在这里插入图片描述
所以我们在接下来的要研究的算法就叫做逻辑回归算法,这个算法的性质是:它的输出值永远在 0 到 1 之间。

1.3 逻辑回归模型

我们引入一个新的模型,逻辑回归,该模型的输出变量范围始终在 0 和 1 之间。 逻辑回归模型的假设是: ℎ𝜃(𝑥) = 𝑔(𝜃𝑇𝑋) 其中: 𝑋 代表特征向量 𝑔 代表逻辑函数(logistic function)是一个常用的逻辑函数为 S 形函数(Sigmoid function),公式为:在这里插入图片描述
则:
在这里插入图片描述

# python 代码实现:
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))

该函数的图像为:
在这里插入图片描述

  • 对于模型的理解ℎ𝜃(𝑥)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性
    (estimated probablity)即ℎ𝜃(𝑥) = 𝑃(𝑦 = 1|𝑥; 𝜃)
    例如,如果对于给定的𝑥,通过已经确定的参数计算得出ℎ𝜃(𝑥) = 0.7,则表示有 70%的
    几率𝑦为正向类,相应地𝑦为负向类的几率为 1-0.7=0.3

1.4 分类边界

在这里插入图片描述
在逻辑回归中,我们预测:当ℎ𝜃(𝑥) >= 0.5时,预测 𝑦 = 1。 当ℎ𝜃(𝑥) < 0.5时,预测 𝑦 = 0 。
根据上面绘制出的 S 形函数图像,我们知道当𝑧 = 0 时 𝑔(𝑧) = 0.5 𝑧 > 0 时 𝑔(𝑧) > 0.5 𝑧 < 0 时 𝑔(𝑧) < 0.5 又 𝑧 = 𝜃𝑇𝑥 ,即:𝜃𝑇𝑥 >= 0 时,预测 𝑦 = 1 𝜃𝑇𝑥 < 0 时,预测 𝑦 = 0
现在假设我们有一个模型:
在这里插入图片描述
并且参数𝜃 是向量[-3 1 1]。 则当−3 + 𝑥1 + 𝑥2 ≥ 0,即𝑥1 + 𝑥2 ≥ 3时,模型将预测 𝑦 = 1。 我们可以绘制直线𝑥1 + 𝑥2 = 3,这条线便是我们模型的分界线,将预测为 1 的区域和预测为 0 的区域分隔开。
在这里插入图片描述
当数据如下图分布时:
在这里插入图片描述
因为需要用曲线才能分隔 𝑦 = 0 的区域和 𝑦 = 1 的区域,我们需要二次方特征:ℎ𝜃(𝑥) = 𝑔(𝜃0 + 𝜃1𝑥1 + 𝜃2𝑥2 + 𝜃3𝑥12 + 𝜃4𝑥22)是[-1 0 0 1 1],则我们得到的判定边界恰好是圆点在原点且半径为 1 的圆形。

2. 逻辑回归模型 logistic regression

2.1 代价函数

对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们
也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将ℎ𝜃(𝑥) 带入到这样
定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction)。
在这里插入图片描述
图像呈现出非凸性,这意味着我们的代价函数有许多局部最小值。也就是说,如果我们运用梯度下降法,不能保证算法收敛到全局最小值。
所以,对于逻辑回归问题,我们定义新的代价函数如下所示 :
在这里插入图片描述
ℎ𝜃(𝑥)与 𝐶𝑜𝑠𝑡(ℎ𝜃(𝑥), 𝑦)之间的关系如下图所示:
在这里插入图片描述
这样构建的𝐶𝑜𝑠𝑡(ℎ𝜃(𝑥), 𝑦)函数的特点是:当实际的 𝑦 = 1 且ℎ𝜃(𝑥)也为 1 时误差为 0, 当 𝑦 = 1 但ℎ𝜃(𝑥)不为 1 时误差随着ℎ𝜃(𝑥)变小而变大;当实际的 𝑦 = 0 且ℎ𝜃(𝑥)也为 0 时代价为 0,当𝑦 = 0 但ℎ𝜃(𝑥)不为 0 时误差随着 ℎ𝜃(𝑥)的变大而变大。
将构建的 𝐶𝑜𝑠𝑡(ℎ𝜃(𝑥), 𝑦)简化如下:

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

2.2 梯度下降

在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的
参数了。算法为:
在这里插入图片描述
完整推导过程:
在这里插入图片描述

2.3 高级优化方法

除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS) 。

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

3. 多类别分类:一对多

多类分类问题的数据集可能如下图:
在这里插入图片描述
现在有一个训练集,用三角形表示 y=1,方框表示 y=2,叉叉表示 y=3。下面要做的就是使用一个训练集,将其分成三个二元分类问题。
我们先从用三角形代表的类别 1 开始,实际上我们可以创建一个,新的"伪"训练集,类型 2 和类型 3 定为负类,类型 1 设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。
在这里插入图片描述
这里的三角形是正样本,而圆形代表负样本。可以这样想,设置三角形的值为 1,圆形的值为 0,下面我们来训练一个标准的逻辑回归分类器,这样我们就得到一个正边界。
为了能实现这样的转变,我们将多个类中的一个类标记为正向类(y=1),然后将其他所有类都标记为负向类 。接着,类似地我们选择另一个类标记为正向类(y=2),再将其它类都标记为负向类,依此类推。
在这里插入图片描述
最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都输入我们三个分类器中,之后选择最高可能性的输出变量。

二、正则化

1. 过拟合问题

到现在为止,我们已经学习了几种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过度拟合(over-fitting)的问题,可能会导致它们效果很差。 如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集(代价函数可能几乎为 0),但是可能会不能推广到新的数据。
在这里插入图片描述
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好,是过拟合;而中间的模型似乎最合适。
分类问题中也存在这样的问题:
在这里插入图片描述
overfitting通常是由一个复杂的函数造成的,这个函数会产生大量与数据无关的不必要的曲线和角度。
有两个主要的选择来解决过度拟合的问题:
1)减少特征的数量:

  • 手动选择要保留的功能。
  • 使用模型选择算法。
    2)正则化
  • 保留所有的特征,但是减小参数θj的大小。

2. 修改代价函数实现正则化

采用正则化来解决过拟合问题的思想就是:将相应的参数值变小。具体例子如下。
例如,在之前的基于房间大小来预测房价例子中,正则化的线性回归损耗函数为:在这里插入图片描述

这里𝜆值的设定也非常重要,如果其值过大,会导致无法解决过拟合问题、会产生欠拟合问题和训练过程可能无法收敛。

3. 正则化线性回归

我们将首先处理线性回归。 一共有两种方法,梯度下降和正规方程。

  • 梯度下降
    我们将修改我们的梯度下降函数,从其他参数中分离出θ0,因为我们不想惩罚θ0。
    在这里插入图片描述
    可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的
    基础上令𝜃值减少了一个额外的值。
  • 正规方程
    在这里插入图片描述

4. 正则化逻辑回归

针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数𝐽(𝜃),接下来学习了更高级的优化算法,这些高级优化算法需要你自己设计代价函数𝐽(𝜃)。
在这里插入图片描述
在原本代价函数的基础上增加一个正则化表达式,得到代价函数:
在这里插入图片描述

# Python 代码:
import numpy as np
def costReg(theta, X, y, learningRate):
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)))
reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:theta.shape[1]],2))
return np.sum(first - second) / (len(X)) + reg

要最小化该代价函数,通过求导,得出梯度下降算法为:
在这里插入图片描述

  • 注意:
  1. 虽然正则化的逻辑回归中的梯度下降和正则化的线性回归中的表达式看起来一样,
    但由于两者的ℎ𝜃(𝑥)不同所以还是有很大差别。
  2. 𝜃0不参与其中的任何一个正则化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值