Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  159

•  TDictionary Custom Sort  3 336

•  Fast Watermark Sources  3 087

•  3D Designer  4 846

•  Sik Screen Capture  3 340

•  Patch Maker  3 552

•  Айболит (remote control)  3 657

•  ListBox Drag & Drop  3 014

•  Доска для игры Реверси  81 692

•  Графические эффекты  3 944

•  Рисование по маске  3 248

•  Перетаскивание изображений  2 628

•  Canvas Drawing  2 751

•  Рисование Луны  2 579

•  Поворот изображения  2 188

•  Рисование стержней  2 168

•  Paint on Shape  1 568

•  Генератор кроссвордов  2 235

•  Головоломка Paletto  1 767

•  Теорема Монжа об окружностях  2 229

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 057

•  Игра HIP  1 282

•  Игра Go (Го)  1 230

•  Симулятор лифта  1 475

•  Программа укладки плитки  1 216

•  Генератор лабиринта  1 548

•  Проверка числового ввода  1 365

•  HEX View  1 497

•  Физический маятник  1 358

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Математический аппарат нейросетевых алгоритмов



Автор: Сергей Миронов

Введение.

Невозможно дать совет на все случаи жизни. Одна и та же задача может решаться разными способами, в зависимости от требований, которые выдвигаются к результату. Различные методы могут выдавать решения, отличающиеся степенью точности, подходом к проблеме и, соответственно, типом результата. Таким образом, у аналитика появляется еще одна головная боль -- подобрать инструмент, наиболее точно подходящий под конкретную задачу. Причем, хорошее знание этих инструментов и математического аппарата, на котором они основаны, не всегда помогает сделать однозначный выбор. Да и нужно ли его делать? Зачастую применение нескольких методик дает наиболее точную и понятную картину. Кроме того, это позволяет подстраховаться от неверного результата работы одного алгоритма.

Представляем вашему вниманию решение тремя способами классической задачи классификации. Итак,

Ирисы Фишера

Постановка задачи.

Имеются данные измерений для 150 экземпляров ирисов, в равных частях (по 50 штук) принадлежащих к трем видам (iris setosa, iris versicolor, iris virginica). Для каждого экземпляра ириса известны 4 величины: длина чашелистика (Sepal Length), ширина чашелистика (Sepal Width), длина лепестка (Petal Length), ширина лепестка (Petal Width). Входной файл состоит из 150 строк (по 50 для каждого сорта). Вы можете взять его здесь.

Пятая переменная -- целевая, обозначает класс (вид) и для различных видов принимает следующие значения: 1 -- setosa, 2 -- versicolor, 3 -- virginica. Такой способ кодировки связан с предположением Фишера, что versicolor - это гибрид setosa и virginica. Наша задача -- подтвердить или опровергнуть это предположение.

Способ 1. Надежный.
Математический аппарат

Эта задача может быть решена способом, уже неоднократно проверенным нами на практике -- с применением нейронной сети обратного распространения. Мы не особенно усердствовали с подбором конфигурации сети, но, несмотря на это, она распознала 98% примеров, что является очень неплохой степенью точности для данного алгоритма, затратив на поиск решения всего лишь несколько минут. Невысокая ошибка распознавания примеров тем более приятна, что в некоторых случаях разница между versicolor и virginica минимальна.

Рис. 1. Мастер обучения программы Neural Network Wizard.

Теперь, вводя данные о новых экземплярах ирисов, мы можем относить их к одному из видов.

Для проведения этой работы мы задействовали Neural Network Wizard 2.0. Эта версия программы пока еще находится в стадии тестирования, но мы уверены, что последний релиз Neural Network Wizard под номером 1.7 справился бы ничуть не хуже.

Способ 2. Наглядный. Математический аппарат

Применение самоорганизующихся карт Кохонена дает интуитивно понятное решение, легко представимое, например, на экране монитора.

Рис. 2. Окно программы SOMap Analyzer.

По компоненте CLASS мы сразу же можем определить, сколько классов получилось и каким образом они расположены. Из рисунка становиться понятно, что versicolor действительно занимает промежуточную позицию. Компонента UMatrix, т.н. матрица расстояний, дает понять, что разрыв между setosa (синий) и versicolor (зеленый) более значителен, чем между virginica (красный) и versicolor (зеленый). Некоторая недвусмысленность на границе virginica и versicolor объясняется как раз очень небольшими различиями между этими видами в некоторых случаях.

Для этого типа анализа мы использовали программу SOMap Analyzer 1.0 beta.

Способ 3. Изящный.

Математический аппарат

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

Рис. 3. Дерево решений.

В данном случае мы получили четыре булевские конструкции, которые можно использовать в языках программирования высокого уровня. Деление на классы получилось четким и однозначным, хотя и здесь не обошлось без ошибок: четыре примера не были распознаны. Эту погрешность вполне можно простить, если учесть, что для построения данного дерева алгоритму понадобилось всего лишь несколько секунд (!).

Заключение.

Таким образом, мы доказали верность предположения Фишера и выработали критерии, по которым все ирисы могут быть отнесены к одному из трех видов. Эта задача, решенная нами несколькими аналитическими инструментами, очень хорошо демонстрирует важность применения нескольких методов одновременно. Такой подход позволит многократно уменьшить недостатки, присущие одному алгоритму, но при этом усилить достоинства. Конечно, в более сложных задачах, где приходиться оперировать огромными массивами данных, применение еще одного аналитического инструмента может показаться излишней роскошью, так как оно наверняка будет сопряжено с дополнительными затратами времени и машинных ресурсов. Тем не менее, "пустая" трата времени на тщательный анализ все же предпочтительней, чем, например, финансовые затраты, вызванные неверным расчетом аналитика. Кстати, в большинстве случаев подобные "неточности" являются результатом работы человека (благо подводных камней в вопросах анализа -- хоть отбавляй), а не ошибками самого алгоритма.

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








Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте