sequence design trees(有没有这样的包或者代码)

sequence design trees (Is there such a package or code)

我问的是如何在特征矩阵中搜索触发一系列规则的问题

我想知道是否有办法自动查找/生成这样的规则..

比如我有数据

make.fake.data <- function(){
X <- round(matrix(runif(20,5,10),ncol = 4),1)
colnames(X) <- paste0("var",1:ncol(X))
return(X)}
set.seed(99)
li <- list() # data
for(i in 1:3){
  X <- list( dat = make.fake.data() , target = sample(c("yes","no"),1) )
  li <- append(li, list(X))
}
li

每个 li 片段都有一个特征矩阵和一个目标

   [[1]]
[[1]]$dat
     var1 var2 var3 var4
[1,]  7.9  9.8  7.7  8.2
[2,]  5.6  8.4  7.5  6.8
[3,]  8.4  6.5  6.0  5.5
[4,] 10.0  6.8  8.2  5.5
[5,]  7.7  5.9  8.4  5.9

[[1]]$target
[1] "NO"


[[2]]
[[2]]$dat
     var1 var2 var3 var4
[1,]  5.4  5.0  6.6  8.5
[2,]  9.1  9.1  6.7  9.1
[3,]  8.0  5.0  7.7  8.0
[4,]  8.9  6.0  5.2  9.9
[5,]  6.8  7.5  7.2  9.3

[[2]]$target
[1] "YES"


[[3]]
[[3]]$dat
     var1 var2 var3 var4
[1,]  8.9  7.1  8.8  7.7
[2,]  9.7  7.9  9.9  9.6
[3,]  7.4  5.6  6.5  6.9
[4,]  9.6  8.5  9.3  9.6
[5,]  6.8  9.1  5.4  6.4

[[3]]$target
[1] "YES"

我想生成这样的规则

这些规则不使用矩阵中的索引,仅使用事件序列

是否有可以创建此类规则的程序包或代码?

UPD======================================= ====

谢谢你的回答,我知道这个方法,但是这个方法没有考虑到规则出现的先后顺序,这个对我来说很重要。

我会尽力澄清.. 我正在寻找一种看起来像“关联规则序列”但采用普通逻辑规则形式的方法

无论如何,如果我没有收到想要的答案,我会return奖励给你。

可能有很多这样的规则,但不清楚您是否希望规则中出现某些特定属性。但是,您可以尝试使用 R 中的决策树包来使用有监督的机器学习(分类)生成规则(规则是概率性的,因为它们可能不会在 100% 的时间内为真),如下面的代码所示:

library(rpart)
library(rpart.plot)
df <- NULL
for (i in 1:length(li)) {
  df1 <- cbind.data.frame(li[[i]]$dat, y=li[[i]]$target)
  df <- rbind(df, df1)
}
rpart(y~.,df, control=rpart.control(minsplit=2,cp=0.001))

# node), split, n, loss, yval, (yprob)
#  * denotes terminal node

# 1) root 15 5 yes (0.33333333 0.66666667)  
#  2) var4< 6.15 3 0 no (1.00000000 0.00000000) *
#  3) var4>=6.15 12 2 yes (0.16666667 0.83333333)  
#   6) var2>=9.45 1 0 no (1.00000000 0.00000000) *
#   7) var2< 9.45 11 1 yes (0.09090909 0.90909091)  
#    14) var1< 6.2 2 1 no (0.50000000 0.50000000)  
#      28) var1>=5.5 1 0 no (1.00000000 0.00000000) *
#      29) var1< 5.5 1 0 yes (0.00000000 1.00000000) *
#    15) var1>=6.2 9 0 yes (0.00000000 1.00000000) *

prp(tr)

正如您从上面的决策树中看到的(图中的数字四舍五入到小数点后一位),生成了一些规则(在数据集上有 100% 的概率为真,但不一定保持顺序)可能对你有用的是(你可能想根据你的要求修改规则):

var4 < 6.15 & var2 >= 9.45 & var1 >= 6.2 : 'yes'

var4 < 6.15 & var2 >= 9.45 & 5.5 <= var1 < 6.2: 'yes'

var4 < 6.15 & var2 >= 9.45 & var1 < 5.5: 'no'