Методы увеличения данных для общих наборов данных?

Я работаю над проблемой машинного обучения и хочу построить на ней классификаторы на основе нейронной сети в Matlab. Одна из проблем заключается в том, что данные даются в виде признаков, а количество выборок значительно ниже. Я знаю о методах увеличения данных для изображений, путем поворота, перевода, аффинного перевода и т.д.

Я хотел бы знать, есть ли методы расширенного доступа к данным для общих наборов данных? Как можно использовать случайность для генерации большего количества данных? Я прочитал ответ здесь, но я этого не понял.

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

Любая помощь будет оценена.

Ответ 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');

Результаты расчета

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