机器学习入门笔记之逻辑回归(二)

逻辑回归(Logistic Regression)和线性回归不同的地方在于,逻辑回归主要用于处理分类问题,针对的结果是散列值。例如给出一些肿瘤样本,通过逻辑回归可以判断肿瘤的状态时良性还是恶性。
关于逻辑回归,一些刚接触到这个概念的同学难免会产生疑问:为什么逻辑回归用于处理分类问题,名字里却含有回归?其实分类模型和回归模型有着相同的本质,分类模型可以将回归模型的结果离散化,回归模型也可以将分类模型的结果连续化 。

在面对肿瘤的良性恶性预测时如果使用线性回归,拟合的函数图像是这样的(0表示良性,1表示恶性)
此时我们可以将值小于0.5的样本统一为0,值大于0.5的样本统一为1。不过当样本增多时拟合出的图像就会产生变化,预测结果也会产生较大偏差
由此看来线性回归并不能很好的用于处理分类问题。

逻辑回归可由线性回归推广而来,在线性回归中有假设函数hθ(x)=θT * x,对于逻辑回归,其期望 0<=hθ(x)<=1,自变量的范围为实数域R。一个事件发生的几率为该事件发生的概率比上不发生的概率,记 p=P(y=1|x,θ)=p/1-p(几率的取值范围为[0, +∞) ),其对数的取值范围为实数域,所以可将对数几率作为因变量来构建线性回归模型:

经过变换得到
这就是逻辑回归采用Sigmoid函数的原因,以下三张图就是Sigmoid函数的原型、函数图像以及逻辑回归模型

在解决分类问题时,我们的目的是找到判定边界,而我们利用训练集拟合出的θ向量就决定了判定边界的形状。下图中如果我们求出了θ向量,得到判定边界就可以很好地将O和X进行分类
由于Sigmoid函数大于0.5时(即取y轴右边部分,y=1发生概率比较大时)z>=0,也就是 θT*X>=0 ,从而解得y=1的情况分布在判定边界的右边。
对于逻辑回归的损失函数,如果依照之前线性回归中的公式,那么绘制出来的函数图像属于非凸函数图像,并不能用梯度下降法很好的求得极小值点。所以逻辑回归定义了新的损失函数:
结果为1的训练集采用 Cost(hθ(x),y)=−log(hθ(x)) 公式训练,结果为0的训练集用 Cost(hθ(x),y)=−log(1−hθ(x))公式训练。这两个损失函数图像分别如下
图中的横轴表示的是hθ(x)的值,纵轴表示损失函数的值。针对第一个函数图像,当训练集结果y=1时,hθ(x)的值(这里hθ(x)也表示预测事件发生的概率)越接近1,预测准确度越高,损失也越接近于0。hθ(x)越接近0,表示预测事件发生的概率越小,这时离事件的确发生的事实y=1差距越远,损失函数越趋近于无穷大。可以用同样的方法去理解 y=0 时的函数图像,只不过需要把背景换成事件不发生的事实情况下,再去探索预测函数和损失函数的关系。

上面我们得到了损失函数J(θ)的损失函数:

但是这种分情况使用的损失函数在计算时不就意味着要按照不同的y值把训练集拆开代入了吗?不用担心,其实只用一个公式就能完美应对这两种情况 Cost(hθ(x), y) = -ylog(hθ(x)) - (1-y)log(1-hθ(x)) 所以逻辑回归损失函数的最终形态就是下面这样
接下来的任务就是求 minimizeJ(θ) 了,这里同样使用的是梯度下降法,求偏导的过程大家可以自行证明,最终结果如下
虽然这个公式看起来跟之前线性回归的梯度下降迭代公式看起来一样,但是由于这里hθ(x)的不同,最终导致它们两是完全不同的两码事。
同样的我们可以使用for循环来对θj的值分开迭代,更简单的方法是使用向量法整体求解,向量法的求解公式为:
其实除了梯度下降算法之外还有一些性能更好但算法复杂度非常大的优化方法,如共轭梯度法(Gradient descent)、BFGS、L-BFGS,这三个算法都不需要用户手动设置学习率α的值而且学习速度还快于梯度下降法。

