【问题标题】:ridge regression: test error goes up then down as the training sample increases (from underdetermined to overdetermined)岭回归:随着训练样本的增加,测试误差先升后降(从欠定到超定)
【发布时间】:2015-03-02 23:01:12
【问题描述】:

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

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

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

注意生成数据的维度是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 的事实有关。这可能是计算性的,因为随着训练集变大,测试误差当然应该减少......

如果你们中的任何人能阐明正在发生的事情,我将不胜感激!

【问题讨论】:

  • 这里是生成的情节的链接。 imgur.com/mgm8zMe 它表示测试误差(带标准偏差)与训练集中的样本数。为什么方差会上下波动?

标签: matlab statistics regression linear-regression regularized


【解决方案1】:

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

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

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

【讨论】:

  • '它可能会产生一些非常大的数字,可能会弄乱你的结果' 是的,但结果是 100 次迭代的平均值,所以这应该不是问题。我尝试了 1000 次迭代,结果是一样的。为什么会持续为 samples=10 生成非常大的数字?
  • hmmmmm...我花了大约 30 分钟测试您的代码的每个阶段,这真的很奇怪。对于 samplerange 10,afit 似乎非常大,但我无法弄清楚为什么它只对 10 这样做......
  • 我几乎可以肯定这与维度(也是 10)有关。当您更改尺寸时,测试错误中的凸起会移动......也许 mldivide () 在这种情况下表现不同?感谢您的宝贵时间!
猜你喜欢
  • 2021-05-28
  • 2018-05-22
  • 2018-09-29
  • 2017-11-02
  • 2021-05-13
  • 2016-11-09
  • 2020-09-09
  • 2018-09-12
  • 1970-01-01
相关资源
最近更新 更多