小 Mi 学习,向上踊跃!逻辑回归的函数示意还有裁决边界还记得不,是不是感觉上一节还不得劲儿?!这不,小 Mi 又来更新啦~
- 代价函数
当初咱们就要开始探讨如何拟合 logistic 回归模型的参数,具体来说,咱们要定义用来拟合参数的优化指标或者代价函数,以下便是监督学习问题中的 logistic 回归模型的拟合问题:
倘若咱们有一个训练集,外面有 m 个训练样本,仍旧和以前一样,每个样本是用 n + 1 维的特征向量示意的,其中第一个特色为 1。同时,因为这是一个分类问题,所以训练集中所有的标签 y 不是 0 就是 1,。而假如函数,参数就是公式中的,咱们要解决的问题就是,对于这个给定的训练集,咱们如何抉择。以前咱们建设线性回归模型时,应用的代价函数为:,当初在此基础上稍作批改,将 1 / 2 放到求和符号外面:,而后前面的局部间接替换成,也就是说代价函数是 1 / m 乘以这个 cost 项在训练集范畴上的求和:,为了更加简洁一点,能够间接去掉上标,,代价值就是 1 / 2 乘以预测值 h 和理论观测的 y 值的差的平方,这部分在线性回归中施展了很大的作用,然而如果用于 logistic 回归,就会呈现一个问题,会变成参对于参数的非凸函数。因为,这是一个很简单的非线性函数,如果把这个 Sigmoid 函数带入,再把这个 Cost 项带入进原公式,能够画出图像,最初能够发现有很多部分最优解,这样的就能够称之为非凸函数:
这时咱们就能够发现,如果在这样的函数上应用梯度降落法,并不可能保障它会收敛到全局最小值,相同地,如果代价函数是一个凸函数,对其应用梯度降落法,会最终收敛到全局最小值,既然这样的话,咱们能够换个思路,寻找另一个是凸函数的代价函数不就好了呗。是不是!从而梯度降落法也能使用了,继而全局最小值的问题也会迎刃而解。
因而,咱们定义:
当 y = 1 时,代价值将等于 -log(h(x));而 y = 0 时,则是 -log(1-h(x))。这看起来是个非常复杂的函数,然而如果画出这个函数的图像,就很好了解啦,从 y = 1 这个状况开始,代价函数的图像如下图:
咱们来具体了解下这个函数为什么是这样的,首先画出对数函数 log(z)的图像:
-log(z)就是沿着 z 轴翻译一下,而后再选中 0~1 的局部:
因而,全新的代价函数有一些乏味并且很好的性质:首先,咱们能够留神到,如果假如函数预测值 h(x)=1,并且 y 刚好等于 h(x)时,那么这个代价就为 0,这也是咱们心愿看到的,因为咱们正确预测了输入值;同时,当 y = 1 但 h(x)不为 1 时,误差随着 h(x)变小而增大。
另一种状况,y= 0 时,代价值函数是什么样子的呢?
这个曲线的特点是,当理论的 y = 0 且 h(x)也为 0 时的代价为 0,当 y = 0 但 h(x)不为 0 时误差随着 h(x)的变大而变大。
Python 代码实现:
xxxxxxxxxx
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))
在失去这样一个代价函数当前,咱们便能够用梯度降落算法来求得能使代价函数最小的参数了。算法为:
求导后失去:
注:尽管失去的梯度降落算法外表上看上去与线性回归的梯度降落算法一样,然而这里的与线性回归中不同,所以实际上是不一样的。另外,在运行梯度降落算法之前,进行特色缩放仍旧是十分必要的。
当然 除了梯度降落算法以外,还有一些常被用来求代价函数最小的算法,这些算法更加简单和优越,而且通常不须要人工抉择学习率,通常也比梯度降落算法要更加疾速,比方:共轭梯度(Conjugate Gradient),局部优化法 (Broyden fletcher goldfarb shann,BFGS) 和无限内存局部优化法(LBFGS) 等。
5 简化的老本函数和梯度降落
在这段视频中,咱们将会找出一种略微简略一点的办法来写代价函数,来替换咱们当初用的办法。同时咱们还要弄清楚如何使用梯度降落法,来拟合出逻辑回归的参数。因而,后续的话咱们就应该晓得如何实现一个残缺的逻辑回归算法了。逻辑回归的代价函数:
咱们的整体代价函数是 1 / m 乘以对应不同标签 y 的各个训练样本,在预测时付出的代价之和,这是咱们约定单个样本的代价,另外,咱们还须要留神一下,对于分类的问题,在咱们的训练集中,甚至不在训练集中的样本,y 的值总是等于 0 或 1 的,这是由 y 的数学定义决定的,因为 y 是 0 或 1,咱们就能够一个超简略的形式来写这个代价函数,将两个式子合并成一个等式:
与之前的公式其实是等效的,大家能够动动手简略证实一下!
从而就能够推导出 logistic 回归的代价函数:
不过这里使用了统计学中的极大似然法,能够疾速寻找参数,同时还能满足凸函数的性质(更深一层的原理后续会通通介绍给大家)。依据这个代价函数,为了拟合出参数,该怎么做呢?咱们要试图找尽量让获得最小值的参数。如果给咱们一个新的样本,具备某些特色 x,咱们能够用拟合训练样本的参数来输入这样的预测。同时,咱们假如的输入,实际上就是 y = 1 的概率,就是输出为 x 认为参数时 y = 1 的概率,就能够想成,咱们的假如就是预计 y = 1 的概率:。因而,接下来须要做的就是弄清楚如何最小化,这样咱们能力为训练集拟合出参数。
不必猜都能晓得,当初提到最小化,必定是应用梯度降落法,代价函数为:
如果咱们要最小化这个对于的函数值,能够选用常见的梯度降落法模板:
须要一直重复更新每个参数,就是用它本人减去学习率乘以前面的导数项,也能够本人入手试一下,间接算出这个导数项,最终失去的式子为:
该式子在 i =1 到 m 上求和,其实就是预测误差乘以,将偏导数项放回到原来式子这里,梯度降落算法写作就会变成:
所以,如果有 n 个特色,也就是说:,那么就须要用这个式子来同时更新所有的值。
当初,如果把这个更新规定和咱们之前用在线性回归上的进行比拟的话,最初可能会诧异地发现,这个式子正是咱们之前用来做线性回归梯度降落的式子!
那么,这时候小 Mi 就有疑难了,线性回归和逻辑回归是同一个算法吗?答复这个问题,咱们先察看一下逻辑回归产生了哪些变动。实际上,假如的定义产生了变动。
对于线性回归假如函数:
而当初逻辑函数假如函数:
因而,即便更新参数的规定看起来基本相同,但因为假如的定义产生了变动,所以逻辑函数的梯度降落,跟线性回归的梯度降落实际上是两个齐全不同的货色。
在先前的视频中,当咱们在议论线性回归的梯度降落法时,咱们谈到了如何监控梯度降落法以确保其收敛,同理,通常也把同样的办法用在逻辑回归中,来监测梯度降落,以确保它失常收敛。
最初还有一点,咱们之前在谈线性回归时讲到的特色缩放,特色缩放能够帮忙进步梯度降落的收敛速度,同时也实用于逻辑回归。如果你的特色范畴差距很大的话,那么利用特色缩放的办法,同样也能够让逻辑回归中,梯度降落收敛更快。
6 高级优化
这一章节咱们会波及一些高级优化算法和一些高级的优化概念,利用这些办法,咱们就可能使其速度大大提高,而这也将使算法更加适宜解决大型的机器学习问题,比方,咱们有数目宏大的特色量。当初咱们换个角度来看什么是梯度降落,咱们有个代价函数,而咱们想要使其最小化,那么咱们须要做的是编写代码,当输出参数时,它们会计算出两样货色:以及 J 等于 0、1 直到 n 时的偏导数项。
假如咱们曾经实现了能够实现这两件事的代码,那么梯度降落所做的就是重复执行这些更新。另一种思考梯度降落的思路是:咱们须要写出代码来计算和这些偏导数,而后把这些插入到梯度降落中,而后它就能够为咱们最小化这个函数。对于梯度降落来说,实际上并不需要编写代码来计算代价函数,只须要编写代码来计算导数项,然而,如果心愿代码还要可能监控这些的收敛性,那么咱们就须要本人编写代码来计算代价函数和偏导数项。所以,在写完可能计算这两者的代码之后,咱们就能够应用梯度降落。然而梯度降落并不是咱们能够应用的惟一算法,还有其余一些算法,更高级、更简单。如果咱们能用这些办法来计算代价函数和偏导数项两个项的话,那么这些算法就是为咱们优化代价函数的不同办法,共轭梯度法 BFGS (变尺度法) 和 L -BFGS (限度变尺度法) 就是其中一些更高级的优化算法,它们须要有一种办法来计算,以及须要一种办法计算导数项,而后应用比梯度降落更简单的算法来最小化代价函数。这三种算法有许多长处:
一个是应用这其中任何一个算法,通常不须要手动抉择学习率,所以对于这些算法的一种思路是,给出计算导数项和代价函数的办法,能够认为算法有一个智能的外部循环,而且,事实上,他们的确有一个智能的外部循环,称为线性搜寻 (line search) 算法,它能够主动尝试不同的学习速率,并主动抉择一个好的学习速率,因而它甚至能够为每次迭代抉择不同的学习速率,那么就不须要本人抉择。这些算法实际上在做更简单的事件,不仅仅是抉择一个好的学习速率,所以它们往往最终比梯度降落收敛得快多了,不过对于它们到底做什么的具体探讨,咱们后续再具体探讨啦。
咱们实际上齐全有可能胜利应用这些算法,并利用于许多不同的学习问题,而不须要真正了解这些算法的内环间在做什么,如果说这些算法有毛病的话,那么小 Mi 真的很想吐槽一下它们比梯度降落法简单多了!特地是 L-BGFS、BFGS 这些算法,除非你是数值计算方面的专家。不过值得快乐的是,咱们当初很多编程软件都有弱小的库能够调用!它们会让算法应用起来更含糊一点,兴许略微有点难调试,不过因为这些算法的运行速度通常远远超过梯度降落。所以当有一个很大的机器学习问题时,小 Mi 会抉择这些高级算法,而不是梯度降落。
7 多类别分类:一对多
首先上例子:
Example one:如果说当初须要一个学习算法能主动地将邮件归类到不同的文件夹里,或者说能够主动地加上标签,那么,兴许须要一些不同的文件夹,或者不同的标签来实现这件事,来辨别开来自工作的邮件、来自敌人的邮件、来自家人的邮件或者是无关兴趣爱好的邮件,那么,咱们就有了这样一个分类问题:其类别有四个,别离用 y =1、y=2、y=3、y=4 来代表。
Example two:如果一个病人因为鼻塞来到诊所,他可能并没有生病,用 y = 1 这个类别来代表;如果患了感冒,用 y= 2 来代表;如果得了流感用来 y = 3 代表。
Example three:如果咱们正在做无关天气的机器学习分类问题,可能想要辨别哪些天是晴天、多云、雨天、或者下雪天。
上述所有的例子中,y 能够取一个很小的数值,一个绝对 ” 审慎 ” 的数值,比方 1 到 3、1 到 4 或者其它数值,以上说的都是多类分类问题,然而对于之前的二元分类问题,咱们的数据图像是这样的:
对于一个多类分类问题,咱们的数据集或者看起来像这样:
用 3 种不同的符号来代表 3 个类别,而给出 3 个类型的数据集,咱们又如何失去一个学习算法来进行分类呢?
咱们当初曾经晓得如何进行二元分类,能够应用逻辑回归,对于直线或者你也晓得,能够将数据集一分为二为正类和负类。用一对多的分类思维,咱们能够将其用在多类分类问题上。
上面将介绍如何进行一对多的分类工作,有时这个办法也被称为 ” 一对余 ” 办法。
有一个训练集,好比上图示意的有 3 个类别,咱们用三角形示意 y =1,方框示意 y =2,叉叉示意 y=3。咱们上面要做的就是应用一个训练集,将其分成 3 个二元分类问题。
先从用三角形代表的类别 1 开始,实际上咱们能够创立一个,新的 ” 伪 ” 训练集,类型 2 和类型 3 定为负类,类型 1 设定为正类,创立一个新的训练集,如下图所示的那样,拟合出一个适合的分类器。
这里的三角形是正样本,而圆形代表负样本。能够这样想,设置三角形的值为 1,圆形的值为 0,而后训练一个规范的逻辑回归分类器,这样咱们就失去一个正边界。
为了能实现这样的转变,咱们将多个类中的一个类标记为正向类(y=1),而后将其余所有类都标记为负向类,这个模型记作。接着,相似地第咱们抉择另一个类标记为正向类(y=2),再将其它类都标记为负向类,将这个模型记作 , 依此类推。最初咱们失去一系列的模型简记为:其中:。
最初,在咱们须要做预测时,再将所有的分类机都运行一遍,而后对每一个输出变量,都抉择最高可能性的输入变量。
总之,咱们曾经把要做的做完了,当初要做的就是训练这个逻辑回归分类器:,其中 i 对应每一个可能的 y =i,最初,为了做出预测,咱们给出输出一个新的 x 值,用这个做预测。咱们要做的就是在咱们三个分类器外面输出 x,而后咱们抉择一个让最大的 i,即。
当初咱们晓得了根本筛选分类器的办法,抉择出哪一个分类器是可信度最高成果最好的,那么就可认为失去一个正确的分类,无论值是多少,咱们都有最高的概率值,咱们预测 y 就是那个值。这就是多类别分类问题,以及一对多的办法,通过这个小办法,也能够将逻辑回归分类器用在多类分类的问题上啦~
终于,逻辑回归也带着大家一起学习完啦!这里小 Mi 不禁地要感叹一下,历史总是类似的,经典也是亘古不变的,实用于线性回归的办法说不定也实用于逻辑回归,只是细节有所不同而已。下期咱们还将学习新一轮的学习算法,大家做好筹备了吗?咱们,下期见呦~