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'
我想知道是否有办法自动查找/生成这样的规则..
比如我有数据
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'