【问题标题】:No missing values are allows kNN in RR中的kNN不允许缺失值
【发布时间】:2017-05-22 13:55:15
【问题描述】:

我有 17 列的 45212 个元素的数据集,我想使用 kNN 算法找到最后一列的类标签,据我说一切都很好,但我总是想出错误

"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

【问题讨论】:

  • 调试你的代码。找出缺失值的位置,以及在哪一步得到它们。
  • 编译器在谈论什么价值观?我的数据集中没有发现任何缺失值
  • data_train、data_test 或 data_train_labels 可能包含缺失值
  • 您是如何检查缺失值的?你可以试试length(complete.cases(data_train)) 和 data_test 和 data_train_labels 一样吗?
  • 顺便说一句,这是一个不同的问题,但你在 test_labels data_test_labels &lt;- data[1:25000, 17] 应该是 data_test_labels &lt;- data[25001:45212, 17] 中有一个剪切和粘贴错误

标签: r knn


【解决方案1】:

我认为您的问题是数据中的所有因素。 knn 文档说它使用欧几里得距离,这对因素没有意义。如果您真的想使用 knn,这是一个可能的解决方案。您可以使用集群包中的daisy 获得点之间的距离矩阵。 R 中有几种 knn 的实现,但我不知道有哪一种可以接受距离矩阵。您可以自己编写(不是那么难),也可以使用cmdscale 将距离矩阵映射到欧几里得空间。然后在投影空间上使用 knn。

【讨论】:

  • 好吧,我尝试将所有列都设为数值,但它仍然抱怨相同(不允许缺少值)。无论如何感谢您的指导。
  • 在通过cmdscale进行主坐标变换后,由于距离矩阵可能非常大,执行PCA是否有意义?
  • PCA 用于减少维度的数量,而 cmdscale 已经做到了。 cmdscale (k) 的第二个参数允许您选择所需的维度。距离矩阵仍然很大,因为实例(点)的数量会很大。
  • 太好了,非常有用!不知道隐式降维...
【解决方案2】:

我相信你的错误是:data_train

您包含尚未标准化的标题。我能够重现相同的错误。但是当我更改为 data_train

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2016-11-10
    • 2019-11-02
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    相关资源
    最近更新 更多