Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何计算落在树的每个节点上的观察值_R_Tree_Classification_Decision Tree - Fatal编程技术网

R 如何计算落在树的每个节点上的观察值

R 如何计算落在树的每个节点上的观察值,r,tree,classification,decision-tree,R,Tree,Classification,Decision Tree,我目前正在处理MMST软件包中的葡萄酒数据。我已将整个数据集拆分为训练和测试,并构建了一棵树,如以下代码所示: library("rpart") library("gbm") library("randomForest") library("MMST") data(wine) aux <- c(1:178) train_indis <- sample(aux, 142, replace = FALSE) test_indis <- setdiff(aux, train_ind

我目前正在处理MMST软件包中的葡萄酒数据。我已将整个数据集拆分为训练和测试,并构建了一棵树,如以下代码所示:

library("rpart")
library("gbm")
library("randomForest")
library("MMST")

data(wine)
aux <- c(1:178)
train_indis <- sample(aux, 142, replace = FALSE)
test_indis <- setdiff(aux, train_indis)

train <- wine[train_indis,]
test <- wine[test_indis,]    #### divide the dataset into trainning and testing

model.control <- rpart.control(minsplit = 5, xval = 10, cp = 0)
fit_wine <- rpart(class ~ MalicAcid + Ash + AlcAsh + Mg + Phenols + Proa + Color + Hue + OD + Proline, data = train, method = "class", control = model.control)

windows()
plot(fit_wine,branch = 0.5, uniform = T, compress = T,  main = "Full Tree: without pruning")
text(fit_wine, use.n = T, all = T, cex = .6)
库(“rpart”)
图书馆(“gbm”)
图书馆(“森林”)
图书馆(“MMST”)
数据(葡萄酒)

aux这些数字表示该节点中每个类的成员数。因此,标签“0/1/48”告诉我们有0例1类(我推断为Barabera),只有一例2类(Barolo),48例3类(Grignolino)

您可以使用
summary(fit\u wine)

有关更多详细信息,请参见
?summary.rpart

您还可以使用
predict()
(将调用
predict.rpart()
)查看树如何对数据集进行分类。例如,
predict(fit_wine,train,type=“class”)
。或者将其包装在表格中以便于查看
表格(predict(fit_wine,train,type=“class”)、train[,“class”)

如果您特别想知道观察落在哪个叶节点上,此信息存储在
fit\u wine$where
中。对于数据集中的每个案例,
fit_-wine$where
包含代表案例所在叶节点的
fit_-wine$frame
的行号。因此,我们可以通过以下方法获得每个案例的叶信息:

trainingnodes <- rownames(fit_wine$frame)[fit_wine$where]
从这一点,我们可以推断出不同的节点,例如,从
unique(testresults[,2:4]
)推断出不同的节点,但这是不雅观的

然而。他复制rpart对象并用中的节点替换类,因此运行predict将返回节点而不是类:

nodes_wine <- fit_wine
nodes_wine$frame$yval = as.numeric(rownames(nodes_wine$frame))
testnodes <- predict(nodes_wine, test, type="vector")

nodes\u wine感谢您的回答,我尝试了“predict()”方法,结果是一系列类别,如Barabera、Barolo和Grignolino,有没有办法看到它们最终属于哪个节点,因为有几个节点代表同一类别。我这样运行:result。
test\u pred是的,
type=“class”
更好,但对于我们想要的东西,
type=“matrix”
似乎更有帮助。
nodes_wine <- fit_wine
nodes_wine$frame$yval = as.numeric(rownames(nodes_wine$frame))
testnodes <- predict(nodes_wine, test, type="vector")