Формирование рассуждений в байесовских сетях
В данном разделе приведена реализация программы, применяемой для интерпретации байесовских сетей. Задача состоит в том, чтобы этот интерпретатор при наличии некоторой байесовской сети отвечал на вопросы в следующей форме: "Какова вероятность определенных высказываний, если дана вероятность некоторых других высказываний?" Примеры таких запросов приведены ниже. р( burglary S alarm) = ? pf burglary л lightning) = ? p{ burglary | alarm л -lightning) = ? p{ alarm л -call I burglary) = ?
Интерпретатор формирует ответ на любой из этих вопросов, рекурсивно применяя правила, описанные ниже.
1. Вероятность конъюнкции:
р( XiAX2 | Cond) = р[ Xi I Cond} * р{ X, I Xi л Cond)
2. Вероятность возможного события: pWTfi л ,,. Л X л ...) =1
3. Вероятность невозможного события:
р{X | Yiл ... л -X л . . .) = О
4. Вероятность отрицания:
р( ~Х | Cond) = 1 - р{Х| Cond)
5. Если от некоторого условия Cond зависит вероятность события, дочернего по
отношению к событию X, то для определения вероятности события X необхо
димо использовать теорему Вайеса следующим образом:
Если ccndc - У л Cond, где У - событие в байесовской сети,
дочернее по отношению к событию X то pfXiCoado) = p(XICond) * P(Y|X л cond) / p{Y|Cond)
6. Если от некоторого условия Cond не зависит вероятность события, дочернего
по отношению к событию X, то могут иметь место следующие случаи:
а) если событие X не имеет родительских событий, то р (X | Cond) = (X), при
условии, что известна вероятность р (X);
б) если событие X имеет родительские события Parents, состояния которых
определяются отношением pcssible_states, то
piX!Cond) = £ р[Х|Ё} p(S|Cond}
В качестве примера рассмотрим следующий вопрос: "Какова вероятность взлома, если известно, что прозвучал тревожный сигнал?" plburgiaryi alarm) = ?
В соответствии с приведенным выше правилом 5:
р(burglary|alarm) = р(burglary) * р!alarm|burglary) / р(alarm)
В соответствии с правилом 6: р[ alarm I burglary) = p(alarir,| sensor) p (sensor ! burglary)
+ p(alarm|-sensor) p(-sensor|burglary)
В соответствии с правилом 6:
р (sensor | burglary) = p (sensor i burglary л lightning) plburolary
л Irghtmng Iburglary) + p (sensor |-burglary л lightning)
Глава 15. Представление знаний и экспертные системы
p(-burglary л lightning|burglary) + р(sensor|burglary л -lightning) pfburglaiyл -lightningIburglary) + p(sensor I -burglary л -lightning) p(-burglary л -lightning burglary)
Применив несколько раз правила 1-4 и используя условные вероятности, заданные в сети, получим следующее:
р (sensor | burglary) - 0.9 * 0.0 2 + 0 + 0.9 * 0.98 + 0 = 0,Э pfalarml burglary! = 0.95 * 0.Э + 0.001 * (1 - 0.Э) - 0.8551
Применив несколько раз правила 1, 4, 6, получим: p(alarm) - 0.00467929
Наконец, будет получен следующий результат: р(burglary|alarm) - 0.001 + 0.B551 / 0.00467929 - 0.182741
Программа, проводящая рассуждения в соответствии с описанными выше принципами, приведена в листинге 15.8. Конъюнкция высказываний X: л Х2 л ... представлена в виде списка высказываний [XI, Х2, . . . ]. Отрицание -X выражается с помощью терма not X языка Prolog. Основным предикатом этой программы является следующий: prob( Proposition, Cond, P)
где Р — условная вероятность высказывания Proposition при условии Cond. В программе предполагается, что байесовская сеть представлена с помощью описанных ниже отношений.
• parent ( ParentNode, Node). Определяет структуру сети.
• р ( X, ParentsState, P}. Представляет вероятность события, имеющего родительские события; Р — условная вероятность некорневого узла X в зависимости от заданного состояния родительских событий, ParentsState.
• р! X, ?!. Представляет вероятность события, не имеющего родительских событий; X - корневой узел, Р — его вероятность.
В листинге 15.9 приведен пример определения с помощью этих предикатов байесовской сети, показанной на рис. 15.4. С программой обработки байесовской сети, показанной в листинге 15.8, в которую введено определение сети из листинга 15.9, возможен приведенный ниже диалог. Предположим, что получен предупреждающий телефонный звонок, поэтому требуется узнать вероятность взлома:
?- prob( burglary, [call], P). F = 0.232137
Затем стало известно, что в это время была сильная гроза, поэтому запрос принял следующий вид:
?- о: burglary, [call, lightning], P).
p = 0.00892857
Листинг15.8. Интерпретатор байесовских сетей доверия
% Формирование рассуждений в байесовских сетях доверия
% Байесовская сеть доверия представлена приведенными ниже Отношениями.
parent I ParentNode, Node) % р( Node, ParentStates, Prob)
Prob - условная вероятность узла Node при заданных значениях
% родительских переменных ParentStates, например:
р( alarm, [ burglary, not earthquake], 0.99) % p( Mode, Prob)
вероятность узла, не имеющего родительских узлов
% prob( Event, Condition, P):
______________________
346 Часть II. Применение языка Prolog в области искусственного интеллекта
I
* вероятность события Event при условии Condition равна Р;
% Event - переменная, ее отрицание или список простых событий, представленный в виде ик конъюнкции
prob! [X | Xsj , Cond, Р) :- !, % Вероятность конъюнкции ргоЬС X, Cond, Px) , prob[ Xs, [X I Cond], PRest], Р is Px * PRest.
prob! [], _, 1) :- !. % Пустая КОНЪЮНКЦИЯ
рГОЬ( X, Cond, 1) :-
memberf X, Cond), ». % Из условия Cond следует Х
prob( X, Cond, 0) :-
member! notX, Cond)r !. % Из условия Cond следует, что X - ЛОЖНО
prob! not X, Cond, P) :- !, % Вероятность отрицания prob( X, Cond, P0>, P is 1 - PO.
% Применить закон Байеса, если условие распространяется на дочерние уэлы узла X
probt х, CoadO, Р) :-
delete ( Y, CondO, Cond) ,
predecessor! X, Y), !, $ Y - дочерний узел узла X
probt X, Cond, Px) ,
probt Y, [X I Cond], PyGivenX) ,
prob( Y, Cond, Py> ,
P is Px * PyGivenX / Py. % Предполагается, что Ру > 0
Случаи, в которых условие не распространяется на дочерние узлы
ргоЬ( X, Cond, P) :-
р| X, Р] , !. % X - корневой узел,- его вероятность задана
ргоЫ X, Cond, Р) :- ! ,
findallt [COBDi,Pi), p(X,COHDi,Pi), CPlist) , % Условия, которые
% распространяются на родительские уэлы sum_probs( CPlist, Cond, P) .
* sum_probs ( CondsProbs, Cond, WeiothedSum) :
% CondsProbs - список условий и соответствующих вероятностей,
% WeightedSum - взвешенная сумма вероятностей условий Conds
% при заданном условии Cond
sum_probs( [] , _, 0) .
sum_probs( [ (CONDI,PI) | CondsProbs], COND, P) :-prob( CONDI, COND, PCI),
sum_probs( CondsProbs, COND, PRest), P is PI * PCI + PRest.
predecessor( X, not Y) :- I, l Переменная Y, к которой применена
% операция отрицания predecessor I X* y) .
predecessor! x, Y) :-
parent { X, Y) .
predecessor! X, Z) :-parent! X, Y) , predecessor! y, z) .
membei X, [X [ )) .
Глава 15.Представление знаний и экспертные системы
member [X, [_ I L] } :-member! X, L) .
delete! x, [x | L] , L) .
delete ! X, [Y I L] , (Y I L2] )
delete ( JC, l , L2) .
Листинг 15.9. Спецификация байесовской сети, показанной на рис. 15.4, которая соответствует требованиям программы в листинге 15.8
% Байесовская сеть доверия "sensor"
parent! burglary, sensor). % Обычно при взломе срабатывает датчик
parent( lightning, sensor). 3 Датчик может сработать при силвной грозе
parent( sensor, alarm).
parent! sensor, call) .
p ( burglary, 0,001.
p( lightning, 0.02} .
p( sensor, [ burglary, lightning), 0.9).
p{ sensor, [ burglary, not lightning], 0.9).
p( sensor, [ not burglary, lightning], 0.1).
p( sensor, E not burglary, not lightning] , С .001) .
p( alarm, [ sensor], 0.95) .
p[ alarm, [ not sensor], 0.001).
p ( call, [ sensor], 0.9).
p( call, [ not sensor], 0.0).
Поскольку предупреждающий звонок можно объяснить сильной грозой, взлом становится гораздо менее вероятным. Но если погода была прекрасной, взлом становится вполне вероятным, как показано ниже. ?- prob( burglary, [call, not lightning), P).
P = 0.473934
Следует отметить, что при разработке показанной здесь реализации интерпретатора байесовских сетей была поставлена задача создать короткую и понятную программу. Поэтому полученная программа отличается довольно низкими эксплуатационными характеристиками. При ее использовании для обработки небольших байесовских сетей, подобных той, которая определена в листинге 15.9, проблемы не возникают, но становятся заметными при обработке более крупных сетей. Однако более эффективная реализация была бы гораздо сложнее,