2015-04-17 5 views
3

У меня есть набор данных с 150 строками, 45 функциями и 40 выходами. Я могу переполнить данные, но я не могу получить приемлемые результаты для моего набора перекрестных проверок.Как улучшить выход моей нейронной сети?

С 25 скрытыми слоями и довольно большим количеством итераций я смог получить точность ~ 94% на моем тренировочном наборе; положите улыбку на мое лицо. Но результат перекрестной проверки оказался менее 15%.

Итак, чтобы смягчить переобучение, я начал играть с параметром регуляризации (лямбда), а также количеством скрытых слоев. Лучший результат (CV), который я мог получить, составил 24% на тренировочном наборе и 34% на тренировочном наборе с лямбда = 1, 70 скрытых слоев и 14000 итераций. Увеличение количества инерций также ухудшило его; Я не могу понять, почему я не могу улучшить результаты CV с увеличенной лямбдой и итерами?

Вот это лямбда-hiddenLayer-ITER комбинации я пытался:

https://docs.google.com/spreadsheets/d/11ObRTg05lZENpjUj4Ei3CbHOh5mVzF7h9PKHq6Yn6T4/edit?usp=sharing

Любой предложенный способ (ы) пытается умнее regulationParameter-hiddenLayer-Iters комбинации? Или другие способы улучшения моего NN? Я использую мой MatLab код из класса ML Эндрю Нг (использует алгоритм обратного распространения.)

+1

Чтобы улучшить свой вопрос, вы можете добавить: 1. Тип NN, который вы используете (kohonen, backpropagation, новый SDR один, ...) 2. Если вы запрограммировали его самостоятельно или используете библиотеку или инструмент или без разницы. – BitTickler

+0

Он использует алгоритм обратного распространения; Я добавил это к моему вопросу. Благодаря! –

+1

Рассмотрите возможность перемещения этого вопроса в [Stats] (http://stats.stackexchange.com/help/on-topic), поскольку он не имеет ничего общего с программированием, по крайней мере, напрямую. –

ответ

5

Очень трудно узнать что-нибудь из 150 учебных примеров с 45 функциями (и если я правильно прочитаю ваш вопрос, 40 возможных классов выпуска). Вам нужны гораздо более яркие примеры обучения, если вы хотите изучить разумный классификатор - возможно, десятки или сотни тысяч, если у вас есть 40 возможных классов. Даже для двоичной классификации или регрессии вам, вероятно, понадобятся тысячи примеров того, что у вас есть 45 значимых функций.

+0

Это то, что я сделал после нескольких попыток. По крайней мере, для ANN размер набора тренировок жизненно важен. –

3

Некоторых предложения:

  • переобучение происходит в первую очередь, когда структура нейронной сети является слишком сложной для рассматриваемой проблемы. Если структура NN не слишком сложна, увеличение числа итераций не должно снижать точность прогнозирования

  • 70 скрытых слоев довольно много, вы можете попытаться резко уменьшить количество скрытых слоев (до 3-15) и увеличьте количество итераций. Из вашего файла видно, что 15 скрытых слоев отлично по сравнению с 70 скрытыми слоями

  • При уменьшении количества скрытых слоев вы можете варьировать количество нейронов в скрытых слоях (увеличение/уменьшение) и проверить, как результаты изменение

2

Я согласен с Логаном. То, что вы видите в своем наборе данных, имеет смысл. Если вы просто тренируете классификатор NN с 45 функциями для 40 классов, вы получите большую точность, потому что у вас больше возможностей, чем у выходных классов. Таким образом, модель может в принципе «назначить» каждую функцию одному из выходных разделов, но результирующая модель будет сильно перегружена и, вероятно, не будет представлять то, что вы моделируете. Ваши значительно более низкие результаты перекрестной проверки кажутся правильными.

Вы должны пересмотреть свой подход: почему у вас есть 40 классов? Может быть, вы можете изменить свою проблему в регрессивную проблему вместо проблемы классификации? Также попробуйте изучить некоторые другие алгоритмы, например, Random Forrest. Или значительно уменьшите количество функций.

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