0

我正在研究进行岭(正则化)回归时训练样本大小的影响。当我绘制测试误差与训练集大小的关系时,我得到了这个非常奇怪的图表:阴谋.

以下代码生成一个训练集和一个测试集,并对正则化参数的低值执行岭回归。

根据训练集的大小绘制误差及其标准差。

注意生成数据的维度是10。

%settings
samplerange = 8:12;
maxiter = 100;
test = 300;
dimension = 10;
gamma = 10^-5;
rng(2);
figure(1);

error = zeros(maxiter,1);

for samples=samplerange
    for iter=1:maxiter

        % training data
        a = randn(dimension,1);
        xtrain = randn(samples,dimension);
        ytrain = xtrain*a + randn(samples,1);

        % test data
        xtest = randn(test,dimension);
        ytest = xtest*a + randn(test,1);

        % ridge regression
        afit = (xtrain'*xtrain+gamma*length(ytrain)*eye(dimension)) \ xtrain'*ytrain;
        % test error
        error(iter) = (ytest-xtest*afit)'*(ytest-xtest*afit) / length(ytest);
    end

    hold on;
    errorbar(samples, mean(error), std(error), '.');
    hold off;
end

mean(error)

我得到以下错误值:

   14.0982
   28.1679
  201.4467
   75.4921
   16.2038

和以下标准偏差:

   39.3148
  126.0627
  756.4289
  568.7223
   65.9008

为什么先涨后跌?该值是 100 次迭代的平均值,因此这不是偶然的。

我认为这与数据的维度为 10 的事实有关。这可能是计算性的,因为随着训练集变大,测试误差当然应该减少......

如果你们中的任何人都可以了解正在发生的事情,我将不胜感激!

4

1 回答 1

1

对于您的迭代过程,唯一改变的因素是您的样本范围(从 8 到 12),这不会对您的结果产生太大影响,因为它只是一个范围。

我认为导致错误率发生巨大变化的原因是这个过程: randn(samples,dimension); 您是否在每次使用时查看了此过程的输出?randn 是从正态分布生成的随机数,因此它可能会生成一些非常大的数字,可能会弄乱您的结果(考虑到您的范围非常小)。

您可以尝试修改随机过程的分布,看看会发生什么。

于 2015-01-05T12:36:26.303 回答