1.什么是岭回归?
对于一个统计学知识匮乏的工科生,还真得好好补补。通过各种信息检索,终于有了一点理解,同时发现了统计学
真的很重要,比如金融、生物(尤基因)等与大量数据相关的领域。
岭回归:是一种专用于共线性数据分析的
有偏估计
回归方法,实质上是一种改良的最小二乘估计法
,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价,获得回归系数更为符合实际、更可靠的回归方法,对病态数据
的耐受性远远强于最小二乘法。
2.为什么会有岭回归?
总结起来看,主要有两个原因:
①当样本少于特征(数据点少于变量个数),输入数据的矩阵x非满秩矩阵(即|xTx|≈0),求逆的时候会出问题;
②当样本之间存在共线性(也就是强相关性),普通的最小二乘法得到到的回归系数估计得方差很大,会导致估计值很不稳定;
3.岭回归的做法?
岭回归的原理较为复杂。根据高斯马尔科夫定力,多重相关性并不影响最小二乘法估计量的无偏性和最小方差性,但是,虽然最小二乘估计量在所有线性估计量中是方差最小的,但是这个方差都不一定小,而实际上可以找到一个有偏估计量,这个估计量虽然有较小的偏差,但它的精度却能够大大高于无偏的估计量。岭回归分析就是根据这个原理,通过在正规方程中引入有偏常熟二求的回归估计量的
岭回归的做法是在xTx上加上一个“惩罚项”λI从而使得矩阵非奇异,进而能求逆
此时,回归系数的计算公式是:
ω^=(XTX+λI)−1XTy
4.岭回归的计算过程:
将输入矩阵做数据标准化(所有特征值都减去各自的均值并除以方差)
取一组λ,带入公式得到一族ω估计值
绘制岭迹图,取得岭迹图的平稳拐点对应的λ
5.根据岭迹图取得 λ的原则:
(1)各回归系数的岭估计基本稳定;
(2)用最小二乘估计时符号不合理的回归系数,其岭估计的符号变得合理;
(3)回归系数没有不合乎经济意义的绝对值;
(4)残差平方和增大不太多。
但实际操作,就是取”平稳拐点“
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的出现,就是改进的岭回归算法。