1

我怎样才能知道在构造树中实际使用了哪些变量?

model = tree(status~., set.train)

如果我写,我可以看到变量:

summary(model)

tree(formula = status ~ ., data = set.train)
Variables actually used in tree construction:
[1] "spread1"      "MDVP.Fhi.Hz." "DFA"          "D2"           "RPDE"                "MDVP.Shimmer" "Shimmer.APQ5"
Number of terminal nodes:  8 
Residual mean deviance:  0.04225 = 5.831 / 138 
Distribution of residuals:
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-0.9167  0.0000  0.0000  0.0000  0.0000  0.6667 

但是我怎样才能得到一个向量,实际使用了哪些变量的索引?

4

4 回答 4

6

str()您可以使用该函数查看对象的结构。在那里查看时,您应该看到几个不同的地方来提取用于制作树模型的变量,这里是一个示例:

> library(tree)
> 
> fit <- tree(Species ~., data=iris)
> attr(fit$terms,"term.labels")
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"

编辑:由于您特别要求索引,您可以只match()返回数据集中的变量名称(尽管它们可能总是按顺序排列 - 我以前没有使用过这个tree包,所以我不能说)。

> match(attr(fit$terms,"term.labels"),names(iris))
[1] 1 2 3 4
> names(iris)[match(attr(fit$terms,"term.labels"),names(iris))]
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width" 

编辑2:

你是对的!尝试这个:

> summary(fit)$used
[1] Petal.Length Petal.Width  Sepal.Length
Levels: <leaf> Sepal.Length Sepal.Width Petal.Length Petal.Width
于 2013-08-18T19:08:17.237 回答
1

我想这就是你要找的

fit <- rpart(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data=iris) used.var <- setdiff(levels(fit$frame$var), "<leaf>")

于 2019-10-19T23:52:34.203 回答
0

很长一段时间以来,使用包 rpart 而不是树。我认为在 rpart::printcp() 中编码的 rpart 中使用的 Brian Ripley 的解决方案可能仍然很有趣。它是这样的:

library(rpart)
r.rp <- rpart(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,   data=iris)
r.rp

# extract from rpart::printcp()
frame <- r.rp$frame
leaves <- frame$var == "<leaf>"
used <- unique(frame$var[!leaves])
if (!is.null(used)) {
   cat("Variables actually used in tree construction:\n")
   print(sort(as.character(used)), quote = FALSE)
cat("\n")
}
于 2018-11-03T17:13:31.867 回答
-2

如果您愿意切换到类似的包rpart,您可以直接从fit

fit <- rpart(Species ~., data=iris)
fit$variable.importance
于 2016-03-31T08:26:56.570 回答