2014-09-11 187 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