From 620ac64fddce926158c9f2523e487f6b3c1ce2f8 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Mon, 9 Mar 2009 00:40:50 +0000 Subject: [PATCH] git learning stuff. --- packages/ProbLog/problog_examples/graph.pl | 86 +++++++++++++++++ .../ProbLog/problog_examples/learn_graph.pl | 96 +++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 packages/ProbLog/problog_examples/graph.pl create mode 100644 packages/ProbLog/problog_examples/learn_graph.pl diff --git a/packages/ProbLog/problog_examples/graph.pl b/packages/ProbLog/problog_examples/graph.pl new file mode 100644 index 000000000..cd3a4dfe8 --- /dev/null +++ b/packages/ProbLog/problog_examples/graph.pl @@ -0,0 +1,86 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ProbLog program describing a probabilistic graph +% (running example from ProbLog presentations) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +:- use_module('../problog'). + +%%%% +% background knowledge +%%%% +% definition of acyclic path using list of visited nodes +path(X,Y) :- path(X,Y,[X],_). + +path(X,X,A,A). +path(X,Y,A,R) :- + X\==Y, + edge(X,Z), + absent(Z,A), + path(Z,Y,[Z|A],R). + +% using directed edges in both directions +edge(X,Y) :- dir_edge(Y,X). +edge(X,Y) :- dir_edge(X,Y). + +% checking whether node hasn't been visited before +absent(_,[]). +absent(X,[Y|Z]):-X \= Y, absent(X,Z). + +%%%% +% probabilistic facts +%%%% +0.9::dir_edge(1,2). +0.8::dir_edge(2,3). +0.6::dir_edge(3,4). +0.7::dir_edge(1,6). +0.5::dir_edge(2,6). +0.4::dir_edge(6,5). +0.7::dir_edge(5,3). +0.2::dir_edge(5,4). + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% example queries about path(1,4) +% +%%% explanation probability (and facts involved) +% ?- problog_max(path(1,4),Prob,FactsUsed). +% FactsUsed = [dir_edge(1,2),dir_edge(2,3),dir_edge(3,4)], +% Prob = 0.432 ? +% yes +%%% success probability +% ?- problog_exact(path(1,4),Prob,Status). +% 8 proofs +% Prob = 0.53864, +% Status = ok ? +% yes +%%% lower bound using 4 best proofs +% ?- problog_kbest(path(1,4),4,Prob,Status). +% 4 proofs +% Prob = 0.517344, +% Status = ok ? +% yes +%%% approximation using monte carlo, to reach 95%-confidence interval width 0.01 +% ?- problog_montecarlo(path(1,4),0.01,Prob). +% Prob = 0.537525 ? +% yes +%%% upper and lower bound using iterative deepening, final interval width 0.01 +% ?- problog_delta(path(1,4),0.01,Bound_low,Bound_up,Status). +% Bound_low = 0.5354096, +% Bound_up = 0.53864, +% Status = ok ? +% yes +%%% upper and lower bound obtained cutting the sld tree at probability 0.1 for each branch +% ?- problog_threshold(path(1,4),0.1,Bound_low,Bound_up,Status). +% 4 proofs +% Bound_low = 0.517344, +% Bound_up = 0.563728, +% Status = ok ? +% yes +%%% lower bound obtained cutting the sld tree at probability 0.2 for each branch +% ?- problog_low(path(1,4),0.2,Bound_low,Status). +% 1 proofs +% Bound_low = 0.432, +% Status = ok ? +% yes +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/packages/ProbLog/problog_examples/learn_graph.pl b/packages/ProbLog/problog_examples/learn_graph.pl new file mode 100644 index 000000000..86436d624 --- /dev/null +++ b/packages/ProbLog/problog_examples/learn_graph.pl @@ -0,0 +1,96 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ProbLog program describing a probabilistic graph +% (running example from ProbLog presentations) +% +% example for parameter learning with LeProbLog +% +% training and test examples are included at the end of the file +% +% query ?- do_learning(20). +% will run 20 iterations of learning with default settings +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +:- use_module('../learning'). + +%%%% +% background knowledge +%%%% +% definition of acyclic path using list of visited nodes +path(X,Y) :- path(X,Y,[X],_). + +path(X,X,A,A). +path(X,Y,A,R) :- + X\==Y, + edge(X,Z), + absent(Z,A), + path(Z,Y,[Z|A],R). + +% using directed edges in both directions +edge(X,Y) :- dir_edge(Y,X). +edge(X,Y) :- dir_edge(X,Y). + +% checking whether node hasn't been visited before +absent(_,[]). +absent(X,[Y|Z]):-X \= Y, absent(X,Z). + +%%%% +% probabilistic facts +% - probability represented by t/1 term means learnable parameter +% - argument of t/1 is real value (used to compare against in evaluation when known), use t(_) if unknown +%%%% +t(0.9)::dir_edge(1,2). +t(0.8)::dir_edge(2,3). +t(0.6)::dir_edge(3,4). +t(0.7)::dir_edge(1,6). +t(0.5)::dir_edge(2,6). +t(0.4)::dir_edge(6,5). +t(0.7)::dir_edge(5,3). +t(0.2)::dir_edge(5,4). + +%%%%%%%%%%%%%% +% training examples of form example(ID,Query,DesiredProbability) +%%%%%%%%%%%%%% + +example(1,path(1,2),0.94). +example(2,path(1,3),0.81). +example(3,path(1,4),0.54). +example(4,path(1,5),0.70). +example(5,path(1,6),0.87). +example(6,path(2,3),0.85). +example(7,path(2,4),0.57). +example(8,path(2,5),0.72). +example(9,path(2,6),0.86). +example(10,path(3,4),0.66). +example(11,path(3,5),0.80). +example(12,path(3,6),0.75). +example(13,path(4,5),0.57). +example(14,path(4,6),0.51). +example(15,path(5,6),0.69). +% some examples for learning from proofs: +example(16,(dir_edge(2,3),dir_edge(2,6),dir_edge(6,5),dir_edge(5,4)),0.032). +example(17,(dir_edge(1,6),dir_edge(2,6),dir_edge(2,3),dir_edge(3,4)),0.168). +example(18,(dir_edge(5,3),dir_edge(5,4)),0.14). +example(19,(dir_edge(2,6),dir_edge(6,5)),0.2). +example(20,(dir_edge(1,2),dir_edge(2,3),dir_edge(3,4)),0.432). + +%%%%%%%%%%%%%% +% test examples of form test_example(ID,Query,DesiredProbability) +% note: ID namespace is shared with training example IDs +%%%%%%%%%%%%%% + +test_example(21,path(2,1),0.94). +test_example(22,path(3,1),0.81). +test_example(23,path(4,1),0.54). +test_example(24,path(5,1),0.70). +test_example(25,path(6,1),0.87). +test_example(26,path(3,2),0.85). +test_example(27,path(4,2),0.57). +test_example(28,path(5,2),0.72). +test_example(29,path(6,2),0.86). +test_example(30,path(4,3),0.66). +test_example(31,path(5,3),0.80). +test_example(32,path(6,3),0.75). +test_example(33,path(5,4),0.57). +test_example(34,path(6,4),0.51). +test_example(35,path(6,5),0.69). +