Московский государственный университет путей сообщения
Опубликован: 06.09.2012 | Доступ: свободный | Студентов: 1254 / 182 | Оценка: 5.00 / 5.00 | Длительность: 35:22:00
Специальности: Разработчик аппаратуры
Лекция 31:

Жадные алгоритмы поиска масок

< Лекция 30 || Лекция 31: 12 || Лекция 32 >
Аннотация: В лекции описан жадный алгоритм поиска единой маски ДИ, основанный на построении дерева решений. Его работа проиллюстрирована на конкретном примере. Приведены оценки объема получаемой по описанному алгоритму маски и вычислительная сложность алгоритма.

Алгоритмы поиска маски ориентированы на решение задач сокращения ДИ. Вместе с тем эти алгоритмы могут быть использованы и для решения других задач. В качестве примера приведем задачи классификации объектов, часто встречающиеся в практических приложениях. В подобного рода задачах каждый объект из заданного множества характеризуется некоторой совокупностью признаков, имеющих конкретные числовые (и/или иного типа) значения. Поскольку упомянутая совокупность признаков может иметь большую мощность, то для идентификации предъявленного объекта, характеризуемого конкретным набором значений признаков, потребуется хранить большой объем информации. В этой ситуации проблема сокращения исходной информации эквивалентна проблеме сокращения диагностической информации. Проводя аналогию между задачей классификации объектов по совокупности значений их признаков и задачей сокращения диагностической информации, можно сказать, что упомянутая совокупность признаков в первой задаче идентична ТФН для конкретной неисправности во второй, а полная информация об объектах 1-ой задачи идентична полной ТФН во 2-ой задаче.

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

Одним из популярных подходов к решению проблемы сокращения исходной информации является использование механизма деревьев решений.

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

Таким образом, имея построенное дерево решений, отпадает необходимость в хранении всей совокупности признаков: можно хранить информацию только о тех атрибутах, которые упоминаются в узлах дерева решений.

Для построении деревьев решений часто используется алгоритм C4.5, предложенный в [1]. Напомним основные моменты этого алгоритма.

Пусть задано множество объектов обучающей выборки , где каждый объект описывается множеством атрибутов X. Пусть объекты обучающей выборки являются элементами классов из множества C.

Построение дерева происходит сверху вниз. Сначала создается корень дерева, затем потомки корня и т. д. Каждому узлу дерева ставится в соответствие некоторое подмножество множества P. Корню дерева ставится в соответствие само множество P.

Процесс построения дерева заключается в следующем. Первоначально построим дерево, состоящее только из корня. Следующие шаги необходимо выполнить для каждого листа уже построенного дерева, которому соответствует множество объектов более чем одного класса.

