【发布时间】: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