1第章 Time Series Analysis Ⅱ 时间序列 Ⅱ 本章将从时间序列的角度来介绍多重共线性、岭回归、Lasso 回归等内容。请读者注意,本章符 号和公式格式沿用本丛书第三本时间序列一章,和优化和回归章节格式略有不同。 但凡满足以下两个条件的理论,便可以称为好理论:基于几个有限的变量,准确描述大量观测 值;能对未来观测值做出确定的预测。 A theory is a good theory if it satisfies two requirements: it must accurately describe a large class of observations on the basis of a model that contains only a few arbitrary elements, and it must make definite predictions about the results of future observations. —斯蒂芬·霍金 (Stephen Hawking) Core Functions and Syntaxes 本章核心命令代码 e collintest()函数进行Belsley共线性检验 e cond(A)函数返回矩阵A的2-范数逆运算的条件数inv(A)计算方阵逆矩阵,相当于A^(-1) e corrcoef(A) 返回A的相关系数的矩阵,其中A的列表示随机变量,行表示观测值 e corrplot(X)函数绘制X中每对变量的相关性图像 e datenum() 将日期变量"date"转换为数值变量"number"corrplot() e diag() 创建对角矩阵或获取矩阵的对角元素 e egcitest()函数进行Engle-Granger检验 e fimplicit(f) 在默认区间上绘制f(x)=0定义的隐函数 e fitlm()函数用来构建线性回归模型 e interp2(X,Y,V,Xq,Yq) 二维内插值,根据X-Y-V对应关系,二维内插值获得(Xq,Yq)处值 e lagmatrix() 构建包含滞后时间序列的矩阵 e lasso()函数来构建Lasso回归模型 e lassoPlot()函数绘制模型系数随Lasso参数λ变化的图像 e repmat(A,r) 使用行向量r指定重复方案。例如,repmat(A,[2 3]) 与repmat(A,2,3)返回相同的 结果 e ridge() 构建岭回归模型并求解模型系数 e size(A) 获得输入矩阵A的各个维度长度 MATLAB金融风险管理师FRM | 金融科技Fintech应用 1.1 多重共线性 本丛书第三本时间序列I一章中介绍过,对于单个目标变量(target variable) 时间序列{Yt}和n个解 释变量 (explanatory variable) 时间序列{X X X1, 2, ,t t nt}, ,...,{}{},它们之间的回归模型可表示为: Y ct t t =++βεX (1-1) 其中,Xt含有各个时间序列解释变量,如式1-2所示。 Xt t t nt =....X X X1, 2, ,, ,..., T (1-2) 向量β则是Xt的系数向量,有: β=[βββ1 2, ,..., n] (1-3) εt 是误差向量,表示Yt中无法被Xt解释的部分;而c则为常数项。 所谓的共线性 (colinearity),是指两个解释变量,比如X1,t和X2,t,它们之间存在线性关系;其中 一个变量可以由另一个变量线性表示,即: X X2, 0 1 1,t t t =+ααε+ (1-4) 多重共线性 (multicollinearity),则是指两个以上的解释变量之间存在线性关系,即: X X X Xnt t t n n t t, 0 1 1, 2 2, 1 1, =++++ααααε...+ (1-5) 当存在完美的线性关系时,误差项εt 将不再存在,或者说误差项为零。 那么,如果解释变量之间存在这样的线性关系,对原来的回归模型会有怎样的影响呢?数学上, 式1-6~式1-10可以给出解答。 yXβt t =. . (1-6) 其中,向量yt包含目标变量{Yt}在t m=1, 2,..., 上的时间序列数据: yt m =…[YY Y1 2,, , ]T (1-7) 矩阵X. t包含解释变量{X X X1, 2, ,t t nt}, ,...,{}{}的时间序列数据以及常数项1: X. t = .. .. .. .... 1 1 .... X X X X 1 11 1 m nm . . n (1-8) 第 1 章 时间序列Ⅱ | Time Series Analysis Ⅱ 向量β. 包括系数向量β和常数项c: β. =[c, , ,..., βββ1 2 n]T (1-9) 对β. 求解时,考虑到X. t往往不是方阵,其最小二乘法的解需要对XX.. t t T 求逆,即: βXXXy. =(.. . t t t t T T).1 (1-10) 如果解释变量{X X X1, 2, ,t t nt}, ,...,{}{}之间存在完全的多重共线性,那么矩阵X. t中有一列可以由其 他列的线性组合得到,那么该矩阵就不是满秩矩阵。在该情况下,X. t本身不可逆,XX.. t t T 也不可逆; 即(XX.. t t T ).1 不存在,无法获得β. 的最小二乘解。 当解释变量{X X X1, 2, ,t t nt}, ,...,{}{}之间存在不完全的多重共线性时,XX.. t t T 依旧可逆,但变成了一 个不适定问题 (ill-posed problem) 。此时,对β. 的求解变得不稳定;受到多重共线性的影响,解的唯一 性和准确性受到了挑战。输入数据X. t轻微的变化都会引起解β. 的较大变动。在不适定问题中,具有内 在共线性的矩阵也被称为病态矩阵 (ill-conditioned matrix)。 在数值分析中,常使用条件数 (condition number) 来衡量问题的适定性。通常使用希腊字母κ来表 示条件数,其值的范围为大于等于1,即κ≥1 。在条件数κ下,输入数据X. t中1%的扰动,会直接导 致β. κ% 的误差。高条件数意味着问题的适定性差,低条件数意味着问题的适定性好。在MATLAB 中 可直接调用函数cond()求得输入矩阵的条件数。 回顾在本丛书第三本第11章时间序列I中的例子,利用MATLAB 自带的数据Data_CreditDefaults, 建立一个违约率的时间序列回归模型。其中,目标变量是投资级别(invested grade) 的公司债券违约率 (即数据中的IGD),对应地有4个可选择的解释变量:三年前进入投资级别的发债人百分比 (AGE); 评级为BBB的投资级别发债人百分比 (BBB);膨胀率调整后 (inflation adjusted) 公司一年收益预测 (CPF);公司债券与政府债券利差 (SPR)。还是以这个回归模型为例,我们来看看在建模的过程中如何 发现和处理可能存在的共线性问题。首先,同样运行以下代码建造本丛书第三本第11章的回归模型: B5_Ch1_1_A.m clc; clear all; close all %% Import MATLAB data load Data_CreditDefaults % Matrix of regresor X X = Data(:, 1:4); % Table of regressor X XTbl = DataTable(:,1:4); % Regressor names RegressorNames = series(1:4); % Number of observations T_num = size(X,1); MATLAB金融风险管理师FRM | 金融科技Fintech应用 % Regressand y y = Data(:, 5); % Convert dates to serial date numbers: dateNums = datenum([dates,ones(T_num,2)]); %% Original regression model % Use fitlm() function Md0 = fitlm(DataTable) 运行结果如下。 Md0 = Linear regression model: IGD ~ 1 + AGE + BBB + CPF + SPR Estimated Coefficients: Estimate SE tStat pValue _________ _________ _______ _________ (Intercept) -0.22741 0.098565 -2.3072 0.034747 AGE 0.016781 0.0091845 1.8271 0.086402 BBB 0.0042728 0.0026757 1.5969 0.12985 CPF -0.014888 0.0038077 -3.91 0.0012473 SPR 0.045488 0.033996 1.338 0.1996 Number of observations: 21, Error degrees of freedom: 16Root Mean Squared Error: 0.0763R-squared: 0.621, Adjusted R-Squared 0.526 F-statistic vs. constant model: 6.56, p-value = 0.00253 可以看出,各个解释变量对应的符号都是正确的,符合自身的经济学关系。但是就显著度而言, 取决于选定显著性水平,并不是所有的变量都表现出足够的显著性。相较于其他变量而言,变量CPF 表现了较高的显著性。 先来看看4个解释变量之间的相关性。运行以下代码,获得解释变量间的相关性矩阵并绘制相关 性图像: B5_Ch1_1_B.m %% Visulize the correlation of X corr_coe = corrcoef(X) figure corrplot(XTbl, 'testR', 'on') 注意代码中,函数corrplot()起用了对相关性系数的假设检验;对应图像中的相关性系数如果标注 为红色,说明该结果通过了t-检验,具有显著性。代码运行得到的相关性系数矩阵corr_coe如下。 corr_coe = 1.0000 0.4578 0.0566 -0.0686 0.4578 1.0000 0.3955 0.3082 0.0566 0.3955 1.0000 0.0874 -0.0686 0.3082 0.0874 1.0000 第 1 章 时间序列Ⅱ | Time Series Analysis Ⅱ 生成的相关性系数图像如图1.1所示。解释变量BBB与AGE的相关性系数为0.46,且通过了假设检 验;与CPF的相关性系数为0.40;与SPR的相关性系数为0.31。总体而言,BBB展示出了与其他三个解 释变量之间较突出的相关性,但并不十分紧密。反之,其他三个解释变量之间的相关性则微乎其微。 如果四个解释变量之间相关性系数为1或.1,意味着矩阵Xt 中存在完全多重共线性。相关性系数的绝 对值越大,暗示着多重共线性越明显。 Correlation Matrix 1 2 3 SPR -5 0 5 10 CPF 20 40 BBB 4 6 8 10 12 AGE 1 2 3 SPR -5 0 5 10 15 CPF 20 30 40 50 BBB 4 6 8 10 12 AGE 0.46 0.06 -0.07 0.46 0.40 0.31 0.06 0.40 0.09 0.07 0.31 0.09- 图1.1 解释变量AGE、BBB、CPF、SPR之间的相关性系数 接着调用函数cond(),运行如下代码: B5_Ch1_1_C.m %% Calculate condition numbers XI = [ones(T_num, 1), X]; kappa = cond(XI) % Ones-matrix kappa_one = cond(ones(size(XI))) % Zeros-matrix kappa_zero = cond(zeros(size(XI))) MATLAB金融风险管理师FRM | 金融科技Fintech应用 % Identity-matrix kappa_identity = cond(eye(size(XI, 2))) 运行结果为: kappa = 205.8085 kappa_one = 2.6099e+63 kappa_zero = Inf kappa_identity = 1 这里不单单计算了本例中矩阵X. t的条件数kappa,还计算了同样大小的全1矩阵的条件数kappa_ one及全0矩阵的条件数kappa_zero,以及一个5 × 5单位矩阵的条件数kappa_identity。可以看到单位矩 阵完全不存在共线性,所以当条件数kappa_identity = 1,值最小。全1矩阵存在完全的共线性,其条件 数kappa_one 值十分大;全0矩阵对应的条件数kappa_zero 更是达到了正无穷大,是最极端的情况。本 例中矩阵X. t对应的条件数kappa 也不小,在条件数kappa_identity 和kappa_zero 之间,显示存在一定的 共线性。不难发现,无论是相关性系数还是条件数,对于极端情况下的多重共线性可以判断得十分准 确。但通常情况下更适合做定性分析而不是定量分析。 这里再介绍一个共线性的度量指标,方差膨胀因子(variance inflation factor, VIF),也称为方差扩 大因子。一个含有n个解释变量的矩阵X. t,对于其中的任意解释变量{Xit, },其对应的方差膨胀因子 VIFi可由式1-11 计算得出。 VIFi = 1. 1 Ri 2 (1-11) 式中:Ri 2 为解释变量{Xit, }与其解释变量{X jijt, },(≠)的回归模型的决定系数。 X Xit j jt t, 0 , = +ααε+ j ji=≠ Σ1, n (1-12) 而VIFi的倒数则是解释变量{Xit, }对应的允差tolerancei。 tolerance 1i i =.=R2 VIF 1 i (1-13) 当某个变量{Xit, }能被其他变量完全线性解释时,Ri 2 的值趋近于1,VIFi的值将趋近于无穷大。 所以,各个变量的VIF值越小,说明共线性越弱。最常用的VIF阈值是10,即解释变量的VIF值都不大 于10时,认为共线性在可接受范围内。此外,VIF ≤ 5也是比较常见的,但相对而言更为严格的判断 标准。 第 1 章 时间序列Ⅱ | Time Series Analysis Ⅱ 在MATLAB 中,可以遵循如图1.2所示的步骤来计算VIF值以及判断共线性的影响。同时,也可以 根据解释变量矩阵X. t 的相关性系数矩阵直接求得各个变量的VIF值。数学上可以证明,矩阵X. t 的相关 性系数矩阵的逆矩阵的对角元素就是希望得到的VIF值。 Start {Xi, t}, i = 1,2,...,n i = i + 1 If i = n End {VIFi}, i = 1,2,...,n i = 1 Calculate the regression model’s R2 i Calculate the i-th VIFi for {Xi,t}: Create the regression model for {Xi,t}: Xi,t = α0 + Σαj Xj,t + εt j=1, j≠i n VIFi = 1 1-R2 i 图1.2 方差膨胀因子VIF计算流程图 在前面的例子中,相关性系数矩阵corr_coe已存在,运行如下代码。 B5_Ch1_1_D.m %% Calculate VIF VIF = diag(inv(corr_coe))' RSquared_i = 1-(1./VIF) 得到的结果为: VIF = 1.3870 1.7901 1.2216 1.1850 RSquared_i = 0.2790 0.4414 0.1814 0.1561 注意代码首先使用了inv() 函数来获得相关性系数矩阵corr_coe 的逆矩阵(corr_coe)-1;然后又使用了 diag()函数提取了逆矩阵 (corr_coe)-1的各个对角元素值为VIF值。读者们可以根据图1.2的步骤自行编写 程序实现并验算以上的结果。 另一个MATLAB 可以提供的工具是Belsley共线性检验(Belsely collinearity test),可以直接调用 collintest()函数来完成该检验。本例中,可以运行如下代码。 MATLAB金融风险管理师FRM | 金融科技Fintech应用 B5_Ch1_1_E.m %% Collinearity test X0Tbl = ... [table(ones(T_num,1),'VariableNames',{'Const'}),XTbl]; collintest(X0Tbl); figurecollintest(X0Tbl,'tolIdx',10,'tolProp',0.5, ... 'display','off','plot','on'); 注意collintest() 函数的输入变量类型既可以是表格,也可以是矩阵,该例中,使用的变量类型是 表格。直接应用collintest()函数,得到的结果为: Variance Decomposition sValue condIdx Const AGE BBB CPF SPR --------------------------------------------------------- 2.0605 1 0.0015 0.0024 0.0020 0.0140 0.0025 0.8008 2.5730 0.0016 0.0025 0.0004 0.8220 0.0023 0.2563 8.0400 0.0037 0.3208 0.0105 0.0004 0.3781 0.1710 12.0464 0.2596 0.0950 0.8287 0.1463 0.0001 0.1343 15.3405 0.7335 0.5793 0.1585 0.0173 0.6170 若配合“figure”一起使用,能得到对应的图像,如图1.3所示。 Const AGE BBB CPF SPR Variables 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 Variance-Decomposition ProportionscondIdx 12 condIdx 15.3 tolProp 图1.3 Belsley共线性检验结果图 调用collintest()函数所得表格中“sValue”指奇异值(singular value) 。collintest()函数输入变量的矩 阵形式经过奇异值分解 (singular value decomposition) ,原矩阵变成了UΣVT 的形式。“sValue”列中 给出的就是奇异值矩阵Σ中的奇异值。关于奇异值分解的内容,本丛书第三本数学Ⅲ中做了相应的介 绍。“condIdx”指条件指标 (condition index),用来显示解释变量的共线性,值越大说明该变量与其 他变量的联系越紧密。 表格中Const、AGE、BBB、CPF、SPR列对应的是各个解释变量,包括了常数项在内,每一 列显示的是该解释变量在一定的条件指标水平上,相应的变异数分解比 (variance-decomposition proportions)。这个值越大,说明共线性越强。这里,既要设定条件指标的阈值,也要设定变异数 分解比的阈值。在MATLAB 中,条件指标的默认阈值是“30”,变异数分解比的阈值是“0.5”。 第 1 章 时间序列Ⅱ | Time Series Analysis Ⅱ 在collintest() 函数中,指令符'tolIdx' 可以设定条件指标的阈值,而'tolProp'可以设定变异数分解比的 阈值。指令符'display'设定为'off' 或者'on',决定是否以表格形式显示结果。指令符'plot'设定为'off' 或 者'on',决定是否绘制图像。 在本例中,将条件指标的阈值设定为了“10”,凡是条件指标超过该阈值的行信息,就会在图 像中绘制出来,同时变异数分解比的阈值也会绘制在图像中。表格结果中的最后两行对应的条件指标 都超过了阈值“10”,所以这两行的变异数分解比都在图像中绘制了出来,对应的变异数分解比的阈 值“0.5”也在图像中呈现了出来。在条件指标为12.0464 时,只有变量BBB 的变异数分解比超过了阈 值。在条件指标为15.3405 时,变量AGE和SPR之间均超过了0.5 的变异数分解比,暗示了它们之间存 在了一定的共线性。 但是,由于使用了比默认设置更低的条件指标阈值,这里显现出的共线性实际上是比较弱的。如 果不人为地设定这两个阈值,应用默认设置,运行以下代码。 B5_Ch1_1_F.m % Default settings of 'tolIdx'=30 and 'tolProp'=0.5 collintest(X0Tbl, 'plot', 'on') 由于没有超过设定阈值的结果,会得到提醒信息,具体结果为: Warning: No critical rows to plot. > In collintest (line 291) 所以当大家不能成功地绘制出Belsley 共线性检验的图像,可能需要查看一下阈值设置得是否合 适。下面的代码给出了一个应用Belsley 共线性检验而且共线性较强的例子。读者可以自己运行代码来 查看一下结果。 % Another example load Data_Canada collintest(DataTable) collintest(DataTable, 'plot', 'on') 1.2 岭回归 另一个常用的针对多重共线性的补救措施是采用岭回归 (ridge regression),也称为脊回归。如 1.1节提到的,在一般的线性回归中,由于共线性的存在,使得矩阵XX.. t t T 中含有非常接近于零 (near singularity) 的特征值,导致在通过式1-14对β. 求解时造成干扰。 βXXXy. =(.. . t T T t t t).1 (1-14) 在岭回归中,引入了岭参数(ridge parameter),通常记为k,并且为正值。对于原来的矩阵XX.. t t T , MATLAB金融风险管理师FRM | 金融科技Fintech应用 岭回归直接将岭参数添加到对角元素上,以达到改变过于微小的特征值的目的。于是,对β. 的求解被 转化成了式1-15。 βXXIXy. =+(.. . t t t t T Tk ).1 (1-15) 式中:I为一个与XX.. t t T 大小相同的单位矩阵。 在MATLAB 中,可以直接调用函数ridge(y, X, k, scaled) 来构建岭回归模型。该函数的输入变量y是 目标变量(因变量) 列向量;X是包含有解释变量的矩阵,每列即为一个解释变量;k是岭回归参数,允 许以向量的形式输入不同的岭回归参数。该函数的输出即为在不同岭回归参数k下各解释变量的系数 值。在默认情况下该函数会将所有变量归一化为期望值为0、标准差为1的序列。 此外,ridge()函数会自动提供常数项,在输入变量“X”中并不需要再加入常数列。谈到函数对 输入数据的归一化,就又要注意函数另一个输入变量“scaled”。默认情况下,“scaled”的值为1, 不会将函数得到的系数解β. 恢复到归一化之前的量级;若“scaled”的值设定为0,则会将系数解β. 恢 复到归一化之前的量级,此时与输入数据的量级就是一致了。 还是继续前面的例子,首先运行如下代码,导入数据。 B5_Ch1_2_A.m clc; clear all; close all %% Import MATLAB data load Data_CreditDefaults % Matrix of regresor X X = Data(:, 1:4); % Number of observations T_num = size(X,1); % X Matrix with constant XI = [ones(T_num, 1), X]; VarNames = {'AGE','BBB','CPF','SPR'}; % Regressand y y = Data(:, 5); 注意在以上代码中,“X”是不含有常数列的解释变量矩阵;“XI”是含有常数列的解释变量矩 阵。在考查岭参数k的取值范围时,可以根据XX.. t t T 的对角元素大小来设定。具体见如下的代码。 B5_Ch1_2_B.m % Define ridge parameter MuI = mean(diag(XI'*XI)); k = 0:MuI/10; 取矩阵XX.. t t T 对角元素平均值的十分之一作为岭参数k的上限,从零开始以1为步长采样。实际运 用中,对岭参数k的取值不能过大,否则影响求解精度。这里选取一种粗放的取值,其好处是能在较 大范围内观察到系数解β. 随岭参数k的变化而变化。对于不同的问题,对k的取值有时也要视情况而 定。接下来调用ridge()函数,注意下面代码中函数的输入变量“scaled”的值设定为0。 第 1 章 时间序列Ⅱ | Time Series Analysis Ⅱ B5_Ch1_2_C.m % Ridge regression ridgeBetas = ridge(y,X,k,0); [var_num,k_num] = size(ridgeBetas) figure plot(k,ridgeBetas(2:end,:)) xlim([0 max(k)]) legend(VarNames) xlabel('Ridge Parameter \itk') ylabel('Coefficient Estimate') 运行结果为: var_num = 5 k_num = 494 在代码的运行结果中可以看到ridge()函数的输出结果“ridgeBetas”是一个“var_num”דk_ num”的矩阵。这里var_num的值为5,因为有四个解释变量再加上常数项,ridgeBetas的第一行即为 常数项的值。k_num的值为494,对应的是岭参数k的494个不同取值,每个取值对应每一列不同的 β. 解。 上面的代码也同时绘制了图1.4,表明在不同的岭参数k下系数解β. 随的k增加而产生的变化。 0 50 100 150 200 250 300 350 400 450 Ridge Parameterk -0.02 -0.01 0 0.01 0.02 0.03 0.04 0.05 Coefficient EstimateAGEBBB CPFSPR 图1.4 岭回归获得的解释变量 (AGE、BBB、CPF和SPR) 系数值随岭参数k增大的变化 如图1.4所示,当k=0 时,对应的β. 解就是普通线性回归的解,随着k值的变化,β. 解也开始变 化。为了确定合适的k值,这里还需要进一步追踪模型均方差的变化。在一个有n个解释变量,每个 解释变量的样本长度为m的回归模型中,均方误差 (mean squared error, MSE) 可由式1-16计算。 MATLAB金融风险管理师FRM | 金融科技Fintech应用 MSE =. mn 1 .Σi m =1 (YYi i . )2 (1-16) 回顾本丛书第三本回归模型的章节中,当时介绍的是均方根误差 (root mean squared error, RMSE),也就是MSE 开方后的结果,本质上并无差异。该部分内容还介绍了残差平方和 (sum of squares for error, SSE),并介绍了如何通过回归模型的残差项ε计算得到残差平方和。读者可以回顾相 关章节的知识,这里直接应用下面的代码。 B5_Ch1_2_D.m % Calculate MSE yhat = XI*ridgeBetas; RidgeRes = repmat(y,1,k_num)-yhat; RidgeSSE = RidgeRes'*RidgeRes; RidgeDFE = T_num-var_num; RidgeMSE = diag(RidgeSSE/RidgeDFE); figureplot(k,RidgeMSE) xlim([0 max(k)]) xlabel('Ridge Parameter \itk') ylabel('MSE') 以上代码中的“yhat” 即为MSE公式里的{Y. i};“RidgeRes” 包含了所有不同岭参数k下的残 差项;“RidgeSSE” 则是残差平方和的结果,最后得到的MSE值存储于变量“RidgeMSE”中。 以上代码同时绘制了图1.5,展示了MSE值随岭参数k增大而变化的情况。一般情况下应该选择 最小的MSE值对应的岭参数k值,作为最后的模型参数。在本例中,因为各个解释变量之间没有突出 的多重共线性,所以岭回归在此处的作用并不明显,原来普通线性回归的结果已经具有不错的拟合 优度。 0 50 100 150 200 250 300 350 400 450 Ridge Parameter k 0.006 0.008 0.010 0.012 0.014 MSE 图1.5 岭回归的MSE值随岭参数k增大的变化 第 1 章 时间序列Ⅱ | Time Series Analysis Ⅱ 1.3 Lasso回归 本节将介绍另一种回归方法— Lasso回归 (Lasso regression) 。该方法最初于1986 年由Fadil Santosa等提出并应用于地球物理学 (geophysics) 领域。1996年后又被学者们重新发现和深入研究,并 得到了更广泛的应用。 在介绍Lasso回归的具体内容前,有必要先从优化问题的角度来回顾一下之前已经介绍过的线性 回归和岭回归。线性回归和岭回归都具有它们各自对应的优化问题形式,大家可以当作从另一个数学 角度对同一个问题的不同描述。 对于线性回归模型,具体见式1-17~式1-19。 yXβεt t t =+ (1-17) 其中,Xt含有各个时间序列解释变量,即: Xt t t nt =....X X X1, 2, ,, ,..., (1-18) 向量β则是Xt的系数向量,则: β=[βββ1 2, ,..., n]T (1-19) εt是误差向量,表示yt中无法被Xt解释的部分;而β则为常数项。注意这里与前面介绍不同的是, 为了简洁方便,常数项并没有单独标注出来。这是因为,如果原始数据经过归一化后,往往并不需要 再在回归模型中包含常数项。再者,如果常数项是必需的话,也可以通过在矩阵Xt中插入全1列向量 来实现。所以此处的讲解中姑且先忽略常数项的存在,但读者们在实际应用中还是要视情况而定。 首先,线性回归模型的优化问题形式可以写成式1-20所示。 βyXβ* =.arg min β∈. t t 2 (1-20) 这里的优化变量是回归系数β,优化问题的目标是最小化目标函数yXβt t.2 的值;而β* 是该问 题的优化解,使得yXβt t.2 的值足够小。而这里的目标函数实际上就是残差平方和 (sum of squares for error, SSE) 。 特别要介绍一下的是范数 (norm) 的符号2 ,表示是l2 范数。l2 范数是lp范数的一种特殊情况; 对于一个向量x =(xx x1 2, ,,.n),lp范数的表达式如式1-21所示。 x p =.. .. .. Σi= n 1 xi p 1 p (1-21) 其中,xi 是向量x中第i个元素xi的绝对值。l2 范数就是当p=2 时的情况,即: x 2 =.. .. .. Σi= n 1 xi 2 12 (1-22) 其他常用的l2 范数还有l0 范数和l1 范数,分别对应p=0 时的情况。 MATLAB金融风险管理师FRM | 金融科技Fintech应用 x 0 =.. .. .. Σi= n 1 xi 0 0 (1-23) 以及p=1 时的情况。 x 1 =Σi= n 1 xi (1-24) 在MATLAB 中可以直接调用norm(A, p) 函数来计算lp范数,“A”为输入的向量,“p”定义范数 的级数p。 对于范数的概念,大家可能觉得并不熟悉,但是仔细观察以上各个范数的计算公式,实际上就 是对向量元素|xi|绝对值分别取p次幂,再求和,然后开p次方根。如图1.6 所示,以一个向量xA = (4, 3) 为例,在二维平面中,它可以表示点A的坐标。xA的l0范数xA 0 值为2,