课时6 二元分类(逻辑回归)问题
6.1 分类
我们开始讨论要预测的y是一个离散值情况下的分类问题。我们将开发一个逻辑回归算法(一个分类算法)
分类问题:例如将邮件分为是否是垃圾邮件,判断肿瘤是恶性还是良性等。
二元分类问题:非负即正非黑即白的问题,如上面的两个例子
多分类问题:即有多个结果的问题。
当我们用线性回归的方法处理这个问题,我们可以设置一个阈值,比如0.5,当代价函数值小于0.5时预测值为0,当大于0.5时预测值为1。这样可以把连续的代价函数值变为离散值。
但当我们的图像中的右边,出现一个样本时,我们拟合的直线可能是蓝线,而此时如果再选择阈值为0.5,就会出现明显的错误。那我们再整体看待这个问题,当样本增加的时候,居然会得到一个更恶劣的预测结果。所以,线性回归不太适合分类问题。
现在讨论二元分类,其最终预测结果是0和1,所以当预测值远大于或远小于0 1时,会有一点奇怪。所以我们希望预测结果在0、1之间。
那么我们在假设函数h外面再复合一个g函数,也就是逻辑函数,g函数的值域如图所示,永远在0、1之间
6.2 假设陈述
当假设函数输出某个数字h(x),我们会把这个数字当作对一个输入x,它的预测结果y=1的概率估计
比方说,我们使用肿瘤分类的例子,我们可能有一个特征向量x(同往常一样x0=1),然后一个特征是肿瘤大小。假设有一个病人来了,我们将他的肿瘤的大小喂给该假设中,假说输出为0.7
也就是说对于一个特征为x的患者,y=1(肿瘤为恶性肿瘤)的概率为0.7
图下方的方程是概率论写法,可以通俗的理解为再给定x的条件下y=1的概率,即病人特征为x(肿瘤大小为x)的情况下,恶性肿瘤的概率,这个概率的参数是θ。
6.3 决策边界
首先,再次看一下假设函数h()和逻辑函数g()的关系。我们在前面直接称假设函数h()的值为预测值,也就是最终结果。但后来我们希望在二元分类中让结果在0、1之间,所以让这个结果再做一次函数变换,放入g()中并取得一个函数g()的值,让这个g()的函数值作为最终预测值。当其(y=1的概率)大于0.5时,我们认为结果为1,相反则结果为0。
注意!从第一行的公式应当注意到,此时g()的值就是假设函数h()的值,假设函数在线性回归问题中的结果是θTx,而现在我们将θTx作为一个z再放入g()中,得到的结果赋值给假设函数h(),作为其最终结果。因此我们在二元分类问题逻辑回归中讨论假设函数h()时是直接讨论其是否大于0.5
再进一步看,假设函数h()的最终结果是否大于0.5受什么影响。也就是g()是否大于0.5的影响因素,当然是g()的输入z,从g()的图像可以看出,其函数图像是否大于0.5取决于z是否大于0。即是说,假设函数h()的预测结果是否大于0.5就是要看θTx是否大于0。
假设我们有一个训练集如图所示,且假设函数为上面写的那个,并且假设已拟合出最佳参数为[-3,1,1]
那么根据我们上面介绍的,当结果y=1时,其输入θTx≥0,即图中蓝色线的不等式。将该不等式稍作变换,就可以得到下面写出的方程,其等式的图像为图中粗粉色直线,该直线刚好将数据集分为两部分,我们称其为决策边界。也就是将y=0 y=1划分开的边界,也是使假设函数h()=0.5的那条参数取值。
另外,决策边界是假设函数的一个属性,决定于其参数。与数据集无关(当然假设函数的参数是根据数据集拟合出来的,但此时可不做考虑)。也就是说,一旦确定参数取值,决策边界也就随之确定了。
6.4 代价函数
现在介绍如何拟合逻辑回归。图中第一行的J(θ)是前面学过的代价函数,然后他将1/2放进求和公式里,并将1/2的平方误差项单独拿出来命名为cost函数(可理解为单个样本的代价)。此时代价函数J就等于1/m的cost函数在训练集范围上的求和。
这个代价函数在线性回归问题中很好用。但现在用在逻辑回归中,我们在最小化代价函数时,由于其中h()这一项是一个非线性的,则J的图像会变成参数θ的非凸函数 ,如上左图所示。这样的图像在梯度下降算法中,可能会得到局部最小值而非全局最优值。但我们希望代价函数像在线性回归中的一样是一个凸函数,以便使用梯度下降算法,如右图所示。
所以我们寻找到了逻辑回归问题的代价函数J,其中cost定义为图中这个函数
当y=1时,由于-log(x)的图像的0-1段(这个函数的输入是h(),而h()一定是0-1的)如图中品红色线所示,将其单独拿出来就是左图。这个图像完全满足我们对代价函数的要求,当假设函数得到的结果也是1时,其代价就是0。假设函数的结果越靠近0,其付出的代价也就越大。而当y=0时同理,图像如右图所示。
6.5 简化代价函数与梯度下降
由于需要使用梯度下降算法,所以我们需要将cost函数的两种情况想办法合并成一个,即上图中蓝色字体写出的。式中有两项,由于y总是等于0或1,所以根据两项前面的系数总有一个=0,如此就巧妙的将两个式子合并成了一个。
图中的式子就是逻辑回归的代价函数,其推导过程在这里不详述,但可以说明它是统计学中的极大似然法得来的
现在要做的是最小化代价函数J,为训练集拟合出θ
图中下方黑色字体的是一般的梯度下降算法模板,蓝色字体写出的是逻辑回归中梯度下降算法 偏导数项的求导结果,将其带入原式就是右图。此时我们发现和线性回归问题中的梯度下降算法是一样的,但要注意线性回归和逻辑回归的假设函数h()是完全不一样的,在图中由蓝色和红色字体写出,所以其实两个算法还是两回事。
之前在线性回归问题中谈论过如何检测梯度下降算法,以确保它收敛,这个在逻辑中是一样的
以上就是逻辑回归的梯度下降,之前在线性回归问题中我们还介绍过特征缩放,在特征范围相差过大时,也适用于逻辑回归,帮助其快速收敛
6.6 高级优化
高级优化的方法与梯度下降算法相比能大大提高逻辑回归运行的速度,以使算法更加适合解决大型机器学习问题
使用这些高级算法的好处:不需要手动选择学习率α(算法内部有一个智能循环,自动尝试并找到一个好的学习率),往往比梯度下降算法收敛的速度快很多 缺点是比梯度下降算法复杂。这些算法的内循环往往非常复杂,吴恩达也是使用了这些算法很多年才搞清楚某些算法的内循环在做什么。如果使用C C++ JAVA这些语言实现机器学习的这些高级优化算法,可能需要多尝试几个库才能找到一个实现的较好的。作者使用Octave在视频6.6中有例子,可以看。
6.7 多类别分类:一对多 (多类别分类问题)
如何使用逻辑回归解决多类别分类问题
一对多又称作一对余,也就是将多个分类结果分别挑出来挨个判断。
如上图所示,有一个训练集包含三个类别,其中的三角方框和叉分别表示y=1 , y=2 , y=3三种情况。我们要做的就是将这个三元问题分为三个独立的二元分类问题。如第一个,我们创建一个伪训练集,将类别一设定为正类,类别二和三设定为负类,然后拟合一个标准的逻辑回归分类器,就可以得到一个判定边界。同理,分别拟合出三个分类器,来估计出y=i( i=1,2,3)的概率。
当我们需要分类时,就需要将一个x分别输入到三个分类器中,选择其返回值最高的作为结果(因为h()计算的是y=i的概率,所以概率最大的就是结果)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!