Пусть данному узлу дерева соответствует множество объектов P' P классов из C'=\{c_{i_1},\ldots,c_{i_n}\}, а freq(c_j,P') - количество элементов из множества P', принадлежащих классу c_j. Тогда величина


I(P')=-\sum\limits_{j=1}^{n}{\cfrac{freq(c_{i_j},P')}{|P'|}}
\cdot\log_2{\left(\cfrac{freq(c_{i_j},P')}{|P'|}\right)},
	( 31.1)

где |P'| - количество элементов в множестве P', дает оценку среднего количества информации, необходимой для идентификации объекта из множества P'.

Если произвести разбиение множества P' в зависимости от значений атрибута x\in X на z_x подмножеств, то ту же оценку, но уже после разбиения, дает выражение

I_x(P')=\sum\limits_{j=1}^{z_x}{\cfrac{|P'_j|}{|P'|}}\cdot I(P'_j)
 ( 31.2)

В принятых обозначениях алгоритм C4.5 состоит из следующих шагов:

  1. Необходимо выбрать такой атрибут x\in X, который доставляет максимум величине
    G(x,P')=I(P')-I_x(P') ( 31.3)
  2. Для данного узла дерева создать z_x потомков.
  3. Каждому потомку данного узла поставить в соответствие подмножество объектов из множества P', имеющих одно и то же значение атрибута x, а дугу от узла к потомку пометить соответствующим значением.

Процесс построения дерева заканчивается, когда всем листьям дерева будут соответствовать множества объектов одного класса.

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

С учетом обозначений, введенных ранее, множество технических состояний S выступает в роли множества P для алгоритма C4.5. Это же самое множество S представляет набор классов C, т. е. в нашем случае каждый класс представлен лишь одним объектом в обучающей выборке. СПР представляет исходные данные для построения дерева решений: каждая точка проверки ДУ выполняет роль атрибута объектов, а каждая строка СПР описывает значения этих атрибутов.

Поскольку каждый класс представлен лишь одним объектом в обучающей выборке, то формула (31.1) примет следующий вид:

I(P')=\log_2{|P'|}. ( 31.4)

В связи с тем, что возможных значений атрибутов всего два (0 или 1), получаемое дерево решений является бинарным, где в каждом конкретном узле множество P' разделяется на два подмножества P'_0 и P'_1 в соответствии со значениями атрибута , доставляющего максимум величине


G(x,P')=\log_2{| P'|}-\cfrac{ |P'_0|}{| P'|}\cdot\log_2{| P'_0|}-
\cfrac{ |P'_1|}{| P'|}\cdot\log_2{| P'_1|}
( 31.5)

Формула (31.5) получена из (31.3) с учетом (31.4). Очевидно, что G(x,P') в (31.5) будет иметь максимум в том случае, если множество P' делится по значениям атрибута x на два подмножества с равным числом элементов.

Так как количество листьев в результирующем дереве равно (N+1), а само дерево является бинарным, можно сделать вывод, что количество внутренних узлов дерева, т. е. узлов, в которых производится проверка значений атрибутов, не превышает величины N. При наилучшем исходе алгоритм C4.5 строит идеально сбалансированное дерево, в котором на любом пути от корня до листа проверяются значения одного и того же набора атрибутов, в котором \lceil \log_2{(N+1)}\rceil элементов. Эти крайние значения как раз и соответствуют объему оптимальной маски. Таким образом, с помощью алгоритма C4.5 можно получить маску, по объему близкую к оптимальной.

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

Следующий алгоритм [3], базирующийся на идеях алгоритма C4.5, направлен на нахождение упомянутого единого множества атрибутов.

Отличие предлагаемого алгоритма от алгоритма C4.5 состоит в том, что построение дерева производится по уровням, с выбором одного атрибута для проверки во всех узлах уровня. На начальном уровне присутствует только один узел - корень дерева. На каждом последующем шаге рассматривается очередной уровень дерева и генерируется уровень его потомков. Для получения нового уровня выбирается атрибут , который доставляет максимум величине


G'(x,\tilde{P})=I'(\tilde{P})-I'_x(\tilde{P}), ( 31.6)

где \tilde{P} - совокупность множеств объектов, соответствующих узлам текущего уровня, а величины I'(\tilde{P}) и I'_x(\tilde{P}) равны соответственно


I'(\tilde{P})=\sum\limits_{P'\in P}\cfrac{|P'|}{|\tilde{P}|}I(P') ( 31.7)

и


I'_x(\tilde{P})=\sum\limits_{P'\in P}\cfrac{|P'|}{|\tilde{P}|}I_x(P'). ( 31.8)

Так же как и в алгоритме C4.5, процесс построения дерева заканчивается, если на очередном уровне каждому узлу дерева будет соответствовать множество объектов одного класса.

Содержательный смысл такого построения состоит в следующем: на каждом уровне дерева выбирается атрибут, проверка которого максимально уменьшает среднее количество информации, необходимой для идентификации любого объекта из множества P.

Переформулируем последний алгоритм применительно к задаче поиска маски. В этом случае стоит учесть, что роль атрибутов выполняют точки проверки ЦУ. Также обратим внимание на то, что после вычисления множеств, соответствующих вершинам очередного уровня дерева, необходимость в хранении информации о предшествующих уровнях отпадает. Совокупность множеств, соответствующих вершинам очередного уровня дерева, представляет разбиение исходного множества классов - в нашем случае множества S. Т. е. в ходе очередной итерации алгоритма достаточно по разбиению множества S, соответствующего предыдущему уровню дерева, построить разбиение, соответствующее очередному уровню.

Разбиение множества технических состояний S производится в соответствии со значениями в точках проверки. Каждая точка проверки разбивает множество технических состояний S на два блока (подмножества) следующим образом: технические состояния, для которых значение в данной точке проверки равно единице, помещаются в первый блок, а неисправности, для которых значение равно нулю - во второй. Можно производить дальнейшее разбиение каждого из полученных блоков в соответствии со значениями в других точках проверки. Если СПР обладает свойством различения всех технических состояний, то, производя последовательно разбиение множества S с помощью всех точек проверки, получим в результате одноэлементные блоки.

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

Итак, исходя из изложенного, сформулируем формальное описание алгоритма.

Алгоритм 1 ( Жадный алгоритм поиска единой маски ДИ ).

Вход: Словарь полной реакции; S - множество технических состояний; M - максимальный объем маски результата (по умолчанию M=|S|-1).

Выход: h - маска ДИ.

  1. Положить k=0, \tilde{S}_0=\{S\}, J_0=I'(\tilde{S}_0)=\log_2|S|.
  2. Положить h=\varnothing.
  3. Найти точку проверки i:j, доставляющую максимум величине
    J_k-I'_{i:j}(\tilde{S}_k). ( 31.9)
  4. Положить J_{k+1}=I'_{i:j}(\tilde{S}_k).
  5. Если J_{k+1}=J_k, выдать h и закончить алгоритм. В противном случае перейти к шагу 6.
  6. Произвести разбиение блоков из \tilde{S}_k в соответствии со значениями точки проверки i:j в СПР. Результат разбиения записать в \tilde{S}_{k+1}.
  7. Включить точку проверки i:j в маску h, положить k=k+1.
  8. Если k=M, то выдать h и закончить алгоритм. Иначе перейти к шагу 3.

Замечение 1. Ограничение объема возвращаемой маски в алгоритме 1 по умолчанию числом (|S|-1) носит условный характер, так как при отказе от этого ограничения объем любой маски, полученной с помощью этого алгоритма, не превысит величины (|S|-1).

Действительно, при добавлении в алгоритме очередной точки проверки в маску h происходит дополнительное разбиение блоков в \tilde{S}_k. Из того, что S_0=\{S\} следует, что провести разбиение блока из \tilde{S}_0 на одноэлементные блоки можно максимум за |S|-1 итераций.

Рассмотрим работу полученного алгоритма на примере схемы C17 (рис. 27.1). Найдем единую маску для СПР, представленного в табл. 27.5. После первых двух шагов алгоритма имеем: \tilde{S}_0=\{\{ s_0,s_1,s_2,s_3,s_4,s_5,s_6,s_7,s_8\}\}, J_0=3.16993, Р=\varnothing. На третьем шаге алгоритма получаем следующие результаты:


I'_{1:1}= I'_{1:2}= I'_{3:1}=2.17885,\\
I'_{2:1}=2.40572,\\
I'_{2:2}= I'_{4:1}=2.66667,\\
I'_{3:2}=2.25163,\\
I'_{4:2}=3.16993.

Следовательно величина (6.9) достигает своего максимума при использовании точек проверки 1:1, 1:2 и 3:1. Выполним шаги Ошибка! Источник ссылки не найден.-Ошибка! Источник ссылки не найден. алгоритма, предполагая, что на третьем шаге выбрана точка проверки 1:1. После первой итерации алгоритма получим


\tilde{S}_0=\{\{ s_0,s_1, s_7,s_8\},\{s_2,s_3,s_4,s_5,s_6\}\}, \\
J_1=2.17885,\\
h=\{1:1\}.

На третьем шаге следующей итерации алгоритма получаем:


I'_{1:2}=1.19499,\\ 
I'_{2:1}=1.73440,\\
I'_{2:2}=1.81828,\\
I'_{3:1}= I'_{4:1}=1.77778,\\
I'_{3:2}=1.27886,\\
I'_{4:2}=2.17885.

что означает однозначный выбор точки проверки 1:2. Ситуация после окончания второй итерации становится следующей:


\tilde{S}_0=\{\{ s_0,s_8\},\{s_1, s_7\},\{s_2,s_3\},\{s_4,s_5,s_6\}\}, \\
J_2=1.19499,\\
h=\{1:1,1:2\}.

На очередном проходе алгоритма вычисления дают следующие результаты.


I'_{2:1}=0.75054,\\
I'_{2:2}= I'_{3:1}=0.97277,\\
I'_{3:2}=0.44444,\\
I'_{4:1}=0.88889,\\
I'_{4:2}=1.19499.

откуда получаем


\tilde{S}_0=\{\{ s_0,s_8\},\{s_1\},\{ s_7\},\{s_2\},\{s_3\},\{s_4\},\{s_5,s_6\}\}, \\
J_3=0.44444,\\
h=\{1:1,1:2,3:2\}.

Как видим, после трех итераций алгоритма остались неразличимыми две пары технических состояний \{s_0,s_8\} и \{s_5,s_6\}. Следующая итерация приводит к величинам


I'_{2:1}=I'_{2:2}=I'_{4:1}=0.22222,\\
I'_{3:1}=I'_{4:2}=0.44444

означающим, что любая из точек проверок {2:1},{2:2},{4:1} различает одну из этих пар состояний. Выбор точки проверки {2:1} приведет к значениям


\tilde{S}_0=\{\{ s_0\},\{s_8\},\{s_1\},\{ s_7\},\{s_2\},\{s_3\},\{s_4\},\{s_5,s_6\}\}, \\
J_4=0.22222,\\
h=\{{1:1},{1:2},{2:1},{3:2}\},

после чего на пятой итерации получим


I'_{2:2}= I'_{3:1}=I'_{4:2}=0.22222,\\
I'_{4:1}=0

и включая в маску получим


\tilde{S}_0=\{\{ s_0\},\{s_8\},\{s_1\},\{ s_7\},\{s_2\},\{s_3\},\{s_4\},\{s_5\},\{s_6\}\}, \\
J_5=0.22222,\\
h=\{{1:1},{1:2},{2:1},{3:2},{4:1}\},

На шестой итерации алгоритма получаем значения J_5=J_6=0, после чего алгоритм завершает свою работу. Результат работы алгоритма - маска h=\{{1:1},{1:2},{2:1},{3:2},{4:1}\}.

< Лекция 30 || Лекция 31: 12 || Лекция 32 >
Дмитрий Медведевских
Дмитрий Медведевских

Добрый день  можно поинтересоваться где брать литературу предложенную в курсе ?Большинство книг я не могу найти  в известных источниках