我正在尝试使用caret
包来查找最佳k值,以运行KNN算法。我的数据看起来是like this(代码上的datanet
),其中"ACTIVITY_X"
,"ACTIVITY_Y"
和"ACTIVITY_Z"
是我的预测变量,因为我想根据B列到D列的值对"Event"
进行分类。所有列都有相同的行数。
为此,我首先需要拆分数据以进行交叉验证。这是我的代码示例:
# 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"
,然后将其应用于其余列,是否可以?任何帮助表示赞赏!
最佳答案
您需要根据目标变量而不是预测变量来拆分数据。那是:
indxTrain <- createDataPartition(y = datanet$Event,p = 0.8,list = FALSE)
这是
?createDataPartition
中的原因:ÿ
结果的载体。对于createTimeSlices,它们应按时间顺序排列。