Есть ли способ увидеть ложноотрицательные строки?

#r #confusion-matrix #false-positive

Вопрос:

У меня есть фрейм данных, разделенный на наборы обучающих и тестовых данных, запуск svm, функции прогнозирования и матрицы путаницы.

Как я могу увидеть, какие строки являются ложноположительными и Ложноотрицательными?

 Data_7c<- Data_7G[, c(6, 15:18)] 
split = sample.split(Data_7c$F, SplitRatio = 0.70)
train = subset(Data_7c, split == TRUE)
test = subset(Data_7c, split == FALSE)

data1 = svm(F ~., data = train, method="C-classification", kernel="radial", cost = 1, gamma=0.001, scale = FALSE)
pred1 <- predict(data1, task = bh.task,newdata = test)
head(as.data.frame(pred1))
SVMcf1 <- confusionMatrix(pred1, as.factor(test[,1]), positive = "1")
SVMcf1$table

Confusion Matrix and Statistics

          Reference
Prediction    0    1
         0 2203  146
         1    3    2

 

Данные test$F[1:20] и pred1[1:20] :

 structure(c(1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L), .Label = c("0", "1"), class = "factor") 

structure(c(`2` = 1L, `3` = 1L, `8` = 1L, `19` = 1L, `22` = 1L, 
`25` = 1L, `40` = 1L, `49` = 1L, `51` = 1L, `55` = 1L, `57` = 1L, 
`60` = 1L, `62` = 1L, `63` = 1L, `67` = 2L, `72` = 1L, `75` = 1L, 
`80` = 1L, `81` = 1L, `89` = 1L), .Label = c("0", "1"), class = "factor")
 

Комментарии:

1. Пожалуйста, опубликуйте образец использования ваших данных dput . Если pred1 и test[,1] являются векторами 0 и 1 , то вы можете использовать логические операторы для подмножества ваших данных. Чтобы получить строки, которые являются ложными срабатываниями, вы можете это сделать pred1 amp; !test[,1] . Для ложных негативов вы бы подошли !pred1 amp; test[,1] .

2. спасибо за ваш ответ, здесь ты можешь найти его: действия dput(тест$Е[1:20]) структура(c(1л, 1л, 1л, 1л, 2л, 2л, 1л, 1л, 1л, 2л, 2л, 2л, 2л, 2л, 2л, 1л, 1л, 1л, 1л, 2л), .Этикетка = с(«0», «1»), класс = «фактор») действия dput(pred1[1:20]) структура(с( 2 = 1 л 3 = 1 л 8 = 1 л 19 = 1 л 22 = 1 л 25 = 1 л 40 = 1 л 49 = 1 л 51 = 1 л 55 = 1 л 57 = 1 л 60 = 1 л 62 = 1 л 63 = 1 л 67 = 2 л, 72 = 1 л 75 = 1 л, 80 = 1 Л 81 = 1 Л 89 = 1 Л), .Этикетка = с(«0», «1»), класс = «фактор»)

Ответ №1:

Вы можете использовать логические операторы для определения ложноположительных и ложноотрицательных значений, хранения их в векторе, а затем подмножества ваших данных.

 # convert factor to numeric 0/1
pred1 <- as.numeric(levels(pred1))[pred1] 
test$F <- as.numeric(levels(test$F))[test$F]

false_positive <- pred1 amp; !test$F
false_negative <- !pred1 amp; test$F
 

false_positive и false_negative будут логическими векторами. Например, в false_positive нем будет TRUE где pred1 == 1 и test$F == 0 как и FALSE иначе.

Эти логические векторы затем можно использовать для подмножества строк вашего test набора данных:

 test[false_positive,]
test[false_negative,]
 

Кроме того, sum(false_positive) должно быть 3 и sum(false_negative) должно быть 146 на основе выходных данных вашей матрицы путаницы.