R中的分组变化意味着很大

时间:2015-10-29 14:28:36

标签: r grouping

我有一个文件,其中包含关于二元分类问题的两个模型(A和B)的预测。现在,我想了解他们有多好预测他们最有信心的观察结果。要做到这一点,我想根据他们的自信程度将他们的预测分为10组。这些组中的每一组都应具有相同数量的观察结果。但是,当我这样做时,模型的准确性会发生很大变化!怎么可能?

我还使用n_groups=100进行了测试,但它只是略有不同。 CSV文件为here,代码如下:

# Grouping observations 
conf <- read.table(file="conf.csv", sep=',', header=T)
n_groups <- 10
conf$model_a_conf <- pmax(conf$model_a_pred_0, conf$model_a_pred_1)
conf$model_b_conf <- pmax(conf$model_b_pred_0, conf$model_b_pred_1)
conf$conf_group_model_a <- cut(conf$model_a_conf, n_groups, labels=FALSE, ordered_result=TRUE)
conf$conf_group_model_b <- cut(conf$model_b_conf, n_groups, labels=FALSE, ordered_result=TRUE)

# Test of original mean.
mean(conf$model_a_acc) # 0.78
mean(conf$model_b_acc) # 0.777

# Test for mean in aggregated data. They should be similar.
(acc_model_a <- mean(tapply(conf$model_a_acc, conf$conf_group_model_a, FUN=mean))) # 0.8491
(acc_model_b <- mean(tapply(conf$model_b_acc, conf$conf_group_model_b, FUN=mean))) # 0.7526

编辑稍微澄清。

1 个答案:

答案 0 :(得分:2)

table(conf$conf_group_model_a)
1    2    3    4    5    6    7    8    9   10 
2515 2628 2471 2128 1792 1321  980  627  398  140 

您使用的群组是不平衡的。因此,当您使用tapply这些组中的每个组的平均值时,这很好,但是之后只需要mean就行了。

如果你想进行自己的处理,你需要按照它们的大小来加权。

这样的事情既快又脏:

mean(tapply(conf$model_a_acc, conf$conf_group_model_a, FUN=mean) * (table(conf$conf_group_model_a)/nrow(conf)) * 1000)