Upload
camdyn
View
110
Download
1
Embed Size (px)
DESCRIPTION
Изкуствен интелект Упражнение № 7. спец. Информатика, ФМИ 200 5 /200 6. Разсъждения при несигурни знания. Вероятностен подход Бейсови мрежи. P(e|H)P(H). P(A B). P(H|e)=. P(A|B)=. P(e). P(B). Вероятности (основни формули). Условна вероятност: Формула на Бейс: - PowerPoint PPT Presentation
Citation preview
Изкуствен Изкуствен интелектинтелект
Упражнение № 7спец. Информатика, ФМИ
2005/2006
Разсъждения при Разсъждения при несигурни знаниянесигурни знания
Вероятностен подходБейсови мрежи
Вероятности (основни Вероятности (основни формули)формули)
Условна вероятност:
Формула на Бейс:
Ако събитията 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(e|H)P(H)
P(e)P(H|e)=
P(AB)
P(B)P(A|B)=
Вероятности (основни Вероятности (основни формули)формули)
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)
Съвместно Съвместно вероятностно вероятностно
разпределениеразпределениеМножество от променливи X1,…,Xn
За всяка комбинация от стойности на променливите се пресмята P(X1,…,Xn)
Sneeze Sneeze
Cold 0.08 0.01Cold 0.01 0.9
P(ColdSneeze)
P(Sneeze)P(Cold|Sneeze)=
0.08
0.08+0.01= = 0.889
Вероятностни Вероятностни разсъжденияразсъждения
n възможни независими диагнози: d1,…,dn
e - множество от симптоми Известни са p(di) P(e|di) I=1,...,n
)(
)|()()|(
eP
dePdPedP ii
i
n
i
iin
ii eP
dePdPedP
11
1)(
)|()()|(
n
iii dePdPeP
1
)|()()(
““Naïve” BayesNaïve” Bayes
Предположение за независимост на симптомите: е={е1,...,ек}
k
jiji dePdeP
1
)|()|(
ПримерПример
Prob Well Cold Allergy
P(d) 0.9 0.05 0.05
P(Sneeze|d) 0.1 0.9 0.9
P(Cough|d) 0.1 0.8 0.7
P(Fever|d) 0.01 0.7 0.4
ПримерПример
Симптоми: 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) :-prob(Class,PC) :-
findall(Id,example(Id,_,_),All),findall(Id,example(Id,_,_),All),
length(All,N),length(All,N),
findall(Id,example(Id,Class,_),All_Class),findall(Id,example(Id,Class,_),All_Class),
length(All_Class,M),length(All_Class,M),
PC is M/N.PC is M/N.
% data: example( Id, Class, [A1=V1,…,An=Vn]).
% P( Symptoms | Class)
cond_prob([],_,1).cond_prob([],_,1).
cond_prob([AV|Rest],Class,P) :-cond_prob([AV|Rest],Class,P) :-
findall(I,example(I,Class,_),All),findall(I,example(I,Class,_),All),
length(All,N),length(All,N),
findall(Id,findall(Id,
(example(Id,Class,AVL),(example(Id,Class,AVL),
member(AV,AVL)),member(AV,AVL)),
Class_AV),Class_AV),
length(Class_AV,M),length(Class_AV,M),
cond_prob(Rest,Class,P1),cond_prob(Rest,Class,P1),
P is P1*M/N.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) :-bayes(Sympt,Diag,PD) :-
setof(C,Id^AV^example(Id,C,AV),Class),setof(C,Id^AV^example(Id,C,AV),Class),
findall(C/P,(member(C,Class),findall(C/P,(member(C,Class),
cond_prob(Sympt,C,PSC),cond_prob(Sympt,C,PSC),
prob(C,PC),prob(C,PC),
P is PSC*PC),All),P is PSC*PC),All),
summa(All,PD2), % P(Sypmt)summa(All,PD2), % P(Sypmt)
max(All,Diag/PDmax(All,Diag/PD11)),,
PD is PD1/PD2.PD is PD1/PD2.
% P(Symptoms)
summa([],0).summa([],0).
summa([_/P |Rest],PD):-summa([_/P |Rest],PD):-
summa(Rest,PRest),summa(Rest,PRest),
PD is P + PRest.PD is P + PRest.
max([X/M|T],Z/K) :- max([X/M|T],Z/K) :-
max(T,Z/K), K>M, !.max(T,Z/K), K>M, !.
max([X/M|_],X/M).max([X/M|_],X/M).
| ?- bayes([histolic_type=1,bone=2,| ?- bayes([histolic_type=1,bone=2,
bone_marrow=2,lung=2], Class,P).bone_marrow=2,lung=2], Class,P).
P = 0.5435430611339668,P = 0.5435430611339668,
Class = 2 ? Class = 2 ?
yesyes
| ?- bayes([histolic_type = 1 , bone = 2 , | ?- bayes([histolic_type = 1 , bone = 2 , bone_marrow = 2 , lung = 2 , bone_marrow = 2 , lung = 2 ,
pleura = 1 , peritoneum = 2 , pleura = 1 , peritoneum = 2 ,
liver = 2 ], Class,P).liver = 2 ], Class,P).
P = 0.6492238977325229,P = 0.6492238977325229,
Class = 1 ? Class = 1 ?
yesyes
Бейсови мрежиБейсови мрежи
Насочен ацикличен граф: възлите са събития(променливи) предшественици (родители) на един възел N
са такива събития(променливи), от които N директно зависи
с възлите, които имат предшественици са асоциирани таблици с условни вероятности
с възлите, които нямат предшественици са асоциирани таблици с априорни вероятности
Бейсови мрежиБейсови мрежи За един и същи проблем могат да бъдат
построени различни Бейсови мрежи, но някои от тях са по-добри за решаване на конкретния проблем от други.
Добрите Бейсови мрежи отчитат зависимостите между променливите
Бейсови мрежиБейсови мрежи
leaving
smoke
report
alarm
fire tamperingP(f)
0.01
P(t)
0.02
P(s)
0.9
f
yes
no 0.01
P(l)
0.88
a
yes
no 0.001P(r)
0.75
l
yes
no 0.01
P(a)
0.5
0.0001
0.99
t
yes
no
no
yes 0.85
f
yes
no
yes
no
ТТипове връзкиипове връзки
xxyyzz: xx и zz са независими относно yy xxyy z z или x x yyzz : xx и zz са независими
относно yy x x y y z z : xx и zz са независими относно yy без
наличието на информация за стойността на y. y. При дадена стойност за yy или негови наследници - те стават зависими. Например: fire fire alarm alarm tampering. tampering. Ако има аларма и пожар, вероятността за някаква друга намеса, която да е включила алармата е по-малка
ВВидове изводидове извод
диагностика - от следствието към причината: p(fire|alarm)p(fire|alarm)
предсказване - от причината към следствието: p(alarm|fire)p(alarm|fire)
междупричинен извод - между причините на дадено следствие: p(tampering|fire)p(tampering|fire)
смесен извод - комбинация от горните три: p(alarm|report p(alarm|report fire)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=Y Cond, където 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’% Belief network ‘sensor’
% p(Node,Prob)- node without parent% p(Node,Prob)- node without parent
parent(fire,smoke).parent(fire,smoke).
parent(fire,alarm).parent(fire,alarm).
parent(tampering,alarm).parent(tampering,alarm).
parent(alarm,leaving).parent(alarm,leaving).
parent(leaving,report).parent(leaving,report).
% p(Node,PrentStates, Prob)% p(Node,PrentStates, Prob)
% Prob = p(Node|ParentStates)% Prob = p(Node|ParentStates)
p(fire,0.01).p(fire,0.01).
p(tampering,0.02).p(tampering,0.02).
p(smoke,[fire],0.9).p(smoke,[fire],0.9).
p(smoke,[not fire],0.01).p(smoke,[not fire],0.01).
p(alarm,[fire, tampering],0.5).p(alarm,[fire, tampering],0.5).
p(alarm,[not fire,not tampering],0.0001).p(alarm,[not fire,not tampering],0.0001).
p(alarm,[fire, not tampering],0.99).p(alarm,[fire, not tampering],0.99).
p(alarm,[not fire, tampering],0.85).p(alarm,[not fire, tampering],0.85).
p(leaving,[alarm],0.88). p(leaving,[alarm],0.88).
p(leaving,[not alarm],0.001).p(leaving,[not alarm],0.001).
p(report,[leaving],0.75).p(report,[leaving],0.75).
p(report,[not leaving],0.01).p(report,[not leaving],0.01).
% prob(Event,Condition,P)% prob(Event,Condition,P); ; P(X1 X2 |Cond)= P(X1 |Cond) P(X2 | X1 Cond)prob([X|Xs], Cond, P):-!,prob([X|Xs], Cond, P):-!,prob(X,Cond,Px),prob(X,Cond,Px),prob(Xs,[X|Cond],PRest),prob(Xs,[X|Cond],PRest),P is Px * PRest.P is Px * PRest.
prob([],_,1):-!.prob([],_,1):-!.; ; P(X |Y1 ... X ...)= 1prob(X,Cond,1):-prob(X,Cond,1):-member(X,Cond),!.member(X,Cond),!.
; ; P(X |Y1 ... X ...)= 0 prob(X,Cond,0):-prob(X,Cond,0):-member(not X,Cond),!.member(not X,Cond),!.
; P( X|Cond)= 1 - P(X |Cond) prob(not X,Cond,P):-!,prob(not X,Cond,P):-!,prob(X,Cond,P0),prob(X,Cond,P0),P is 1-P0.P is 1-P0.
; ; Ако Cond0=Y Cond, където Y е наследник на X в Бейсовата
; ; мрежа то P(X |Cond0)= P(X |Cond) P(Y | X Cond) / P(Y | Cond) prob(X, Cond0, P):-prob(X, Cond0, P):-
delete(Y,Cond0,Cond),delete(Y,Cond0,Cond),predecessor(X,Y),!,predecessor(X,Y),!,prob(X,Cond,Px),prob(X,Cond,Px),prob(Y,[X|Cond],PyGivenX),prob(Y,[X|Cond],PyGivenX),prob(Y,Cond,Py),prob(Y,Cond,Py),P is Px * PyGivenX / 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):-prob(X,Cond,P):-p(X,P),!.p(X,P),!.
prob(X,Cond,P):-prob(X,Cond,P):-findall(CONDi/Pi,p(X,CONDi,Pi),CPList),findall(CONDi/Pi,p(X,CONDi,Pi),CPList),sum_probs(CPList,Cond,P).sum_probs(CPList,Cond,P).
sum_probs([],_,0).sum_probs([],_,0).
sum_probs([COND1/P1|CondsProbs],COND,P):-sum_probs([COND1/P1|CondsProbs],COND,P):-
prob(COND1,COND,PC1),prob(COND1,COND,PC1),
sum_probs(CondsProbs,COND,PRest),sum_probs(CondsProbs,COND,PRest),
P is P1 * PC1 + PRest.P is P1 * PC1 + PRest.
predecessor(X,not Y):-!,predecessor(X,not Y):-!,
predecessor(X,Y).predecessor(X,Y).
predecessor(X,Y):-predecessor(X,Y):-
parent(X,Y),!.parent(X,Y),!.
predecessor(X,Z):-predecessor(X,Z):-
parent(X,Y),parent(X,Y),
predecessor(Y,Z).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 S4S3S2S1
p(Sp(St+1t+1| S| S0 0 SS11......SSt t )= p(S)= p(St+1t+1| S| St t ))
St е състоянието в момента t
Интуитивно St съдържа цялата информация за историята (миналото), която може да влияе (има отношение) на бъдещето
"Миналото е независимо от бъдещето"