2014-05-23 1 views
0

Мне нужно рассчитать общую предсказуемую точность с помощью некоторых правил с использованием параметров TP, TN, FP, FN в клипах.Расчет общей предиктивной точности на клипах с использованием правил

Мое правило: x1 <=0.58 AND x6 <=0.61 x5mcg<=0.61 --> Class = cp.
Я написал код, но когда я пытаюсь запустить его, я сталкиваюсь с сообщением об ошибке. Может быть, ошибка, которую я не могу найти. Может ли кто-нибудь мне помочь?
Это мой код:

(defrule rule1 
    (rw6 ?x6) 
    (rw5 ?x5) 
    (rw1 ?x1) 
    (test (<= ?x6 0.58)) 
    (test (<= ?x5 0.61)) 
    (test (<= ?x1 0.61)) 
    ?fact1 <- (TP1 ?TP1) 
    ?fact2 <- (FP1 ?FP1) 
    ?fact3 <- (TN2 ?TN2) 
    ?fact4 <- (TN3 ?TN3) 
    ?fact5 <- (TN4 ?TN4) 
    ?fact6 <- (FN2 ?FN2) 
    ?fact7 <- (FN3 ?FN3) 
    ?fact8 <- (FN4 ?FN4) 
    ?fact9 <- (K1 ?K1) 
    ?fact10 <- (K2 ?K2) 
    ?fact11 <- (K3 ?K3) 
    ?fact12 <- (K4 ?K4) 
    ?fact13 <- (row (rw1 ?x1)(rw2 ?x2)(rw3 ?x3)(rw4 ?x4)(rw5 ?x5)(rw6 ?x6)(rw7 ?x7)(class ?c)) 
    => 
    (if (= ?c cp) then 
    (retract ?fact1 ?fact3 ?fact4 ?fact5 ?fact9) 
    (assert (TP1 (+ ?TP1 1))(TN2 (+ ?TN2 1))(TN3 (+ ?TN3 1))(TN4 (+ ?TN4 1))(K1 (+ ?K1 1)))) 
    else (if (= ?c im) then 
    (retract ?fact2 ?fact4 ?fact5 ?fact6 ?fact10) 
    (assert (FP1 (+ ?FP1 1))(TN3 (+ ?TN3 1))(TN4 (+ ?TN4 1))(FN2 (+ ?FN2 1))(K2 (+ ?K2 1)))) 
    else (if (= ?c pp) then 
    (retract ?fact2 ?fact3 ?fact5 ?fact7 ?fact11) 
    (assert (FP1 (+ ?FP1 1))(TN2 (+ ?TN2 1))(TN4 (+ ?TN4 1))(FN3 (+ ?FN3 1))(K3 (+ ?K3 1)))) 
    else (if (= ?c om) then 
    (retract ?fact2 ?fact3 ?fact4 ?fact8 ?fact12) 
    (assert (FP1 (+ ?FP1 1))(TN2 (+ ?TN2 1))(TN3 (+ ?TN3 1))(FN4 (+ ?FN4 1))(K4 (+ ?K4 1)))) 
    (retract ?fact13)) 

