% :- (300, xfx, <==).
I learn{ Class): , i Class, % , Class
learnt Class):- bagof(example(ClassX, Obj), example(ClassX, Obj |
learnt Examples, Class, Description), nl, write' Class), write(' <== '), nl, writelist(Description), assert (Class <== Description).
Examples), % % % %
%
% learnt Examples, Class, Description):
% Description Class
% . Examples
learnt Examples, Class, []):-not member(example! Class,
), Examples).
% , %
learn(Examples, Class, [Conj I Conjs]): learn_conj (Examples, Class, Conj), remove(Examples, Conj, RestExamples),
learnt RestExamples, Class, Conjs).
% , % Conj % %
% learn_conj| Examples, Class, Conj):
% Conj - ,
% Class -
%
learn_conj (Examples, Class, []) not (member! example(ClassX, ClassX \== Class),!.
: -
), Examples), % - %
learn_conj (Examples, Class, [Cond | Conds]) choose_cond(Examples, Class, Cond), filter (Examples, [ Cond], Examplesl), learn_conj(Examplesl, Class, Conds).
: -
%
choose_cond I Examples, Class, AttVal):-
findalK AV/Score, score! Examples, Class, AV, Score), AVs),
best! AVs, AttVal). %
18.
best( [ AttVal/_], AttVal).
best([ AVO/SC, AV1/S1 I AVSlist], AttVal):-
El > SO,!, % AVl , AVO
best{ [AV1/S1 ] AVSlist], AttVal)
best([AVO/SO AVSlist], AttVal).
% filterf Examples, Condition, Examplesl):
Examplesl Examples,
% Condition
filter Examples, Cond, Examplesl):-findalH example! Class, Obj),
< member example{ class, Obj), Examples), satisfy(Obj, Cond)),
Examplesl).
i remove(Examples, Conj, Examplesl):
Examples , Conj, % Examplesl
remove ([ ], _, [ ]).
remove [ [example < Class, Obj) I Es], Conj, Esl):-
satisfy(Obj, Conj),!, % Conj remove (Es, Conj, Esl). %
remove IE I Es] r Conj, [E I Esl]):- % remove(Es, Conj, Esl),
satisfy{ Object, Conj):-
not (member; Att = Val, Conj),
member ( Att - ValX, Object), ValX \val).
score(Examples, Class, AttVal, Score):-
candidate Examples, Class, AttVal), I
|
|
filter!' Examples, [ AttVal], Examplesl), % Examplesl
% Att = Val
length! Examples!, N1), %
count_pos[ Examplesl, Class, NPosl), %
NPosl > 0, %
% AttVal Score is 2 * HPOSl - Ml.
candidate,- Examples, Class, Att -Val):-
attribute! Att, Values), %
member; Val, values), %
suitable,- Att = Val, Examples, Class).
suitable(AttVal, Examples, class):-
%
% AttVal rr.emberf example! ClassX, ObjX), Examples),
ClassX \== Class, ,
not satisfy,- ObjX, [ AttVal]),!. % AttVal
%coimt_pos(Examples, Class, ):
% H - Class
ccmnt_pos([], _, 0).
count_pos { [example (ClassX,_) (Examples], Class, ): -count_posi Examples, Class, Ml), (ClassX = Class,!, N is Ni + 1; = N1).
424 II. Prolog
writelist t |
writelistt [X | LJ):-tab[ 2), write (X), nl, writelistt L).
: learn_con](Examples, Class, Conjunction}
Conjunction , , : Attribute = value
, ( ). , , Class.
. , , , , , . , . , , , . . . , 18.3, , . , , - . , (greedy), " " (hill-climbing). , , . , .
|
|
: , , . . . 18.9 . , , : score[ Examples, Class, AttributeValue, Score}
Score .
, 18.3, , 18.1, :
?- learnt nut), 1(key), learnf scissors). nut < = =
[ shape = compact, holes = 1] key < = =
18.
[ shape - other, size = small] (holes = 1, shape = lor.g] scissors <= [ holes = 2, size = large] |
. 18.9. ; 90S . NEG . . ATTVAL, , , . ATTVAL
, learn , , . . , , , classify[ Object, Class):-
Class <= = Description, % , Class,
1
member! conj, Description), %
satisfy! Object, conj). % Object Conj