今天这章我们主要作为补充章节,补充一些和线性模型有关的问题的解决方法。

        还记得上一章,我们在学习多分类时遇到的问题吗,当类别不平衡时,会对分类算法的性能产生影响。但是在日常生活中,我们就是会遇到类别不平衡的现象,因此这一章我们会给出解决方法。还有一个我们比较常见的问题,就是数据的维度过高,可能会导致在建模过程中出现一些问题,因此降维是数据预处理中比较重要的一步。

一.类别不平衡问题

1.1基本概念

        在分类问题中,很容易出现类别不平衡问题。比如说,我们现在是银行的风险管控员,我们要判断这笔交易是否有可能是诈骗,这时我们应该更加关注它是诈骗的可能性,那“正例”就是“诈骗”,“反例”就是“正常”。

        在前面的分类问题中,我们是不是说过,这里的y其实代表的是P(y=1\mid x),在日常生活中,我们常以0.5作为阈值,当概率大于0.5时,我们就说有可能发生,小于等于0.5就是可能不发生。这里同样用0.5作为阈值。

        我们上一章还介绍了几率这个概念,就是\frac{y}{1-y},当y>0.5时,几率\frac{y}{1-y}>1,因此我们的分类决策规则可以变成几率大于1时,预测为正例,但是这是当正例反例数目相当时。

        那同学们思考,有没有可能出现这样的情况,在我的数据中,很少有诈骗出现,因此我的1000个数据中,只有1例为正例,剩下的全部为反例,这样的数据中正例和反例数目差别过大,这时我们用m^{+}代表正例的数目,m^{-}代表反例的数目,我们将分类决策规律变成\frac{y}{1-y}>\frac{m^{+}}{m^{-}},这时预测就是正例。为什么要这样做?这里的\frac{m^{+}}{m^{-}}表示真实正例与反例的比值,被称为观测几率。因为我们假设分类使用的训练集是真实样本总体的无偏估计,因此这里的观测几率就是真实几率。

        很多同学就说,这都什么跟什么,把我都绕晕了,别急,现在我们再从头到尾捋一遍。

        之所以使用观测几率,是因为真实数据中正例和反例差别过大,因此我们不能让几率和1去比较。同学们可以这样想,前面我们的\frac{y}{1-y}>1中的1其实就是\frac{m^{+}}{m^{-}},只不过因为此时m^{+}m^{-}数量相等,因此才变成了1。好,我们接着往下看。

        因为我们最后输出的是概率,因此我还是希望能够写成类似我们最初\frac{y}{1-y}>1这样的形式。前面我们做了一个假设,“训练集是真实样本总体的无偏估计”,但是这个假设真的成立吗,其实在现实中,这个假设往往不成立,这样的话,我们的观测几率就不等于真实几率,因此我们用几率乘上观测概率作为新几率。其实这里给几率乘上观测几率就相当于做了一次修正操作,此时我们就能够写成以前的形式\frac{y'}{1-y'}>1,接下来我们看具体方法。

1.2具体方法

        上面我们学习到了,类别不平衡学习的一个基本策略就是“再缩放”,常见三种方法。

        分别是欠采样、过采样、阈值移动。我们一个一个来看。首先看欠采样,前面我们说,正例和反例数目差别很大,反例数目远大于正例,此时我们对反例进行欠采样,也就是去除一些反例,使得正例反例数目趋于相当。但是,如果我们随机去除一些反例,可能会导致丢失重要信息,所以我们常采用EasyEnsemble算法,该算法就是利用集成学习的机制,将反例划分成几个集合,然后用于不同学习器的学习,这样对于每个学习器来说,都是欠采样。

        然后我们说过采样,过采样是对正例进行操作,通过增加正例数量使得正例反例数量相当。但是如果只是简单的重复采样,那很容易造成过拟合,因此我们使用SMOTE算法,对正例进行插值操作来增加正例数量。对比前面的欠采样,过采样操作的时间开销应远大于欠采样,因为欠采样是在原始数据集的基础上减少数据,而过采样是增加。

        最后我们来看阈值移动。这种方法就是在原始数据集上进行训练,但是在使用训练好的分类器进行预测前,将我们前面的出来的式子加入到决策中。

