宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

一、一般线性回归遇到的问题

    在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:

预测精度:这里要处理好这样一对为题,即样本的数量岭回归(Ridge Regression)-风君子博客和特征的数量岭回归(Ridge Regression)-风君子博客

岭回归(Ridge Regression)-风君子博客时,最小二乘回归会有较小的方差
岭回归(Ridge Regression)-风君子博客时,容易产生过拟合
岭回归(Ridge Regression)-风君子博客时,最小二乘回归得不到有意义的结果

模型的解释能力:如果模型中的特征之间有相互关系,这样会增加模型的复杂程度,并且对整个模型的解释能力并没有提高,这时,我们就要进行特征选择。

以上的这些问题,主要就是表现在模型的方差和偏差问题上,这样的关系可以通过下图说明:

岭回归(Ridge Regression)-风君子博客

(摘自:机器学习实战)

方差指的是模型之间的差异,而偏差指的是模型预测值和数据之间的差异。我们需要找到方差和偏差的折中。

二、岭回归的概念

    在进行特征选择时,一般有三种方式:

子集选择
收缩方式(Shrinkage method),又称为正则化(Regularization)。主要包括岭回归个lasso回归。
维数缩减

    岭回归(Ridge Regression)是在平方误差的基础上增加正则项

岭回归(Ridge Regression)-风君子博客,岭回归(Ridge Regression)-风君子博客

通过确定岭回归(Ridge Regression)-风君子博客的值可以使得在方差和偏差之间达到平衡:随着岭回归(Ridge Regression)-风君子博客的增大,模型方差减小而偏差增大。

    对岭回归(Ridge Regression)-风君子博客求导,结果为

岭回归(Ridge Regression)-风君子博客

令其为0,可求得岭回归(Ridge Regression)-风君子博客的值:

岭回归(Ridge Regression)-风君子博客

三、实验的过程

    我们去探讨一下取不同的岭回归(Ridge Regression)-风君子博客对整个模型的影响。

岭回归(Ridge Regression)-风君子博客

MATLAB代码

主函数

[plain] view plain copy
 
 岭回归(Ridge Regression)-风君子博客岭回归(Ridge Regression)-风君子博客

%% 岭回归(Ridge Regression)  
  
%导入数据  
data = load(‘abalone.txt’);  
[m,n] = size(data);  
  
dataX = data(:,1:8);%特征  
dataY = data(:,9);%标签  
  
%标准化  
yMeans = mean(dataY);  
for i = 1:m  
    yMat(i,:) = dataY(i,:)-yMeans;  
end  
  
xMeans = mean(dataX);  
xVars = var(dataX);  
for i = 1:m  
    xMat(i,:) = (dataX(i,:) – xMeans)./xVars;  
end  
  
% 运算30次  
testNum = 30;  
weights = zeros(testNum, n-1);  
for i = 1:testNum  
    w = ridgeRegression(xMat, yMat, exp(i-10));  
    weights(i,:) = w’;  
end  
  
% 画出随着参数lam  
hold on  
axis([-9 20 -1.0 2.5]);  
xlabel log(lam);  
ylabel weights;  
for i = 1:n-1  
    x = -9:20;  
    y(1,:) = weights(:,i)’;  
    plot(x,y);  
end  

岭回归求回归系数的函数

[plain] view plain copy
 
 岭回归(Ridge Regression)-风君子博客岭回归(Ridge Regression)-风君子博客

function [ w ] = ridgeRegression( x, y, lam )  
    xTx = x’*x;  
    [m,n] = size(xTx);  
    temp = xTx + eye(m,n)*lam;  
    if det(temp) == 0  
        disp(‘This matrix is singular, cannot do inverse’);  
    end  
    w = temp^(-1)*x’*y;  
end  

http://blog.csdn.net/google19890102/article/details/27228279

数值计算方法的“稳定性”是指在计算过程中舍入误差是可以控制的。

对于有些矩阵,矩阵中某个元素的一个很小的变动,会引起最后计算结果误差很大,这种矩阵称为“病态矩阵”。有些时候不正确的计算方法也会使一个正常的矩阵在运算中表现出病态。对于高斯消去法来说,如果主元(即对角线上的元素)上的元素很小,在计算时就会表现出病态的特征。

回归分析中常用的最小二乘法是一种无偏估计。

岭回归(Ridge Regression)-风君子博客

当X列满秩时,有

岭回归(Ridge Regression)-风君子博客

X+表示X的广义逆(或叫伪逆)。

当X不是列满秩,或者某些列之间的线性相关性比较大时,XTX的行列式接近于0,即XTX接近于奇异,计算(XTX)-1时误差会很大。此时传统的最小二乘法缺乏稳定性与可靠性。

岭回归是对最小二乘回归的一种补充,它损失了无偏性,来换取高的数值稳定性,从而得到较高的计算精度。

当XTX的行列式接近于0时,我们将其主对角元素都加上一个数k,可以使矩阵为奇异的风险大降低。于是:

岭回归(Ridge Regression)-风君子博客     (I是单位矩阵)

随着k的增大,B(k)中各元素bi(k)的绝对值均趋于不断变小,它们相对于正确值bi的偏差也越来越大。k趋于无穷大时,B(k)趋于0。b(k)随k的改变而变化的轨迹,就称为岭迹。实际计算中可选非常多的k值,做出一个岭迹图,看看这个图在取哪个值的时候变稳定了,那就确定k值了。

X不满足列满秩,换句话就是说样本向量之间具有高度的相关性(如果每一列是一个向量的话)。遇到列向量相关的情形,岭回归是一种处理方法,也可以用主成分分析PCA来进行降维。

http://www.cnblogs.com/zhangchaoyang 作者:Orisun