在Matlab中为内核估计器实现一次性交叉验证最佳带宽

时间:2015-05-13 05:41:02

标签: matlab cross-validation

我正在尝试解决一个练习,我需要计算本地常量内核估算器并使用留一交叉验证来提供带宽。 我的想法是我需要在Matlab中实现这一点,而不是使用一些内置函数(我还没有找到)。步骤是这样的:

  1. 首先,我需要计算留一出的估算器。
  2. 然后第二步是计算残差。
  3. 最后选择最小化残差平方和的h。
  4. 见方程图:

    equation

    我在Matlab中实现这一点的方法是首先编写一个函数,计算单个h的步骤2,然后使用fminsearch函数找到最小值。

    我的问题是我在写这个交叉验证功能时遇到困难。特别是 - 对i以外的所有值进行循环和求和会给我带来麻烦。

    这是我非常不完整的函数代码:

    function SSresiduals = CV(h, N, data, grid, y)
    %sum(ghat_{i,-i} - y_i)^2
    h_mone = zeros(N,1);
    for i = 1:N
        for j = 1:N
            if j~=i
                u=(grid(:,i)-data(:,j))/h;
                k= ((1/sqrt(2*pi))).*exp(-u.^2/2);
                h_mone = h_mone + k;
            end 
        end
    end
    

    其中N是等于205的标量。数据和网格是801x205的矩阵,y是205x1的向量。 这是不完整的,因为我被困在我需要循环数值的部分,并以某种方式总结它们,但结果的维度对我来说似乎不对。 我真的很感激有关这方面的任何见解。谢谢!

0 个答案:

没有答案