一,分类问题:
在分类问题中,你要预测的变量 𝑦 是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression ) 的算法,这是目前最流行使用最广泛的一种学习算法。
在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们也谈到了肿瘤分类问题的例子,区别一个肿瘤是恶性的还是良性的。
我们从二元的分类问题开始讨论。
我们将因变量 ( dependent variable ) 可能属于的两个类分别称为负向类( negative class )和正向类( positive class ),则因变量 y=0或1,其中 0 表示负向类, 1 表示正向类。
如果我们要用线性回归算法来解决一个分类问题,对于分类,如果你使用的是线性回归,那么假设函数的输出值可能远大于 𝑦 取值为 0 或者 1 ,但 1,或者远小于 0,即使所有 训练样本的标签 𝑦 都等于 0 或 1。尽管我们知道标签应该取值 0 或者 1 ,但是如果算法 得到的值远大于 1 或者远小于 0 的话,就会感觉很奇怪。所以我们在接下来的要研究的算法 就叫做逻辑回归算法,这个算法的性质是:它的输出值永远在 0 到 1 之间。
顺便说一下,逻辑回归算法是分类算法,我们将它作为分类算法使用。有时候可能因为这个算法的名字中出现了“回归” 使你感到困惑,但逻辑回归算法实际上是一种分类算法,它适用于标签 𝑦 取值离散的情况,如:1 0 0 1。
二,假设表示:
回顾在一开始提到的乳腺癌分类问题,我们可以用线性回归的方法求出适合数据的一条直线:
根据线性回归模型我们只能预测连续的值,然而对于分类问题,我们需要输出 0 或 1 ,我们可以预测:
我们引入一个新的模型,逻辑回归,该模型的输出变量范围始终在 0 和 1 之间。
逻辑回归,模型的假设是: ℎ 𝜃 (𝑥) = 𝑔(𝜃^ 𝑇 𝑋) 其中: 𝑋 代表特征向量 𝑔 代表逻辑函数( logistic function ) 是一个常用的逻辑函数为 S 形函数( Sigmoid function ),公式为:
ℎ 𝜃 (𝑥) 的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性(estimated probablity)
三,判定边界:
四,代价函数:
对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将ℎ 𝜃 (𝑥) 带入到这样 定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction )。
在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为
注:虽然得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,但是这里的ℎ𝜃 (𝑥) = 𝑔(𝜃^ 𝑇 𝑋) 与线性回归中不同,所以实际上是不一样的。另外,在运行梯度下降算法 之前,进行特征缩放依旧是非常必要的。 一些梯度下降算法之外的选择: 除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度 ( Conjugate Gradient ), 局部优化 ( Broyden fletcher goldfarb shann,BFGS ) 和 有限内存局部优化法 ( LBFGS ) , fminunc 是 matlab 和 octave
中都带的一个最小值优化函数,使用时我们需要提供代价函数和每个参数的求导,
五,简化的成本函数和梯度下降
如果我们要最小化这个关于 𝜃 的函数值,这就是我们通常用的梯度下降法的模板
我们要反复更新每个参数,用这个式子来更新,就是用它自己减去学习率 𝛼 乘以后面的微分项。求导后得到
六,高级优化:
我会跟你们讲一些高级优化算法和一些高级的优化概念,利用这些方法,我们就能够使通过梯度下降,进行逻辑回归的速度大大提高,而这也将使算法更加适合解决大型的机器学习问题,
然而梯度下降并不是我们可以使用的唯一算法,还有其他一些算法,更高级、更复杂。
如果我们能用这些方法来计算代价函数 𝐽(𝜃) 和偏导数项 𝜕𝜕𝜃 𝑗 𝐽(𝜃) 两个项的话,那么这些算法就是为我们优化代价函数的不同方法,共轭梯度法 BFGS ( 变尺度法 ) 和 L-BFGS ( 限制变尺度 法 ) 就是其中一些更高级的优化算法,它们需要有一种方法来计算 𝐽(𝜃),以及需要一种方法计算导数项,然后使用比梯度下降更复杂的算法来最小化代价函数。
七,多类别分类:
如何使用逻辑回归 ( 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 个类别,我们用三角形表示 𝑦 = 1,方框 表示𝑦 = 2 ,叉叉表示 𝑦 = 3 。我们下面要做的就是使用一个训练集,将其分成 3 个二元分类问题。
我们先从用三角形代表的类别 1 开始,实际上我们可以创建一个,新的 " 伪 " 训练集,类 型 2 和类型 3 定为负类,类型 1 设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器
选择出哪一个分类器是可信度最高效果最好的, 那么就可认为得到一个正确的分类,无论𝑖 值是多少,我们都有最高的概率值,我们预测 𝑦 就是那个值。这就是多类别分类问题。
正则化:
一,过拟合的问题:
如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集(代价函数可能几乎为 0 ),但是可能会不能推广到新的数据
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。我们可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适
如果我们发现了过拟合问题,应该如何处理?
1. 丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一 些模型选择的算法来帮忙(例如 PCA )
2. 正则化。 保留所有的特征,但是减少参数的大小( magnitude )。
二,代价函数
正是那些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于 0 的话,我们就能很好的拟合了。
所以我们要做的就是在一定程度上减小这些参数𝜃 的值,这就是正则化的基本方法。我们决定要减少𝜃 3 和 𝜃 4 的大小,我们要做的便是修改代价函数,在其中𝜃3 和 𝜃 4 设置一点惩罚。这样做的话,我们在尝试最小化代价时也需要将这个惩罚纳入考虑中,并最终导致选择较小一些的𝜃 3 和 𝜃 4 。
通过这样的代价函数选择出的𝜃3和𝜃4对预测结果的影响就比之前要小许多。假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了一个较为简单的能防止过拟合问题的假设:
其中𝜆又称为正则化参数( Regularization Parameter)。
注:根据惯例,我们不对𝜃0 进 行惩罚。经过正则化处理的模型与原模型的可能对比如下图所示:
那为什么增加的一项 可以使𝜃的值减小呢?
因为如果我们令 𝜆 的值很大的话,为了使 Cost Function 尽可能的小,所有的 𝜃 的值 (不包括𝜃 0 )都会在一定程度上减小。
但若 λ 的值太大了,那么𝜃(不包括 𝜃 0 )都会趋近于0,这样我们所得到的只能是一条 平行于𝑥 轴的直线。 所以对于正则化,我们要取一个合理的 𝜆 的值,这样才能更好的应用正则化
三,正则化线性回归:
如果我们要使用梯度下降法令这个代价函数最小化,因为我们未对进行正则化,所以梯度下降算法将分两种情形:
可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令theta值减少了一个额外的值。
我们同样也可以利用正规方程来求解正则化线性回归模型,方法如下所示: 𝜃 值减少了一个额外的值。
四,正则化的逻辑回归模型:
自己计算导数同样对于逻辑回归,我们也给代价函数增加一个正则化的表达式,得到代价函数:
注:看上去同线性回归一样,但是知道 ℎ𝜃(𝑥) = 𝑔(𝜃𝑇𝑋),所以与线性回归不同
Octave 中,我们依旧可以用 fminuc 函数来求解代价函数最小化的参数,值得注意的是参数𝜃 0 的更新规则与其他情况不同。
注意:
1. 虽然正则化的逻辑回归中的梯度下降和正则化的线性回归中的表达式看起来一样,但由于两者的
ℎ𝜃 (𝑥) 不同所以还是有很大差别。
2. 𝜃 0 不参与其中的任何一个正则化。