【发布时间】:2015-10-29 18:49:07
【问题描述】:
我正在尝试在我的数据集上使用 knn 函数(来自类包)。它有 5 列特征,第 6 列是我希望能够预测的。我正在做 70/30 的拆分。
这是我的代码:
> ind <- createDataPartition(CSD$Caesarian, p=0.70, list=FALSE)
> csd_train <- CSD[ ind,]
> csd_test <- CSD[-ind,]
> c1 <- CSD[1:6,-c(1,2,3,4,5)]
> knn(train, test, c1, k=2, prob=TRUE)
但是我收到了这个错误。
Error in knn(train, test, c1, k = 2, prob = TRUE) :
'train' and 'class' have different lengths
我查看了其他线程并尝试了他们建议的解决方案 (KNN in R: 'train and class have different lengths'?)
并尝试了以下方法,但我仍然收到错误
> c1 = as.factor(c1)
> dim(csd_train)
[1] 57 6
> dim(csd_test)
[1] 23 6
> length(c1)
[1] 6
> knn(train, test, c1, k=2, prob=TRUE)
Error in knn(train, test, c1, k = 2, prob = TRUE) :
'train' and 'class' have different lengths
我也试过了,还是报错。
> c1 = as.factor(CSD[['Caesarian']])
> knn(train, test, c1, k=2, prob=TRUE)
Error in knn(train, test, c1, k = 2, prob = TRUE) :
'train' and 'class' have different lengths
我不知道如何解决这个问题。
如果有帮助,这里是我的数据样本:
> dput(head(CSD))
structure(list(Age = c(22L, 26L, 26L, 28L, 22L, 26L), Delivery.NO = c(1L,
2L, 2L, 1L, 2L, 1L), Delivery.NO.1 = c(1L, 1L, 0L, 1L, 1L, 0L
), BP = c(2L, 1L, 1L, 2L, 1L, 0L), Heart.Problem = c(1L, 1L,
1L, 1L, 1L, 1L), Caesarian = structure(c(1L, 2L, 1L, 1L, 2L,
1L), .Label = c("N", "Y"), class = "factor")), .Names = c("Age",
"Delivery.NO", "Delivery.NO.1", "BP", "Heart.Problem", "Caesarian"
), row.names = c(NA, 6L), class = "data.frame")
编辑 我做了
c1 <- csd_train[, 6]
长度(c1)现在是 57,这很好。但是,当我运行 knn 行时,我现在收到了这个新错误:
Error in knn(csd_train, csd_test, c1, k = 2, prob = TRUE) : NA/NaN/Inf in `foreign function call (arg 6) In addition: Warning messages: 1: In` `knn(csd_train, csd_test, c1, k = 2, prob = TRUE) : NAs introduced by coercion 2:` `In knn(csd_train, csd_test, c1, k = 2, prob = TRUE) : NAs introduced by coercion`
我所有的预测变量都是数字,并且没有缺失值。
【问题讨论】:
-
您能否提供一个可重现的错误示例?
-
第 4 行你在做什么 (
> c1 <- CSD[1:6,-c(1,2,3,4,5)]? -
我希望 c1 只是最后一列 - 第四行包括第 1-6 列但不包括第 1-5 列,只留下第 6 列。
-
@Alex 你所说的“可重现的例子”是什么意思?
-
获取一些可供所有人使用的数据,并使用这些数据重现您的错误。例如,我使用
iris数据得到了您的错误。
标签: r nearest-neighbor knn