2014-09-11 56 views
4

我的问题与此one有关,用table()函数在R中产生混淆矩阵。我正在寻找一个解决方案,而不使用包装(例如脱字符号)。R创建2 * 2混淆矩阵的一般解决方案

比方说,这些都是我们predictions,并在二元分类问题labels

predictions <- c(0.61, 0.36, 0.43, 0.14, 0.38, 0.24, 0.97, 0.89, 0.78, 0.86, 0.15, 0.52, 0.74, 0.24) 
labels  <- c(1, 1, 1, 0, 0,  1, 1, 1, 0,  1, 0, 0, 1, 0) 

对于这些值,下面的解决方案能很好地创建一个2 * 2混淆矩阵,让我们说,阈值= 0.5 :

# Confusion matrix for threshold = 0.5 
conf_matrix <- as.matrix(table(predictions>0.5,labels)) 
    conf_matrix 
    labels 
     0 1 
FALSE 4 3 
TRUE 2 5 

但是,我没有得到一个2×2矩阵,如果我选择是小于min(predictions)或大于max(predictions)任何价值,因为数据不会有任何一个或真或假的发生。例如:

conf_matrix <- as.matrix(table(predictions>0.05,labels)) 
    conf_matrix 
    labels 
     0 1 
    TRUE 6 8 

我需要一致地产生2×2的混淆矩阵为0和1之间的所有可能的阈值(决策边界),如我使用这个作为一个优化的输入的方法。有什么办法可以调整table函数,所以它总是返回一个2 * 2的矩阵吗?

回答

4

你可以让你的阈值的预测中的因子变量来实现这一目标:

(conf_matrix <- as.matrix(table(factor(predictions>0.05, levels=c(F, T)), labels))) 
#  labels 
#   0 1 
# FALSE 0 0 
# TRUE 6 8 
+0

是的,谢谢!我试着玩'table()'参数,比如'dnn','exclude'。但相反,我应该已经形成了一个新的因素,说明不存在的阶级。 – Rhubarb 2014-09-11 13:52:26