【问题标题】:Using k-fold cross validation to assess model prediction accuracy in R使用 k 折交叉验证来评估 R 中的模型预测准确性
【发布时间】:2013-11-05 04:30:30
【问题描述】:

我有一个与 lme4 pkg 中的 lmer() 函数相匹配的 glm。我使用 ROCR pkg 计算 ROC 下的面积(我的最佳模型为 0.899)并指定最佳截止点。我的截止点从 0.47(如果我最小化灵敏度和特异性的总和)到 0.52(如果我最大化准确性)略有不同。两种截止规格的代码如下供参考。

#Minimizes the sum of sensitivity and specificity
> fpr <- prefClass@x.values[[1]]
> tpr <- prefClass@y.values[[1]]
> sum <- tpr + (1-fpr)
> index <- which.max(sum)
> cutoff <- prefClass@alpha.values[[1]][[index]]
> cutoff
[1] 0.4706331

#This code was used to maximize accuracy
> BMacc <- performance(predClass, measure="acc") 
> MaxAcc <- max(BMacc@y.values[[1]])
> UnlistXacc <- unlist(BMacc@x.values[[1]])
> CutoffAcc <- UnlistXacc[which.max(BMacc@y.values[[1]])]
> CutoffAcc
     112 
0.519942

我想看看如何选择一个切点而不是其他效果预测误差,使用 k 折交叉验证来评估每个切点的准确性。但是,查看 cv.glm {boot} 和 CVbinary {DAAG} 函数既没有参数来指定切点值,也没有讨论使用哪个切点。

如果我了解交叉验证的理论/方法,则需要一个指定的切点来将概率(模型拟合值范围从 0 到 1)转换为离散的 0 和 1。将模型 0 和 1 与观察到的 0 和 1 进行比较,然后可以评估模型预测的准确性。

由于切割点通常设置为 0.5,这是否是上述功能的默认默认值?

用户如何指定所需的切点来评估模型预测的准确性?

我查看了许多来源,只找到了上面的函数。由于这是一种常见需求,我要么忽略了某些东西,要么错误地理解了 k-fold CV。

任何想法将不胜感激!

【问题讨论】:

    标签: r


    【解决方案1】:

    这里有几点。

    1. 使用 0.5:如果您要预测二元结果,逻辑模型或估计事件概率的任何类似类型的模型将使用 0.5 作为默认切点,因为该值高于模型的值表示一个事件更有可能发生,低于它的事件发生的可能性较小。您可以根据需要更改切点,但它并不总是像看起来那么简单。这让我想到了第二点:

    2. 指定切点:有两种方法可以指定切点。一种是使用关于您正在建模的系统的先验知识。这可能包括如下思考过程:事件非常罕见,因此我们将设置高切点以避免过多的误报,或者事件非常糟糕,因此我们希望捕获很多。在后一种情况下,我们将切割点设置得较低。您也可以使用模型的结果来更改切割点,但您必须小心。在用于拟合模型的同一数据集上计算时,模型性能的统计数据存在有偏差

    为了避免偏见,您可以使用交叉验证。很容易对自己进行编程以使其灵活。它是这样的:

    n.subjects <- nrow(data)
    predictions <- 
    for(subject in 1:n.subjects) {
      subset <- data[-subject]
      # Fit Model
      # Find Cut point (using your code above)
      predicted.value <- predict(model)
      if (predicted.value < cut.point) {
        predictions[subject] <- 'No Event'
      } else {
        predictions[subject] <- 'Event'
      }
    }
    

    现在您可以根据向量predictions 查看模型的敏感性和特异性。这将允许您评估您的算法找到一个好的切点的能力。

    更好的方法是将您的一些数据留作“验证”集。使用上面的代码,找到一个最佳切点(调整算法直到你满意,然后通过将模型拟合到整个数据集减去验证集来获得切点)。然后拟合“验证”集中的数据并计算模型性能。

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2018-08-29
      • 2021-06-03
      • 2016-08-08
      相关资源
      最近更新 更多