为了更好的了解他们的使用方法,我们在这里用实例简单的介绍一下。不用担心实现细节,因为Matlab中已经为我们封装好了他们的调用方法,可以直接拿来使用。这里以 J(θ) = (θ1-5)^2 + (θ2-5)^2 函数为例,我们需要做的就是指定向量θ的初始值 [0, 0],让算法拟合出J(θ)值最小时向量θ的值。
首先需要我们构造损失函数CostFunction,返回单次迭代后J(θ)的值和梯度值向量:

% costFunction.m文件
function [jVal, gradient] = costFunction(theta)
    jVal = (theta(1)-5)^2+(theta(2)-5)^2;
    gradient = zeros(2,1);
    gradient(1) = 2*(theta(1)-5)
    gradient(2) = 2*(theta(2)-5)

函数中的梯度值就是对应方向上θ的求导,下面就利用函数返回的损失函数值和梯度值向量进一步求解。

>> options = optimset('GradObj','on','MaxIter',100);  % 这是一个为最优化方法设置参数选项的方法,
成对传入参数,前一个为选项名称,后一个为选项的值。设置梯度目标参数'GrandObj'为'on',设置迭代次数
'MaxIter'为100
>> initialTheta = zeros(2,1);  % 初始化向量θ
>> [optTheta, functionVla, exitFlag] = fminunc(@coustFunction,initialTheta,options) % 为无约束优化
提供大型和中型优化算法,默认使用BFGS算法。传入损失函数的引用、参数和之前设置的选项,返回θ向量、损失函数的值
和是否收敛的标记

多分类

多分类问题也可以按照二分类问题的思路进行类比推导,思路是每次将要区分出来的值作为一个群体,将剩余数据作为一个群体,按照二分类的方法拟合出判定边界。如此作用每一类数据,就可以得到满足y=1,2,3...k 时的分界曲线,然后将他们组合到一个J(θ)中即可。

过拟合

到了这里还没完,还要介绍一下过拟合的问题。在训练模型过程中,模型当然跟训练集数据越吻合越好,不过过度拟合反而会让结果适得其反。以下三个图像就代表的是欠拟合、正好拟合和过拟合的情况。

可以看到第一个图像与训练集吻合程度较差,第三个图像能完美拟合每一个数据,其实这两个都是不理想的模型。虽然第三个模型能很好的预测训练集中的数据,但是它显然不能很好的预测新数据,用专业术语来说就是它的泛化能力较差。
有两个有效的方法能避免过拟合:
1、减少特征数量。这里可以选择人为减少特征的数量,还可以使用模型选择算法来筛选。
2、正则化。正则化会保留所有的特征,但是会减少参数θj的大小。

正则化

在训练集数据不够或者over training时,常常会导致过拟合。过拟合就是向原始模型引入惩罚因子,以防止过拟合和提高模型繁华能力的一类方法的统称。在实际场景我们总是会发现,最好的拟合模型(从最小泛化误差的意义上)是一个适当正则化的模型。

正则化在解决过拟合问题的思路上就是通过向原式子添加惩罚因子,让多余的特征项变得趋近于0。过拟合模型通过正则化处理后,图像会变得光滑平缓。
上图的J(θ)就是正则化后的损失函数,与之前相比多出了加号后面的那部分正则项。尽管影响很小,但是我们约定俗成 正则项不会惩罚常量θ0,所以正则项会从θ1开始迭代。λ 叫做正则化参数,它的作用是平衡 加号前面那部分用于拟合训练集参数的项 和 λ后面的用于保持部分参数值足够小的项。 如果λ的值设置过大,将会对θ1到θn所在的每一项都造成程度较大的惩罚,从而导致 hθ(x)→θ0,函数图像变成一条横线(欠拟合)。正则化的方法不需要我们自己找出关联系数较小的那些特征。

梯度下降法求解

不管是逻辑回归还是线性回归,将正则化方法代入后得到的损失函数都满足如下公式

上图最后一行便是梯度下降结合正则化的总公式。1-αλ/m 通常是一个略小于1的常数项。正则化逻辑回归的损失函数公式如下,这里可以自行求偏导看看是否与上面的公式吻合
常规方程

如果在逻辑回归和线性回归中对结合了正则化的函数采用常规方程的解法,求解公式会发生一些变化:

关于常规方程的解法这里不做赘述,具体可参照上一篇文章。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352