2

単純な一致方法で 2 つのクラスを区別する機能/属性のセットを見つけたいとします。プロローグで clpfd を使用してこれを行うことができますか?

c_s_mining(Features,Value):-
 Features = [F1,F2,F3,F4],
 Features ins 0..1,
 ExampleA = [A1,A2,A3,A4],
 ExampleB =[B1,B2,B3,B4],
 ExampleC =[C1,C2,C3,C4],
 A1 #=0, A2#=1,A3#=0,A4#=1,
 B1 #=0, B2#=1,B3#=0,B4#=1,
 C1 #=1, C2#=0,C3#=0,C4#=1,

 ExampleD =[D1,D2,D3,D4],
 ExampleE =[E1,E2,E3,E4],
 ExampleQ =[Q1,Q2,Q3,Q4],
 D1#=1,D2#=0,D3#=1,D4#=0,
 E1#=1,E2#=0,E3#=1,E4#=0,
 Q1#=0,Q2#=1,Q3#=1,Q4#=0,

 Positives =[ExampleA,ExampleB,ExampleC],
 Negatives = [ExampleD,ExampleE,ExampleQ],
 TP in 0..sup,
 FP in 0..sup,
 covers(Features,Positives,TP),
 covers(Features,Negatives,FP),
 Value  in inf..sup,
 Value #= TP-FP.


covers(Features,Examples,Number_covered):-
   findall(*,(member(E,Examples),E=Features),Covers), length(Covers,Number_covered).

各例は 4 つのバイナリ機能によって記述され、3 つの正の例 (A、B、C) と 3 つの負の例 (D、E、Q) があります。

一致する場合、例は選択された機能のセットによってカバーされます。たとえば、Featuresが と統一されている場合[0,1,0,1]、これは 2 つの正と 0 の負に一致します。

(真陽性) - (真陰性)Valueに等しくなるように設定します。価値を最大化し、対応する一連の機能を見つけたいと考えています。TPTN

私は質問します?-c_s_mining(Features,Value),labelling([max(Value)],[Value]). 私が期待する答えは次のとおりです:Features =[0,1,0,1], Value =2しかし、私は得ますFeatures =[_G1,_G2,_G3,G4],Value =0, G1 in 0..1, G2 in 0..1, G3 in 0..1, G4 in 0..1.

4

1 に答える 1