机器学习实战——ch08.1回归之岭回归

1.什么是岭回归?

对于一个统计学知识匮乏的工科生,还真得好好补补。通过各种信息检索,终于有了一点理解,同时发现了统计学真的很重要,比如金融、生物(尤基因)等与大量数据相关的领域。

岭回归:是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价,获得回归系数更为符合实际、更可靠的回归方法,对病态数据的耐受性远远强于最小二乘法。

2.为什么会有岭回归?

总结起来看,主要有两个原因:
①当样本少于特征(数据点少于变量个数),输入数据的矩阵x非满秩矩阵(即|xTx|≈0),求逆的时候会出问题;

②当样本之间存在共线性(也就是强相关性),普通的最小二乘法得到到的回归系数估计得方差很大,会导致估计值很不稳定;

3.岭回归的做法?

岭回归的原理较为复杂。根据高斯马尔科夫定力,多重相关性并不影响最小二乘法估计量的无偏性和最小方差性,但是,虽然最小二乘估计量在所有线性估计量中是方差最小的,但是这个方差都不一定小,而实际上可以找到一个有偏估计量,这个估计量虽然有较小的偏差,但它的精度却能够大大高于无偏的估计量。岭回归分析就是根据这个原理,通过在正规方程中引入有偏常熟二求的回归估计量的

岭回归的做法是在xTx上加上一个“惩罚项”λI从而使得矩阵非奇异,进而能求逆
此时,回归系数的计算公式是:

ω^=(XTX+λI)1XTy

4.岭回归的计算过程:

  • 将输入矩阵做数据标准化(所有特征值都减去各自的均值并除以方差)

  • 取一组λ,带入公式得到一族ω估计值

  • 绘制岭迹图,取得岭迹图的平稳拐点对应的λ

5.根据岭迹图取得 λ的原则:

(1)各回归系数的岭估计基本稳定;
(2)用最小二乘估计时符号不合理的回归系数,其岭估计的符号变得合理;
(3)回归系数没有不合乎经济意义的绝对值;
(4)残差平方和增大不太多。

但实际操作,就是取”平稳拐点“
机器学习实战——ch08.1回归之岭回归_第1张图片

6.代码及注释:

#给定lam下的岭回归的求解
def ridgeRegres(xMat,yMat,lam=0.2):
    xTx = xMat.T * xMat
    denom = xTx + eye(shape(xMat)[1])*lam #eye()是numpy用于生成单位矩阵的函数
    if linalg.det(denom) == 0.0:
        print "This matrix is singular, cannot do inverse"
        return
    ws = denom.I * (xMat.T * yMat)
    return ws

#测试岭回归的求解效果
def  ridgeTest(xArr,yArr):
    xMat = mat(xArr)
    yMat = mat(yArr).T
    yMean = mean(yMat,0)       #np.mean(a,axis):沿着axis方向求算术平均值
    yMat =yMat - yMean
    xMeans = mean(xMat,0)
    xVar = var(xMat,0)         #np.var(a,axis):沿着axis方向求方差
    xMat =(xMat - xMeans)/xVar #数据标准化操作:所有特征值都减去各自的均值并除以方差
    numTestPts = 30            #生成30个不同lam以测试ridgeRegres
    wMat = zeros((numTestPts,shape(xMat)[1]))
    for i in range(numTestPts):
        ws = ridgeRegres(xMat,yMat,exp(i-10))
        wMat[i,:] = ws.T
    return wMat

7.岭回归的缺点:

一个致命缺点,主观性性太大,基本我们学习下来发现,选取k值和删除X分量,基本都要靠目测,因此不适合大数据和机器学习思想。于是lasso的出现,就是改进的岭回归算法。

你可能感兴趣的:(机器学习实战)