【南瓜书ML】(task2)线性模型的数学推导(最小二乘估计、广义瑞利商、极大似然估计等)

学习总结

  • 复习线性模型(线性回归,对数几率回归进行分类,线性判别分析LDA进行降维,多分类学习,类别不平衡问题中的采样or处理方法等)。
  • 使用奇异值分解,使得数值解更加稳定。

一、模型部分

1.0 线性回归

线性组合形式的向量表示:
f ( x ) = w T x + b f(x)=w^{T} x+b f(x)=wTx+b通过学习到的w和b后确定模型。更强大的非线性结构是引入层级结构或者高级映射获得的。
回归任务中最常用的性能度量:均方误差:
( w ∗ , b ∗ ) = arg ⁡ min ⁡ ( w , b ) ∑ i = 1 m ( f ( x i ) − y i ) 2 = arg ⁡ min ⁡ ( w , b ) ∑ i = 1 m ( y i − w x i − b ) 2 . \begin{aligned} \left(w^{*}, b^{*}\right) &=\underset{(w, b)}{\arg \min } \sum_{i=1}^{m}\left(f\left(x_{i}\right)-y_{i}\right)^{2} \\ &=\underset{(w, b)}{\arg \min } \sum_{i=1}^{m}\left(y_{i}-w x_{i}-b\right)^{2} . \end{aligned} (w,b)=(w,b)argmini=1m(f(xi)yi)2=(w,b)argmini=1m(yiwxib)2.上面式子分别对w、b进行求导,等于0,找到最优的闭式解(解析解)。

【基础复习】求偏微分or积分式,按照求解方法的不同,分为解析解、数值解:

  • 解析解(analytical solution)就是一些严格的公式,给出任意的自变量就可以求出其因变量,也就是问题的解, 他人可以利用这些公式计算各自的问题.
    所谓的解析解是一种包含分式、三角函数、指数、对数甚至无限级数等基本函数的解的形式。
    • 用来求得解析解的方法称为解析法〈analytic techniques〉,解析法即是常见的微积分技巧,例如分离变量法等。
    • 解析解为一封闭形式〈closed-form〉的函数,因此对任一独立变量,我们皆可将其带入解析函数求得正确的相应变量。因此,解析解也被称为闭式解(closed-form solution)
  • 数值解(numerical solution)是采用某种计算方法,如有限元的方法, 数值逼近,插值的方法, 得到的解.别人只能利用数值计算的结果, 而不能随意给出自变量并求出计算值.
    • 当无法藉由微积分技巧求得解析解时,这时便只能利用数值分析的方式来求得其数值解了。数值方法变成了求解过程重要的媒介。

1.1 对数几率回归

在这里插入图片描述
对数几率函数就是sigmoid函数,是凸函数,即任意阶可导,方便寻找最优解。
通过引入S型的对数几率函数 y = 1 1 + e − z y=\dfrac{1}{1+e^{-z}} y=1+ez1该激活函数作用是因此引入非线性,则有多种选择。
在这里插入图片描述
Sigmoid优点:输出范围有限,所以数据在传递过程中不易发散;还有容易求导。
Sigmoid缺点:梯度下降非常明显,且两头过于平坦,容易出现梯度消失的情况,输出的至于不对称(并非像tanh函数那样是-1~1)

在深度学习中类似sigmoid函数的激活函数还有很多,比如:
(1)ReLU函数的线性特点使得其收敛速度比Sigmoid、tanh更快,而且没有梯度饱和的情况出现。
(2)计算更加高效,相比于sigmoid、tanh函数,ReLU只需要一个阈值就可以得到激活值,不需要对输入归一化来防止达到饱和。

逻辑回归即线性回归+sigmoid函数,是最基础也是最重要的模型:
在这里插入图片描述
通过逻辑回归能演化出很多模型:

  • 逻辑回归=线性回归+sigmoid激活函数,从而将回归问题转换为分类问题
  • 逻辑回归+矩阵分解,构成了推荐算法中常用的FM模型
  • 逻辑回归+softmax,从而将二分类问题转化为多分类问题
  • 逻辑回归还可以看做单层神经网络,相当于最简单的深度学习模型

1.2 线性判别分析LDA

