【发布时间】:2019-08-27 16:50:04
【问题描述】:
我正在尝试在数据集上运行 kNN,但我不断收到一些 NA 错误。我已经用尽了堆栈溢出来试图找到解决这个问题的方法。我在任何地方都找不到有用的东西。
这是我正在使用的数据集:https://www.kaggle.com/tsiaras/uk-road-safety-accidents-and-vehicles
我已经将我的预测器和目标的每个单因子变量和整数变量转换为数字,以便它可以进行欧几里得距离。我已经删除了所有的 NA,但 kNN 不断抛出以下错误消息:
NAs introduced by coercionNAs introduced by coercionError in knn(train[2:nrow(train), c(11, 22, 23, 25, 27, 28)], test[(2:nrow(test)), :
NA/NaN/Inf in foreign function call (arg 6)
这是我如何转换所有预测变量并运行 kNN 的一个示例:
as.numeric(levels(test$Road_Type))[levels(test$Road_Type)]
as.numeric(levels(train$Road_Type))[levels(train$Road_Type)]
train <- na.exclude(train)
test <- na.exclude(test)
cl=as.numeric(train[2:nrow(train),5])
cl <- na.exclude(cl)
knn0 <- knn(train[2:nrow(train),c(11,22,23,25,27,28)], test[(2:nrow(test)),c(11,22,23,25,27,28)], cl)
我正在为所有列 11、22、23、25、27、28 以及目标执行 as.numeric 内容。我从 2 开始这一行,所以它不包括标签。在将参数传递给 kNN 函数之前,我还尝试运行以下代码:
sum(is.na(train[2:nrow(train),c(11,22,23,25,27,28)]))
sum(is.na(test[2:nrow(test),c(11,22,23,25,27,28)]))
sum(is.na(cl))
所有这 3 个都返回 0,因此在我将它传递给 kNN 函数之前没有 NA 值。
编辑
通过像这样转换为数字来解决问题:
train$Road_Type
感谢所有帮助过的人!
【问题讨论】:
标签: r algorithm machine-learning knn