算法工程师修仙之路:吴恩达机器学习(五)

本文详细解析了吴恩达机器学习课程中关于Logistic回归的内容,包括简化代价函数、梯度下降法的应用,以及多元分类问题的一对多解决策略。介绍了代价函数的最小化方法和几种高级优化算法。

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

吴恩达机器学习笔记及作业代码实现中文版

第四章 Logistic回归


简化代价函数与梯度下降

  • 逻辑回归的代价函数:Cost(hθ(x(i)),y(i))=−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))=−1m∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]Cost(h_\theta(x^{(i)}), y^{(i)})=−y^{(i)}log(h_\theta(x^{(i)})) − (1 − y^{(i)}) log(1-h_\theta(x^{(i)}))=-\frac{1}{m}\sum_{i=1}^m[y^{(i)}log(h_\theta(x^{(i)})) + (1−y^{(i)}) log(1-h_\theta(x^{(i)}))]Cost(hθ(x(i)),y(i))=y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

  • 我们要试图找尽量让J(θ)J(\theta)J(θ)取得最小值的参数θ\thetaθ,所以我们想要尽量减小这一项。

  • 如果我们给出一个新的样本,假如某个特征为x,我们可以用拟合训练样本的参数θ\thetaθ,来输出对假设的预测。另外,我们假设的输出,实际上就是这个概率值:p(y=1∣x;θ)p(y=1|x;\theta)p(y=1x;θ),就是关于x以θ\thetaθ为参数, y=1y= 1y=1的概率,你可以认为我们的假设就是估计y=1y=1y=1的概率。

  • 最小化代价函数的方法,是使用梯度下降法(gradient descent)。

  • 如果你有n个特征,也就是说参数向量θ\thetaθ包括θ0,θ1,θ2\theta_0, \theta_1, \theta_2θ0,θ1,θ2一直到θn\theta_nθn,那么你就需要用这个式子:θj=θj−α∗∂J(θ)∂θj=θj−α∗1m∑i=1m[hθ(x(i))−y(i)]xj(i)\theta_j=\theta_j-\alpha*\frac{\partial J(\theta)}{\partial \theta_j}=\theta_j-\alpha*{\frac{1}{m}\sum_{i=1}^m}[h_\theta({x^{(i)}})-y^{(i)}]x_j^{(i)}θj=θjαθjJ(θ)=θjαm1i=1m[hθ(x(i))y(i)]xj(i)来同时更新所有θ\thetaθ的值。

  • 即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。

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

高级优化

  • 我们有个代价函数J(θ)J(\theta)J(θ),而我们想要使其最小化,那么我们需要做的是编写代码,当输入参数θ\thetaθ时,它们会计算出两样东西:J(θ)J(\theta)J(θ)以及θ\thetaθ等于 0、1直到n时的偏导数项。假设我们已经完成了可以实现这两件事的代码,那么梯度下降所做的就是反复执行这些更新。

  • 另一种考虑梯度下降的思路是:我们需要写出代码来计算J(θ)J(\theta)J(θ)和这些偏导数,然后把这些插入到梯度下降中,然后它就可以为我们最小化这个函数。

  • 对于梯度下降来说,从技术上讲,你实际并不需要编写代码来计算代价函数J(θ)J(\theta)J(θ)。你只需要编写代码来计算导数项,但是,如果你希望代码还要能够监控这些J(θ)J(\theta)J(θ)的收敛性,那么我们就需要自己编写代码来计算代价函数J(θ)J(\theta)J(θ)和偏导数项。所以,在写完能够计算这两者的代码之后,我们就可以使用梯度下降。

  • 三种高级优化算法

    • 梯度下降并不是我们可以使用的唯一算法,还有其他一些算法,更高级、更复杂。
    • 如果我们能用这些方法来计算代价函数J(θ)J(\theta)J(θ)和偏导数项∂J(θ)∂θj\frac{\partial J(\theta)}{\partial \theta_j}θjJ(θ)两个项的话,那么这些算法就是为我们优化代价函数的不同方法。
    • 共轭梯度法,BFGS (变尺度法) 和 L-BFGS (限制变尺度法) 就是其中一些更高级的优化算法,它们需要有一种方法来计算J(θ)J(\theta)J(θ),以及需要一种方法计算导数项,然后使用比梯度下降更复杂的算法来最小化代价函数。
  • 三种算法的优点和缺点:

    • 使用这其中任何一个算法,你通常不需要手动选择学习率α\alphaα,你可以认为算法有一个智能的内部循环,而且,事实上,他们确实有一个智能的内部循环,称为线性搜索(line search)算法,它可以自动尝试不同的学习速率α\alphaα,并自动选择一个好的学习速率α\alphaα,因此它甚至可以为每次迭代选择不同的学习速率,那么你就不需要自己选择。
    • 这些算法实际上在做更复杂的事情,而不仅仅是选择一个好的学习率,所以它们往往最终收敛得远远快于梯度下降。
    • 我们实际上完全有可能成功使用这些算法,并应用于许多不同的学习问题,而不需要真正理解这些算法的内环间在做什么,如果说这些算法有缺点的话,那么主要缺点是它们比梯度下降法复杂多了,特别是你最好不要使用 L-BGFS、BFGS 这些算法,除非你是数值计算方面的专家。

