I'm trying to extract random forest rules as text.
dat1 <- readRDS("model_2020-03-01_12.rds")
Features <- c(rownames(dat1$importanceSD[,0]))
featMarks <- c()
for(i in 1:length(Features )){
featMarks[i] <- paste("X[,",i,"]",sep="")
}
treeList <- RF2List(dat1)
ruleExec <- extractRules(treeList,dataSet,digits=4,ntree=1000)
ruleExec <- unique(ruleExec)
ruleMetric <- getRuleMetric(ruleExec, dataSet, dataSet$Class)
rulesText <- c()
for(i in 1:nrow(ruleMetric)){
rulesText[i] <- paste("if ", ruleMetric[i,"condition"]," then ",ruleMetric[i,"pred"],sep="")
}
for(k in 1:length(Features)){
pattern <- featMarks[k]
replacement <- Features[k]
rulesText <- str_replace(rulesText, pattern, replacement)
}
For some reason the output I get is the same that went in.
I tried to run it line by line, and it also didn't work.
gsub(pattern, replacement,rulesText)
returned the same result.
Just to clarify the line by line part:
ruleLine <- paste("if ", ruleMetric[1,"condition"]," then ",ruleMetric[1,"pred"],sep="")
//ruleLine is "if X[,4]<=1.5 & X[,7]<=4.5 & X[,10]<=18 then g"
for(k in 1:length(Features)){
pattern <- featMarks[k]
replacement <- Features[k]
ruleLine <- str_replace(ruleLine, pattern, replacement)
}
//ruleLine is still "if X[,4]<=1.5 & X[,7]<=4.5 & X[,10]<=18 then g"
What am I missing?