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

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

第四章 Logistic回归


简化代价函数与梯度下降

  • 逻辑回归的代价函数: C o s t ( h θ ( x ( i ) ) , y ( i ) ) = − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) = − 1 m ∑ i = 1 m [ y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 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 = 1 y= 1 y=1的概率,你可以认为我们的假设就是估计 y = 1 y=1 y=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 − α ∗ 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( 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 这些算法,除非你是数值计算方面的专家。

多元分类:一对多

  • 对于一个二元分类问题,我们的数据看起来可能是像这样:
    算法工程师修仙之路:吴恩达机器学习(五)_第1张图片
  • 对于一个多类分类问题,我们的数据集或许看起来像这样:
    算法工程师修仙之路:吴恩达机器学习(五)_第2张图片
  • 我们现在已经知道如何进行二元分类,可以使用逻辑回归,对于直线或许你也知道,可以将数据集一分为二为正类和负类。用一对多的分类思想,我们可以将其用在多类分类问题上。
    算法工程师修仙之路:吴恩达机器学习(五)_第3张图片
    • 现在我们有一个训练集,好比上图表示的有 3 个类别,我们用三角形表示 y = 1 y=1 y=1,方框表示 y = 2 y=2 y=2,叉叉表示 y = 3 y=3 y=3。我们下面要做的就是使用一个训练集,将其分成 3 个二元分类问题。
    • 我们先从用三角形代表的类别 1 开始,实际上我们可以创建一个,新的"伪"训练集,类型 2 和类型 3 定为负类,类型 1 设定为正类,我们创建一个新的训练集, 如下图所示的那样,我们要拟合出一个合适的分类器。
      算法工程师修仙之路:吴恩达机器学习(五)_第4张图片
    • 这里的三角形是正样本,而圆形代表负样本。可以这样想,设置三角形的值为 1,圆形的值为 0,下面我们来训练一个标准的逻辑回归分类器,这样我们就得到一个正边界。
    • 为了能实现这样的转变,我们将多个类中的一个类标记为正向类( y = 1 y=1 y=1),然后将其他所有类都标记为负向类,这个模型记作 h θ ( 1 ) ( x ) ℎ_\theta^{(1)}(x) hθ(1)(x)。接着,类似地第我们选择另一个类标记为正向类( y = 2 y=2 y=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)
      算法工程师修仙之路:吴恩达机器学习(五)_第5张图片
    • 最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。
    • 总之,我们已经把要做的做完了,现在要做的就是训练这个逻辑回归分类器: h θ ( i ) ( x ) ℎ_\theta^{(i)}(x) hθ(i)(x),其中i对应每一个可能的 y = i y=i y=i,最后,为了做出预测,我们给出输入一个新的x值,用这个做预测。我们要做的就是在我们三个分类器里面输入x,然后我们选择一个让 h θ ( i ) ( x ) ℎ_\theta^{(i)}(x) hθ(i)(x)最大的i,即 m a x h θ ( i ) ( x ) maxℎ_\theta^{(i)}(x) maxhθ(i)(x)

你可能感兴趣的:(教学,课程)