多元分类:一对多

  • 对于一个二元分类问题,我们的数据看起来可能是像这样:
    在这里插入图片描述
  • 对于一个多类分类问题,我们的数据集或许看起来像这样:
    在这里插入图片描述
  • 我们现在已经知道如何进行二元分类,可以使用逻辑回归,对于直线或许你也知道,可以将数据集一分为二为正类和负类。用一对多的分类思想,我们可以将其用在多类分类问题上。
    在这里插入图片描述
    • 现在我们有一个训练集,好比上图表示的有 3 个类别,我们用三角形表示y=1y=1y=1,方框表示y=2y=2y=2,叉叉表示y=3y=3y=3。我们下面要做的就是使用一个训练集,将其分成 3 个二元分类问题。
    • 我们先从用三角形代表的类别 1 开始,实际上我们可以创建一个,新的"伪"训练集,类型 2 和类型 3 定为负类,类型 1 设定为正类,我们创建一个新的训练集, 如下图所示的那样,我们要拟合出一个合适的分类器。
      在这里插入图片描述
    • 这里的三角形是正样本,而圆形代表负样本。可以这样想,设置三角形的值为 1,圆形的值为 0,下面我们来训练一个标准的逻辑回归分类器,这样我们就得到一个正边界。
    • 为了能实现这样的转变,我们将多个类中的一个类标记为正向类( y=1y=1y=1),然后将其他所有类都标记为负向类,这个模型记作hθ(1)(x)ℎ_\theta^{(1)}(x)hθ(1)(x)。接着,类似地第我们选择另一个类标记为正向类(y=2y=2y=2),再将其它类都标记为负向类,将这个模型记作hθ(2)(x)ℎ_\theta^{(2)}(x)hθ(2)(x),依此类推。
    • 最后我们得到一系列的模型简记为:hθ(i)(x)=p(y=i∣x;θ)其中:i=(1,2,3....k)ℎ_\theta^{(i)}(x)=p(y=i|x;\theta)其中:i= (1, 2, 3. . . . k)hθ(i)(x)=p(y=ix;θ)i=(1,2,3....k)
      在这里插入图片描述
    • 最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。
    • 总之,我们已经把要做的做完了,现在要做的就是训练这个逻辑回归分类器:hθ(i)(x)ℎ_\theta^{(i)}(x)hθ(i)(x),其中i对应每一个可能的y=iy=iy=i,最后,为了做出预测,我们给出输入一个新的x值,用这个做预测。我们要做的就是在我们三个分类器里面输入x,然后我们选择一个让hθ(i)(x)ℎ_\theta^{(i)}(x)hθ(i)(x)最大的i,即maxhθ(i)(x)maxℎ_\theta^{(i)}(x)maxhθ(i)(x)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值