机器学习 KNN 模型中的新分类

数据挖掘 机器学习 r 监督学习 k-nn
2022-02-17 10:54:36

这是我的 KNN 模型示例(我使用 R 编写):

library(gmodels)
library(caret)
library(class)

db_class <- iris

row_train <- sample(nrow(db_class),nrow(db_class)*0.8)
db_train_x <- db_class[row_train,-ncol(db_class)]
db_train_y <- db_class[row_train,ncol(db_class)]
db_test_x <- db_class[-row_train,-ncol(db_class)]
db_test_y <- db_class[-row_train,ncol(db_class)]

model_knn <- knn(db_train_x,db_test_x,db_train_y,12)

summary(model_knn)

CrossTable(x=db_test_y,y=model_knn,prop.chisq = FALSE)
confusionMatrix(data=factor(model_knn),reference=factor(db_test_y))

所以,这是一个有监督的 KNN 模型。如何对新注册进行分类?我有这个新注册:

new_record <- c(5.3,3.2,2.0,0.2)

如何使用以前的模型对其进行分类?

1个回答
  1. 您可以使用通用trainfromcaret来训练模型
  2. 新条目需要以 Train set 的形式添加,然后才能预测

我会这样做:

library(caret)

model_knn<-train(Species ~ ., data = db_class[row_train,], method = "knn",tuneLength = 10)

#You can select any other tune length too. This is just an example.
#You can even choose to preprocess the data, with the train parameter

现在您必须将其转换new_record为合适的数据框:

new_record <- c(5.3,3.2,2.0,0.2)

test_data <- NULL

i<-1

while (i <= length(new_record)) {
  test_data <- cbind(new_record[i], test_data)
  i<- i+1
}

colnames(test_data)<-colnames(db_class)[1:4]

现在您可以进行预测:

predict(model_knn, newdata=test_data)

[1] versicolor
Levels: setosa versicolor virginica

使用您的测试数据进行预测:

predict(model_knn, newdata=db_test_x)
 [1] setosa     setosa     setosa     setosa     setosa     setosa     setosa     versicolor
 [9] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[17] versicolor versicolor versicolor versicolor virginica  versicolor virginica  virginica 
[25] virginica  virginica  virginica  virginica  versicolor virginica 
Levels: setosa versicolor virginica

这是否解决了您的目的?