我正在研究进行岭(正则化)回归时训练样本大小的影响。当我绘制测试误差与训练集大小的关系时,我得到了这个非常奇怪的图表:.
以下代码生成一个训练集和一个测试集,并对正则化参数的低值执行岭回归。
根据训练集的大小绘制误差及其标准差。
注意生成数据的维度是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 的事实有关。这可能是计算性的,因为随着训练集变大,测试误差当然应该减少......
如果你们中的任何人都可以了解正在发生的事情,我将不胜感激!