Идентифицировать объекты с неправильным классом по матрице путаницы в R - PullRequest
0 голосов
/ 27 апреля 2018

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

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

Вопрос: Теперь я хотел бы определить объекты, которые имеют неправильный класс, в соответствии с моей моделью. То есть те, которые либо предсказаны как «Да», когда на самом деле они принадлежат классу «Нет», и наоборот, в матрице путаницы. Я хотел бы сделать это, чтобы осмотреть объекты, чтобы улучшить или изменить функции, чтобы получить лучшую модель. То, что я хотел бы знать, это их позиция в кадре данных.

Мои соответствующие коды:

set.seed(1)
datapart <- createDataPartition(m$class, p = .85, list = FALSE)
train <- m[datapart ,]
validation <- m[-datapart ,]

library(glmnet)
set.seed(1)
glmnetcontrol <- trainControl(method="repeatedcv", number=10, repeats=3, classProbs = TRUE, summaryFunction = twoClassSummary, search = "random")
glmnet <- train(class~., data=train, method="glmnet", trControl = glmnetcontrol, metric="ROC")

predict_validation <- predict(glmnet, validation, type="raw")
predict_train <- predict(glmnet, train, type="raw")

quality_glmnet_valid <- confusionMatrix(predict_validation , validation$class)
quality_glmnet_train <- confusionMatrix(predict_train , train$class)

1 Ответ

0 голосов
/ 27 апреля 2018

Поскольку ваши прогнозы представляют собой необработанные вероятности, вам нужно, чтобы они были классом. Следующая условная проверка >=0.5 должна преобразовать их в TRUE или FALSE. Если вы хотите, чтобы это было 1 или 0 (при условии, что ваша переменная class представляет собой двоичный коэффициент 1 или 0), то вы можете просто установить поднабор для строк, в которых ваш прогноз и истинные метки класса не согласуются с друг с другом.

`validation[as.numeric(validation$class) != as.numeric(predict_train >= 0.5), ]`

Поскольку вы не публиковали данные, я должен сделать некоторые предположения относительно структуры или формата ваших данных. Вы можете адаптировать код, чтобы получить строки, в которых есть неправильное предсказание (если они не числовые 0 или 1, прокомментируйте и дайте мне знать или опубликуйте образец).

...