Я работаю с набором данных, который выглядит так:
> head(test_accuracy)
observed predicted new_predicted
1 Moving/Feeding Foraging Standing
2 Standing Foraging Standing
3 Standing Foraging Standing
4 Standing Foraging Standing
5 Standing Foraging Standing
6 Standing Foraging Standing
Мой вопрос прост. Я хотел бы рассчитать показатель точности классификации, сравнив процент совпадений между test_accuracy$observed
и test_accuracy$new_predicted
. Я просто использую приведенный ниже код, но получаю соответствующую ошибку:
> head(test_accuracy)
observed predicted new_predicted
1 Moving/Feeding Foraging Standing
2 Standing Foraging Standing
3 Standing Foraging Standing
4 Standing Foraging Standing
5 Standing Foraging Standing
6 Standing Foraging Standing
> obs<-as.factor(test_accuracy$observed)
> pred<-as.factor(test_accuracy$new_predicted)
> mean(obs == pred)
Error in Ops.factor(obs, pred) : level sets of factors are different
Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю неправильно? Я могу загрузить образец dput()
ниже:
> dput(test_accuracy)
structure(list(observed = c("Moving/Feeding", "Standing", "Standing",
"Standing", "Standing", "Standing", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Standing", "Standing", "Feeding/Moving", "Standing",
"Standing", "Moving/Feeding", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Standing", "Standing", "Standing", "Standing",
"Moving/Feeding", "Moving/Feeding", "Standing", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Standing", "Standing", "Standing", "Moving/Feeding", "Standing",
"Standing", "Standing", "Standing", "Moving/Feeding", "Standing",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Standing",
"Standing", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Standing", "Standing", "Standing",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Moving/Feeding",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Standing",
"Standing", "Standing", "Standing", "Feeding/Moving", "Standing",
"Standing", "Standing", "Standing", "Standing", "Moving/Feeding",
"Standing", "Moving/Feeding", "Standing", "Standing", "Feeding/Moving",
"Feeding/Moving", "Standing", "Moving/Feeding", "Moving/Feeding",
"Standing", "Moving/Feeding", "Feeding/Moving", "Moving/Feeding",
"Moving/Feeding", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Standing",
"Standing", "Moving/Feeding", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Moving/Feeding", "Moving/Feeding",
"Feeding/Moving", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Standing", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Standing", "Standing", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Standing", "Standing", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Standing", "Moving/Feeding", "Standing", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Standing", "Moving/Feeding",
"Moving/Feeding", "Feeding/Moving", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Feeding/Moving", "Feeding/Moving",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Feeding/Moving", "Feeding/Moving", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Standing", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Moving/Feeding", "Standing", "Standing", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Standing", "Moving/Feeding", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving", "Feeding/Moving",
"Feeding/Moving", "Feeding/Moving", "Feeding/Moving"), predicted = structure(c(2L,
2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L, 3L, 2L, 1L, 2L, 2L, 3L, 3L, 3L,
1L, 2L, 2L, 3L, 3L, 3L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 2L, 2L,
3L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 3L, 3L, 2L, 3L, 2L, 3L, 3L, 3L,
3L, 2L, 2L, 2L, 1L, 1L, 3L, 3L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 2L,
2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 3L, 3L,
2L, 2L, 3L, 2L, 3L, 3L, 2L, 3L, 1L, 3L, 1L, 1L, 3L, 1L, 2L, 2L,
3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
3L, 2L, 3L, 1L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 2L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 3L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 2L, 3L, 2L, 1L,
2L, 3L, 3L, 3L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 2L,
1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 1L, 1L, 1L, 3L, 2L, 2L, 3L, 3L,
2L, 3L, 3L, 3L, 3L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 3L, 1L, 3L, 1L,
1L, 1L, 1L, 1L, 3L, 1L), .Label = c("Feeding", "Foraging", "Standing"
), class = "factor"), new_predicted = c("Standing", "Standing",
"Standing", "Standing", "Standing", "Standing", "Moving/Feeding",
"Moving/Feeding", "Standing", "Moving/Feeding", "Standing", "Standing",
"Standing", "Standing", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Standing", "Standing", "Standing", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Standing", "Standing", "Standing", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Standing", "Standing", "Moving/Feeding", "Standing", "Standing",
"Standing", "Standing", "Moving/Feeding", "Standing", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Standing", "Moving/Feeding",
"Standing", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Standing", "Standing", "Standing", "Standing",
"Standing", "Moving/Feeding", "Moving/Feeding", "Standing", "Standing",
"Standing", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Standing", "Standing", "Standing", "Standing",
"Standing", "Standing", "Standing", "Standing", "Standing", "Standing",
"Moving/Feeding", "Standing", "Standing", "Standing", "Standing",
"Moving/Feeding", "Moving/Feeding", "Standing", "Standing", "Moving/Feeding",
"Standing", "Moving/Feeding", "Moving/Feeding", "Standing", "Moving/Feeding",
"Standing", "Moving/Feeding", "Standing", "Standing", "Moving/Feeding",
"Standing", "Standing", "Standing", "Moving/Feeding", "Moving/Feeding",
"Standing", "Standing", "Standing", "Standing", "Standing", "Standing",
"Standing", "Standing", "Standing", "Standing", "Standing", "Standing",
"Standing", "Standing", "Moving/Feeding", "Standing", "Moving/Feeding",
"Standing", "Moving/Feeding", "Standing", "Moving/Feeding", "Standing",
"Standing", "Standing", "Standing", "Standing", "Standing", "Standing",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Standing", "Standing", "Moving/Feeding", "Standing", "Standing",
"Standing", "Standing", "Standing", "Moving/Feeding", "Standing",
"Standing", "Standing", "Standing", "Standing", "Standing", "Standing",
"Standing", "Standing", "Standing", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Standing", "Moving/Feeding", "Standing", "Standing",
"Standing", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Standing", "Standing", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Standing", "Moving/Feeding",
"Moving/Feeding", "Moving/Feeding", "Standing", "Standing", "Standing",
"Standing", "Standing", "Standing", "Standing", "Moving/Feeding",
"Moving/Feeding", "Standing", "Standing", "Standing", "Moving/Feeding",
"Standing", "Standing", "Moving/Feeding", "Moving/Feeding", "Standing",
"Moving/Feeding", "Moving/Feeding", "Moving/Feeding", "Moving/Feeding",
"Standing", "Moving/Feeding", "Standing", "Standing", "Moving/Feeding",
"Standing", "Standing", "Moving/Feeding", "Standing", "Moving/Feeding",
"Standing", "Standing", "Standing", "Standing", "Standing", "Moving/Feeding",
"Standing")), class = "data.frame", row.names = c(NA, -215L))
Любой вклад приветствуется!
Как насчет того, чтобы просто сделать следующее, не конвертируя в множители,
mean(test_accuracy$observed == test_accuracy$new_predicted)
# 0.5069767
Какой смысл обращаться к
factor
? Уobserved
3, а уnew_predicted
два, поэтому ваша ошибка.