-
classes(Es,Cs)
-
som givet en lista med exempel Es returnerar en lista med par [(C1,N1),
..., (Cn,Nn)]
-
där C1-Cn är samtliga klasser i Es
-
och Ni, 1<=i<=n, är antalet exempel i Es av klassen Ci.
-
Listan är sorterad i fallande ordning med avseende på Ni
-
(dvs. den största klassen motsvaras av det första paret i listan).
-
Notera att om det endast finns en klass i Es så kommer Cs att endast
innehålla ett element.
-
-
best_attribute(Es,As,A,AsRest,VEs)
-
som givet en lista med exempel Es och en lista med attribut As
-
returnerar det mest informativa attributet A,
-
en lista AsRest med de övriga attributen
-
samt en lista VEs som för varje värde Vi på attributet
A innehåller ett par på formen
-
(Vi,Ei) där Ei är den delmängd av Es som på attributet
A har värdet Vi.
-
Notera att för vissa Vi så kan Ei = [].
-
(Andralogaritmen av ett tal Y erhålls i SICStus med X is log(2,Y).)
decision_tree([],_,D,class(D)) :- !.
decision_tree(Es,_,_,class(C)) :-
classes(Es,[(C,_)]), !.
decision_tree(Es,[],_,class(C)):- !,
classes(Es,[(C,_)|_]).
decision_tree(Es,As,_,(A,Trees)) :-
best_attribute(Es,As,A,AsRest,VEs),
classes(Es,[(D,_)|_]),
make_trees(VEs,AsRest,D,Trees).
make_trees([],_,_,[]).
make_trees([(V,Es)|VEs],AsRest,D,[(V,T)|Trees]) :-
decision_tree(Es, AsRest, D, T),
make_trees(VEs, AsRest, D, Trees).