思想:把一类点投影到同一条直线上,相似的点在尽可能接近,不相似的点就尽可能的远。
在这里插入图片描述
定义类内散度矩阵,再定义类间散度矩阵,LDA最大化的目标即广义瑞利商:
在这里插入图片描述
【基础——广义瑞利商】
(1)瑞利商是指这样的函数 R ( A , x ) R(A, x) R(A,x) :
R ( A , x ) = x H A x x H x R(A, x)=\frac{x^{H} A x}{x^{H} x} R(A,x)=xHxxHAx

  • x是非零向量
  • A是n×n的Hermitan矩阵,即满足共轭转置矩阵和自己相等的矩阵, A H = A A^{H}=A AH=A
  • 瑞利商的一个重要性质,其最大值等于矩阵A最大的特征值,而最小值等于矩阵A的最小的特征值: λ min ⁡ ≤ x H A x x H x ≤ λ max ⁡ \lambda \min \leq \frac{x^{H} A x}{x^{H} x} \leq \lambda \max λminxHxxHAxλmax
    (2)广义瑞利商: R ( A , B , x ) R(A, B, x) R(A,B,x)
    R ( A , x ) = x H A x x H B x R(A, x)=\frac{x^{H} A x}{x^{H} B x} R(A,x)=xHBxxHAx
  • 其中x为非零向量,A和B均为n×n的Hermitan矩阵,B是正定矩阵。

1.3 多分类学习

  • 多分类可以拆解为多个二分类:
    • OvO一对一:可以拆分为 N ( N − 1 ) / 2 N(N-1)/2 N(N1)/2个二分类任务,如下图;
    • OvR一对余:一个当正例,其他的都放在一起作为反例,可以拆分为N个二分类任务,如下图;
    • MvM多对多:比较特殊,比如采用纠错输出码等。

在这里插入图片描述

1.4 类别不平衡问题

分类问题中,当正负样本数量相差较大时(即类别不平衡)。
ex:假设正样本数量大,负样本数量小(如欺诈团伙人数)。

  • 方法:
    • 欠采样:减少正样本的数量,使数据平衡,再进一步分类,如EasyEnsemble算法等;
    • 过采样:增加负样本数量,再分类,如SMOTE算法等。
    • 阈值移动:将原始数据分类,但在用训练好的分类器进行预测时,将下式加入到决策过程中,调整正反例的平衡性: y ′ 1 − y ′ = y 1 − y × m − m + \frac{y^{\prime}}{1-y^{\prime}}=\frac{y}{1-y} \times \frac{m^{-}}{m^{+}} 1yy=1yy×m+m

二、线性回归

一、线性回归模型

回归这个概念是19世纪80年代由英国统计学家郎西斯.高尔顿在研究父子身高关系提出来的,他发现:在同一族群中,子代的平均身高介于父代的身高以及族群的平均身高之间。具体而言,高个子父亲的儿子的身高有低于其父亲身高的趋势,而矮个子父亲的儿子身高则有高于父亲的身高的趋势。也就是说,子代的身高有向族群平均身高"平均"的趋势,这就是统计学上"回归"的最初含义。

回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(特征)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。通常使用曲线/线来拟合数据点,目标是使曲线到数据点的距离差异最小。而线性回归就是回归问题中的一种,线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w :

假设:数据集 D = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } D = \{(x_1,y_1),...,(x_N,y_N) \} D={(x1,y1),...,(xN,yN)} x i ∈ R p , y i ∈ R , i = 1 , 2 , . . . , N x_i \in R^p,y_i \in R,i = 1,2,...,N xiRp,yiR,i=1,2,...,N X = ( x 1 , x 2 , . . . , x N ) T , Y = ( y 1 , y 2 , . . . , y N ) T X = (x_1,x_2,...,x_N)^T,Y=(y_1,y_2,...,y_N)^T X=(x1,x2,...,xN)T,Y=(y1,y2,...,yN)T
假设X和Y之间存在线性关系,模型的具体形式为 y ^ = f ( w ) = w T x \hat{y}=f(w) =w^Tx y^=f(w)=wTx
在这里插入图片描述

( a ) 最小二乘估计:

最小二乘
可以先复习上个task的矩阵的矩阵的范数概念:
在这里插入图片描述
我们需要衡量真实值 y i y_i yi与线性回归模型的预测值 w T x i w^Tx_i wTxi之间的差距,在这里我们和使用二范数的平方和L(w)来描述这种差距,即:

