使用Matlab进行广义交叉验证

时间:2013-11-10 20:52:08

标签: matlab

我想使用广义交叉验证来计算岭回归的最佳岭参数。

由Golub等人(1979)提出的公式是

GCV(k)=(1/n Sum_i=1^n e_i(k)^2)/(1/n Sum_i=1^n(1-h_ii(k)))^2

其中e_1(k)....e_n(k)是对给定k应用岭回归的残差。

H(K)=X(X'X+kI)^{-1}X'

其中X是设计矩阵。

h_ii(k)H(k)的数字元素。

我有脊回归公式,所以我可以很容易地计算分子。

但是我不确定如何计算分母?

我发现this set of tools有一个函数gcv(),但我无法理解它是如何计算G函数的?

事实上,在它的计算中似乎没有使用x? 这个功能是否符合我的要求?如果是这样,有人可以向我解释它是如何工作的吗?

2 个答案:

答案 0 :(得分:2)

对于某些问题,可以在不实际进行任何交叉验证的情况下计算广义交叉验证。对于普通(非正则化)普通最小二乘(OLS,对于搜索机器人),跟踪(H_ols),假设X' X实际上是可逆的,则= trace(新的(X' X)X') = trace(X' X * inv(X' X))= trace(I)= p这是OLS模型中的参数数量。对于任何相同大小的问题,这都是常数。

我不是Ridge Regression的专家,但也许gcv.m正在做类似的事情?毕竟 trace(H_ridge)= trace(X * inv(X。' * X + k * ones(size(X)))* X。')= trace(X' X * inv(X& #39; X + k * 1))

抱歉ASCII数学。

答案 1 :(得分:1)

(1/n Sum_i=1^n(1-h_ii(k)))^2=(sum(1-diag(H))/n)^2