二.降维处理

        降维操作也属于一种数据预处理的操作,降维算法有很多,这里我们讲LDA。

        这幅图就是降维操作的基本思想。这里我们讲线性判断别分析简称LDA,是由Fisher提出,因此也叫做Fisher判别分析。它的基本思想是这样的,当我们手里有一组样例,我们将样例投影到一条直线上,然后使同类样例投影点的距离尽可能近而异类投影点的距离尽可能远。当有新样例时,新样例的投影点应该离它所属类的投影点近。这里,我们将样例投影到一条线上,就是一个降维的过程,因为我们这里所说的维度,就是特征,当样例投影到线上时,就变成了一维。

        理解了基本思想,我们来看到底怎么操作。

        在进行投影操作,也就是降维之前,我们先来看这样几个量。我们现在手里有一个数据集,这组数据集中的数据有n个特征,也就是n维,接着我们来看其中一类的样例,我们要算这类样例的均值和均方差矩阵。这类样例的均值就代表了这类样例的中心,而均方差矩阵用来衡量样例的分散程度。接着,我们将这些样例投影到一条直线上,那自然前面我们算了投影前的样例的均值和均方差矩阵,投影后我们仍要算这两个量。对于样例,我们将把它们投影到直线w上。好了,接下来认真听,我们要算投影后的样例均值也就是中心,和均方差矩阵,也就是协方差。这时,我们可以直接将前面算出来的投影前的样例均值中心投影到直线w上,就是上面的w^{T}\mu,均方差矩阵也是同样的道理,变成了\omega ^{T}\sum \omega

        这样讲完可能还是有很多同学感觉一知半解,那我们简单总结一下。

        \omega ^{T}x就是投影操作,要进行投影时只需要将x做一个替换。而协方差矩阵表示样本分散程度,同学们可以直接记住,因为这里涉及到一个数学推导。

        对于LDA,我们前面是不是讲了,投影之后希望同类样例点尽可能接近而异类样例点尽可能远离。前面,我们算出来两个量,一个是投影点的中心,一个是投影样例的协方差矩阵。因此,我们希望两个类的协方差矩阵之和尽可能小,说明不分散。而两类投影点中心距离尽可能大,这样异类样例间就会远。因此,我们将这两个式子合成一个并化简。

        我们得出来的式子过于复杂,这时我们通过从定义一些变量的方式简化式子。看到这里,同学们可能有些理解,但是还是很疑惑。

        在进行接下来的讲解之前,我来给大家总结梳理一下。首先,我们之所以要进行LDA,是因为原数据集维度过高,可能因为数据冗余等一系列原因导致后期模型训练效果较差。因此,我们想要用LDA进行降维。现在,我拿到了一堆数据,我要进行降维处理,我希望将数据降维到一条直线,也就是一维。这时,我怎么找到一条最好的能够完成降维最好效果的直线呢?

        因为我们要将这些样例全部投影到这条直线上,因此就会出现同类别之间相互聚集,而不同类别之间相互远离的现象。我想到,让这种现象达到最好时所确定的就是降维效果最好的直线。因此我通过定义该类均值为该类中心点,定义该类的均方差为该类离散程度(这里我们说的均方差和协方差是一个意思),我们要让类内样例聚集,就让每一个类的协方差之和尽可能小,分散程度也就尽可能小了。接着让不同类别的样例尽可能远离,就是让每一类的中心点间距离尽可能大,那类间距离也就大。最后,我们就得出来优化目标---广义瑞利商。

        看完有同学会问,我们最终的目的不是要对一组数据进行降维处理吗,怎么现在去求直线,还有优化目标。同学们有没有发现,我们在公式中总是出现转置的符号,说明有矩阵,其实我们就是将原数据集变成了一个矩阵,最后我们也会得出一个矩阵,那就是降维之后的数据集。

        前面我们是不是提到了瑞利商,那这是什么东西呢?我们一起来了解一下。其实这里说的瑞利商,就是一个分数。这里做了一件这样的事,矩阵A是待评价矩阵,x相当于一个打分的尺子,我们用x给A打分,这个分数就是瑞利商,尺子x打的分数在\sqsubset \lambda _{min},\lambda _{max}\sqsupset这个区间。

        当用A的最大特征值对应的特征向量作为尺子x时,就是最高分,当用最小特征的特征向量时,就是最低分。前面我们得出的最终式子是广义瑞利商,我们也是要让它最大化,因此就是寻找最高分,和这里正好对应。

        但是有的同学发现了,上面我介绍的瑞利商和我们最终化简出来的广义瑞利商好像还是有些不同的,因为我们的广义瑞利商的分母上还有一个矩阵,因此我们来看另一个瑞利商。

        前面是R(A,x),但是因为我们广义瑞利商分母也有一个矩阵,因此我们使用另一个形式的瑞利商R(A,B,x),这时这个式子的形式就能够和我们上面化简出来的式子的每一部分一一对应了。因此我们对这个式子再做一次变换,将A、B全部放到分子。

        好,我们现在来整体看一下LDA也就是线性判别分析的整体步骤。首先我们先计算类内散度矩阵和类间散度矩阵,接着去算瑞利商的最大特征值,它对应的特征向量就是我们想要的。我们再对这个特征向量做一个转换,就得到了降维后的数据集。

        这就是LDA和类别不平衡问题,线性模型到这里就结束了,一共是三章的内容,同学们看完这三章,相信你对线性模型就有了很深的理解。

更多推荐