天天看点

logistics判别与线性模型中的问题

之前说过,机器学习的两大任务是回归和分类,上章的线性回归模型适合进行回归分析,例如预测房价,但是当输出的结果为离散值时,线性回归模型就不适用了。我们的任务是:将回归分析中的实数值转化为离散值或者对于离散值的概率

logistic判别

转换函数

例如我们进行癌症判定,回归模型可以输出癌症几率a,并且 a∈(0,1) a ∈ ( 0 , 1 ) ,而我们的任务是将几率转化为0、1两个结果(例如0表示无癌,1表示患癌)。

如果我们使用前一章的线性回归模型,可以认为>0.5的结果看成1,<0.5的结果看成0,便可以得到下列的转换函数:

result=0,y<(=)0.5result=1,y>(=)0.5 r e s u l t = 0 , y < ( = ) 0.5 r e s u l t = 1 , y > ( = ) 0.5

这个公式看上去十分直观,但是有一些明显的缺点:

1. 并非所有的连续值都可以均匀映射在[0,1]之间,例如人的身高在区间[120,250]之间,但是大部分人身高都取在该区间的 中值,两端较少。

2. 一些极端值可能会大大影响分类的效果,例如出现了一个身高0.7m的侏儒病患者,则映射区间变成了[70,250]->[0,1],原来的中值180可能在这种情况下只能映射为0.3,使得分类效果变差。如下图所示:

logistics判别与线性模型中的问题

为了解决以上这些问题,我们提出了一个特殊的转换函数,对数几率函数,又称sigmoid函数

y=11+e−x y = 1 1 + e − x

其图像如下:

logistics判别与线性模型中的问题

可以很明显的看出,该函数将 实数域映射成了[0,1]的区间,带入我们的线性回归方程,可得:

y=11+e−(w⃗ Tx⃗ +b) y = 1 1 + e − ( w → T x → + b )

于是,无论线性回归取何值,我们都可以将其转化为[0,1]之间的值,经过变换可知:

ln(y1−y)=w⃗ Tx⃗ +b l n ( y 1 − y ) = w → T x → + b

故在该函数中, ln(y1−y) l n ( y 1 − y ) 代表了 x⃗  x → 为正例的可行性大小,由于含有对数,所以称为对数几率,其中y为正例几率,1-y为反例几率。

所以在算法中,最终得到的结果y便代表是正例的几率,它在[0,1]之间,一般而言, 如果y大于0.5,我们将其视为正例,如果y小于0.5,我们将其视为反例。

更新策略

我们将转换函数 y=11+e−(w⃗ Tx⃗ +b) y = 1 1 + e − ( w → T x → + b ) 称为 hw(x) h w ( x ) ,这是原本的线性回归 f(x)=wTx+b f ( x ) = w T x + b 和sigmoid函数 y=11+e−x y = 1 1 + e − x 结合得到的。

由于这个函数并不是凸函数,直接带入我们之前的梯度下降策略是无效的,得不到优化的结果,所以要更换梯度下降策略。

定义新的代价函数:

Cost(hw(x),y)=−log(hw(x)),y=1Cost(hw(x),y)=−log(1−hw(x)),y=0 C o s t ( h w ( x ) , y ) = − l o g ( h w ( x ) ) , y = 1 C o s t ( h w ( x ) , y ) = − l o g ( 1 − h w ( x ) ) , y = 0

观察该式可知,无论y取0还是1,当 hw(x) h w ( x ) 与y差距越大,代价函数值越大,且趋于正无穷,代价函数取值范围为 [0,+∞] [ 0 , + ∞ ] 。

将上面的代价函数写成另一种形式,便于进行求导:

Cost(hw(x),y)=−ylog(hw(x))−(1−y)log(1−hw(x)) C o s t ( h w ( x ) , y ) = − y l o g ( h w ( x ) ) − ( 1 − y ) l o g ( 1 − h w ( x ) )

将所有的数据项代价累计起来,得到最终的代价函数形式:

J(hw(x),y)=−1m{∑i=1myilog(hw(xi))+(1−yi)log(1−hw(xi))} J ( h w ( x ) , y ) = − 1 m { ∑ i = 1 m y i l o g ( h w ( x i ) ) + ( 1 − y i ) l o g ( 1 − h w ( x i ) ) }

对于该函数使用 梯度下降,分别对每一个 w⃗  w → 的每一项进行求导和更新即可

正则化

当我们利用线性回归拟合数据时,为了拟合较为复杂的数据,可能会引入较多的参数,例如:

y=θ0+θ1x1+θ2x2+θ3x3+θ4x4其中x1=x,x2=x2,x3=x3,x4=x4 y = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 其 中 x 1 = x , x 2 = x 2 , x 3 = x 3 , x 4 = x 4

我们可能会得到下面两种图像:

logistics判别与线性模型中的问题

在理想情况下,我们的算法应该得到左边的图像,而右边的图像显然有 过拟合的倾向。

