1.高级优化
本篇介绍一些高级优化算法和一些高级的优化概念,利用这些方法,我们就能够使通过梯度下降,进行逻辑回归的速度大大提高,而这也将使算法更加适合解决大型的机器学习问题,比如,我们有数目庞大的特征量。 现在我们换个角度来看什么是梯度下降,我们有个代价函数
J
(
θ
)
J(\theta)
J(θ),而我们想要使其最小化,那么我们需要做的是编写代码,当输入参数
θ
\theta
θ 时,它们会计算出两样东西:
J
(
θ
)
J(\theta)
J(θ)以及j等于0、1直到 n 时的偏导数项。
假设我们已经完成了可以实现这两件事的代码,那么梯度下降所做的就是反复执行这些更新。
而梯度下降并不是我们可以使用的唯一算法,还有其他一些算法,更高级、更复杂。如果我们能用这些方法来计算代价函
J
(
θ
)
J(\theta)
J(θ)和偏导数项
∂
∂
θ
j
J
(
θ
)
\frac{\partial}{\partial \theta_j} J(\theta)
∂θj∂J(θ)两个项的话,那么这些算法就是为我们优化代价函数的不同方法,共轭梯度法 BFGS (变尺度法) 和 L-BFGS (限制变尺度法) 就是其中一些更高级的优化算法,它们需要有一种方法来计算 𝐽(𝜃),以及需要一种方法计算导数项,然后使用比梯度下降更复杂的算法来最小化代价函数。
三种算法有许多优点:
一个是使用这其中任何一个算法,你通常不需要手动选择学习率 𝛼,所以对于这些算法的一种思路是,给出计算导数项和代价函数的方法,你可以认为算法有一个智能的内部循环,而且,事实上,他们确实有一个智能的内部循环,称为线性搜索(line search)算法,它可以自动尝试不同的学习速率 𝛼,并自动选择一个好的学习速率 𝑎,因此它甚至可以为每次迭代选择不同的学习速率,那么你就不需要自己选择。这些算法实际上在做更复杂的事情,而不仅仅是选择一个好的学习率,所以它们往往最终收敛得远远快于梯度下降,不过关于它们到底做什么的详细讨论,已经超过了本门课程的范围。
2.多分类问题
接下来我们将谈到如何使用逻辑回归 (logistic regression)来解决多类别分类问题,具体来说,我想通过一个叫做"一对多" (one-vs-all) 的分类算法。
先看这样一些例子。
第一个例子:假如说你现在需要一个学习算法能自动地将邮件归类到不同的文件夹里,或者说可以自动地加上标签,那么,你也许需要一些不同的文件夹,或者不同的标签来完成这件事,来区分开来自工作的邮件、来自朋友的邮件、来自家人的邮件或者是有关兴趣爱好的邮件,那么,我们就有了这样一个分类问题:其类别有四个,分别用𝑦 = 1、𝑦 = 2、𝑦 = 3、
𝑦 = 4 来代表。
第二个例子是有关药物诊断的,如果一个病人因为鼻塞来到你的诊所,他可能并没有生
病,用 𝑦 = 1 这个类别来代表;或者患了感冒,用 𝑦 = 2 来代表;或者得了流感用𝑦 = 3来
代表。
第三个例子:如果你正在做有关天气的机器学习分类问题,那么你可能想要区分哪些天是晴天、多云、雨天、或者下雪天,对上述所有的例子,𝑦 可以取一个很小的数值,一个相对"谨慎"的数值,比如 1 到 3、1 到 4 或者其它数值,以上说的都是多类分类问题,顺便一提的是,对于下标是 0 1 2 3,还是 1 2 3 4 都不重要,我更喜欢将分类从 1 开始标而不是0,其实怎样标注都不会影响最后的结果。
对于一个多类分类问题,我们的数据集或许看起来像这样:
用 3 种不同的符号来代表 3 个类别,问题就是给出 3 个类型的数据集,我们如何得到一个学习算法来进行分类呢?
我们现在已经知道如何进行二元分类,可以使用逻辑回归,对于直线或许你也知道,可以将数据集一分为二为正类和负类。用一对多的分类思想,我们可以将其用在多类分类问题上。
下面将介绍如何进行一对多的分类工作,有时这个方法也被称为"一对余"方法
现在我们有一个训练集,好比上图表示的有 3 个类别,我们用三角形表示 𝑦 = 1,方框表示𝑦 = 2,叉表示 𝑦 = 3。我们下面要做的就是使用一个训练集,将其分成 3 个二元分类问题。
我们先从用三角形代表的类别 1 开始,实际上我们可以创建一个,新的"伪"训练集,类型 2 和类型 3 定为负类,类型 1 设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。
里的三角形是正样本,而圆形代表负样本。可以这样想,设置三角形的值为 1,圆形的值为 0,下面我们来训练一个标准的逻辑回归分类器,这样我们就得到一个正边界。
为了能实现这样的转变,我们将多个类中的一个类标记为正向类(𝑦 = 1),然后将其他所有类都标记为负向类,这个模型记作
h
θ
(
1
)
(
x
)
ℎ_\theta^{(1)}(x)
hθ(1)(x)
接着,类似地第我们选择另一个类标记为正向类(𝑦 = 2),再将其它类都标记为负向类,将这个模型记作
h
θ
(
2
)
(
x
)
ℎ_\theta^{(2)}(x)
hθ(2)(x),依此类推。
最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。
现在要做的就是训练这个逻辑回归分类器:
h
θ
(
i
)
(
x
)
ℎ_\theta^{(i)}(x)
hθ(i)(x)
其中 𝑖 对应每一个可能的 𝑦 = 𝑖,最后,为了做出预测,我们给出输入一个新的 𝑥 值,用这个做预测。我们要做的就是在我们三个分类器里面输入 𝑥,然后我们选择一个让
h
θ
(
1
)
(
x
)
ℎ_\theta^{(1)}(x)
hθ(1)(x)最大的𝑖。
现在知道了基本的挑选分类器的方法,选择出哪一个分类器是可信度最高效果最好的,那么就可认为得到一个正确的分类,无论𝑖值是多少,我们都有最高的概率值,我们预测𝑦就是那个值。这就是多类别分类问题,以及一对多的方法,通过这个小方法,现在也可以将逻辑回归分类器用在多类分类的问题上。