Вопрос или проблема
Может кто-то объяснить, почему линия Fit
не соответствует истинной метке? Я не понимаю, что именно происходит и где у меня проблема в модели.
Вот мой код:
input=heat_y_noisy'; %входные данные 20000x100
input_normalized=input;
output=alphas_optimal; %выход 20000x1
Xtrain=input(1:18000,:);
Ytrain=output(1:18000,1);
Xtest=input(18000:20000,:);
Ytest=output(18001:20000,1);
net = feedforwardnet([30 20 5] , 'traingd');
net.trainParam.epochs=30;
net.layers{end}.transferFcn='logsig';
net = train(net, Xtrain', Ytrain')
%%
ypred=net(Xtest');
label_predicted=ypred(1,1:5)
true_label=Ytest(1:5,1)'
И почему выход остается одинаковым для всех входов?
label_predicted =
0.0360 0.0347 0.0349 0.0358 0.0373
true_label =
0.0279 0.0265 0.0182 0.0176 0.0148
Спасибо за помощь!
Ваша модель имеет высокое смещение. Это означает высокую ошибку на обучающих данных, недообучение. Вам нужно увеличить сложность модели. Вы можете достичь этого, увеличив количество узлов в скрытом слое и общее количество слоев.
Ответ или решение
Конечно! Давайте разберёмся с вашей проблемой и постараемся выяснить, почему линия предсказания не совпадает с истинными метками, а также почему выходные значения остаются почти одинаковыми для всех входных данных.
Проблема с высокими смещениями (bias)
Исходя из предоставленной информации и результатов:
label_predicted =
0.0360 0.0347 0.0349 0.0358 0.0373
true_label =
0.0279 0.0265 0.0182 0.0176 0.0148
Мы можем наблюдать, что предсказанные значения действительно имеют низкую изменчивость и близки между собой. Это указывает на то, что ваша модель, вероятно, находится в состоянии высокого смещения и недостаточно сложна, чтобы правильно аппроксимировать данные.
Причины проблемы
-
Сложность модели: Использование трёх скрытых уровней с 30, 20 и 5 нейронами может быть недостаточно для решения вашей задачи, особенно если данные имеют сложные зависимости. Вы можете попробовать:
- Увеличить количество скрытых единиц в каждом слое.
- Добавить дополнительные скрытые слои.
-
Функция активации: Ваша модель использует
logsig
(логистическая функция), которая может привести к проблемам с обучением, так как может обрезать значения в диапазоне 0-1. Вы можете рассмотреть применение других функций активации, таких какtansig
илиrelu
, которые могут лучше справляться с различной динамикой ваших данных. -
Количество эпох: Возможно, 30 эпох для обучения недостаточно. Попробуйте увеличить это число, чтобы дать модели больше времени для обучения.
-
Нормализация данных: Убедитесь, что ваши входные и выходные данные корректно нормализованы. Нормализация поможет избежать проблем, связанных с различными масштабами входов.
Рекомендации
- Увеличьте количество нейронов в скрытых слоях. Например, вы можете начать с
[50, 30, 10]
. - Рассмотрите возможность использования других функций активации.
- Увеличьте количество эпох до 100 или более и посмотрите, изменится ли производительность.
- Проверьте, как вы нормализуете свои данные. Если они сильно различаются по диапазону, это может быть причиной проблем с обучением.
Визуализация
Для лучшего понимания, вы можете визуализировать, как ваша модель учится, выведя графики:
% Визуализация предсказаний и истинных значений
figure;
hold on;
plot(Ytest, 'b'); % истинные значения
plot(ypred, 'r--'); % предсказанные значения
xlabel('Индексы');
ylabel('Значения');
legend('Истинные метки', 'Предсказанные метки');
title('Сравнение истинных и предсказанных значений');
hold off;
Эта визуализация поможет вам увидеть, насколько хорошо ваша модель согласуется с истинными метками и обратите внимание на отклонения.
Заключение
Ключевым моментом является увеличение сложности вашей модели, использование правильных функций активации и создание условий для достаточного объема обучающих эпох. Попробуйте эти рекомендации, и, скорее всего, вы увидите улучшение в производительности модели. Удачи!