在统计学中,过拟合(英语:overfitting,或称过度拟合)现象是指在拟合一个统计模型时,使用过多参数。对比于可获取的数据总量来说,一个荒谬的模型只要足够复杂,是可以完美地适应数据。过拟合一般可以视为违反奥卡姆剃刀原则。当可选择的参数的自由度超过数据所包含信息内容时,这会导致最后(拟合后)模型使用任意的参数,这会减少或破坏模型一般化的能力更甚于适应数据。过拟合的可能性不只取决于参数个数和数据,也跟模型架构与数据的一致性有关。此外对比于数据中预期的噪声或错误数量,跟模型错误的数量也有关。

如果算法效果较好,即使我们在初始部分选择了很多个参数,如上文的 θ0、θ1、θ2、θ3、θ4 θ 0 、 θ 1 、 θ 2 、 θ 3 、 θ 4 ,理想的算法也应该尽量使 θ3、θ4 θ 3 、 θ 4 接近0,使得实际的得到的拟合曲线应该如左图所示,为解决该问题,我们引入了正则化项。

正则化线性回归

为了解决过拟合的问题,我们应该引入一个参数项,使得在进行梯度下降的时候尽可能使得参数变小,这样可以使得很多额外的变量的系数接近于0。

更新线性回归的代价函数:

minS=12n(∑i=1n(f(xi)−yi)2+λ∑j=1mθ2j) m i n S = 1 2 n ( ∑ i = 1 n ( f ( x i ) − y i ) 2 + λ ∑ j = 1 m θ j 2 )

其中, λ∑mj=1θ2j λ ∑ j = 1 m θ j 2 叫做正则化项(Regularization Term), ,λ叫做正则化参数(Regularization Parameter). λ的作用就是在”更好地拟合数据”和”防止过拟合”之间权衡.λ过大的话, 就会导致 θ1θ1 θ 1 θ 1 …近似于0, 这时就变成了 欠拟合(Underfit). 所以需要选择一个合适的λ。

正则化logistics判别

和正则化线性回归相似,我们也在logistics判别中加入正则化项:

J(hw(x),y)=−1m{∑i=1myilog(hw(xi))+(1−yi)log(1−hw(xi))}+λ2m∑j=1mθ2j J ( h w ( x ) , y ) = − 1 m { ∑ i = 1 m y i l o g ( h w ( x i ) ) + ( 1 − y i ) l o g ( 1 − h w ( x i ) ) } + λ 2 m ∑ j = 1 m θ j 2

接着进行梯度下降即可。

多分类问题

logistics判别解决的是二分类问题,那么应该如何解决多分类问题呢?一般采用拆解法,来将多分类问题分解成多个二分类问题。

一般而言有三种经典的拆分方法

- 一对一:假如某个分类中有N个类别,我们将这N个类别进行两两配对(两两配对后转化为二分类问题)。那么我们可以得到 N(N+1)2 N ( N + 1 ) 2 个二分类器。之后在测试阶段,我们把新样本交给这个二分类器。于是我们可以得到个分类结果。把预测的最多的类别作为预测的结果。

- 一对其余:一对其余其实更加好理解,每次将一个类别作为正类,其余类别作为负类。此时共有(N个分类器)。在测试的时候若仅有一个分类器预测为正类,则对应的类别标记为最终的分类结果。若有多个分类器预测为正类,则选择概率最大的那个。

- 多对多:所谓多对多其实就是把多个类别作为正类,多个类别作为负类。该种方法比较复杂,这里推荐一个常用的方法:ECOC纠错码方法,这种方法简而言之,就是N个类别做多次划分形成M个分类器,用这M个分类器分别对N个类别进行识别,正例为1,负例为0,形成了M位的01编码,对于任何测试数据,形成其01编码,分别和N个类别的01编码进行比较,计算编码的距离,选取最近的类别作为测试数据的类别。

类别不均衡问题

想象我们在做一个预测罕见病A的机器学习模型,但是该病十分罕见,我们一万个数据中只有8个病例,那么模型只需要将所有的数据都预测为无病,即可达到99.92%的超高预测成功率,但是显然这个模型不符合要求。

那么对于这种数据集中类别不平衡的问题,该如何解决呢?目前主要有三种方法:

- 欠采样:去除一些数目过多的类别的数据,使得不同类别的数据数目接近。

- 优点:不需要重新收集数据,训练速度快

- 缺点:使用的数据集远小于原数据集,可能丢失重要信息

- 过采样:增加数目小的类别的数据,使得不同类别的数据数目接近。

- 优点:不丢失信息,数据集较大

- 缺点:若对数目少的数据进行重复采样会造成过拟合的问题,训练时间长

- 阈值移动:我们在之前logistics判别中说过, ln(y1−y)=w⃗ Tx⃗ +b l n ( y 1 − y ) = w → T x → + b ,我们通过 y1−y y 1 − y 的值来判断正例负例,之前我们的判断依据是 ify1−y>1 i f y 1 − y > 1 ,阈值为1,我们设定新的阈值

y11−y1=y1−y∗m−m+ y 1 1 − y 1 = y 1 − y ∗ m − m +

其中 m−,m+ m − , m + 分别代表负例和正例的数目,如果两者接近,该阈值就为1。

查看更多

所有的文章都会在我的博客和我的知乎专栏同步进行更新,欢迎阅读

- 我的博客

- 知乎专栏

继续阅读