Как увеличить выборку для обработки нейронной сетью?
Классификация для нс.
Есть 1700 объектов, из них 130 объектов класса А, 1570 объектов класса Б. К каждому объекту дано 130 характеристик, путем отбора по мультиколлинеарности (тау Кендалла больше 0,7) и с помощью генетических алгоритмов к вероятностным сетям (statistica 6.1) было отобрано 50 значимых характеристик. Дальше в том же пакете хочу запустить mlp для классификации этих объектов, но подать я могу только 260 (по 130 каждого класса), потому что иначе нс просто априори будет относить все объекты к классу Б, однако читал, что количество параметров (весов?) в нс должно быть в 10 раз меньше, чем выборка. Очевидно, что если следовать этому правилу, то на скрытом слое будет пара нейронов, а этого, по идее, мало. Нужно как-то увеличить эти 130 штук класса А. Мысли идут в направлении размножения путем дополнения случайного шума по каждой характеристике, но это не точно. И ещё, возможно, стоит отобрать из характеристик только те, что с нормальным распределением, а потом уже шум добавлять или на основе эмпирических характеристик достроить как-то.
Языков программирования не знаю, подскажите, пожалуйста, программный продукт с реализованным увеличением выборки или иные способы решения данной проблемы, тоже, желательно, реализованные программно :)
Обычно делают иначе: создают все возможные признаки, которые могут придумать, потом расширяют датасет любыми возможными методами, а потом сэмплируют из него батчи таким образом, чтобы на протяжении одной эпохи обойти весь датасет и обходят его раз 100 или больше, посматривая на график функции потерь на валидации.
1) Датасет - данные (т.е. примеры для изучения?) расширяют не математически/программно?
2) Получается, одним из решений будет взять все 1700, но каждый раз менять обучающую выборку так, чтобы по валидационной всё было ок?
3) Как вы думаете, лучше не отсекать переменные мультиколлинеарностью без нужды? Типа информация для нс может потеряться
LionelCrowl,
1) да, и так и так, а еще просто пытаются больше данных набрать откуда только можно, чем больше данных, тем больше информации, сеть всё прожует и еще добавки попросит :)
2) да, взять все, из них сэмплировать по 32 штуки случайных 256 раз на эпоху, так прогнать 100 эпох (конкретные числа надо подбирать под задачу)
3) под ИНС пока не подведена теоретическая база, критерий истины - эксперимент.
Ну, во-первых, все-таки можно попробовать учить и на всём массиве доступных данных (пусть и перекошенном в сторону Б). Если хотите, можете тупо размножить класс А.
Второе - посмотрите в сторону других классификаторов. Например дерево (или лес) решений.
Если задача уже решена, то можете рассказать как решили?