r语言 - 数据帧中错误:选择未定义的列



>CODE:

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

代码中有多个错误。

  1. 您正在对训练数据使用多个 PCA 预处理步骤。首先作为单独的预处理,然后再次作为训练函数。这不是必需的。您可以使用preproc选项一次性完成所有操作。在训练中使用它的好处是,如果您开始进行预测,新数据将得到正确处理。否则,您需要先通过预预测运行测试/新数据,然后再进行模型预测。

  2. 将训练中的公式指定为 training$type,并将数据部分指定为 trainPC。这不起作用,因为您现在从 2 个数据帧中获取数据。

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

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

最新更新