全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
16158 4
2013-05-25
今天遇到一个很奇怪的问题,在R中用Knn算法实现数据集iris3聚类时,本来把50份数据按30份训练数据,20份测试数据进行编码时,运行出现错误,说是“训练集和类长度不一致(错误于knn.cv(train, test, cl, k = 3, prob = TRUE) :  'train' and 'class' have different lengths)”,但是仅仅把数据按照25作为训练集,25作为测试集则能运行通过。这是为什么呢?搞不懂。求坛里的大牛帮忙解释解释。感激不尽!(现在把代码都粘在下面)
library(FNN)
library(gmp)
library(rknn)

data(iris3)
  train <- rbind(iris3[1:30,,1], iris3[1:30,,2], iris3[1:30,,3])  #选前30个数据为训练数据
  test <- rbind(iris3[31:50,,1], iris3[31:50,,2], iris3[31:50,,3])#剩下的为测试数据
  cl <- factor(c(rep("s",30), rep("c",30), rep("v",30)))
  knn.cv(train, test, cl, k = 2, prob=TRUE)                         #进行KNN算法分类,此处出现错误

错误于knn.cv(train, test, cl, k = 3, prob = TRUE) :  'train' and 'class' have different lengths

#下面这份代码能运行通过
> data(iris3)
>     train <- rbind(iris3[1:25,,1], iris3[1:25,,2], iris3[1:25,,3])
>     test <- rbind(iris3[26:50,,1], iris3[26:50,,2], iris3[26:50,,3])
>     cl <- factor(c(rep("s",25), rep("c",25), rep("v",25)))
>     knn(train, test, cl, k = 3, prob=TRUE)



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-10-21 19:16:37
You can  explore  it have "ties".
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-6-18 21:30:42
你的第一段代码写错了:
最后一行应该是 knn(train, test, cl, k = 2, prob=TRUE) ,而不是用knn.cv,knn.cv是用来做cross validation的。
在使用knn.cv的时候,你的第二个参数应该是cl,而不是test,所以会报错。
p.s.不知道这个时候回答是不是太晚了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-4-14 14:07:44
该函数自动设立train和test集,是leave one out,只定一个是test,其余全部当做train。所以无需你去设置。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群