如何使用 R 中经过训练的分类器预测新数据集?

Posted

技术标签:

【中文标题】如何使用 R 中经过训练的分类器预测新数据集?【英文标题】:How to predict new data set using trained classifier in R? 【发布时间】:2021-02-22 19:46:46 【问题描述】:

我想使用经过训练的分类器来预测变量(iris Species)如何在 R 中实现?为简单起见,我生成了一个不包含 Species 变量的人工 iris_unknown 集。我希望分类器预测 iris_unknown 中的 Species 变量。

library(caret)

trainIndex <- caret::createDataPartition(iris$Species, p = 0.5, list = FALSE)
irisTrain <- iris[ trainIndex,]
iris_unknown  <- iris[-trainIndex,][,-5] #delete last column species to make unknown variable
model_nnet <- train(irisTrain, irisTrain$Species, method = 'nnet', importance = TRUE)

pred_annFit <- predict(model_nnet, newdata = iris_unknown)

我收到错误:

Error: 'eval(predvars, data, env)': object 'Species' not found

【问题讨论】:

【参考方案1】:

您在训练模型时提供了 Species 列,您不应该这样做,因为它将被使用。是否在测试 data.frame 中包含标签并不重要,因为如果您的模型经过训练,它将不会使用该列。所以是这样的:

iris_unknown  <- iris[-trainIndex,-5]
model_nnet <- train(irisTrain[,-5], irisTrain$Species, method = 'nnet', importance = TRUE)

pred_annFit <- predict(model_nnet, newdata = iris_unknown)

这是一个令人难以置信的向量,您可以将其放入数据框中:

str(pred_annFit)
 Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

让我们把向量预测放回去:

iris_unknown$prediction = pred_annFit

【讨论】:

这不是我的意思。我希望分类器以这样的方式进行预测,即它创建一个新列并根据该行的数据预测表中每一行中的物种。最终得到一个表,其中包含一列,每行都有预测的 Species。 我不知道你指的是什么。如果省略最后一列,则会得到相同的结果。请参阅编辑后的答案。你可以试试这个代码,你会发现你发布的代码有错误 谢谢,我就是这个意思。

以上是关于如何使用 R 中经过训练的分类器预测新数据集?的主要内容,如果未能解决你的问题,请参考以下文章

如何将经过训练和测试的随机森林模型应用于 tidymodels 中的新数据集?

如何在 sklearn 中使用训练有素的 NB 分类器预测电子邮件的标签?

如何使用由经过训练的神经网络创建的权重矩阵在另一个文件中进行预测?

MATLAB:使用 fitctree 训练的分类器对新数据进行标签预测

如何进行交叉验证 SVM 分类器

如何生成混淆矩阵并找到朴素贝叶斯分类器的错误分类率?