340 likes | 854 Views
Изкуствен интелект Упражнение № 7. спец. Информатика, ФМИ 200 5 /200 6. Разсъждения при несигурни знания. Вероятностен подход Бейсови мрежи. P(e|H)P(H). P(A B). P(H|e)=. P(A|B)=. P(e). P(B). Вероятности (основни формули). Условна вероятност: Формула на Бейс:
E N D
Изкуствен интелектУпражнение № 7 спец. Информатика, ФМИ 2005/2006
Разсъждения при несигурни знания • Вероятностен подход • Бейсови мрежи
P(e|H)P(H) P(AB) P(H|e)= P(A|B)= P(e) P(B) Вероятности (основни формули) • Условна вероятност: • Формула на Бейс: • Ако събитията A и B са независими: P(AB)=P(A)P(B) • Ако събитията A и B са несъвместими: P(AB)=P(A)+P(B) P(AB)=0 и P(A|B)=0 и P(B|A)=0
Вероятности (основни формули) • P(A)=1 - P(A) • P(AB)=P(A)P(B|A)= P(B)P(A|B) • P(AB)= P(A)+P(B) - P(A B) • P(A)=P(AB)+P(A B)=P(B)P(A|B)+P(B)P(A| B) • P(X1... Xn)=P(X1) P(X2 |X1) P(X3 |X1 X2)... P(Xn |X1 ... Xn-1) • Ако събитията X1... Xn са независими: P(X1... Xn)=P(X1) P(X2) P(X3)... P(Xn)
P(ColdSneeze) 0.08 P(Cold|Sneeze)= = = 0.889 P(Sneeze) 0.08+0.01 Съвместно вероятностно разпределение • Множество от променливи X1,…,Xn • За всяка комбинация от стойности на променливите се пресмята P(X1,…,Xn)
Вероятностни разсъждения • n възможни независими диагнози: d1,…,dn • e - множество от симптоми • Известни са p(di) P(e|di) I=1,...,n
“Naïve” Bayes • Предположение за независимост на симптомите: е={е1,...,ек}
Пример • Симптоми: sneeze & cough & no fever • p(well | e)=(0.9)(0.1)(0.1)(0.99)/P(e)=0.0089/P(e) • p(cold | e)=(0.05)(0.9)(0.8)(0.3)/P(e)=0.01/P(e) • p(allergy | e)=(0.05)(0.9)(0.7)(0.6)/P(e)=0.019/P(e) • Диагноза: allergy • p(e)=0.0089+0.01+0.019=0.0379 • p(well | e)=0.23 • p(cold | e)=0.26 • p(allergy | e)=0.50
Представяне на данните example(79,11,[age = 2,sex = 1,histolic_type = 2, degree_of_diffe = 1,bone = 2,bone_marrow = 2,lung = 2,pleura = 2,peritoneum = 1,liver = 1,brain = 2, shin = 2,neck = 2,supraclavicular = 2,axillar = 2, mediastinum = 2,abdominal = 2]). example(115,18,[age = 3,sex = 2,degree_of_diffe = 3, bone = 2,bone_marrow = 2,lung = 2,pleura = 2, peritoneum = 2,liver = 2,brain = 2,shin = 2,neck=2, supraclavicular = 2,axillar = 2,mediastinum = 2, abdominal = 1]). example(103,8,[age = 3,sex = 2,histolic_type = 2, degree_of_diffe = 1,bone = 2,bone_marrow = 2, lung = 1,pleura = 2,peritoneum = 2,liver = 2, brain = 2,shin = 2,neck = 2,supraclavicular= 2, axillar = 2,mediastinum = 2,abdominal = 2]).
% data: example( Id, Class, [A1=V1,…,An=Vn]). & P(Class) prob(Class,PC) :- findall(Id,example(Id,_,_),All), length(All,N), findall(Id,example(Id,Class,_),All_Class), length(All_Class,M), PC is M/N.
% data: example( Id, Class, [A1=V1,…,An=Vn]). % P( Symptoms | Class) cond_prob([],_,1). cond_prob([AV|Rest],Class,P) :- findall(I,example(I,Class,_),All), length(All,N), findall(Id, (example(Id,Class,AVL), member(AV,AVL)), Class_AV), length(Class_AV,M), cond_prob(Rest,Class,P1), P is P1*M/N.
Генериране на всички решения • В основни линии setof(X, p(X), L) свързва L с множеството от всички екземпляри на X, за които в Пролог p(X) успява
Предикатът setof/3 пропада, когато множеството, което се генерира е празно. Това негово свойство е съществено за неговото корекно поведение в сложни ситуации и е много полезно. Това означава че този предикат ще помогне да се решат едновременно и двата ни основни проблема
Пример likes(bill, cider). likes(dick, beer). likes(harry, beer). likes(jan, cider). likes(tom, beer). likes(tom, cider). | ?- setof(X, likes(X,Y), S). S = [dick,harry,tom], Y = beer ? ; S = [bill,jan,tom], Y = cider ? | ?- setof((Y,S), setof(X, likes(X,Y), S), SS). SS = [(beer,[dick,harry,tom]), (cider,[bill,jan,tom])]
Пример • Променливите в Goal могат да се считат за свободни, освен ако те изрично не са свързани с Goal посредством квантора за съществуване: Y^Q означава че “съществува Y такова че Q е true”, където Y е някаква променлива в Пролог. | ?- setof(X, Y^(likes(X,Y)), S). S = [bill,dick,harry,jan,tom]
% data: example( Id, Class, [A1=V1,…,An=Vn]). % max P(Diag | Symptoms) bayes(Sympt,Diag,PD) :- setof(C,Id^AV^example(Id,C,AV),Class), findall(C/P,(member(C,Class), cond_prob(Sympt,C,PSC), prob(C,PC), P is PSC*PC),All), summa(All,PD2), % P(Sypmt) max(All,Diag/PD1), PD is PD1/PD2.
% P(Symptoms) summa([],0). summa([_/P |Rest],PD):- summa(Rest,PRest), PD is P + PRest. max([X/M|T],Z/K) :- max(T,Z/K), K>M, !. max([X/M|_],X/M).
| ?- bayes([histolic_type=1,bone=2, bone_marrow=2,lung=2], Class,P). P = 0.5435430611339668, Class = 2 ? yes | ?- bayes([histolic_type = 1 , bone = 2 , bone_marrow = 2 , lung = 2 , pleura = 1 , peritoneum = 2 , liver = 2 ], Class,P). P = 0.6492238977325229, Class = 1 ? yes
Бейсови мрежи • Насочен ацикличен граф: • възлите са събития(променливи) • предшественици (родители) на един възел N са такива събития(променливи), от които N директно зависи • с възлите, които имат предшественици са асоциирани таблици с условни вероятности • с възлите, които нямат предшественици са асоциирани таблици с априорни вероятности
Бейсови мрежи • За един и същи проблем могат да бъдат построени различни Бейсови мрежи, но някои от тях са по-добри за решаване на конкретния проблем от други. • Добрите Бейсови мрежи отчитат зависимостите между променливите
a l f P(r) P(l) P(s) f t P(a) yes yes yes 0.88 0.75 0.9 yes yes 0.5 no no no 0.01 0.001 0.01 no no 0.0001 yes no 0.99 yes no 0.85 Бейсови мрежи P(f) P(t) fire tampering 0.01 0.02 smoke alarm leaving report
Типове връзки • xyz: x и zса независими относно y • xy z илиx yz: x и zса независими относно y • x y z : x и zса независими относно yбез наличието на информация за стойността наy. При дадена стойност заyили негови наследници - те стават зависими. Например: fire alarm tampering. Ако има аларма и пожар, вероятността за някаква друга намеса, която да е включила алармата е по-малка
Видове извод • диагностика - от следствието към причината: p(fire|alarm) • предсказване - от причината към следствието: p(alarm|fire) • междупричинен извод -между причините на дадено следствие: p(tampering|fire) • смесен извод - комбинация от горните три: p(alarm|report fire)
Вероятности (формули) • P(X1 X2 |Cond)= P(X1 |Cond) P(X2 | X1 Cond) • P(X |Y1 ... X...)=1 • P(X |Y1 ... X...)=0 • P(X|Cond)= 1 - P(X|Cond) • Ако Cond0=YCond, където Y е наследник на X в Бейсовата мрежато P(X|Cond0)= P(X|Cond) P(Y| X Cond) / P(Y| Cond) • Ако Condне съдържа наследници на X • АкоX няма предшественици/родители, то P(X|Cond)= P(X) и P(X) е дадена априорна вероятност • АкоX има предшественици/родители Parents, то P(X|Cond)=Spossible_states(Parents) P(X|S) P(S|Cond)
% Belief network ‘sensor’ % p(Node,Prob)- node without parent parent(fire,smoke). parent(fire,alarm). parent(tampering,alarm). parent(alarm,leaving). parent(leaving,report).
% p(Node,PrentStates, Prob) % Prob = p(Node|ParentStates) p(fire,0.01). p(tampering,0.02). p(smoke,[fire],0.9). p(smoke,[not fire],0.01). p(alarm,[fire, tampering],0.5). p(alarm,[not fire,not tampering],0.0001). p(alarm,[fire, not tampering],0.99). p(alarm,[not fire, tampering],0.85). p(leaving,[alarm],0.88). p(leaving,[not alarm],0.001). p(report,[leaving],0.75). p(report,[not leaving],0.01).
% prob(Event,Condition,P) ; P(X1 X2 |Cond)= P(X1 |Cond) P(X2 | X1 Cond) prob([X|Xs], Cond, P):-!, prob(X,Cond,Px), prob(Xs,[X|Cond],PRest), P is Px * PRest. prob([],_,1):-!. ; P(X |Y1 ... X...)=1 prob(X,Cond,1):- member(X,Cond),!. ; P(X |Y1 ... X...)=0 prob(X,Cond,0):- member(not X,Cond),!. ; P(X|Cond)= 1 - P(X|Cond) prob(not X,Cond,P):-!, prob(X,Cond,P0), P is 1-P0.
; Ако Cond0=YCond, където Y е наследник на X в Бейсовата ; мрежато P(X|Cond0)= P(X|Cond) P(Y| X Cond) / P(Y| Cond) prob(X, Cond0, P):- delete(Y,Cond0,Cond), predecessor(X,Y),!, prob(X,Cond,Px), prob(Y,[X|Cond],PyGivenX), prob(Y,Cond,Py), P is Px * PyGivenX / Py. ; Ако Condне съдържа наследници на X • АкоX няма предшественици/родители, то P(X|Cond)= P(X) и P(X) е дадена априорна вероятност • АкоX има предшественици/родители Parents, то P(X|Cond)=Spossible_states(Parents) P(X|S) P(S|Cond) prob(X,Cond,P):- p(X,P),!. prob(X,Cond,P):- findall(CONDi/Pi,p(X,CONDi,Pi),CPList), sum_probs(CPList,Cond,P).
sum_probs([],_,0). sum_probs([COND1/P1|CondsProbs],COND,P):- prob(COND1,COND,PC1), sum_probs(CondsProbs,COND,PRest), P is P1 * PC1 + PRest. predecessor(X,not Y):-!, predecessor(X,Y). predecessor(X,Y):- parent(X,Y),!. predecessor(X,Z):- parent(X,Y), predecessor(Y,Z).
| ?- prob(fire,[alarm],P). % диагностика P = 1.0e-002 ? yes | ?- prob(alarm,[fire],P). % предсказване P = 0.9802 ? yes | ?- prob(tampering,[fire],P). % междупричинен извод P = 2.0e-002 ? yes | ?- prob(alarm,[report, not fire],P). % смесен извод P = 1.7098000000000002e-002 ? yes
Марковски вериги • Специален вид Бейсови мрежи S0 S1 S2 S3 S4 p(St+1| S0 S1...St )= p(St+1| St ) St е състоянието в момента t Интуитивно St съдържа цялата информация за историята (миналото), която може да влияе (има отношение) на бъдещето "Миналото е независимо от бъдещето"