58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
% learn distribution for school database.
 | 
						|
 | 
						|
% we do not consider the aggregates yet.
 | 
						|
 | 
						|
:- [pos:train].
 | 
						|
 | 
						|
:- ['~/Yap/work/packages/CLPBN/clpbn/examples/School/school_32'].
 | 
						|
 | 
						|
:- ['~/Yap/work/packages/CLPBN/learning/em'].
 | 
						|
 | 
						|
%:- clpbn:set_clpbn_flag(em_solver,gibbs).
 | 
						|
:- clpbn:set_clpbn_flag(em_solver,jt).
 | 
						|
%:- clpbn:set_clpbn_flag(em_solver,vel).
 | 
						|
 | 
						|
timed_main :-
 | 
						|
	statistics(runtime, _),
 | 
						|
	findall(X,goal(X),L),
 | 
						|
        em(L,0.01,10,_,Lik),
 | 
						|
	statistics(runtime, [T,_]),
 | 
						|
	format('Took ~d msec and Lik ~3f~n',[T,Lik]).
 | 
						|
 | 
						|
main :-
 | 
						|
        findall(X,goal(X),L),
 | 
						|
        em(L,0.01,10,CPTs,Lik),
 | 
						|
        writeln(Lik:CPTs).
 | 
						|
 | 
						|
%
 | 
						|
% change to 0.0, 0.1, 0.2 to make things simpler/harder
 | 
						|
%
 | 
						|
missing(0.50).
 | 
						|
 | 
						|
% miss 30% of the examples.
 | 
						|
goal(professor_ability(P,V)) :-
 | 
						|
        pos:professor_ability(P,V1),
 | 
						|
	missing(X),
 | 
						|
        ( random > X -> V = V1 ; true).
 | 
						|
% miss 10% of the examples.
 | 
						|
goal(professor_popularity(P,V)) :-
 | 
						|
        pos:professor_popularity(P,V1),
 | 
						|
	missing(X),
 | 
						|
        ( random > X -> V = V1 ; true).
 | 
						|
goal(registration_grade(P,V)) :-
 | 
						|
        pos:registration_grade(P,V1),
 | 
						|
	missing(X),
 | 
						|
        ( random > X -> V = V1 ; true).
 | 
						|
goal(student_intelligence(P,V)) :-
 | 
						|
        pos:student_intelligence(P,V1),
 | 
						|
	missing(X),
 | 
						|
        ( random > X -> V = V1 ; true).
 | 
						|
goal(course_difficulty(P,V)) :-
 | 
						|
        pos:course_difficulty(P,V1),
 | 
						|
	missing(X),
 | 
						|
        ( random > X -> V = V1 ; true).
 | 
						|
goal(registration_satisfaction(P,V)) :-
 | 
						|
        pos:registration_satisfaction(P,V1),
 | 
						|
	missing(X),
 | 
						|
        ( random > X -> V = V1 ; true).
 |