2016-07-28 102 views
1

我有一個在類變量中缺少值的測試集。 運行knn時,出現錯誤信息:「knn錯誤(...)不允許缺少值」,爲什麼?

「knn(...)中出現錯誤,不允許缺少值」。

問題:爲什麼不能讓測試集中類變量的值丟失?我的意思是,我不知道這些價值,我想預測它們。 我可以將一些類分配給類變量,並仍然得到正確的結果嗎?

示例代碼:

library(class) 
data <- data.frame("class_variable"=sample(LETTERS[1:2], 30, replace =  TRUE), 
       "predictor_1" = runif(30), 
       "predictor_2" = runif(30)) 
train <- data[1:20,] 
test <- data[21:30,] 

test$class_variable <- NA 

knn(train, test, train$class_variable) 

錯誤KNN(火車,測試,火車$ class_variable): 沒有缺失值被允許

回答

0

traintest必須具有相同的列數,並且數據中不能有NA值。所以要做到這一點,排除和test中的class_variable列,並將它們傳遞給knn。這將工作:

knn(train[, -1], test[, -1], train[, 1]) 
0

據上的kNN將R documentation,所述第三個參數knn函數採用的是訓練集的真實類值。你是正確的,你不需要測試集的真實類的價值,因爲這是你首先想要預測的。但是您沒有爲測試分類提供NA值;您正在爲培訓分類提供NA值。 kNN算法不能列車NA響應值。