R 中的 Caret 包交叉验证总结

问题描述 投票:0回答:1

假设我有一个

K-folds list
K=10
,每个元素包含插入符分类性能输出:

dput(transformed_conf_matrices$Fold01)
structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 
0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1), dim = c(11L, 
3L), dimnames = list(c("Sensitivity", "Specificity", "Pos Pred Value", 
"Neg Pred Value", "Precision", "Recall", "F1", "Prevalence", 
"Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
)))



transformed_conf_matrices$Fold01
                     Class: setosa Class: versicolor Class: virginica
Sensitivity              1.0000000         1.0000000        1.0000000
Specificity              1.0000000         1.0000000        1.0000000
Pos Pred Value           1.0000000         1.0000000        1.0000000
Neg Pred Value           1.0000000         1.0000000        1.0000000
Precision                1.0000000         1.0000000        1.0000000
Recall                   1.0000000         1.0000000        1.0000000
F1                       1.0000000         1.0000000        1.0000000
Prevalence               0.3333333         0.3333333        0.3333333
Detection Rate           0.3333333         0.3333333        0.3333333
Detection Prevalence     0.3333333         0.3333333        0.3333333
Balanced Accuracy        1.0000000         1.0000000        1.0000000

在这种特殊情况下,transformed_conf_matrices$Fold01 到transformed_conf_matrices$Fold10 相等(相同的值)。

我想要这些指标的均值和方差。我用 lapply 做了很多尝试但没有成功。

K 折列表:

dput(transformed_conf_matrices)
list(Fold01 = structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1, 1, 
1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 0.333333333333333, 
1), dim = c(11L, 3L), dimnames = list(c("Sensitivity", "Specificity", 
"Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", 
"Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
))), Fold02 = structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1, 1, 
1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 0.333333333333333, 
1), dim = c(11L, 3L), dimnames = list(c("Sensitivity", "Specificity", 
"Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", 
"Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
))), Fold03 = structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1, 1, 
1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 0.333333333333333, 
1), dim = c(11L, 3L), dimnames = list(c("Sensitivity", "Specificity", 
"Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", 
"Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
))), Fold04 = structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1, 1, 
1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 0.333333333333333, 
1), dim = c(11L, 3L), dimnames = list(c("Sensitivity", "Specificity", 
"Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", 
"Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
))), Fold05 = structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1, 1, 
1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 0.333333333333333, 
1), dim = c(11L, 3L), dimnames = list(c("Sensitivity", "Specificity", 
"Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", 
"Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
))), Fold06 = structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1, 1, 
1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 0.333333333333333, 
1), dim = c(11L, 3L), dimnames = list(c("Sensitivity", "Specificity", 
"Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", 
"Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
))), Fold07 = structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1, 1, 
1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 0.333333333333333, 
1), dim = c(11L, 3L), dimnames = list(c("Sensitivity", "Specificity", 
"Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", 
"Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
))), Fold08 = structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1, 1, 
1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 0.333333333333333, 
1), dim = c(11L, 3L), dimnames = list(c("Sensitivity", "Specificity", 
"Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", 
"Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
))), Fold09 = structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1, 1, 
1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 0.333333333333333, 
1), dim = c(11L, 3L), dimnames = list(c("Sensitivity", "Specificity", 
"Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", 
"Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
))), Fold10 = structure(c(1, 1, 1, 1, 1, 1, 1, 0.333333333333333, 
0.333333333333333, 0.333333333333333, 1, 1, 1, 1, 1, 1, 1, 1, 
0.333333333333333, 0.333333333333333, 0.333333333333333, 1, 1, 
1, 1, 1, 1, 1, 1, 0.333333333333333, 0.333333333333333, 0.333333333333333, 
1), dim = c(11L, 3L), dimnames = list(c("Sensitivity", "Specificity", 
"Pos Pred Value", "Neg Pred Value", "Precision", "Recall", "F1", 
"Prevalence", "Detection Rate", "Detection Prevalence", "Balanced Accuracy"
), c("Class: setosa", "Class: versicolor", "Class: virginica"
))))
r r-caret k-fold
1个回答
0
投票
# Assuming your data is stored in a list called 'transformed_conf_matrices'
library(dplyr)

# Extract names of metrics and classes
metric_names <- rownames(transformed_conf_matrices[[1]])
class_names <- colnames(transformed_conf_matrices[[1]])

# Initialize an empty data frame to store the results
results <- data.frame(Metric = character(), Class = character(), Mean = numeric(), Variance = numeric())

# Loop over each metric and class
for (metric in metric_names) {
  for (class in class_names) {
    # Extract values for the current metric and class across all folds
    values <- sapply(transformed_conf_matrices, function(x) x[metric, class])

    # Calculate mean and variance
    mean_val <- mean(values)
    var_val <- var(values)

    # Append to the results data frame
    results <- rbind(results, data.frame(Metric = metric, Class = class, Mean = mean_val, Variance = var_val))
  }
}

# Display the final table
print(results)

输出:

> # Display the final table
> print(results)
                 Metric             Class      Mean Variance
1           Sensitivity     Class: setosa 1.0000000        0
2           Sensitivity Class: versicolor 1.0000000        0
3           Sensitivity  Class: virginica 1.0000000        0
4           Specificity     Class: setosa 1.0000000        0
5           Specificity Class: versicolor 1.0000000        0
6           Specificity  Class: virginica 1.0000000        0
7        Pos Pred Value     Class: setosa 1.0000000        0
8        Pos Pred Value Class: versicolor 1.0000000        0
9        Pos Pred Value  Class: virginica 1.0000000        0
10       Neg Pred Value     Class: setosa 1.0000000        0
11       Neg Pred Value Class: versicolor 1.0000000        0
12       Neg Pred Value  Class: virginica 1.0000000        0
13            Precision     Class: setosa 1.0000000        0
14            Precision Class: versicolor 1.0000000        0
15            Precision  Class: virginica 1.0000000        0
16               Recall     Class: setosa 1.0000000        0
17               Recall Class: versicolor 1.0000000        0
18               Recall  Class: virginica 1.0000000        0
19                   F1     Class: setosa 1.0000000        0
20                   F1 Class: versicolor 1.0000000        0
21                   F1  Class: virginica 1.0000000        0
22           Prevalence     Class: setosa 0.3333333        0
23           Prevalence Class: versicolor 0.3333333        0
24           Prevalence  Class: virginica 0.3333333        0
25       Detection Rate     Class: setosa 0.3333333        0
26       Detection Rate Class: versicolor 0.3333333        0
27       Detection Rate  Class: virginica 0.3333333        0
28 Detection Prevalence     Class: setosa 0.3333333        0
29 Detection Prevalence Class: versicolor 0.3333333        0
30 Detection Prevalence  Class: virginica 0.3333333        0
31    Balanced Accuracy     Class: setosa 1.0000000        0
32    Balanced Accuracy Class: versicolor 1.0000000        0
33    Balanced Accuracy  Class: virginica 1.0000000        0
© www.soinside.com 2019 - 2024. All rights reserved.