数据框中的错误:选择了未定义的列

问题描述 投票:0回答:1

码:

library(caret); library(kernlab); data(spam)
inTrain <- createDataPartition(y=spam$type,
p=0.75, list=FALSE)
training <- spam[inTrain,]
testing <- spam[-inTrain,]

M <- abs(cor(training[,-58]))
diag(M) <- 0
which(M > 0.8,arr.ind=T)

preProc <- preProcess(log10(spam[,-58]+1),method="pca",pcaComp=2)
spamPC <- predict(preProc,log10(spam[,-58]+1))

preProc <- preProcess(log10(training[,-58]+1),method="pca",pcaComp=2)
trainPC <- predict(preProc,log10(training[,-58]+1))
modelFit <- train(training$type ~ .,method="glm",preProc = "pca",data=trainPC)

何时执行以下错误发生:

Error in [.data.frame(data, , all.vars(Terms), drop = FALSE) :
undefined columns selected
r r-caret
1个回答
0
投票

您的代码中存在多个错误。

  1. 您正在对训练数据使用多个pca预处理步骤。首先作为单独的预处理,然后再次在列车功能中。这不是必需的。您可以使用preproc选项一次完成所有操作。在火车中使用它的好处是,如果你开始做预测,新数据将被正确处理。否则,您需要在模型预测之前首先通过preproc预测运行测试/新数据。
  2. 您将train中的公式指定为training $ type,并将数据部分指定为trainPC。这不起作用,因为您现在从2个data.frames获取数据。

以下代码将执行您要执行的操作。如果y是一个因子,glm方法将指定family参数本身。但最好自己指定一下。

inTrain <- createDataPartition(y=spam$type,
                               p=0.75, list=FALSE)
training <- spam[inTrain,]
testing <- spam[-inTrain,]


modelFit <- train(type ~ ., 
                  data = training,
                  method = "glm",
                  preProc = "pca",
                  family = binomial)

你会得到一些警告,如下所示。但如果你只是运行一个glm,你也会得到那些。

glm.fit:拟合概率数值为0或1

© www.soinside.com 2019 - 2024. All rights reserved.