Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции ИС / системы поиска знаний (KDD).doc
Скачиваний:
52
Добавлен:
26.05.2015
Размер:
420.35 Кб
Скачать

4.10. Эволюционное программирование

Эволюционное программирование - на сегодня это самая молодая, интересная и наиболее перспективная ветвь data mining. Суть метода заключается в том, что гипотезы о виде зависимости целевой переменной от других переменных формулируются системой в виде программ на некотором внутреннем языке программирования. Если это универсальный язык, то в принципе на нем можно выразить любую четко определенную зависимость.

Все рассмотренные до этого методы отличались одной присущей им всем слабой стороной - а именно, выразительной слабостью используемого ими языка представления обнаруживаемых знаний и, как следствие, узостью класса зависимостей, которые в принципе могут быть этими методами обнаружены. Например, алгоритмы деревьев решений могут получать только классификационные правила в виде формул исчисления высказываний, включающих элементарные операторы отношений ( > , < , =). Линейная регрессия может находить зависимости только в виде линейных формул. И так практически каждый метод KDD привязан к некоторому узкому языку представления знаний. Это существенное ограничение, и единственный кардинальный способ его преодолеть - это попробовать искать законы и правила не в виде формул некоторого фиксированного декларативного формализма, а в виде алгоритмов и программ, выражающих способ вычисления значение целевой переменной, исходя из значений независимых переменных.

Если система будет выражать получаемые знания на универсальном алгоритмическом языке, теоретически она сможет находить абсолютно любые детерминистические типы зависимостей, правил и т.п. Естественно за выразительную мощь такого подхода приходится платить: необходимо организовать поиск в очень большом, в принципе - бесконечном, множестве программ. Очевидно, эта проблема не может быть решена путем простого перебора, поскольку пространство поиска, число возможных программ возрастает в зависимости от сложности программ чудовищно быстро, быстрее чем экспонента. Без эффективной стратегии поиска, эффективной навигации в пространстве программ, данный метод был бы абсолютно бессмысленным с практической точки зрения. Хотелось бы найти такой алгоритм поиска, время поиска которого умерено зависело сложности искомой программы, возрастало бы не быстрее чем по степенному закону.

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

Понятно, что поскольку пространство поиска чрезвычайно широко и внутренний язык поиска также может очень сильно различаться, число принципиально возможных реализаций эволюционного метода также практически неограниченно. Вместе с тем, ввиду сложности и ресурсоемкости метода, только одна из существующих коммерческих систем KDD, а именно программа PolyAnalyst фирмы "Мегапьютер Интеллидженс", предоставляет возможность использовать этот метод для анализа данных. В то же время популярность этого метода непрерывно растет, практически все ведущие научные форумы в области data mining и knowledge discovery in databases включают в программу работы секции по эволюционному программированию.

За возможность обнаружить и формализовать разнообразные многомерные нелинейные зависимости, естественно, приходится платить очень большим объемом производимых вычислений. Эти программы строят сложные формулы, выражающие зависимости в данных, комбинируя более простые формулы, и в конечном итоге находят достаточно точную формулу, выражающую искомое отношение. В качестве примера подобного рода систем мы можем упомянуть FAHRENHEIT (Zytkow and Zhu, 1991), ARE (Shen, 1990), 49er (Zembowicz and Zytkow, 1992). Вероятно одно из самых крайних положений в этом ряду в настоящее время занимает система интеллектуального анализа данных PolyAnalyst (Киселев 1994; Киселев и Арсеньев 1996; Киселев и др., 1997). Ниже мы рассмотрим эволюционное программирование и его возможности на ее примере систем 49er и PolyAnalyst.