r - 插入符号包中多个列的 createDataPartition
问题描述
我正在尝试使用caret
包找到最佳 k 值来运行 KNN 算法。我的数据看起来像这样(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"
因为分区将应用于其余列?
任何帮助表示赞赏!
解决方案
您需要根据目标变量而不是预测变量来拆分数据。那是:
indxTrain <- createDataPartition(y = datanet$Event,p = 0.8,list = FALSE)
原因?createDataPartition
如下:
y
结果向量。对于 createTimeSlices,这些应该按时间顺序排列。
推荐阅读
- sql - SUM CASE WHEN (SQL)
- xml - 如何在 SPARQL 查询语言中匹配 RDF 三元组中主题的相对 IRI?
- android - Android TransitionManager 下面的视图没有动画
- python - 如何在 docker 上的 Jenkins 中设置 PYTHONPATH
- c++ - C ++无法插入空向量
- scala - 如何避免在Scala的Spark RDD中使用collect?
- python - 如何使用 python webdriver 在此文本框中书写?
- scala - Play Framework 2.5:未定义 trait Filter 类型 => akka.stream.Materializer 中的方法 mat
- paypal - 验证订单 ID 是否存在
- angular - Webpack 生成 SCSS 源映射但不生成 JS