如何在R中使用knn模型获取新数据?

时间:2018-05-31 20:36:51

标签: r classification knn

我刚刚在R中编写了一个knn模型。但是,我不知道如何使用输出来预测新数据。

# split into train (treino) and test (teste)
treino_index <- sample(seq_len(nrow(iris)), size = round(0.75*nrow(iris)))
treino <- iris[treino_index, ]
teste <- iris[-treino_index, ]

# take a look at the sample
head(treino)
head(teste)

# save specie from later
treino_especie = treino$Species
teste_especie = teste$Species

# exclude species from train and test dataset
treino = treino[-5]
teste = teste[-5]

# runs knn
library(class)
iris_teste_knn <- knn(train = treino, test = teste, cl= treino_especie,k = 3,prob=TRUE) 


# model performance using cross table
install.packages('gmodels')
library('gmodels')
CrossTable(x=teste_especie, y=iris_teste_knn, prop.chisq=FALSE)

如何将此应用于新数据。假设我有一个具有以下参数的物种:Sepal.Length = 5.0,Sepal.Width = 3.3,Petal.Length = 1.3,Petal.Width = 0.1。我怎么知道它来自哪个物种?

2 个答案:

答案 0 :(得分:0)

Knn 是一个懒惰的分类器。它不会创建适合以后预测,如在逻辑回归,基于树的算法等其他分类器的情况下。 它同时适合和评估。完成性能参数调整后,将优化参数与新测试用例一起提供。使用:

  x = c(5.0, 3.3, 1.3, 0.1)                          # test case
  knn(train = treino , test = x , cl= treino_especie, k = 3,prob=TRUE)

答案 1 :(得分:0)

关于预测r中knn模型中的新数据,你可以简单地输入knn函数中的测试参数,例如:以下

irisk_teste_knn <- knn(train = treino, test = new.Data, cl = treino_especie, k = 3, prob = T)

在kNN模型中,您可以通过squareroot记录观察总数来指定k。要评估模型,您可以使用包含在gmodel包中的CrossTable函数,如下所示:

library(gmodels)
CrossTable(x = new.Data$label, 
           y = iris_teste_knn, 
           prop.chisq = F)