Я пытаюсь запустить 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, а также для цели.Я начинаю строку с 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, поэтому нет никаких значений NA, прежде чем я передам его в функцию kNN.
РЕДАКТИРОВАТЬ
Исправлена проблема путем преобразования в числовое значение, например:
train $ Road_Type <- as.numeric (as.integer (factor (train $ Road_Type))) </p>
Спасибо всем, кто помог!