gpt4 book ai didi

R 插入符包 (rpart) : constructing a classification tree

转载 作者:行者123 更新时间:2023-12-04 16:34:06 24 4
gpt4 key购买 nike

我正在努力使用 caret 包执行分类树几天。
问题是我的因子变量。我生成了树,但是当我尝试使用最佳模型对测试样本进行预测时,它失败了,因为 train 函数为我的因子变量创建了虚拟对象,然后 predict 函数无法在测试集中找到这些新创建的虚拟对象.我应该如何处理这个问题?

我的代码如下:

install.packages("caret", dependencies = c("Depends", "Suggests"))      
library(caret)
db=data.frame(read.csv ("db.csv", head=TRUE, sep=";", na.strings ="?"))
fix(db)
db$defaillance=factor(db$defaillance)
db$def=ifelse(db$defaillance==0,"No","Yes")
db$def=factor(db$def)
db$defaillance=NULL
db$canal=factor(db$canal)
db$sect_isodev=factor(db$sect_isodev)
db$sect_risq=factor(db$sect_risq)

#delete zero variance predictors
nzv <- nearZeroVar(db[,-78])
db_new <- db[,-nzv]

inTrain <- createDataPartition(y = db_new$def, p = .75, list = FALSE)
training <- db_new[inTrain,]
testing <- db_new[-inTrain,]
str(training)
str(testing)
dim(training)
dim(testing)

用于训练/测试的 str() 函数示例如下:
 $ FDR        : num  1305 211 162 131 143 ...
$ FCYC : num 0.269 0.18 0.154 0.119 0.139 ...
$ BFDR : num 803 164 108 72 76 63 100 152 188 80 ...
$ TRES : num 502 47 54 59 67 49 53 -7 -103 -109 ...
$ sect_isodev: Factor w/ 9 levels "1","2","3","4",..: 4 3 3 3 3 3 3 3 3 3 ...
$ sect_risq : Factor w/ 6 levels "0","1","2","3",..: 6 6 6 6 6 6 6 6 6 6 ...
$ def : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 1 1 1 1 ...
> dim(training)
[1] 14553 42
> dim(testing)
[1] 4850 42

然后我的代码是这样的:
fitControl <- trainControl(method = "repeatedcv",
number = 10,
repeats = 10,
classProbs = TRUE,
summaryFunction = twoClassSummary)

#CART1
set.seed(1234)
tree1 = train (def~.,
training,
method = "rpart",
tuneLength=20,
metric="ROC",
trControl = fitControl)

一个样本
summary(tree1$finalModel)

在这儿
RNTB          38.397731
sect_isodev1 6.742289
sect_isodev3 4.005016
sect_isodev8 2.520850
sect_risq3 9.909127
sect_risq4 6.737908
sect_risq5 3.085714
SOLV 73.067539
TRES 47.906884
sect_isodev2 0.000000
sect_isodev4 0.000000
sect_isodev5 0.000000
sect_isodev6 0.000000
sect_isodev7 0.000000
sect_isodev9 0.000000
sect_risq0 0.000000
sect_risq1 0.000000
sect_risq2 0.000000

这是错误:

model.tree1 <- predict(tree1$finalModel,testing) Error in eval(expr, envir, enclos) : object 'sect_isodev1' not found



我对另一件事很好奇。我在 Max Kuhn 的“Predictive Modeling with R”中发现了以下语法:
predict(rpartTune$finalModel, newdata, type = "class")

哪里 rpartTune$finalModel是与我的(或我的与他的相同)的分类树。
现在,R 不接受 type="class"。只输入=“概率”。我因此而烦恼。

预先感谢您的回复

最佳答案

不要使用 predict.rpart train$finalModel除非你有很好的理由。 rpart对象不知道任何 train做了,包括预处理。它可能不会给你正确的答案。毕竟,您可能正在使用 train为了避免细节所以让predict.train做这项工作。

最大限度

编辑 -

关于type = "class"type = "prob"少量..
predict.rpart默认生成类概率。虽然 rpart是最早的包之一,这是非典型的,因为默认情况下大多数生产类。
predict.train默认情况下生成类,您必须使用 type = "prob"得到概率。

关于R 插入符包 (rpart) : constructing a classification tree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27551863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com