【问题标题】:Identify objects with wrong class according to confusion matrix in R根据R中的混淆矩阵识别具有错误类别的对象
【发布时间】:2018-10-08 08:15:29
【问题描述】:

也许我搜索了错误的关键字以找到解决此问题的方法,但到目前为止我还没有在网上找到答案。

情况:我已经使用 CARET 包在 R 中训练了一个逻辑回归模型,该模型具有正则化,用于二类分类。然后,我使用该模型预测了我的训练和验证集的类别,以接收混淆矩阵并衡量模型的性能。

问题:现在我想根据我的模型识别具有错误类的对象。因此,那些在实际上属于“否”类时被预测为“是”的那些,在混淆矩阵中反之亦然。我想这样做来检查对象,以改进或更改功能以获得更好的模型。我想知道的是它们在数据框中的位置。

我的相关代码:

set.seed(1)
datapart <- createDataPartition(m$class, p = .85, list = FALSE)
train <- m[datapart ,]
validation <- m[-datapart ,]

library(glmnet)
set.seed(1)
glmnetcontrol <- trainControl(method="repeatedcv", number=10, repeats=3, classProbs = TRUE, summaryFunction = twoClassSummary, search = "random")
glmnet <- train(class~., data=train, method="glmnet", trControl = glmnetcontrol, metric="ROC")

predict_validation <- predict(glmnet, validation, type="raw")
predict_train <- predict(glmnet, train, type="raw")

quality_glmnet_valid <- confusionMatrix(predict_validation , validation$class)
quality_glmnet_train <- confusionMatrix(predict_train , train$class)

【问题讨论】:

  • 您可以尝试str(quality_glmnet_valid) 检查返回的内容并使用$ 运算符访问您想要的元素

标签: r classification r-caret


【解决方案1】:

由于您的预测是原始概率,因此您需要将它们作为一个类。以下&gt;=0.5 条件检查是将它们转换为TRUEFALSE。如果您希望它是 1 或 0(假设您的 class 变量是 10 的二进制因子),那么您可以简单地为您的预测和真实类标签不同意的行设置子集彼此。

`validation[as.numeric(validation$class) != as.numeric(predict_train >= 0.5), ]`

因为您没有发布数据,所以我必须对您的数据的结构或格式做出一些假设。您可以调整代码以获取存在错误预测的行(如果它们不是数字 0 或 1,请发表评论并让我知道或发布示例)。

【讨论】:

  • 感谢您的回答,这正是我想要的。但是,'type="raw"' 确实已经返回类。所以我现在要做的是将现有类转换为数值参数,以将它们与真正的类进行比较,正如你所解释的。另外我不确定我是否会使用 >=0.5 参数来创建类,因为我不知道算法选择了哪个概率阈值。
  • 很高兴听到它有帮助!是的,如果它返回一个类而不是概率,则不需要进行转换。那么您也不必担心阈值问题。大多数时候 type=raw 确实返回概率,所以这很有趣。只需检查预测向量何时与真实标签不一致 (!=)
猜你喜欢
  • 2013-07-08
  • 2019-01-05
  • 2021-05-04
  • 2021-05-01
  • 2020-12-02
  • 2013-11-21
  • 2021-03-01
  • 1970-01-01
  • 2018-01-25
相关资源
最近更新 更多