L ( w ) = ∑ i = 1 N ∣ ∣ w T x i − y i ∣ ∣ 2 2 = ∑ i = 1 N ( w T x i − y i ) 2 = ( w T X T − Y T ) ( w T X T − Y T ) T = w T X T X w − 2 w T X T Y + Y Y T 因此,我们需要找到使得 L ( w ) 最小时对应的参数 w ,即: w ^ = a r g m i n    L ( w ) 为了达到求解最小化 L ( w ) 问题,我们应用高等数学的知识,使用求导来解决这个问题: ∂ L ( w ) ∂ w = 2 X T X w − 2 X T Y = 0 , 因此: w ^ = ( X T X ) − 1 X T Y L(w) = \sum\limits_{i=1}^{N}||w^Tx_i-y_i||_2^2=\sum\limits_{i=1}^{N}(w^Tx_i-y_i)^2 = (w^TX^T-Y^T)(w^TX^T-Y^T)^T = w^TX^TXw - 2w^TX^TY+YY^T\\ 因此,我们需要找到使得L(w)最小时对应的参数w,即:\\ \hat{w} = argmin\;L(w)\\ 为了达到求解最小化L(w)问题,我们应用高等数学的知识,使用求导来解决这个问题: \\ \frac{\partial L(w)}{\partial w} = 2X^TXw-2X^TY = 0,因此: \\ \hat{w} = (X^TX)^{-1}X^TY L(w)=i=1N∣∣wTxiyi22=i=1N(wTxiyi)2=(wTXTYT)(wTXTYT)T=wTXTXw2wTXTY+YYT因此,我们需要找到使得L(w)最小时对应的参数w,即:w^=argminL(w)为了达到求解最小化L(w)问题,我们应用高等数学的知识,使用求导来解决这个问题:wL(w)=2XTXw2XTY=0,因此:w^=(XTX)1XTY

( b ) 几何解释:

在线性代数中,我们知道两个向量a和b相互垂直可以得出: < a , b > = a . b = a T b = 0 <a,b> = a.b = a^Tb = 0 <a,b>=a.b=aTb=0,而平面X的法向量为Y-Xw,与平面X互相垂直,因此: X T ( Y − X w ) = 0 X^T(Y-Xw) = 0 XT(YXw)=0,即: w = ( X T X ) − 1 X T Y w = (X^TX)^{-1}X^TY w=(XTX)1XTY
在这里插入图片描述

( c ) 概率视角(极大似然估计)

极大似然估计:用来估计概率分布的的参数值,比如先对一个随机变量确定为正态分布,那么可以通过极大似然估计可以确定该正态分布的2个关键参数——均值和方差,也就确定该唯一的正态分布了。

假设噪声 ϵ ∽ N ( 0 , σ 2 ) , y = f ( w ) + ϵ = w T x + ϵ \epsilon \backsim N(0,\sigma^2),y=f(w)+\epsilon=w^Tx+\epsilon ϵN(0,σ2),y=f(w)+ϵ=wTx+ϵ,因此: y ∣ x i , w   N ( w T x , σ 2 ) y|x_i,w ~ N(w^Tx,\sigma^2) yxi,w N(wTx,σ2)
我们使用极大似然估计MLE对参数w进行估计:
L ( w ) = l o g    P ( Y ∣ X ; w ) = l o g    ∏ i = 1 N P ( y i ∣ x i ; w ) = ∑ i = 1 N l o g    P ( y i ∣ x i ; w ) = ∑ i = 1 N l o g ( 1 2 π σ e x p ( − ( y i − w T x i ) 2 2 σ 2 ) ) = ∑ i = 1 N [ l o g ( 1 2 π σ ) − 1 2 σ 2 ( y i − w T x i ) 2 ] a r g m a x w L ( w ) = a r g m i n w [ l ( w ) = ∑ i = 1 N ( y i − w T x i ) 2 ] 因此:线性回归的最小二乘估计 < = = > 噪声 ϵ ∽ N ( 0 , σ 2 ) 的极大似然估计 L(w) = log\;P(Y|X;w) = log\;\prod_{i=1}^N P(y_i|x_i;w) = \sum\limits_{i=1}^{N} log\; P(y_i|x_i;w)\\ = \sum\limits_{i=1}^{N}log(\frac{1}{\sqrt{2\pi \sigma}}exp(-\frac{(y_i-w^Tx_i)^2}{2\sigma^2})) = \sum\limits_{i=1}^{N}[log(\frac{1}{\sqrt{2\pi}\sigma})-\frac{1}{2\sigma^2}(y_i-w^Tx_i)^2] \\ argmax_w L(w) = argmin_w[l(w) = \sum\limits_{i = 1}^{N}(y_i-w^Tx_i)^2]\\ 因此:线性回归的最小二乘估计<==>噪声\epsilon\backsim N(0,\sigma^2)的极大似然估计 L(w)=logP(YX;w)=logi=1NP(yixi;w)=i=1NlogP(yixi;w)=i=1Nlog(2πσ 1exp(2σ2(yiwTxi)2))=i=1N[log(2π σ1)2σ21(yiwTxi)2]argmaxwL(w)=argminw[l(w)=i=1N(yiwTxi)2]因此:线性回归的最小二乘估计<==>噪声ϵN(0,σ2)的极大似然估计

