【问题标题】:Obviously "wrong" classifications in test set using k-NN in R在 R 中使用 k-NN 在测试集中显然“错误”的分类
【发布时间】:2014-12-25 03:47:49
【问题描述】:

我正在学习 R。我正在使用 k-NN 方法对我创建的人工数据集(两个属性和两个类)进行分类。在我的代码中,我打印了训练集和测试集,但是在最后一个图中为测试集预测的类与训练集中的示例并不“一致”(即测试示例的类(使用1-NN) 看训练样例的分布显然是错误的)。

有人可以帮我找出代码中的错误吗?非常感谢。

代码如下(由于训练样例的随机生成,需要运行多次才能看到测试集样例分类错误):

library(ElemStatLearn)
require(class)

c0 <- cbind(runif(50,0,5), runif(50,0,100))
c1 <- cbind(runif(50,5,10), runif(50,0,100))
training <- rbind(c0,c1)

classt <- vector()
classt[1:50] <- 0
classt[51:100] <- 1

x_ <- seq(0, 10, 1)
y_ <- seq(0, 10, 1)
testset <- matrix(nrow = 0, ncol = 2)

for(i in x_){
  colaux <- cbind(rep(i,11), y_)
  testset <- rbind(testset, colaux)
}

testClass <- knn(train = training, test = testset, cl = classt, k = 1, prob = TRUE)

plot(training)
points(training, col=ifelse(classt==1, "coral", "cornflowerblue"))

plot(testset)
points(testset, col=ifelse(testClass==1, "coral", "cornflowerblue"))

【问题讨论】:

  • 我运行了几次代码,并没有看到输出有任何问题。您是否注意到两个图中的y 比例不同?如果您仍然确信某些地方是错误的,也许您可​​以包括图表并解释您认为错误的确切原因?
  • 你是对的,问题出在地块的 y 尺度上。很抱歉这个愚蠢的问题,非常感谢!
  • 我已将其发布为答案。如果您愿意,请随时接受。
  • 您可以使用 set.seed 函数使您的代码可重复

标签: r classification knn


【解决方案1】:

分类没有“错误”。但是,这些图表令人困惑,因为它们使用了不同的 y 比例。如果您将它们绘制在相同的比例上,您会发现分类器的工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 2015-01-21
    • 1970-01-01
    • 2011-07-31
    • 2017-08-14
    • 1970-01-01
    • 2014-04-27
    • 2019-07-05
    相关资源
    最近更新 更多