(defrule rule2 
     (K1 ?K1) 
    (K2 ?K2) 
    (K3 ?K3) 
    (K4 ?K4) 
    (TP1 ?TP1) 
    (FP1 ?FP1) 
    (FN1 ?FN1) 
    (TP2 ?TP2) 
    (FP2 ?FP2) 
    (FN2 ?FN2) 
    (TP3 ?TP3) 
    (FP3 ?FP3) 
    (FN3 ?FN3) 
    (TP4 ?TP4) 
    (FP4 ?FP4) 
    (FN4 ?FN4) 
    ?fact1 <- (REC1 0) 
    ?fact2 <- (REC2 0) 
    ?fact3 <- (REC3 0) 
    ?fact4 <- (REC4 0) 
    ?fact5 <- (PRE1 0) 
    ?fact6 <- (PRE2 0) 
    ?fact7 <- (PRE3 0) 
    ?fact8 <- (PRE4 0) 
    ?fact9 <- (FMES1 0) 
    ?fact10 <- (FMES2 0) 
    ?fact11 <- (FMES3 0) 
    ?fact12 <- (FMES4 0) 
    ?fact13 <- (waREC 0) 
    ?fact14 <- (waPRE 0) 
    ?fact15 <- (waFMES 0) 
    ?fact13 <- (ACC 0) 
    => 
    (retract ?fact1 ?fact2 ?fact3 ?fact4 ?fact5 ?fact6 ?fact7 ?fact8 ?fact9 ?fact10 ?fact11 ?fact12 ?fact13) 
    (assert (ACC (bind ?ACC (/ (+ ?TP1 ?TP2 ?TP3 ?TP4)(+ ?TP1 ?TP2 ?TP3 ?TP4 ?FN1 ?FN2 ?FN3 ?FN4))))) 
    (assert (REC1 (bind ?REC1 (/ ?TP1 (+ ?TP1 ?FN1))))) 
    (assert (REC2 (bind ?REC2 (/ ?TP2 (+ ?TP2 ?FN2))))) 
    (assert (REC3 (bind ?REC3 (/ ?TP3 (+ ?TP3 ?FN3))))) 
    (assert (REC4 (bind ?REC4 (/ ?TP4 (+ ?TP4 ?FN4))))) 
    (assert (PRE1 (bind ?PRE1 (/ ?TP1 (+ ?TP1 ?FP1))))) 
    (assert (PRE2 (bind ?PRE2 (/ ?TP2 (+ ?TP2 ?FP2))))) 
    (assert (PRE3 (bind ?PRE3 (/ ?TP3 (+ ?TP3 ?FP3))))) 
    (assert (PRE4 (bind ?PRE4 (/ ?TP4 (+ ?TP4 ?FP4))))) 
    (assert (FMES1 (bind ?FMES1 (/ (* 2 (/ ?TP1 (+ ?TP1 ?FN1))(/ ?TP1 (+ ?TP1 ?FP1)))(+ (/ ?TP1 (+ ?TP1 ?FN1))(/ ?TP1 (+ ?TP1 ?FP1))))))) 
    (assert (FMES2 (bind ?FMES2 (/ (* 2 (/ ?TP2 (+ ?TP2 ?FN2))(/ ?TP2 (+ ?TP2 ?FP2)))(+ (/ ?TP2 (+ ?TP2 ?FN2))(/ ?TP2 (+ ?TP2 ?FP2))))))) 
    (assert (FMES3 (bind ?FMES3 (/ (* 2 (/ ?TP3 (+ ?TP3 ?FN3))(/ ?TP3 (+ ?TP3 ?FP3)))(+ (/ ?TP3 (+ ?TP3 ?FN3))(/ ?TP3 (+ ?TP3 ?FP3))))))) 
    (assert (FMES4 (bind ?FMES4 (/ (* 2 (/ ?TP4 (+ ?TP4 ?FN4))(/ ?TP4 (+ ?TP4 ?FP4)))(+ (/ ?TP4 (+ ?TP4 ?FN4))(/ ?TP4 (+ ?TP4 ?FP4))))))) 
    (assert (waREC (+ (*(/ ?K1 (+ ?K1 ?K2 ?K3 ?K4)) ?REC1)(*(/ ?K2 (+ ?K1 ?K2 ?K3 ?K4)) ?REC2)(*(/ ?K3 (+ ?K1 ?K2 ?K3 ?K4)) ?REC3)(*(/ ?K4 (+ ?K1 ?K2 ?K3 ?K4)) ?REC4)))) 
    (assert (waPRE (+ (*(/ ?K1 (+ ?K1 ?K2 ?K3 ?K4)) ?PRE1)(*(/ ?K2 (+ ?K1 ?K2 ?K3 ?K4)) ?PRE2)(*(/ ?K3 (+ ?K1 ?K2 ?K3 ?K4)) ?PRE3)(*(/ ?K4 (+ ?K1 ?K2 ?K3 ?K4)) ?REC4)))) 
    (assert (waFMES (+ (*(/ ?K1 (+ ?K1 ?K2 ?K3 ?K4)) ?FMES1)(*(/ ?K2 (+ ?K1 ?K2 ?K3 ?K4)) ?FMES2)(*(/ ?K3 (+ ?K1 ?K2 ?K3 ?K4)) ?FMES3)(*(/ ?K4 (+ ?K1 ?K2 ?K3 ?K4)) ?REC4))))) 
+0

Можете ли вы предоставить сообщение об ошибке, которое отображается? –

+0

