Matlab中的Ridge回归和OLS回归

Sch*_*max 2 matlab regression

Ridge回归与OLS回归的差异很小。数学上,OLS回归使用以下公式

在此处输入图片说明

岭回归使用公式

在此处输入图片说明

我想使用ridge回归来避免多重线性,但返回的结果非常奇怪,这比单纯使用regress()差得多。在matlab中,要调用函数ridge,必须输入X,Y和k的值。从理论上讲,如果k设置为零,则这些方程式应相同;但是,当在我的代码中使用相同的X和Y值来调用这两者时,我会收到两个非常不同的B矩阵(如下所示)。有人可以解释为什么会这样吗?

b_ridge = ridge(Y_current,X, 0)

    12.4525
    9.0099
    0.2808
    -1.5426
    -1.1107

b_regress = regress(Y_current,X)

    3.5586
    0.8805
    0.1670
    -0.3934
    -0.8526
Run Code Online (Sandbox Code Playgroud)

Lui*_*ndo 5

根据ridge文档:

在对x列进行居中和缩放后计算结果,以使它们的平均值为0,标准差为1。

这是一个使用列向量的示例:

>> x = randn(5,1);
>> y = randn(5,1);
>> ridge(y, x, 0)
ans =
  -0.045681220595243
>> regress(y, x)
ans =
  -0.028738686366027
>> regress(y, (x-mean(x))/std(x))
ans =
  -0.045681220595243
Run Code Online (Sandbox Code Playgroud)