【问题标题】:Generalized Cross Validation using Matlab使用 Matlab 进行广义交叉验证
【发布时间】:2013-11-22 14:05:32
【问题描述】:

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

由于 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 吗? 这个功能是我想要的吗?如果是这样,有人可以向我解释它是如何工作的吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

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

    我不是岭回归方面的专家,但也许 gcv.m 正在做类似的事情?毕竟 轨迹(H_ridge) = 轨迹(X*inv(X.'*X+k*ones(大小(X)))*X.') = 轨迹(X'X * inv(X'X + k*ones))

    对不起,ASCII 数学。

    【讨论】:

      【解决方案2】:
      (1/n Sum_i=1^n(1-h_ii(k)))^2=(sum(1-diag(H))/n)^2
      

      【讨论】:

      • 对不起,我应该说得更清楚,但我不知道如何计算 H。
      • 如果k 被视为常量,请尝试H=X*inv(X.'*X+k*ones(size(X)))*X.'
      • 嗨大卫,我认为 Matlab 中的 inv() 不好,请参见此处:stackoverflow.com/questions/6509298/… 如果可能的话,我认为最好使用基于反斜杠的解决方案(对不起,我应该有这个模式也清楚)!!
      • 这就是问题所在,尽管我不知道如何将其表述为 \ 类型的解决方案。在纯岭回归中,您可以在 X=X^* 的对角线上附加一个带有 sqrt(k) 的对角矩阵,这样 XX'= (XX+Ik)^{-1} 和与 Y 对应的一组零。然后您可以照常使用 ldivide。但是这里 X* 和 X 的大小不同,所以使用 ldivide 似乎并不简单?
      • 如果X是m乘n,那么X'是n乘m,X'*X是n乘n,X*X'是m乘m,所以它们是正方形的。您提供的链接显示了如何使用反斜杠来获得反斜杠,只需使用 invA = A\eye(size(A));
      猜你喜欢
      • 1970-01-01
      • 2015-06-11
      • 2020-07-13
      • 2019-09-06
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      相关资源
      最近更新 更多