
- •Глава 1
- •Глава 2 первые шаги Начинаем работу с пакетом
- •Создание набора данных
- •Создание новой сети
- •Сохранение набора данных и сети
- •Обучение сети
- •Запуск нейронной сети
- •Проведение классификации
- •Заключение
- •Глава 3 дальнейшие возможности
- •Ирисы Фишера
- •Обучение с кросс-проверкой
- •Условия остановки
- •Восстановление наилучшей сети
- •Решение задач регрессии
- •Радиальные базисные функции
- •Линейные модели
- •Сети Кохонена
- •Вероятностные (pnn) и обобщенно-регрессионные (grnn) сети
- •Автоматический конструктор сети
- •Генетический алгоритм отбора входных данных
- •Временные ряды
- •Глава 4 практические советы по решению задач
- •Представление данных
- •Выделение полезных входных переменных
- •Понижение размерности
- •Выбор архитектуры сети
- •Пользовательские архитектуры сетей
- •Временные ряды
- •Глава 5 краткое руководство
- •Обучение сетей
- •Работа с сетью
- •Пересылка результатов в систему statistica
- •Список литературы
Генетический алгоритм отбора входных данных
Обсуждение
Один из самых трудных вопросов, который приходится решать разработчику нейросетевых приложений, - это вопрос о том, какие данные взять в качестве входных для нейронной сети. Этот вопрос сложен в силу сразу нескольких причин.
• Чаще всего при применении нейронных сетей в реальных задачах заранее не бывает точно известно, как прогнозируемый показатель связан с имеющимися данными. Поэтому собирают больше разнообразных данных, среди которых предположительно есть и важные, и такие, чья ценность неизвестна или сомнительна.
• В задачах нелинейной природы среди параметров могут быть взаимозависимые и избыточные. Например, может случиться так, что каждый из двух параметров сам по себе ничего не значит, но оба они вместе несут чрезвычайно полезную информацию; это же может относиться к совокупности из нескольких параметров. Сказанное означает, что попытки ранжировать параметры по степени важности могут быть неправильными в принципе.
• Из-за «проклятия размерности» иногда лучше просто убрать некоторые переменные, в том числе и несущие значимую информацию, чтобы хоть как-то уменьшить число входных переменных, а значит и сложность задачи, и размеры сети. Вопреки здравому смыслу, такой прием иногда действительно улучшает способность сети к обобщению (Bishop. 1995).
Единственный способ получить полную гарантию того, что входные данные выбраны наилучшим образом, состоит в том, чтобы перепробовать все возможные варианты входных наборов данных и архитектур сетей и выбрать из них наилучший. На практике это сделать невозможно из-за огромного количества вариантов.
Можно попытаться поэкспериментировать в среде пакета ST Neural Networks - последовательно строить сети с различными наборами входных переменных, чтобы постепенно составить себе картину того, какие же входные переменные действительно нужны. Можно воспользоваться методом регуляризации весов по Вигенду (Weigend Weight Regularization) и в окне Редактор сети - Network Editor посмотреть, у каких входных переменных выходящие веса сделаны нулевыми (это говорит о том, что данная переменная игнорируется).
Самое действенное средство решения данного вопроса в пакете ST Neural Networks -- это Генетический алгоритм отбора входных данных - Genetic Algorithm Input Selection. Этот алгоритм выполняет большое число экспериментов с различными комбинациями входных данных, строит для каждой из них вероятностную либо обобщенно-регрессионную сеть, оценивает ее результаты и использует их в дальнейшем поиске наилучшего варианта.
Генетические алгоритмы являются очень эффективным инструментом поиска в комбинаторных задачах как раз такого типа (где требуется принимать ряд взаимосвязанных решений «да/нет»). Этот метод требует большого времени счета (обычно приходится строить и проверять многие тысячи сетей), однако реализованная в пакете ST Neural Networks его комбинация с быстро обучающимися сетями типа PNN/GRNN позволяет ускорить его работу настолько, насколько это вообще возможно.
Выполнение алгоритма
Прогонять этот алгоритм мы будем на модифицированном варианте усеченного набора данных про ирисы, в который мы добавим новые входные переменные, не несущие никакой информации.
Начнем с того, что загрузим файл данных про ирисы и изменим его так, чтобы в нем было 20 обучающих и 20 контрольных образцов, а за пропорциональным представительством видов следить не будем. Сделаем так, чтобы обучающие и контрольные наблюдения выбирались случайным образом.
Переместите указатель мыши на линию, разделяющую заголовки столбцов переменных SLENGTH и SWIDTH. Указатель превратится в двустороннюю стрелку. Щелкните мышью - при этом появится голубая полоса вставки, затем нажмите три раза клавишу ENTER - в файл будут добавлены три новые переменные. Так как они очевидным образом не несут в себе никакой информации, следует ожидать, что Генетический алгоритм отбора входных данных - GA Input Selection удалит их.
О
ткроем
диалоговое окно Генетический
отбор входов - Genetic
Input
Selection
с
помощью команды Генетический
отбор входов - GA
Input
Selection...
меню
Обучение-Дополнительно
- Train-Auxiliary.
Это окно содержит много управляющих параметров. Среди них - Популяция - Population и Поколения - Generations, Скорость мутаций - Mutation Rate и Скорость скрещивания - Crossover Rate. Если вы не знакомы с генетическими алгоритмами, то не стоит менять два последних параметра (рекомендуется взять значения по умолчанию). Параметры Популяция - Population и Поколения - Generations определяют, как много усилий алгоритм затрачивает на поиск.
Схема работы генетического алгоритма такова. Берется случайный набор, популяция, битовых строк (в нашем случае отдельный бит, соответствующий каждому входу, показывает, учитывать или нет соответствующую входную переменную) и оценивается степень их пригодности (т.е. качество получаемых решений). Затем плохие строки исключаются из рассмотрения, а из оставшихся порождаются новые строки с помощью искусственных генетических операций мутации и скрещивания. Таким образом, возникает новая популяция, и весь процесс повторяется, порождая все новые поколения, а в конце его отбирается наилучший экземпляр. Параметр Популяция - Population задает объем популяции индивидуумов, а параметр Поколения - Generations определяет, сколько раз будет повторен цикл отбора-порождения-оценки. Произведение этих двух чисел равно общему числу операций оценивания, которые алгоритм должен будет выполнить, и каждое оценивание включает построение PNN или GRNN сети и ее тестирование на контрольном множестве.
При построении PNN или GRNN сети необходимо выбрать коэффициент сглаживания (Smoothing). В общем случае следует самостоятельно провести ряд экспериментов со всей совокупностью входных переменных, строя PNN или GRNN сети с различными коэффициентами сглаживания, и выбрать подходящее значение. К счастью, сети PNN и GRNN не слишком чувствительны к точному выбору коэффициента сглаживания, и в нашем случае вполне подойдет значение по умолчанию.
Как уже говорилось, иногда бывает полезно уменьшить число входов даже ценой некоторой потери точности, поскольку это улучшает способности сети к обобщению и уменьшает размер сети и время счета. Можно создать дополнительный стимул к исключению лишних переменных, назначив штраф за элемент (Unit Penalty). Это число будет умножаться на количество элементов, и результат будет прибавляться к уровню ошибки при оценке качества сети. Таким образом, будут штрафоваться большие по размеру сети. Обычно значения этого параметра (если он используется) берутся в интервале 0,01-0,001. В нашей задаче дополнительные переменные не несут никакой информации и действительно будут ухудшать качество сети, поэтому нет необходимости специально задавать еще и штраф за элемент.
Нажмите кнопку Запуск - Run. При выполнении генетического алгоритма с параметрами по умолчанию он проделает 10000 оцениваний (популяция объемом 100 и 100 поколений). Однако в нашей задаче имеется всего семь кандидатов во входные переменные (четыре настоящих и три добавленные), поэтому число всевозможных комбинаций равно всего 128 (два в седьмой степени). Программа ST Neural Networks сама обнаружит это обстоятельство и вместо описанных действий выполнит оценивание полным перебором вариантов (соответствующая информация будет выдана в строке сообщений).
По окончании работы алгоритма откроется окно с таблицей, в которой будет указано, какие переменные были признаны полезными, а какие нет (соответственно Да - Yes или Нет - No). Переменные, которые не рассматривались как кандидаты во входной набор (в данной задаче - выходная переменная) будут помечены как неучитываемые. Если вы все сделали правильно, алгоритм отберет настоящие переменные задачи и отбросит вновь добавленные.
Нажмите кнопку Применить - Apply. Программа ST Neural Networks применит найденный шаблон к исходным данным, и у тех переменных, которые были отвергнуты алгоритмом, изменит тип на Неучитываемая -Ignore.
Теперь сделаем параметр Штраф за элемент - Unit Penalty равным 0,01 и снова нажмем кнопку Запуск - Run. На этот раз мы побуждаем алгоритм уменьшать число входов, даже ценой некоторого увеличения ошибки. Конкретный результат будет зависеть от того, какие наблюдения были взяты в обучающее и контрольное множества. Скорее всего, однако, окажется, что переменные PLENGTH и PW1DTH будут отобраны, а переменные SLENGTH и SWIDTH - отвергнуты. Экспериментируя с различными значениями штрафа за элемент, вы сможете приблизительно упорядочить входные переменные по степени важности.