使用类包中的 knn() 在 R 中查找 k-Nearest-Neighbor
Posted
技术标签:
【中文标题】使用类包中的 knn() 在 R 中查找 k-Nearest-Neighbor【英文标题】:Finding k-Nearest-Neighbor in R with knn() from class package 【发布时间】:2015-04-17 11:02:21 【问题描述】:这是家庭作业。
我有 2 个矩阵,1 个用于训练,1 个用于测试。 数据有两列数据用于分类,第三列是已知类别。两个矩阵都有第三列。
[1] [2] [3]
[1] 6.4 0.32 2
[2] 4.8 0.34 0
[3] 4.9 0.25 2
[4] 7.2 0.32 1
其中的整数是类(从 0 到 2)。
我的数据集的维度是训练集 100 3 和测试集 38 3。
我尝试使用类库的 knn() 函数。
knn 使用以下参数:(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE)
我曾尝试直接使用我的数据集,但随后出现错误:“'train' and 'class' have different lengths”
我已经尝试了一些东西,但是几个小时后我被卡住了。目前我的编辑器中有这段代码:
cl <- t(factor(c(rep("0",1), rep("1",1), rep("2",1))))
k <- knn(train, test, cl)
但它不起作用。有人可以帮我吗?
我想用 3 个不同的 k 值运行函数,并找出每个的准确度。之后我将进行 5 折交叉验证最佳 k。
【问题讨论】:
***.com/questions/16276388/… 【参考方案1】:正如文档所述,cl
是 factor of true classifications of the training set
,即您的 y
变量(训练集的第三列)。
这意味着函数应该如下:
cl <- factor(c(2,0,2,1)) #or alternatively factor(train[,3])
k <- knn(train[,c(1,2)], test[,c(1,2)], cl)
正如您在训练和测试集中看到的那样,y
变量(包含类的列)不包含在测试和训练集中。该列仅作为cl
参数中的一个因素。
您收到的错误是因为训练集的行数不等于因子的长度,在这种情况下它只有 3 个元素(这是因为您认为您只需要指定因子的级别那里)。
【讨论】:
以上是关于使用类包中的 knn() 在 R 中查找 k-Nearest-Neighbor的主要内容,如果未能解决你的问题,请参考以下文章