本节书摘来自华章计算机《大数据分析原理与实践》一书中的第3章,第3.1节,作者:王宏志 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.1 回归分析
3.1.1 回归分析概述
1.回归分析的定义
回归分析方法是在众多的相关变量中,根据实际问题考察其中一个或多个变量(因变量)与其余变量(自变量)的依赖关系。如果只需考察一个变量与其余多个变量之间的相互依赖关系,我们称为多元回归问题。若要同时考察多个因变量与多个自变量之间的相互依赖关系,我们称为多因变量的多元回归问题。本小节重点讨论多元回归。
2.回归分析的数学模型
多元回归分析研究因变量Y与m个自变量x1,x2,…,xm的相关关系,而且总是假设因变量Y为随机变量,而x1,x2,…,xm为一般变量。
假定因变量Y与x1,x2,…,xm线性相关。收集到的n组数据(yt,xt1,xt
则所建回归模型的矩阵形式为
称它们为经典多元回归模型,其中Y是可观测的随机向量,ε是代表不可观测的随机向量和测量误差的随机变量,C是已知矩阵,β、σ2是未知参数,n为观测记录个数,m为模型中自变量个数,并设n>m,C应为满秩矩阵且满足m+1≤n。
在经典回归分析中讨论模型中参数β=(β0,β1,…,βm)'和σ2的估计和检验问题。近代回归分析中讨论变量筛选、估计的改进,以及对模型中的一些假设进行诊断等问题。
3.回归分析的基本计算方法
这里概述回归分析的基本计算方法,关于大数据的回归算法在11.2节中讨论。回归分析的主要目的是估算回归系数β的值。最常用的方法采取最小二乘估计法OLS。
若C为满秩,m+1≤n,则β的OLS估计为:,其求值的计算过程为y→C'→C'C→(C'C)-1→C'y。
于是,拟合得到方程为为预测值(拟合值),H是帽子矩阵,H=C(C'C)-1 C',其残差为:(性质:)。
残差平方和:ε'ε。
如果C不为满秩,则用(C'C)-代替(C'C)-1,(C'C)-为(C'C)-1广义逆。
4.回归分析的模型检验
回归分析的模型检验用于检验模型的可用性,模型检验的过程可以分为三个步骤,即分析模型拟合优度、分析模型是否能用于预测未知值和分析模型的解释变量成员显著性检验。
(1)拟合优度检验
拟合优度是回归模型整体的拟合度,表达因变量与所有自变量之间的总体关系。拟合优度检验是用于检验来自总体中一类数据的分布是否与某种理论分布相一致的统计方法。具体来说,对于观察值y1,y2,…,yn,利用得到的回归模型估计出的yi为,,则拟合优度可以用如下参数进行计算。
SSR(回归平方和):y的估计值和均值的平方和,即SSR=。
SSE(剩余平方和):y残差(真值和估计值之差)的平方和,即SSE=。
SST总离差平方和:SST==SSR+SSE。
根据上述参数计算决定系数来判断拟合优度,即解释变量在预测y中所做的贡献的比例
R2于[0,1]之间,越接近1,拟合越好;反之,拟合的优度越低。
为了做出更优的判断,可以进一步调整决定系数如下:
n为记录的个数,m为自变量个数,其具体意义同R2。
(2)残差分析
残差指的是真实Y值和预测Y值之间的差。残差分析就是通过计算残差的特征来检验回归模型的质量。残差分析其基本出发点是,如果得到的回归模型能够较好地反映Y的特征和变化规律,那么残差项应该没有明显的趋势性和规律性,即残差序列独立且满足均值为0,方差相同的正态分布。下面依次介绍残差性质的判定方法。
1)判断残差是否为总体服从均值为0的正态分布。
正态性可以通过画残差图来描述,其横轴为因变量,纵轴为残差值,若点在纵轴为0的横线上下随机散落,说明残差有正态性。
需要注意的是,若残差的协方差矩阵诸对角元的杠杆率有很大差别,诸残差就会有很大变化,一般会用学生化残差代替残差。我们预期学生化残差大致看上去像是从标准正态分布中抽取的独立样本。
学生化残差:
残差均方:
其中,hjj为杠杆率,即C(C'C)-1C的(i,j)对角元,。
杠杆率
由于离群值可能对拟合效果起着重要作用,因此要判断某个值对参数C的估计影响是否过大。杠杆率是判断第j个数据点到其他n-1个数据点的距离的度量,若某杠杆率相对于其他的要大,则说明这个数据对相应的参数估计值有主要贡献,即去掉这个值后,参数估计矩阵变化很大,所以杠杆率大小差不多时,我们可以用拟合的回归方程做预测,并在某种程度上保证不会被误导。
2)判断残差独立性。
残差的独立性可以通过判断残差的自相关实现,也就是说,随着时间推移,残差呈现有规律变化,则说明残差不独立。残差独立性可以通过自相关系数来检验。自相关系数定义为
ρ取值范围为(-1,+1),它的值越接近1,则说明存在正相关关系,越接近-1,说明有负相关关系,等于0则说明残差序列无自相关。
另一种方法是DW(Durbin-Watson)检验,这是统计分析中经典的检验序列一阶自相关最常用的方法,检验值r1取值范围是(0,4),定义为。
r1=0时,残差序列存在完全正自相关;r1的值在区间(0,2)中时,残差序列存在正自相关;r1=2时,残差序列无自相关;r1的值在区间(2,4)中时,残差序列存在负自相关;r1=4时,残差序列存在完全负自相关。
若残差存在自相关,说明回归方程没能充分说明因变量的变化规律,也就是方程中遗漏了一些较为重要的自变量,或者变量存在滞后性(过去的性质,现在才体现),或者回归模型选择不合适,不应选线性模型等。
3)残差的方差相等判定。
这种方法的出发点是,无论自变量怎么取值,残差的方差不应有所改变,否则认为出现异方差。该性质可以通过如下两种方法判断:
残差图:判断随着自变量增加,残差的方差是否呈现增加或减少的趋势。
Spearman等级相关分析:检验统计量的概率值P是否小于给定的显著性水平,若小于,则拒绝原假设(自变量与残差存在显著相关),从而说明残差出现异方差。Spearman等级相关可以用度量定序(可以非定距)变量间的相关关系,其计算系数r和2.2.2节中介绍的皮尔森系数类似,只是用两变量的秩(Ui,Vi)代替(xi,yi)求出r,即
其假设检验步骤用标准正态分布Z检验,其步骤同第2章介绍的t检验类似,即给定α值,计算z值,然后判断显著性,即
若|z|<Zα/2,说明此时P值小于α(默认0.05),说明线性显著,否则不显著。
请注意,所有跟检验相关的计算中,α默认0.05,也可自定义。这表明拒绝原假设的阈值,意味着P值小于α,则拒绝原假设,相当于表明一种显著关系。
(3)变量相关性
可以用假设检验判断上述线性结果是否表现显著。
皮尔森用t检验统计量进行检验。r服从t(n-2)分布,n-2为分布的自由度。判断过程如下:
给定显著性水平α(一般α=0.05),计算t值:
若|t|<tα/2(n-2),则其P值就会小于0.05,说明存在显著线性相关;反之,说明线性相关不明显。
(4)判断模型中自变量对Y线性相关的显著性
该方法首先判断所有X对Y的影响的显著性,再依次判断每个自变量X对Y的影响的显著性。
可以利用F检验判断所有X对Y是否有显著的线性关系。原假设为:回归系数全为0;备选假设为:回归系数同时为0。用如下公式计算F值:
其中p为自变量个数,n为记录个数,若|F|<F(α/2)(p,n-p-1),则P值小于α,于是拒绝原假设,这表明回归系数不同时为零显著,即回归方程显著成立。
利用t检验实现偏回归系数检验,即验证某个自变量是否能够很好地解释Y,相当于验证H0(某个自变量是否为零)。
首先计算t值:
若|t|<t(α/2)(n-p-1),其中p为自变量个数,n为记录个数,则P值小于α,于是拒绝原假设,βi不为零,即Xi对因变量Y的线性相关显著。置信水平是指真实值在置信区间的可能性,一般默认为95%。显著性等于1减去置信区间,一般默认5%(当置信区间为95%)。
5.回归分析的实例
我们用一个例子说明回归分析的使用。
私立医院一年的营业额总和与股东投资额总和的大小有密切关系,研究发现两个变量之间存在线性关系。下面我们模拟了某市内所有私立医院2000—2013年的营业额与股东投资额数据,研究它们的数量规律性,探讨某市内私立医院的股东投资额与一年营业额的数量关系,原始数据见表3-1。
由输出结果,得到以下结论:
回归方程为
y=232.70+3.68x1
其中,负相关系数为R2=0.9814,说明回归方程拟合优度较高。而回归系数的t=17.7024,查t分布表t0.025(12)=2.1788,小于t值,因此回归系数显著。查F分布表,F0.05(1,12)=4.75,由表3-3知,F=313.3765>4.75,因此回归方程也显著。
表3-3 输出结果总结
3.1.2 回归模型的拓展
上一小节主要讨论了线性回归模型,根据需求的不同,回归有不同的形式和方法。本小节简要介绍多种形式的回归。
1.多项式回归
假设变量y与x的关系为p次多项式,且在xi处对y的随机误差εi(i=1,2,…,n)服从正态分布N(0,σ),则
yi=β0+β1xi+β2xi2+…+βpxip+εi
令xi1=xi,xi2=xi2,…,xip=xip,则上述非线性的多项式模型就转化为多元线性模型,即
yi=β0+β1xi1+β2xi2+…+βpxip+εi
这样我们就可以用前面介绍的多元线性回归分析的方法来解决上述问题了。其系数矩阵、结构矩阵、常数项矩阵分别为
A=X'X=
X=
B=X'Y=
回归方程系数的最小二乘估计为
b=A-1B=(XTX)-1X'Y
需要说明的是,在多项式回归分析中,检验bj是否显著,实质上就是判断x的j次项xj对y是否有显著影响。
对于多元多项式回归问题,也可以化为多元线性回归问题来解决。例如,对于
yi=β0+β1Zi1+β2Zi2+β3Zi22+β4Zi1Zi2+β5Zi22+…+εi
令xi1=Zi1,xi2=Zi2,xi3=Zi12,xi4=Zi1Zi2,xi5=Zi22,则转化为yi=β0+β1xi1+β2xi2+…+βpxip+εi,转化后就可以按照多元线性回归分析的方法解决了。
- GBDT回归
梯度提升决策树(GBDT)又叫多重累计回归树(MART),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。GBDT主要由三个概念组成,即回归树、梯度提升和收缩。下面依次介绍这三个概念。
(1)回归树
回归树是一类特殊的决策树,和用于分类的决策树不同,回归树用于预测实际数值,其核心在于累加所有树的结果作为最终结果。有关分类的决策树将会在4.3.3节介绍,这里重点介绍回归问题。
用一个例子来说明回归树。以对人的年龄预测为例来说明,每个实例都是一个已知年龄的人,而属性则包括这个人每天看书的时间、上网的时段、网购所花的金额等。回归树为了做预测,将特征空间划分成了若干个区域,在每个区域里进行预测。
作为对比,先简单介绍一下分类树,分类树在每次分支时,是以纯度度量,比如熵值来选择分类属性。满足一定的条件会被标记成叶子节点并给予标号(这在4.3.3节还会有更详细清晰的介绍)。
回归树总体流程也类似,不过在每个节点(不一定是叶子节点)都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分支时穷举每一个属性的每个阈值寻找最好的分割点,但衡量最好的标准不再是熵之类的纯度度量,而是最小化均方差。这很好理解,被预测出错的人数越多,错得越离谱,均方差就越大,通过最小化均方差能够找到最合适的分支依据。直到每个叶子节点上人的年龄都唯一或者达到预设的终止条件,才停止分支操作。若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄作为该叶子节点的预测年龄。
(2)梯度提升
提升(boosting)是一种机器学习技术,用于回归和分类问题,产生一个预测模型的集合。梯度提升简单来说,就是通过迭代多棵树来共同决策,并可以进行任意可微损失函数的优化。
GBDT是把所有树的结论累加起来做最终结论的,所以每棵树的结论并不是最终结果,而是一个累加量。其核心在于,每一棵树学的是之前所有树的结论和的残差,这个残差就是一个加上预测值后能得真实值的累加量。
例如,A的真实年龄是18岁,但第一棵树的预测年龄是10岁,差了8岁,即残差为8岁。那么在第二棵树中我们把A的年龄设为8岁去学习,如果第二棵树真的能把A分到8岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是6岁,则A仍然存在2岁的残差,第三棵树中A的年龄就变成2岁,继续学。这就是梯度提升在GBDT中的意义。
形式化地来说,回归树也相当于一个映射,即根据输入x来求得输出y,表达式为
其中,Rj表示一个区域,如果x属于Rj,那么它的预测值就是bj。I()为指示函数,当括号内的式子成立时返回1,否则返回0。
第m棵回归树可以表示为如下数学形式
假设共有M棵回归树,那么最终的预测结果为
表达成递归形式则为
y=FM-1(x)+hM(x)
就训练集而言,最完美的GBDT就是预测值y与目标值t相等,所以我们建立模型的目标就是y=t,即
t=FM-1(x)+hM(x)
GBDT是从第一棵回归树开始计算的。不管效果如何,先建第一棵回归树;继而,通过上面的递归表达式根据第一棵树建立第二棵树,直到第M棵树,那么我们先看一下第二棵树怎么建立。对上面的递归式做个变形,即
hM(x)=t-FM-1(x)
注意到hM(x)就是我们要建立的第2(M=2)棵树,已有的是第一棵树,第一棵树一经建成就不变了,相当于一个已知的函数,那么t-FM-1(x)实际上就是我们在建第M棵树时想要得到的预测值。所以在建第二棵树时,我们将目标值t与第一棵树的预测值的差作为新的目标值。同样,在建第三棵树时,我们将目标值t与前两棵树的预测值的差作为新的目标值,直到第M棵树。t-FM-1(x)就是所谓的残差,这就是从残差的角度来理解GBDT。
注意到,GBDT的建树过程不是并行的,而是串行的,所以速度较慢,但所有的树一旦建好,用它来预测时是并行的,最终的预测值就是所有树的预测值之和。
GBDT还可以从损失函数的角度去理解,上述的两个部分分别对应着DT(决策树)和GB(梯度提升),DT意味着每个基本学习器是“树”的形式,而GB则是建树过程中依据的准则。DT可以不变,而GB有多种形式,上述的残差只是其中的一种形式。注意到损失函数可以表示为
该损失函数关于F(x)的导数(梯度)为
该损失函数在FM-1(x)处的导数(梯度)为
所以在建立第M棵树时,新的目标值正好就是损失函数在FM-1(x)处的负梯度。众所周知,损失函数可以有多种形式,所以不同的损失函数就可以对应到不同的变种。
(3)收缩
每次走一小步从而逐渐逼近结果的效果,这要比每次迈一大步很快逼近结果的方式更容易避免过拟合。也就是说,不完全信任每一棵残差树,认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。
- XGBOOST回归
XGBOOST回归是一个大规模、分布式的通用GBDT库,它在梯度提升框架下实现了GBDT和一些广义的线性机器学习算法。
XGBOOST算法比较复杂,针对传统GBDT算法做了很多细节改进,包括损失函数、正则化、切分点查找算法优化、稀疏感知算法、并行化算法设计等。
例如,传统GBDT以CART作为基分类器,XGBOOST还支持线性分类器,这个时候XGBOOST相当于带L1和L2正则化项的线性回归(回归问题);传统GBDT在优化时只用到一阶导数信息,XGBOOST则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。对损失函数做了改进;XGBOOST在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出分数的L2模的平方和。从偏差–方差权衡角度来讲,正则项降低了模型方差,使学习出来的模型更加简单,防止过拟合,这也是XGBOOST优于传统GBDT的一个特性。正则化包括了两个部分,都是为了防止过拟合,剪枝是都有的,叶子节点输出L2平滑是新增的。
由于篇幅限制,不再详细描述XGBOOST,读者可以参考有关的论文《XGBOOST: A Scalable Tree Boasting System》。
补充知识:回归大家族
由于非常常用,除了上文介绍的回归,还有很多回归模型,回归相关本身就可以用一本厚度超过本书的教材来介绍,限于篇幅,本文仅对其他模型进行简要介绍,感兴趣的读者可以参考专门的回归教材,例如《应用回归分析》《Regression Analysis by Example》等。
- logistic回归
logistic回归是除了线性回归以外最重要的回归形式,用于分类,将在4.3.2节具体介绍。
2.生存分析数据cox回归
cox回归主要用于生存分析。生存分析是将终点事件出现与否与对应时间结合起来分析的一种统计方法。生存时间是从规定的观察起点到某一特定终点事件出现的时间,如某种癌症手术后5年存活率研究,癌症手术为观测起点,死亡为事件终点,两点之间的时间为生存时间。在生存分析中,研究的主要对象是寿命超过某一时间的概率。当然,生存分析还可以描述其他一些事情发生的概率,例如产品的失效、出狱犯人第一次犯罪、失业人员第一次找到工作等。
cox回归的因变量必须同时有两个:一个代表状态,必须是分类变量;另一个代表时间,应该是连续变量。只有同时具有这两个变量,才能用cox回归分析。cox回归模型可以用下述公式描述
S(t)=P(T>t)=1-P(T≤t)=
其中,T是表示寿命的随机变量,t是特定时间,生存函数S(t)表示生存时间长于时间t的概率。
- weibull回归
生存分析常用cox回归模型,但还有几个回归方法对生存分析也很重要,weibull回归就是其中之一。
cox回归受欢迎的原因是它简单,用的时候不用考虑条件(除了等比例条件之外),大多数生存数据都可以用。而weibull回归则有条件限制,用的时候数据必须符合weibull分布。
cox回归可以看作是非参数回归,无论什么数据分布都适用,但正因为什么数据都适用,所以不可避免地有个缺点,对于每种分布的数据都不能做到恰到好处。weibull回归就像是量体裁衣,把体形看作数据。
weibull分布是一种连续性分布,它是指数分布的一种推广形式,不像指数分布假定危险率是常数,因而有更广的应用性。
weibull分布的相关函数如下。
生存时间T的概率密度函数为
f(t)=λγ(t-1)γ-1exp[-λ(t)γ]
分布函数为
F(t)=1-exp[-λ(t)γ]
生存函数为
S(t)=exp[-λ(t)γ]
风险函数为
h(t)=λγ(t)γ-1
其中,λ和γ为两个参数。λ称为尺度参数,它决定分布的分散度;γ为形状参数,它决定该分布的形态。γ>1时风险函数随时间单调递增;γ<1时风险函数随时间单调递减;显然,当γ=1时,风险不随时间变化,weibull分布简化为指数分布,所以指数分布是weibull分布在γ=1时的特例。
如果资料服从weibull分布,则可用回归模型对危险因素进行分析。在weibull回归模型中,风险函数与影响因素间的关系也假设为指数关系,即
logh(t)=alogt+β0+β1x1+β2x2+…+βpxp
式中βi的意义同指数回归模型,
在weibull回归模型中,除了要估计βi之外,还要估计形状参数γ。
生存函数为
S(t)=exp[-tγexp(β0+β1x1+β2x2+…+βpxp)]
风险函数为
h(t)=γtγ-1exp(β0+β1x1+β2x2+…+βpxp)
基准风险为
h0(t)=γtγ-1eα
4.泊松回归
实际上,在能用logistic回归的场合里,通常也可以使用泊松回归。泊松回归的因变量是个数,比如观察一段时间后,有多少人发病等。
泊松回归模型也是用来分析列联表和分类数据的一种方法,它实际上也是对数线性模型的一种,不同点是对数线性模型假定频数分布为多项式分布,而泊松回归模型假定频数分布为泊松分布。下面给出简单的说明。
设有一个自变量x,可以写出如下回归模型
g(μ)=α+β0+β1x
这个g就是连接函数,如果取其为对数函数,则为
ln(μ)=α+β0+β1x
这个模型的结构和回归模型非常相似,如果因变量y服从泊松分布,那么这个模型就称为泊松回归模型。
从而可以看出,泊松回归模型就是描述服从泊松分布的因变量y的均值μ与各自变量x1,…,xm关系的回归模型。
- probit回归
probit回归中,probit一词通常翻译为概率单位。probit模型是一种服从正态分布的广义的线性模型。probit函数和logistic函数十分接近,二者分析结果也十分接近。但是由于probit回归的实际含义不如回归容易理解,由此导致其没有logistic回归常用,但是在社会学领域还是有其用武之地的。
probit回归是基于正态分布的,而logistic回归是基于二项分布的,这是二者的区别。当自变量中连续变量较多且符合正态分布时,可以考虑使用probit回归,而自变量中分类变量较多时,可考虑使用logistic回归。
最简单的probit模型就是指因变量Y是一个0,1变量,事件发生的概率依赖于自变量,即P(Y=1)=f(X),也就是说,Y=1的概率是一个关于X的函数,其中f(.)服从标准正态分布。若f(.)是累积分布函数,则其为logistic模型。
6.负二项回归
负二项指的是一种分布,跟泊松回归、logistic回归有点类似,泊松回归用于服从泊松分布的数据,logistic回归用于服从二项分布的数据,而负二项回归用于服从负二项分布的数据。
负二项分布也用来描述个数,只不过比泊松分布要求更苛刻,如果要分析的结果是个数,而且结果具有聚集性,那可能就要用到负二项分布。
举个简单的例子,要调查流感的影响因素,结果当然是流感的例数。如果调查的人有的在同一个家庭里,由于流感具有传染性,那么患病者家里其他人可能也被传染,从而也得了流感,这就是所谓的具有聚集性,这样的数据尽管结果是个数,但由于具有聚集性,因此用泊松回归不一定合适,这时就可以考虑用负二项回归。
7.主成分回归
主成分回归是一种合成的方法,相当于主成分分析与线性回归的合成。主要用于解决自变量之间存在高度相关的情况。这在现实中不算少见。例如,要分析的自变量中同时有血压值和血糖值,这两个指标可能有一定的相关性,如果同时放入模型,会影响模型的稳定,有时也会造成严重后果,例如结果跟实际严重不符。
为了合并数据中关联的维度,可以考虑用主成分回归,相当于把这几个变量所包含的信息用一个变量来表示,这个变量叫作主成分,所以这种回归方法叫作主成分回归。
例如对于一种疾病,如果30个指标能够100%确诊,而3个指标可以诊断80%,为了提高系统的效率,会选择3个指标的模型。这就是主成分回归存在的基础,用几个简单的变量把多个指标的信息综合一下,这样几个简单的主成分可能就包含了原来很多自变量的大部分信息。这就是主成分回归的原理。
主成分法是通过线性变换,将原来的多个指标组合成相互独立的少数几个能充分反映总体信息的指标,从而在不丢掉重要信息的前提下避开变量间共线性问题,便于进一步分析。
在主成分分析中提取出的每个主成分都是原来多个指标的线性组合。例如有两个原始变量X1和X2,则一共可提取出两个主成分
?Z1=b11X1+b21X2
?Z2=b12X1+b22X2
原则上如果有n个变量,则最多可以提取出n个主成分,但如果将它们全部提取出来就失去了该方法简化数据的意义。一般情况下提取出2~3个主成分(已包含了85%以上的信息),其他的可以忽略不计。
因此,可以将被解释变量关于这些主成分进行回归,再根据主成分与解释变量之间的对应关系,求得原回归模型的估计方程。
8.岭回归
岭回归也是用于处理自变量之间高度相关的情形。只是跟主成分回归的具体估计方法不同。
线性回归的计算通常用最小二乘估计,当自变量之间高度相关时,最小二乘回归估计的参数估计值会不稳定,这时如果在公式里加点东西,让它变得稳定,那就解决了这一问题。
岭回归就采用了这个思想,在最小二乘估计里加个k,改变它的估计值,使估计结果变稳定。k的大小根据岭迹图来判断,这就是岭回归名称的由来。可以选非常多的k值,做出一个岭迹图,看看这个图在取哪个值的时候变稳定,从而确定k值,解决了整个参数估计不稳定的问题。
具体来说,岭回归是一种专用于供线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。
对于有些矩阵,矩阵中的某个元素的一个很小的变动,就会引起最后计算结果误差很大,这种矩阵被称为“病态矩阵”。有些时候,计算方法不当也会导致正常的矩阵在运算中表现出病态。对于高斯消去法来说,如果主元(对角线上的元素)上的元素很小,在计算中就会表现出病态的特征。
回归分析中最常使用的最小二乘法是一种无偏估计。对于一个适定问题,X通常是列满秩。
Xθ=y
采用最小二乘法,定义损失函数为残差的平方,最小化损失函数
||Xθ-y||2
上述优化问题可以采用梯度下降法进行求解,也可以采用如下公式直接进行求解
θ=(XTX)-1XTy
当X不是列满秩时,或者某些列之间线性相关性比较大时,XTX的行列式接近于0,上述问题变成了一个不适定问题,此时(XTX)-1误差很大,传统的最小二乘法缺乏稳定性和可靠性。
为了解决上述问题,需要将不适定问题转化成适定问题,我们为上述损失函数加上一个正则化项,变为
||Xθ-y||2+||Γθ||2
其中,我们定义Γ=αI。
于是
θ(α)=(XTX+αI)-1XTy
其中I表示单位矩阵。
随着α的增大,θ(α)各个元素θ(α)i的绝对值趋于不断变小,它们相对于正确值θi的偏差也会越来越大。α趋向于无穷大时,θ(α)趋向于0,其中,θ(α)随着α的改变而变化的轨迹,就叫作岭迹。实际应用时,可以选择很多的α,做出一个岭迹图,看这个图在哪个值上稳定了,α的值就随之确定。
9.偏最小二乘回归
偏最小二乘回归也可以用于解决自变量之间高度相关的问题。但比主成分回归和岭回归更好的一个优点是,偏最小二乘回归可以用于例数很少的情形,甚至例数比自变量个数还少的情形。所以,如果自变量之间高度相关,例数又特别少,而自变量又很多,那么用偏最小二乘回归就可以了。
它的原理其实跟主成分回归有点像,也是提取自变量的部分信息,损失一定的精度,但保证模型更符合实际。因此这种方法不是直接用因变量和自变量分析,而是用反映因变量和自变量部分信息的新的综合变量来分析,所以它不需要例数一定比自变量多。
偏最小二乘回归还有一个很大的优点,那就是可以用于多个因变量的情形,普通的线性回归都是只有一个因变量,而偏最小二乘回归可用于多个因变量和多个自变量之间的分析。因为它的原理就是同时提取多个因变量和多个自变量的信息重新组成新的变量,重新分析,所以多个因变量对它来说无所谓。
3.1.3 回归的阿里云实现
本节将通过一个例子介绍利用阿里云平台建立回归模型的方法。
很多农民因为缺乏资金,在每年耕种前会向相关机构申请贷款来购买种地需要的物资,等丰收之后偿还。农业贷款发放问题是一个典型的数据分析问题。贷款发放人通过往年的数据,包括贷款人的年收入、种植的作物种类、历史借贷信息等特征来构建经验模型,通过这个模型来预测受贷人的还款能力。本例借助真实的农业贷款业务场景,利用回归算法解决贷款发放业务。通过农业贷款的历史发放情况,预测给预测集的用户发放他们需要金额的贷款。
原始数据前10条见表3-4。
在阿里云平台上先进行数据预处理,然后再进行回归训练和预测。具体操作过程为:首先进入阿里云大数据开发平台中的机器学习平台,选择相应的工作组后进入算法平台。在左侧右击“实验”标签,新建一个空白实验,在“新建实验”对话框中输入对应的实验名称(regression),在组件中选择相应的组件,并将其拖动到右侧实验中。设计好流程,运行开始后,阿里云平台开始运行各实验节点。
在本例子中,首先进行数据的预处理,处理流程如图3-1所示。
图3-1 数据预处理流程
利用SQL脚本将一些字符串人为对应映射为某些数值。
SQL脚本的设置如图3-2所示。
图3-2 SQL脚本设置
运用数据视图可以将所选中的数据列的类型转换为double型,数据视图设置如图3-3所示(注意:此后所有阿里云实验的字段选择部分均参考此处)。
图3-3 数据视图“选择字段”
在“字段设置”中选择全部的7个字段,在“参数设置”中将“连续特征离散区间数”设为“100”。数据预处理后的内容如图3-4所示。
图3-4 数据预处理后的内容
然后进行回归训练和预测,此处采用阿里云提供的三种算法(线性回归、GBDT回归、XGBOOST回归)分别实现。
下面分别给出三种算法的具体流程。
(1)线性回归
线性回归的流程如图3-5所示。
图3-5 线性回归的流程
其中用训练集来预测得到的预测-2是为了和预测-1进行比对,用于调整训练参数,防止过度拟合与过度偏差,以使得到的回归模型尽可能最佳。原理是利用机器学习学习曲线(learning curve)的原理,由于阿里云本身没有提供对的训练过程的可视化的组件,所以只能使用此法来判断训练结果的差错是过度拟合还是过度偏差造成的。
全表统计组件用于审视数据预处理后的整体情况,不是必要组件。
线性回归组件的设置如下:添加6个字段,其中double类型的字段有farmsize、rainfall、landquality和farmincome,bigint类型的字段有region_num和claimtype_num。“选择标签列”设为“claimvalue”,“最大迭代轮数”设为“100”,“最小似然误差”设为“0.000001”,“正则化类型”设为“None”,“正则系数”设为“1”。
预测组件设置如下:选择double类型的字段claimvalue。“输出结果名”设为“prediction_result”,“输出分数列名”设为“prediction_score”,“输出详细列名”设为“prediction_detail”。
回归模型评估的参数设置如下:“原回归值”设为“claimvalue”,“预测回归值”设为“prediction_score”。
训练后的预测结果如图3-6所示。
图3-6 训练后的预测结果
模型评估残差直方图如图3-7所示。回归评估指标数据结果如图3-8所示。
(2)GBDT回归
GBDT回归的流程如图3-9所示。
和前文中线性回归一样,用训练集来预测得到的预测-2是为了和预测-1进行比对,用于调整训练参数,防止过度拟合与过度偏差,以使得到的回归模型尽可能最佳。
全表统计组件用于审视数据预处理后的整体情况,不是必要组件。
GBDT回归组件参数设置如下:选择6个字段,其中double类型的字段有farmsize、rainfall和landquality,bigint类型的字段有region_num和claimtype_num。“标签列”设为“claimvalue”。“一棵树的最大深度”设为“10”,“叶子节点容纳的最少样本数”设为“20”,“样本采样比例”设为“0.8”,“训练中采集的特征比例”设为“0.8”,“测试样本数比例”设为“0.2”,“随机数产生器种子”设为“0”,“是否使用newton方法来学习”设为“使用”,
“损失函数类型”设为“regression loss”,“gbrank与regression loss中的指数底数”设为“1”,“metric类型”设为“NDCG”,“树数量”设为“44”,“学习速率”设为“0.05”,“最大叶子数”设为“32”。
图3-7 残差直方图
图3-8 回归评估指标数据结果
预测组件设置、输出结果的字段设置、模型评估的参数设置都与用线性回归实现的设置相同。训练后的预测结果如图3-10所示。
模型评估结果如图3-11和图3-12所示。
图3-9 GBDT回归的流程
图3-10 训练后的预测结果
(3)XGBOOST回归
XGBOOST回归的流程如图3-13所示。
XGBOOST组件的字段选择和设置与线性回归实现完全相同,在“参数设置”中的设置如下:“一棵树的最大深度”设为“3”,“更新过程中使用的收缩步长”设为“0.3”,“最小损失衰减”设为“0”,“树的棵树”设为“7”,“子节点中的最小的样本权值和”设为“1”,“每个树所允许的最大delta步进”设为“0”,“训练的子样本占整个样本集合比例”设为“1”,“在建立树时对特征采样的比例”为“1”,“目标函数”设为“reg_linear”,“初始预测值”设为“0.5”,“随机数的种子”设为“0”。
图3-12 回归评估的指标数据结果
预测组件设置、输出结果的字段设置、模型评估的参数设置都与用线性回归实现的设置相同。训练后的预测结果如图3-14所示。
图3-13 XGBOOST回归的流程
图3-14 训练后的预测结果
模型评估结果如图3-15和图3-16所示。
图3-15 残差直方图
图3-16 回归评估的指标数据结果
综合上述三种方法的模型评估结果看出:对于该例子中的数据,XGBOOST回归的效果是最好的。