2014-09-11 2 views
4

Мой вопрос связан с этим one о создании матрицы путаницы в R с помощью функции table(). Я ищу решение без использования пакета (например, каретки).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()' like 'dnn',' exclude'. но вместо этого я должен был сформировать новый фактор, который учитывает не встречающийся класс. – Rhubarb

Смежные вопросы