插入符包中几列的createDataPartition

时间:2019-02-01 10:50:11

标签: r machine-learning cross-validation r-caret knn

我正在尝试使用caret包来查找最佳k值,以运行KNN算法。我的数据看起来like this(代码上的datanet)中有"ACTIVITY_X""ACTIVITY_Y""ACTIVITY_Z"是我的预测变量,因为我想基于"Event"进行分类B到D列的值。所有列的行数都相同。

为此,我首先需要拆分数据以进行交叉验证。这是我的代码示例:

# Split the data:

indxTrain <- createDataPartition(y = datanet$ACTIVITY_X,p = 0.8,list = FALSE)
training <- datanet[indxTrain,]
testing <- datanet[-indxTrain,]

# Run k-NN:
set.seed(400)
ctrl <- trainControl(method="repeatedcv",repeats = 3)
knnFit <- train(Event ~ ., data = training, method = "knn", trControl = ctrl, preProcess = c("center","scale"),tuneLength = 20)
knnFit

#Use plots to see optimal number of clusters:
#Plotting yields Number of Neighbours Vs accuracy (based on repeated cross validation)
plot(knnFit)

我的问题是两个:

1)如果我在使用caret包时正确理解了,y中的createDataPartition参数需要是预测变量吗?

2)如果是这样,我有前面提到的三个预测变量("ACTIVITY_X""ACTIVITY_Y""ACTIVITY_Z"),但是如果我正在运行createDataPartition(y = datanet$(ACTIVITY_X, ACTIVITY_Y, ACTIVITY_Z)p = 0.8,list = FALSE),我会得到错误消息。

关于预测变量数据包含多列时如何使用createDataPartition进行交叉验证的任何想法?

仅使用一个预测变量(假设为createDataPartition)运行"ACTIVITY_X"作为分区,然后将其应用于其余列是否可以?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要根据目标变量而不是预测变量来拆分数据。那就是:

indxTrain <- createDataPartition(y = datanet$Event,p = 0.8,list = FALSE)

这是来自?createDataPartition的原因:

  

y
  结果的载体。对于createTimeSlices,它们应该按时间顺序排列。