0

Я изучаю эффект от размера учебного образца при выполнении регрессии гребня (регуляризованной). Я получаю этот очень странный график, когда я рисую ошибку теста по сравнению с размером набора поезда: plot.Регрессия гребня: ошибка теста увеличивается вверх по мере увеличения учебного образца (от переопределенного до переопределенного)

Следующий код генерирует набор тренировок и набор тестов и выполняет регрессию гребня для низкого значения параметра регуляризации.

Ошибка и ее стандартное отклонение строятся относительно размера набора тренировок.

Обратите внимание, что размер генерируемых данных 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. Это может быть Вычислительной поскольку ошибка теста должна снижение курса, как обучающий набор становится все больше ...

Если какой-либо вы можете пролить свет на то, что происходит, я был бы благодарен!

+0

Ссылка на данный файл сделана. https://imgur.com/mgm8zMe Он представляет собой пробную ошибку (со стандартным отклонением) по сравнению с количеством образцов в наборе поездов. Почему дисперсия идет вверх и вниз? –

ответ

0

Для вашего итерационного процесса единственным фактором, который изменяется, является ваш выборка (от 8 до 12), это не должно сильно влиять на ваши результаты, поскольку это всего лишь диапазон.

Я думаю, что причиной огромного изменения частоты ошибок является этот процесс: randn (образцы, измерение); Вы просматривали результаты этого процесса за каждый раз, когда используете его? randn - случайное число, генерируемое из нормального распределения, поэтому оно может генерировать некоторые действительно большие числа, которые могут испортить ваши результаты (учитывая, что ваш диапазон довольно мал).

Вы можете попробовать изменить распределение случайного процесса, чтобы узнать, что произойдет.

+0

«он может генерировать некоторые действительно большие числа, которые могут испортить ваши результаты» Да, но результат усредняется более чем на 100 итераций, поэтому это не должно быть проблемой. Я пробовал 1000 итераций, и результат был таким же. И почему бы действительно большие числа были последовательно сформированы для образцов = 10? –

+0

hmmmmm ... Я потратил около 30 минут на каждый этап вашего кода, это действительно странно, что это должно произойти. Кажется, что afit очень большой для samplerange 10, но я не могу понять, почему он делает это для 10 исключительно ... – GameOfThrows

+0

Я почти уверен, что это связано с измерением (которое также равно 10). Когда вы меняете размер, ошибка в тестовой ошибке перемещается вдоль ... Возможно, mldivide (\) ведет себя по-другому в этом случае? Спасибо за ваше время! –

Смежные вопросы