/*----------------------------------------------------------*/ /* Simple Bayes Classifier (SICStus Prolog 3) */ /*----------------------------------------------------------*/ /* (C) 1998 Zdravko Markov */ /*----------------------------------------------------------*/ /* Data: example(Id,Class,[A1=V1,...,An=Vn]). */ /*----------------------------------------------------------*/ bayes(X,Class) :- setof(C,N^E^example(N,C,E),Cs), findall(C/P,(member(C,Cs), cond_prob(X,C,PXC), prob(C,PC), P is PXC*PC),W), max(W,Class/_). cond_prob([],_,1). cond_prob([AV|L],C,P) :- findall(I,example(I,C,_),All), length(All,N), findall(I,(example(I,C,AVL),member(AV,AVL)),W), length(W,M), cond_prob(L,C,P1), P is P1*M/N. prob(C,PC) :- findall(I,example(I,_,_),All), length(All,N), findall(I,example(I,C,_),W), length(W,M), PC is M/N. member(X,[X|_]). member(X,[_|T]) :- member(X,T). max([X],X) :- !. max([X/M|T],Y/N) :- max(T,Z/K), (M>K,Y/N=X/M;Y/N=Z/K), !.