下面,我们使用sklearn的线性回归实例来演示:
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

sklearn.linear_model.LinearRegression

from sklearn import linear_model      # 引入线性回归方法
lin_reg = linear_model.LinearRegression()       # 创建线性回归的类
lin_reg.fit(X,y)        # 输入特征X和因变量y进行训练
print("模型系数:",lin_reg.coef_)             # 输出模型的系数
print("模型得分:",lin_reg.score(X,y))    # 输出模型的决定系数R^2
    模型系数: [-1.08011358e-01  4.64204584e-02  2.05586264e-02  2.68673382e+00
     -1.77666112e+01  3.80986521e+00  6.92224640e-04 -1.47556685e+00
      3.06049479e-01 -1.23345939e-02 -9.52747232e-01  9.31168327e-03
     -5.24758378e-01]
    模型得分: 0.7406426641094095

二、线性回归的推广

在线性回归中,我们假设因变量与特征之间的关系是线性关系,这样的假设使得模型很简单,但是缺点也是显然的,那就是当数据存在非线性关系时,我们使用线性回归模型进行预测会导致预测性能极其低下,因为模型的形式本身是线性的,无法表达数据中的非线性关系。我们一个很自然的想法就是去推广线性回归模型,使得推广后的模型更能表达非线性的关系。

(a) 多项式回归:

为了体现因变量和特征的非线性关系,一个很自然而然的想法就是将标准的线性回归模型:

y i = w 0 + w 1 x i + ϵ i y_i = w_0 + w_1x_i + \epsilon_i yi=w0+w1xi+ϵi

换成一个多项式函数:
y i = w 0 + w 1 x i + w 2 x i 2 + . . . + w d x i d + ϵ y_i = w_0 + w_1x_i + w_2x_i^2 + ...+w_dx_i^d + \epsilon yi=w0+w1xi+w2xi2+...+wdxid+ϵ 对于多项式的阶数d不能取过大,一般不大于3或者4,因为d越大,多项式曲线就会越光滑,在X的边界处有异常的波动。(图中的边界处的4阶多项式拟合曲线的置信区间(虚线表示置信区间)明显增大,预测效果的稳定性下降。)

在这里插入图片描述
在这里插入图片描述

(b) 广义可加模型(GAM):

广义可加模型GAM实际上是线性模型推广至非线性模型的一个框架,在这个框架中,每一个变量都用一个非线性函数来代替,但是模型本身保持整体可加性。GAM模型不仅仅可以用在线性回归的推广,还可以将线性分类模型进行推广。具体的推广形式是:
标准的线性回归模型:
y i = w 0 + w 1 x i 1 + . . . + w p x i p + ϵ i y_i = w_0 + w_1x_{i1} +...+w_px_{ip} + \epsilon_i yi=w0+w1xi1+...+wpxip+ϵi
GAM模型框架:
y i = w 0 + ∑ j = 1 p f j ( x i j ) + ϵ i y_i = w_0 + \sum\limits_{j=1}^{p}f_{j}(x_{ij}) + \epsilon_i yi=w0+j=1pfj(xij)+ϵi
GAM模型的优点与不足:

  • 优点:简单容易操作,能够很自然地推广线性回归模型至非线性模型,使得模型的预测精度有所上升;由于模型本身是可加的,因此GAM还是能像线性回归模型一样把其他因素控制不变的情况下单独对某个变量进行推断,极大地保留了线性回归的易于推断的性质。
  • 缺点:GAM模型会经常忽略一些有意义的交互作用,比如某两个特征共同影响因变量,不过GAM还是能像线性回归一样加入交互项 x ( i ) × x ( j ) x^{(i)} \times x^{(j)} x(i)×x(j)的形式进行建模;但是GAM模型本质上还是一个可加模型,如果我们能摆脱可加性模型形式,可能还会提升模型预测精度,详情请看后面的算法。

(1) 多项式回归实例介绍:

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html?highlight=poly
sklearn.preprocessing.PolynomialFeatures

