《西瓜书》-3.线性回归
3.线性回归
3.1.什么是回归
回归是监督学习的一个重要问题,回归用于预测输入变量和输出变量之间的关系。
回归模型是表示输入变量到输出变量之间映射的函数
回归问题的学习等价于函数拟合:使用一条函数曲线使其很好的拟合已知函数且很好的预测未知数据。
回归问题分为模型的学习和预测两个过程。基于给定的训练数据集构建一个模型,根据新的输入数据预测相应的输出。
回归问题分类:
按照输入变量的个数可以分为一元回归和多元回归;
按照输入变量和输出变量之间关系的类型,可以分为线性回归和非线性回归。
3.2.一元线性回归
证明损失函数E(w,b)是关于w和b的凸函数
看这个之前先看首先需要明白以下定理:
1. 二元函数判断凹凸性
设在区域D上具有二阶连续偏导数,记
,
,
则
(1)在D上,恒有A>0,且时,
在区域D上是凸函数;
(2)在D上,恒有A<0,且时,
在区域D上是凹函数。
2. 二元凹凸函数求最值
设是在开区域D内具有连续偏函数的凸(或者凹)函数,
且
,
,则
必为
在D内的最小值(或最大值)
根据上述定理,我们应该首先求出A、B、C
上式即为式3.5
上式即为式3.6
此式A是大于0的,因为A如果等于0,则所有的,没有意义
接下来看
其中为x的均值,又因
所以
m是大于等于0的,,即
,也即损失函数E(w,b)是关于w和b的凸函数。
求解过程:
令一阶偏导数等于0求b:
得:
上式即为式3.8,同时对b进行恒等变形得:
令一阶偏导数等于0求w:
将代入得:
解得:
又因
代入上式得:
上式即为式3.7
向量化w
观察
分子分母都有累加的式子,而这些累加的式子很像向量的点乘后的结果,将累加的式子抽象成向量的点乘的过程,就是向量化。
为什么要向量化?
分子分母这些累加式子翻译成python代码,就是for循环,循环的次数和样本数量m成正比,时间复杂度比较高,向量化之后,就可以直接使用Numpy进行计算,Numpy提供了大量矩阵运算相关的函数,对这些函数在内部实现进行了优化,使其性能提升了很多,这就是向量化的原因
首先对w进行恒等变形:
同时有:
将此三式代入w并进行恒等变形:
定义向量化时需要使用的向量:
对w进行向量化得:
3.3.多元线性回归
首先将和b组合成
根据向量点乘 展开得
将d表示成并乘以1得
接下来求损失函数
定义向量化需要的变量
是m行1列的列向量
到此,得到式3.9后面的式子
接着求对
的导数
上式即为式3.10
证明损失函数是关于
的凸函数
首先,引入Hessian(海森)矩阵的定义
多元实值函数凹凸性判定定理:设是非空开凸集(D是n维向量空间的一个集合),且
在D上二阶连续可微,如果
的Hessian矩阵
在D上是正定的,则
是D上的严格凸函数。
函数关于
的二阶导数为:
此即为Hession矩阵,我们这里假设是正定矩阵。
令一阶偏导数等于解出
:
上式即为式3.11
3.4.对数几率回归
但阶跃函数不可导。一个近似替代函数就是对数几率函数:
阶跃函数与对数几率函数如图所示:
这是一个“Sigmoid函数”:形似S形函数。将代入有:
将上式变换有:
左边是求y的几率并取对数,称为对数几率。实际上是在用线性回归模型的预测结果,去逼近真实标记的对数几率。该模型叫做:logistic regression,简称LR。
虽然它的名字是“回归”,但实际却是一种分类学习方法。
这里随机变量y取1和0的概率分别为
记
则可以得到似然函数:
或者
于是,我们可通过“极大似然法”(maximum likelihood method)来估计w和b。即最大化“对数似然”
当时
当时
综合可得
最大化这个式子等价于最小化加个负号:
式3.27的另一种求法:
这个式子加个负号即为式3.27
接下来求和b,只需利用梯度下降法或牛顿法求得式3.27的最优解即可。
3.5.线性判别分析(LDA)
线性判别分析(Linear Discriminant Analysis,简称LDA),二分类问题上最早由Fisher于1936年提出,亦称费舍尔判别分析,是一种数据降维的方法。
其基本思想是:将训练样本投影到一条直线上,使得同类的样例尽可能近,不同类的样例尽可能远。如图所示:
首先定义一些变量:
:
类数据的训练样本,
:
类数据的均值向量,
:
类数据的协方差矩阵
投影到直线上后,样本中心(均值)所在的投影就变为
,协方差变为
这里推导协方差:
协方差定义:
投影到直线后的协方差为:
则有
推导过程:
这就是LDA最大化的目标。J叫做广义瑞利商(generalized Rayleigh quotient)。
如何求解?
由于分子和分母都是关于的二次项,因此解与
的长度无关,只与方向有关,令
,则有:
推导过程:
由公式(3.36)可得拉格朗日函数为
对求偏导可得
令上式等于0即可得
由此得出式3.37
然后对上式左右两边分别乘以得
转换为求特征向量,即可求得。
3.6.多分类学习
现实中我们经常遇到不只两个类别的分类问题,即多分类问题,在这种情形下,我们常常运用“拆分”的策略,通过多个二分类学习器来解决多分类问题,即将多分类问题拆解为多个二分类问题,训练出多个二分类学习器,最后将多个分类结果进行集成得出结论。
最为经典的拆分策略有三种:
一对一(one vs one,OvO)
一对多(one vs rest,OvR)
多对多(many vs many,MvM)
OvO:
思想:给定数据集D,假定其中有N个真实类别,将这N个类别进行两两配对(一个正类/一个反类),
产分类器个数:产生N(N-1)/2个二分类学习器
测试:将新样本放入所有的二分类学习器中测试,得出N(N-1)/2个结果,最终投票产生结果。
OvR:
思想:给定数据集D,假定其中有N个真实类别,每次取出一个类作为正类,剩余的作为反类,
产分类器个数:产生N个二分类学习器
测试:得出N个结果,若仅有一个分类器预测为0类,其余1类,则对应为0类。若有多个都是0类,则根据各个的预测置信度。置信度最大的类别标注为分类结果。
上图所示N=4,左边为OvO,右边为OvR
左边:N=4,则分类器有6个。新样本测试6次,然后投票。
右边:N=4,则分类器有4个。C3预测为正类,其余均负类,则最终为C3。
MvM:
思想:给定数据集D,假定其中有N个真实类别,每次取若干个类作为正类,若干个类作为反类(通过ECOC码即纠错输出码给出编码),若进行了M次划分,则生成了M个二分类学习器
测试:(解码),得出M个结果组成一个新的码,最终通过计算海明/欧式距离选择距离最小的类别作为最终分类结果。
对于左图,第一个分类器f1将C1,C3,C4为负类,C2为正类;其余依次设置,共M个分类器。每行是对应类别的编码,长度为M。新样本测试后得到M长度的码,与各类对比,距离最近的为该类。
为何叫做纠错输出码?
答:测试阶段,ECOC编码对分类器的错误有一定的容忍和修正能力。
例如左图中,对测试示例的正确预测编码是(-1,+1,+1,-1,+1),但若是f2分类器出错了,预测成了(-1,-1,+1,-1,+1),仍然可以得到正确的结果。
一般的,对于同一个任务,ECOC编码越长,纠错能力越强。然而编码长意味着分类器数目多了,开销增大。
3.7.类别不平衡问题
类别不平衡(class-imbanlance)就是指分类问题中不同类别的训练样本相差悬殊的情况,例如正例有998个,而反例只有2个,则学习器永远只返回新样本为正例。这个时候我们就需要进行相应的处理来平衡这个问题。
常见的做法有三种(正例少,反例多为例):
(1)对反类样本降采样。
降采样,即抛弃一些反例。例如将反例划分为若干个集合,供不同学习器使用。每个学习器角度看降采样了,但总体不会丢失信息。
(2)对正例样本上采样。
上采样,即增加一些正例。但不能简单重复采样,否则过拟合严重。代表性算法SMOTE,通过对训练集的正例进行插值,产生额外的正例。
(3)直接基于原数据集进行学习,对预测值进行“再缩放”处理。
令表示正例数目,
表示反例数目,则观测几率是
,在决策时,基于下式执行