2016-12-17 60 views
2

我有45212元素的數據集與17列,我想找到最後一列的類標籤使用kNN算法,根據我一切都好,但我總是想出錯誤沒有缺失的值是允許kNN在R

"Error in knn(train = data_train, test = data_test, cl = data_train_labels, : 
    no missing values are allowed" 

這裏是我的代碼

> data_train <-data[1:25000,] 
> data_test <-data[25001:45212,] 
> data_train_labels <- data[1:25000, 17] 
> data_test_labels <- data[1:25000, 17] 
> install.package("class") 
> library(class) 
> data_test_pred <- knn(train=data_train, test=data_test, cl=data_train_labels, k=10) 

這裏是我的數據集看起來像:

age,job,marital,education,default,balance,housing,loan,contact,day,month,duration,campaign,pdays,previous,poutcome,y 
58,management,married,tertiary,no,2143,yes,no,unknown,5,may,261,1,-1,0,unknown,no 
44,technician,single,secondary,no,29,yes,no,unknown,5,may,151,1,-1,0,unknown,no 
33,entrepreneur,married,secondary,no,2,yes,yes,unknown,5,may,76,1,-1,0,unknown,no 
47,blue-collar,married,unknown,no,1506,yes,no,unknown,5,may,92,1,-1,0,unknown,no 
33,unknown,single,unknown,no,1,no,no,unknown,5,may,198,1,-1,0,unknown,no 
35,management,married,tertiary,no,231,yes,no,unknown,5,may,139,1,-1,0,unknown,no 
28,management,single,tertiary,no,447,yes,yes,unknown,5,may,217,1,-1,0,unknown,no 
42,entrepreneur,divorced,tertiary,yes,2,yes,no,unknown,5,may,380,1,-1,0,unknown,no 
58,retired,married,primary,no,121,yes,no,unknown,5,may,50,1,-1,0,unknown,no 
43,technician,single,secondary,no,593,yes,no,unknown,5,may,55,1,-1,0,unknown,no 
41,admin.,divorced,secondary,no,270,yes,no,unknown,5,may,222,1,-1,0,unknown,no 
+0

調試你的代碼。找到缺失值的位置,以及在哪個步驟獲取它們。 – user31264

+0

編譯器談論什麼值? 我在我的數據集中找不到任何缺失值 – NATS

+0

data_train或data_test或data_train_labels可能包含缺失值 – user31264

回答

1

我認爲你的問題是數據中的所有因素。 knn文件說它使用歐幾里得距離,這對於因素沒有意義。如果你真的想使用knn,這是一個可能的解決方案。您可以在集羣軟件包中使用daisy獲得點之間的距離矩陣。 R中有knn的幾個實現,但我不知道接受距離矩陣的實現。你可以寫你自己的(不那麼難),或者你可以使用cmdscale將距離矩陣映射到歐幾里得空間。然後在投影空間上使用knn。

+0

好吧,我試着將所有的列都設置爲數字值,但它仍然抱怨相同(不允許缺少值)。無論如何感謝指導。 – NATS

1

我相信,你的錯誤是:data_train < -data [1:25000,]

你包括你的頭,你有沒有標準化。我能夠重現相同的錯誤。但是當我更改爲data_train < -data [2:25000,]它運行良好。