sklearn.preprocessing.PolynomialFeatures(degree=2, *, interaction_only=False, 
include_bias=True, order='C'):               
  • 参数:
    degree:特征转换的阶数。
    interaction_onlyboolean:是否只包含交互项,默认False 。
    include_bias:是否包含截距项,默认True。
    order:str in {‘C’, ‘F’}, default ‘C’,输出数组的顺序。
from sklearn.preprocessing import PolynomialFeatures
X_arr = np.arange(6).reshape(3, 2)
print("原始X为:\n",X_arr)

poly = PolynomialFeatures(2)
print("2次转化X:\n",poly.fit_transform(X_arr))

poly = PolynomialFeatures(interaction_only=True)
print("2次转化X:\n",poly.fit_transform(X_arr))
    原始X为:
     [[0 1]
     [2 3]
     [4 5]]
    2次转化X:
     [[ 1.  0.  1.  0.  0.  1.]
     [ 1.  2.  3.  4.  6.  9.]
     [ 1.  4.  5. 16. 20. 25.]]
    2次转化X:
     [[ 1.  0.  1.  0.]
     [ 1.  2.  3.  6.]
     [ 1.  4.  5. 20.]]

(2) GAM模型实例介绍:

安装pygam:pip install pygam
https://github.com/dswah/pyGAM/blob/master/doc/source/notebooks/quick_start.ipynb

from pygam import LinearGAM
gam = LinearGAM().fit(boston_data[boston.feature_names], y)
gam.summary()
    LinearGAM                                                                                                 
    =============================================== ==========================================================
    Distribution:                        NormalDist Effective DoF:                                    103.2423
    Link Function:                     IdentityLink Log Likelihood:                                 -1589.7653
    Number of Samples:                          506 AIC:                                             3388.0152
                                                    AICc:                                            3442.7649
                                                    GCV:                                               13.7683
                                                    Scale:                                              8.8269
                                                    Pseudo R-Squared:                                   0.9168
    ==========================================================================================================
    Feature Function                  Lambda               Rank         EDoF         P > x        Sig. Code   
    ================================= ==================== ============ ============ ============ ============
    s(0)                              [0.6]                20           11.1         2.20e-11     ***         
    s(1)                              [0.6]                20           12.8         8.15e-02     .           
    s(2)                              [0.6]                20           13.4         2.59e-03     **          
    s(3)                              [0.6]                20           3.6          2.76e-01                 
    s(4)                              [0.6]                20           11.3         1.11e-16     ***         
    s(5)                              [0.6]                20           10.2         1.11e-16     ***         
    s(6)                              [0.6]                20           10.4         8.22e-01                 
    s(7)                              [0.6]                20           8.5          4.44e-16     ***         
    s(8)                              [0.6]                20           3.5          5.96e-03     **          
    s(9)                              [0.6]                20           3.5          1.33e-09     ***         
    s(10)                             [0.6]                20           1.8          3.26e-03     **          
    s(11)                             [0.6]                20           6.4          6.25e-02     .           
    s(12)                             [0.6]                20           6.6          1.11e-16     ***         
    intercept                                              1            0.0          2.23e-13     ***         
    ==========================================================================================================
    Significance codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    
    WARNING: Fitting splines and a linear function to a feature introduces a model identifiability problem
             which can cause p-values to appear significant when they are not.
    
    WARNING: p-values calculated in this manner behave correctly for un-penalized models or models with
             known smoothing parameters, but when smoothing parameters have been estimated, the p-values
             are typically lower than they should be, meaning that the tests reject the null too readily.


    /home/leo/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: UserWarning: KNOWN BUG: p-values computed in this summary are likely much smaller than they should be. 
     
    Please do not make inferences based on these values! 
    
    Collaborate on a solution, and stay up to date at: 
    github.com/dswah/pyGAM/issues/163 
    
      This is separate from the ipykernel package so we can avoid doing imports until

Reference

[1] 陈希孺编著.概率论与数理统计[M].中国科学技术大学出版社,2009
[2] B 站视频教程:https://www.bilibili.com/video/BV1Mh411e7VU
[3] 线上南瓜书:https://datawhalechina.github.io/pumpkin-book/#/chapter1/chapter1
[4] 开源地址:https://github.com/datawhalechina/pumpkin-book
[5] 周志华《机器学习》版本空间
[6] 周志华老师《机器学习》假设空间和版本空间概念辨析
[7] 深入浅出线性判别分析(LDA,从理论到代码实现)

猜你喜欢

转载自blog.csdn.net/qq_35812205/article/details/125821158