64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
| /* Learn distribution for school database. */
 | |
| 
 | |
| /* We do not consider aggregates yet.      */
 | |
| 
 | |
| :- [pos:train].
 | |
| 
 | |
| :- ['../../examples/School/school_32'].
 | |
| 
 | |
| :- use_module(library(clpbn/learning/em)).
 | |
| 
 | |
| %:- set_em_solver(ve).
 | |
| %:- set_em_solver(hve).
 | |
| %:- set_em_solver(bdd).
 | |
| %:- set_em_solver(bp).
 | |
| %:- set_em_solver(cbp).
 | |
| 
 | |
| 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.2).
 | |
| 
 | |
| goal(professor_ability(P,V)) :-
 | |
| 	pos:professor_ability(P,V1),
 | |
| 	missing(X),
 | |
| 	( random > X -> V = V1 ; true).
 | |
| 
 | |
| 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).
 | |
| 
 |