Сообщение об ошибке, которое я получаю, следующее: Определение defrule: rule1 [PRNTUTIL2] Ошибка синтаксиса: проверьте соответствующий синтаксис для defrule. ОШИБКА:??? (defrule ГЛАВНАЯ :: rule1 (rw6 x6) (RW5 x5) (RW1 x1) (тест (и (<= x6 0,58) (<= x5 0,61) (< ? = x1 0,61))) fact1 <-? (ТР1 ТР1) fact2 <-? (FP1 FP1) fact3 <-? (TN2 TN2) fact4 <-??? (TN3 TN3) fact5 <- (TN4? TN4) FALSE – kate

ответ

0

Есть три проблемы.

У вас нет deftemplate, определенного для факта строки.

Вы используете = для сравнения переменной с символом в правиле1. Используйте eq вместо этого, если вы сравниваете нечисловые аргументы

В правиле2 факт факта? Fact13 связан с двумя разными шаблонами.

CLIPS> 
(deftemplate row 
    (slot rw1) 
    (slot rw2) 
    (slot rw3) 
    (slot rw4) 
    (slot rw5) 
    (slot rw6) 
    (slot rw7) 
    (slot class)) 
CLIPS> 
(defrule rule1 
    (rw6 ?x6) 
    (rw5 ?x5) 
    (rw1 ?x1) 
    (test (<= ?x6 0.58)) 
    (test (<= ?x5 0.61)) 
    (test (<= ?x1 0.61)) 
    ?fact1 <- (TP1 ?TP1) 
    ?fact2 <- (FP1 ?FP1) 
    ?fact3 <- (TN2 ?TN2) 
    ?fact4 <- (TN3 ?TN3) 
    ?fact5 <- (TN4 ?TN4) 
    ?fact6 <- (FN2 ?FN2) 
    ?fact7 <- (FN3 ?FN3) 
    ?fact8 <- (FN4 ?FN4) 
    ?fact9 <- (K1 ?K1) 
    ?fact10 <- (K2 ?K2) 
    ?fact11 <- (K3 ?K3) 
    ?fact12 <- (K4 ?K4) 
    ?fact13 <- (row (rw1 ?x1)(rw2 ?x2)(rw3 ?x3)(rw4 ?x4)(rw5 ?x5)(rw6 ?x6)(rw7 ?x7)(class ?c)) 
    => 
    (if (eq ?c cp) ; was = 
     then 
     (retract ?fact1 ?fact3 ?fact4 ?fact5 ?fact9) 
     (assert (TP1 (+ ?TP1 1))(TN2 (+ ?TN2 1))(TN3 (+ ?TN3 1))(TN4 (+ ?TN4 1))(K1 (+ ?K1 1)))) 
     else 
     (if (eq ?c im) 
      then 
      (retract ?fact2 ?fact4 ?fact5 ?fact6 ?fact10) 
      (assert (FP1 (+ ?FP1 1))(TN3 (+ ?TN3 1))(TN4 (+ ?TN4 1))(FN2 (+ ?FN2 1))(K2 (+ ?K2 1)))) 
      else 
      (if (eq ?c pp) 
      then 
      (retract ?fact2 ?fact3 ?fact5 ?fact7 ?fact11) 
      (assert (FP1 (+ ?FP1 1))(TN2 (+ ?TN2 1))(TN4 (+ ?TN4 1))(FN3 (+ ?FN3 1))(K3 (+ ?K3 1)))) 
      else (if (eq ?c om) 
      then 
      (retract ?fact2 ?fact3 ?fact4 ?fact8 ?fact12) 
      (assert (FP1 (+ ?FP1 1))(TN2 (+ ?TN2 1))(TN3 (+ ?TN3 1))(FN4 (+ ?FN4 1))(K4 (+ ?K4 1)))) 
      (retract ?fact13)) 
CLIPS> 
(defrule rule2 
    (K1 ?K1) 
    (K2 ?K2) 
    (K3 ?K3) 
    (K4 ?K4) 
    (TP1 ?TP1) 
    (FP1 ?FP1) 
    (FN1 ?FN1) 
    (TP2 ?TP2) 
    (FP2 ?FP2) 
    (FN2 ?FN2) 
    (TP3 ?TP3) 
    (FP3 ?FP3) 
    (FN3 ?FN3) 
    (TP4 ?TP4) 
    (FP4 ?FP4) 
    (FN4 ?FN4) 
    ?fact1 <- (REC1 0) 
    ?fact2 <- (REC2 0) 
    ?fact3 <- (REC3 0) 
    ?fact4 <- (REC4 0) 
    ?fact5 <- (PRE1 0) 
    ?fact6 <- (PRE2 0) 
    ?fact7 <- (PRE3 0) 
    ?fact8 <- (PRE4 0) 
    ?fact9 <- (FMES1 0) 
    ?fact10 <- (FMES2 0) 
    ?fact11 <- (FMES3 0) 
    ?fact12 <- (FMES4 0) 
    ?fact13 <- (waREC 0) 
    ?fact14 <- (waPRE 0) 
    ?fact15 <- (waFMES 0) 
    ?fact16 <- (ACC 0) 
    => 
    (retract ?fact1 ?fact2 ?fact3 ?fact4 ?fact5 ?fact6 ?fact7 ?fact8 ?fact9 ?fact10 ?fact11 ?fact12 ?fact13) 
    (assert (ACC (bind ?ACC (/ (+ ?TP1 ?TP2 ?TP3 ?TP4)(+ ?TP1 ?TP2 ?TP3 ?TP4 ?FN1 ?FN2 ?FN3 ?FN4))))) 
    (assert (REC1 (bind ?REC1 (/ ?TP1 (+ ?TP1 ?FN1))))) 
    (assert (REC2 (bind ?REC2 (/ ?TP2 (+ ?TP2 ?FN2))))) 
    (assert (REC3 (bind ?REC3 (/ ?TP3 (+ ?TP3 ?FN3))))) 
    (assert (REC4 (bind ?REC4 (/ ?TP4 (+ ?TP4 ?FN4))))) 
    (assert (PRE1 (bind ?PRE1 (/ ?TP1 (+ ?TP1 ?FP1))))) 
    (assert (PRE2 (bind ?PRE2 (/ ?TP2 (+ ?TP2 ?FP2))))) 
    (assert (PRE3 (bind ?PRE3 (/ ?TP3 (+ ?TP3 ?FP3))))) 
    (assert (PRE4 (bind ?PRE4 (/ ?TP4 (+ ?TP4 ?FP4))))) 
    (assert (FMES1 (bind ?FMES1 (/ (* 2 (/ ?TP1 (+ ?TP1 ?FN1))(/ ?TP1 (+ ?TP1 ?FP1)))(+ (/ ?TP1 (+ ?TP1 ?FN1))(/ ?TP1 (+ ?TP1 ?FP1))))))) 
    (assert (FMES2 (bind ?FMES2 (/ (* 2 (/ ?TP2 (+ ?TP2 ?FN2))(/ ?TP2 (+ ?TP2 ?FP2)))(+ (/ ?TP2 (+ ?TP2 ?FN2))(/ ?TP2 (+ ?TP2 ?FP2))))))) 
    (assert (FMES3 (bind ?FMES3 (/ (* 2 (/ ?TP3 (+ ?TP3 ?FN3))(/ ?TP3 (+ ?TP3 ?FP3)))(+ (/ ?TP3 (+ ?TP3 ?FN3))(/ ?TP3 (+ ?TP3 ?FP3))))))) 
    (assert (FMES4 (bind ?FMES4 (/ (* 2 (/ ?TP4 (+ ?TP4 ?FN4))(/ ?TP4 (+ ?TP4 ?FP4)))(+ (/ ?TP4 (+ ?TP4 ?FN4))(/ ?TP4 (+ ?TP4 ?FP4))))))) 
    (assert (waREC (+ (*(/ ?K1 (+ ?K1 ?K2 ?K3 ?K4)) ?REC1)(*(/ ?K2 (+ ?K1 ?K2 ?K3 ?K4)) ?REC2)(*(/ ?K3 (+ ?K1 ?K2 ?K3 ?K4)) ?REC3)(*(/ ?K4 (+ ?K1 ?K2 ?K3 ?K4)) ?REC4)))) 
    (assert (waPRE (+ (*(/ ?K1 (+ ?K1 ?K2 ?K3 ?K4)) ?PRE1)(*(/ ?K2 (+ ?K1 ?K2 ?K3 ?K4)) ?PRE2)(*(/ ?K3 (+ ?K1 ?K2 ?K3 ?K4)) ?PRE3)(*(/ ?K4 (+ ?K1 ?K2 ?K3 ?K4)) ?REC4)))) 
    (assert (waFMES (+ (*(/ ?K1 (+ ?K1 ?K2 ?K3 ?K4)) ?FMES1)(*(/ ?K2 (+ ?K1 ?K2 ?K3 ?K4)) ?FMES2)(*(/ ?K3 (+ ?K1 ?K2 ?K3 ?K4)) ?FMES3)(*(/ ?K4 (+ ?K1 ?K2 ?K3 ?K4)) ?REC4))))) 
CLIPS> 

 Смежные вопросы

  • Нет связанных вопросов^_^