线性回归全总结:《机器学习》第三章 + 《机器学习实战》第八章 + 理论补充

线性回归的模型是 f ( x i ) = w T x i + b f ( x i ) ∼ y i f(x_i)=w^Tx_i+b\quad f(x_i)\sim y_i f(xi)=wTxi+bf(xi)yi,其中 x i x_i xi n × 1 n\times 1 n×1的向量(即有 n n n个特征), w w w n × 1 n\times 1 n×1的向量。若有 m m m个数据,形成 X m × n X_{m\times n} Xm×n的数据集和 y m × 1 y_{m\times1} ym×1的目标, X X X的最后加一列全 1 1 1 w w w b b b吸收,就可以得到简化的 f ( X ) = X m × ( n + 1 ) w ( n + 1 ) × 1 f(X)=X_{m\times{(n+1)}}w_{(n+1)\times1} f(X)=Xm×(n+1)w(n+1)×1。求 l o s s loss loss均方误差是 l = ( y − X w ) T ( y − X w ) l=(y-Xw)^T(y-Xw) l=(yXw)T(yXw),对 w w w求偏导得到 2 X T ( X w − y ) 2X^T(Xw-y) 2XT(Xwy),令 X T ( X w − y ) = 0 X^T(Xw-y)=0 XT(Xwy)=0得到 w = ( X T X ) − 1 X T y w=(X^TX)^{-1}X^Ty w=(XTX)1XTy

  • 标量对向量或矩阵求偏导,得到的结果是分子布局,即对谁求偏导,结果的 shape 就和谁一样

  • 向量对向量求偏导, y m × 1 y_{m\times 1} ym×1 x n × 1 x_{n\times1} xn×1求偏导, ∂ y ∂ x \frac{\partial y}{\partial x} xy 的结果维度是 m × n m\times n m×n

应用链式求导法则之前先看维度,转置调整到维度匹配再计算。此题例, ∂ l ∂ w \frac{\partial{l}}{\partial{w}} wl 的结果是 ( n + 1 ) × 1 (n+1)\times1 (n+1)×1,令 z = y − X w z=y-Xw z=yXw ∂ z ∂ w \frac{\partial{z}}{\partial{w}} wz 的结果是 m × ( n + 1 ) m\times(n+1) m×(n+1) ∂ l ∂ z \frac{\partial{l}}{\partial{z}} zl 的结果是 m × 1 m\times 1 m×1,要使用 ∂ l ∂ w = ∂ l ∂ z ∂ z ∂ w \frac{\partial{l}}{\partial{w}}=\frac{\partial{l}}{\partial{z}}\frac{\partial{z}}{\partial{w}} wl=zlwz的链式法则,先调整到合适的 ∂ l ∂ w = ( ∂ z ∂ w ) T ∂ l ∂ z \frac{\partial{l}}{\partial{w}}=(\frac{\partial{z}}{\partial{w}})^T\frac{\partial{l}}{\partial{z}} wl=(wz)Tzl 再计算。 z = y − X w z=y-Xw z=yXw w w w求偏导,结果肯定是 − X -X X − X -X X的转置,根据布局要求应该是 − X -X X l = z T z l=z^Tz l=zTz z z z求导是 2 z 2z 2z或它的转置,布局要求确定是 2 z 2z 2z。因此 l l l w w w求偏导结果是 − 2 X T z = 2 X T ( X w − y ) -2X^Tz=2X^T(Xw-y) 2XTz=2XT(Xwy)

实际数据大多数情况下 X T X X^TX XTX都不可逆,会产生多种多个 w w w的最优解,常见的做法是引入正则化项解决

xMat = mat(xArr); yMat = mat(yArr).T
xTx = xMat.T*xMat
if linalg.det(xTx) == 0.0:
    print "This matrix is singular, cannot do inverse"
    return
ws = xTx.I * (xMat.T*yMat)
return ws

随机变量 X X X Y Y Y的相关系数 ρ \rho ρ(皮尔逊相关系数)是 ρ = c o v ( X , Y ) ( v a r ( X ) ( v a r ( Y ) ) ) = c o v ( X , Y ) σ X σ Y \rho =\frac{cov(X,Y)}{\sqrt(var(X)(var(Y)))}=\frac{cov(X,Y)}{\sigma_X\sigma_Y} ρ=( var(X)(var(Y)))cov(X,Y)=σXσYcov(X,Y),只衡量线性关系,它是对协方差的标准化,可以用来衡量回归的优劣

期望的线性: E ( a g 1 ( X ) + b g 2 ( X ) + c ) = a E g 1 ( X ) + b E g 2 ( X ) + c E(ag_1(X)+bg_2(X)+c)=aEg_1(X)+bEg_2(X)+c E(ag1(X)+bg2(X)+c)=aEg1(X)+bEg2(X)+c,且 E [ X + Y ] = E [ X ] + E [ Y ] E[X+Y]=E[X]+E[Y] E[X+Y]=E[X]+E[Y],不要求 X X X Y Y Y独立

方差是 X X X的二次中心矩, V a r ( X ) = E [ ( X − μ X ) 2 ] = E [ X 2 ] − ( E [ X ] ) 2 Var(X)=E[(X-\mu_X)^2]=E[X^2]-(E[X])^2 Var(X)=E[(XμX)2]=E[X2](E[X])2 V a r ( a X + b ) = a 2 V a r ( X ) Var(aX+b)=a^2Var(X) Var(aX+b)=a2Var(X)

C O V ( X , Y ) = E [ ( X − μ X ) ( Y − μ Y ) ] = E [ X Y − μ Y X − μ X Y + μ X μ Y ] = E [ X Y ] − μ Y E [ X ] − μ X E [ Y ] + μ X μ Y = E [ X Y ] − μ X μ Y COV(X,Y)=E[(X-\mu_X)(Y-\mu_Y)]=E[XY-\mu_YX-\mu_XY+\mu_X\mu_Y]=E[XY]-\mu_YE[X]-\mu_XE[Y]+\mu_X\mu_Y=E[XY]-\mu_X\mu_Y COV(X,Y)=E[(XμX)(YμY)]=E[XYμYXμXY+μXμY]=E[XY]μYE[X]μXE[Y]+μXμY=E[XY]μXμY

corrcoef(yHat.T,yMat)

岭回归在 X T X X^TX XTX的基础上加 λ I \lambda I λI使矩阵矩阵非奇异,进而能对 X T X + λ I X^TX+\lambda I XTX+λI求逆(第八点),它也是一种正则化方法,从贝叶斯优化角度看,相当于加入了高斯先验,用最大后验估计来估计参数,lasso回归加入了不可导项,需要使用特殊方法优化,比如前向逐步回归尝试对权重加加减减,如果 l o s s loss loss减少,就应用这种变化,也可以用其他方式优化(也介绍了岭回归的梯度下降优化,很值得一看)

    for i in range(numIt):
        print ws.T
        lowestError = inf; 
        for j in range(n):
            for sign in [-1,1]:
                wsTest = ws.copy()
                wsTest[j] += eps*sign
                yTest = xMat*wsTest
                rssE = rssError(yMat.A,yTest.A)
                if rssE < lowestError:
                    lowestError = rssE
                    wsMax = wsTest
        ws = wsMax.copy()

实际引入岭回归和lasso回归,是以偏差的代价换取低方差,欠拟合时偏差主导误差,过拟合时方差主导误差,被称为偏差-方差窘境

你可能感兴趣的:(学习笔记,线性回归,算法)