Ответ 1
Вам нужно посмотреть autoencoders. Фактически вы передаете свои данные в нейронную сеть низкого уровня, она применяет анализ, подобный PCA, и впоследствии вы можете использовать его для генерации большего количества данных.
Matlab имеет autoencoder класс, а функция, которая сделает все это за вас. Из файлов справки matlab
Создайте учебные данные.
rng(0,'twister'); % For reproducibility
n = 1000;
r = linspace(-10,10,n)';
x = 1 + r*5e-2 + sin(r)./r + 0.2*randn(n,1);
Настройте автокодер, используя данные обучения.
hiddenSize = 25;
autoenc = trainAutoencoder(x',hiddenSize,...
'EncoderTransferFunction','satlin',...
'DecoderTransferFunction','purelin',...
'L2WeightRegularization',0.01,...
'SparsityRegularization',4,...
'SparsityProportion',0.10);
Сгенерировать тестовые данные.
n = 1000;
r = sort(-10 + 20*rand(n,1));
xtest = 1 + r*5e-2 + sin(r)./r + 0.4*randn(n,1);
Предсказание тестовых данных с помощью обученного автокодера, autoenc.
xReconstructed = predict(autoenc,xtest');
Поместите фактические данные теста и прогнозы.
figure;
plot(xtest,'r.');
hold on
plot(xReconstructed,'go');
Вы можете видеть зеленые циклы, которые представляют собой дополнительные данные, сгенерированные с помощью автокодера.