2016-06-25 15 views
2

Ich habe eine Reihe von Entscheidungsregeln aus RF extrahiert mit inTrees-Paket. Für zukünftige Arbeiten möchte ich die Testdaten verwenden, um den Wert, der sich aus den Regeln ergibt, vorherzusagen. Meine Frage ist, wie kann ich die Regelbedingung für jedes Element einer Beobachtung überprüfen?Entscheidungsregel-Matching für zukünftige Vorhersagen in R

Observations:(908*7) 
x[,1]    X[,2] X[,3] X[,4] X[,5] X[,6] X[,7] TARGET 
SUPPORTING DEVICES 10  120  144 553  6  3.85 72.02 
OPHTHALMOSCOPE  10  133.81 143 345  7  7.5 191.94 
OPHTHALMOSCOPE  10  167.22 280 345  2  1  13.99 


Rules & prediction: (428:2) 

X[,1] %in% c('MICROSCOPE','OSCILLOSCOPE') & X[,5]>4428.534912 &  
X[,5]<=4747.5 & X[,6]<=35.5 pred=3555.085 
X[,1] %in% c('COLPOSCOPES','ENDOSCOPE','STROBOSCOPE') &  
X[,4]<=159.885038579262 & X[,4]>149.693058265924 & X[,4]<=152.534780178906 
& X[,6]<=35.5 & X[,7]<=2.85 pred=23856.56 
X[,1] %in% c('COLPOSCOPES','ENDOSCOPE','STROBOSCOPE') & X[,2]<=3.5 &  
X[,4]>159.885038579262 & X[,4]>210.163123531761 & X[,6]<=35.5 pred=22.845 

Ich mag jede Beobachtung mit jeder Regel vergleichen und den aggregierten Prognosewert für jede Regel durch diese Beobachtung erfüllt bekommen. Letztendlich als Regel-Engine verwendet werden

Bitte helfen! Vielen Dank.

Ich habe benutzten:

Y<- TRCx 
    for (i in c(1:nrow(Y))) 
    { 
     X<- Y[1,] 
     for(j in c(1:nrow(rules))) 
      { 

     if (rules$condition [j]){ 

     p <- mean(rules$pred[j]) 
     } 
     else{ 
      0 
     } 
     } 
    } 

Antwort

0

ein Testdatensatz "X" gegeben (wenn es ein anderer Name ist es zu umbenennen, um "X") und eine Regelbedingung, sagen

cond = "X[,1] %in% c('MICROSCOPE') & X[,5]>4428" 

dann können wir die folgenden bekommen die Indizes der Datenpunkte verwenden, die die Bedingung erfüllen:

cond <- paste("which(", cond, ")") 
ind <- eval(parse(text=cond)) 

Hoffnung dies Ihr prob löst lem.

+0

Danke @ H.D es funktioniert gut. Aber ich suche ein umgekehrtes Szenario. Ich möchte wissen, auf welche Regel (n) die erste Beobachtung in X folgt und für alle 908 Beobachtungen. Und wenn die Regel befolgt wird, sollte dies zu einem entsprechenden vorhergesagten Wert führen. –

+0

@NilanjanJoshi Wie wäre es mit der folgenden Funktion, die eine Aktivierungsbeziehung zwischen den Regeln und Datenpunkten zurückgibt (Xij = 1 bedeutet, dass die j-te Regel vom i-ten Datenpunkt erfüllt wird)? ruleI = sapply (ruleMetric [, "Bedingung"], rule2Table, X, Ziel) . Siehe die Verwendung in der Funktion selectRuleRRF.R. https://github.com/cran/inTrees/blob/master/R/selectRuleRRF.R –

+0

übrigens, die beiden obigen Lösungen sind im Wesentlichen gleich. Die Idee besteht darin, eine Matrix zu berechnen, die angibt, ob ein Datenpunkt eine Regel erfüllt. Und diese Matrix würde auch anzeigen, ob eine Regel auf einen Datenpunkt angewendet werden kann. –