2016-06-25 4 views
2

J'ai un ensemble de règles de décision extraites de RF utilisant le paquet inTrees. Pour le travail futur, je veux utiliser les données de test pour prédire la valeur résultant des règles. Ma question est comment puis-je vérifier la condition de la règle pour chaque élément d'une observation?Règle de décision correspondant pour les prédictions futures dans 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 

Je veux comparer chaque observation à chaque règle et obtenir la valeur de prédiction agrégée pour chaque règle satisfaite par cette observation. En fin de compte être utilisé comme moteur de règles

S'il vous plaît, aidez! Merci.

Je l'ai utilisé ceci:

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 
     } 
     } 
    } 

Répondre

0

donné une données d'essai "X" (si elle est un autre nom renomme à "X"), et une condition de règle, dire

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

alors nous pouvons utiliser les éléments suivants pour obtenir les indices de points de données qui répondent à la condition:

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

espère que cela permet de résoudre votre prob lem.

+0

Merci @ H.D cela fonctionne très bien. Mais je cherche un scénario inverse. Je veux savoir quelle (s) règle (s) est suivie (s) par la 1ère observation en X et la même chose pour toutes les 908 observations. Et si la règle est suivie, il devrait en résulter une valeur prédite associée. –

+0

@NilanjanJoshi qu'en est-il de la fonction suivante qui renvoie une relation d'activation entre les règles et les points de données (Xij = 1 signifie que la jième règle est satisfaite par le ième point de données)? RuleI = spply (ruleMetric [, "condition"], rule2Table, X, cible) voir l'utilisation dans la fonction selectRuleRRF.R. https://github.com/cran/inTrees/blob/master/R/selectRuleRRF.R –

+0

btw, les deux solutions ci-dessus sont essentiellement les mêmes. L'idée est de calculer une matrice indiquant si un point de données satisfait une règle. Et cette matrice indiquerait également si une règle peut être appliquée à un point de données. –