R 插入符号中的其他指标-PPV、敏感性、特异性

R 插入符号中的其他指标-PPV、敏感性、特异性,r,r-caret,R,R Caret,我在R中使用插入符号进行逻辑回归: ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10, savePredictions = TRUE) mod_fit <- train(Y ~ ., data=df, method="glm", family="binomial", trControl = ctrl

我在R中使用插入符号进行逻辑回归:

  ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10, 
                       savePredictions = TRUE)

  mod_fit <- train(Y ~ .,  data=df, method="glm", family="binomial",
                   trControl = ctrl)

  print(mod_fit)

ctrl插入符号已经具有摘要功能,可以输出您提到的所有度量:

defaultSummary
输出准确性和Kappa
twoClassSummary
输出AUC(ROC曲线下的区域-见答案的最后一行)、敏感性和特异性
prSummary
输出精度和召回率

为了获得综合指标,您可以编写自己的汇总函数,将这三个指标的输出结合起来:

library(caret)
MySummary  <- function(data, lev = NULL, model = NULL){
  a1 <- defaultSummary(data, lev, model)
  b1 <- twoClassSummary(data, lev, model)
  c1 <- prSummary(data, lev, model)
  out <- c(a1, b1, c1)
  out}
定义列车控制时,重要的是设置
classProbs=TRUE
,因为其中一些指标(ROC和prAUC)不能基于预测的等级,而是基于预测的概率进行计算

ctrl <- trainControl(method = "repeatedcv",
                     number = 10,
                     savePredictions = TRUE,
                     summaryFunction = MySummary,
                     classProbs = TRUE)

ctrl你好,辛迪。在使用
插入符号::train()
之前,您是否将数据分为培训组和测试组?不,我不是。当我指定交叉验证时,我假设插入符号为我做这件事。这不对吗?谢谢你的回答。以下哪一项不能根据预测的等级计算,而是根据预测的概率计算?很高兴为您提供帮助。ROC和prAUC需要概率,因为它们是考虑所有可能的决策阈值的度量,而不仅仅是通常使用的0.5分。因此,当您处理不平衡的类时,它们是模型性能更好的度量标准。太好了!在尝试修复此问题时,我遇到了一个错误:错误:至少有一个类级别不是有效的R变量名;这将在生成类概率时导致错误,因为变量名称将转换为X0,X1。请使用可用作有效R变量名的因子级别(有关帮助,请参阅?make.names)。我想这是由于我对大多数变量的因子命名为“0”和“1”。有没有简单的办法?仅当classprobs=True在培训之前将班级级别名称转换为单词而不是数字时,这才是一个问题-例如
0
1
而不是
0
1
<代码>类您可以演示如何编写自定义函数
MySummary
?如果我有
data=htn\u data
Class=affirmative
Class=negative
model=rf\u model
我如何利用该功能?我试图
MySummary(htn\u data,htn\u data$Class,rf\u model)
只是为了得到选中的
未定义列
错误消息。
library(mlbench)
data("Sonar")
ctrl <- trainControl(method = "repeatedcv",
                     number = 10,
                     savePredictions = TRUE,
                     summaryFunction = MySummary,
                     classProbs = TRUE)
mod_fit <- train(Class ~.,
                 data = Sonar,
                 method = "rf",
                 trControl = ctrl)

mod_fit$results
#output
  mtry  Accuracy     Kappa       ROC      Sens      Spec       AUC Precision    Recall         F AccuracySD   KappaSD
1    2 0.8364069 0.6666364 0.9454798 0.9280303 0.7333333 0.8683726 0.8121087 0.9280303 0.8621526 0.10570484 0.2162077
2   31 0.8179870 0.6307880 0.9208081 0.8840909 0.7411111 0.8450612 0.8074942 0.8840909 0.8374326 0.06076222 0.1221844
3   60 0.8034632 0.6017979 0.9049242 0.8659091 0.7311111 0.8332068 0.7966889 0.8659091 0.8229330 0.06795824 0.1369086
       ROCSD     SensSD    SpecSD      AUCSD PrecisionSD   RecallSD        FSD
1 0.04393947 0.05727927 0.1948585 0.03410854  0.12717667 0.05727927 0.08482963
2 0.04995650 0.11053858 0.1398657 0.04694993  0.09075782 0.11053858 0.05772388
3 0.04965178 0.12047598 0.1387580 0.04820979  0.08951728 0.12047598 0.06715206