Ошибка R: все аргументы должны иметь одинаковую длину - PullRequest
0 голосов
/ 03 декабря 2018

Я получил ошибку, когда я делаю наивный байесовский R, вот мой код и ошибка

library(e1071) 

#data

train_data <- read.csv('https://raw.githubusercontent.com/JonnyyJ/data/master/train.csv',header=T)
test_data <- read.csv('https://raw.githubusercontent.com/JonnyyJ/data/master/test.csv',header=T)      

efit <- naiveBayes(y~job+marital+education+default+contact+month+day_of_week+
                        poutcome+age+pdays+previous+cons.price.idx+cons.conf.idx+euribor3m
                       ,train_data)  

pre <- predict(efit, test_data)
bayes_table <- table(pre, test_data[,ncol(test_data)])
accuracy_test_bayes <- sum(diag(bayes_table))/sum(bayes_table)
    list('predict matrix'=bayes_table, 'accuracy'=accuracy_test_bayes)

ОШИБКА:

bayes_table <- таблица (pre, test_data[, ncol (test_data)]) Ошибка в таблице (pre, test_data [, ncol (test_data)])): все аргументы должны иметь одинаковую длину precision_test_bayes <- sum (diag (bayes_table)) / sum (bayes_table) Ошибка в diag (bayes_table): объект 'bayes_table' не найден в списке ('матрица прогнозирования' = bayes_table, 'precision' = precision_test_bayes) Ошибка: объект 'bayes_table' не найден </p>

Я действительно не понимаю, что происходитпотому что я новичок в R

1 Ответ

0 голосов
/ 03 декабря 2018

По какой-то причине значение по умолчанию predict(efit, test_data, type = "class") в этом случае не работает (возможно, потому что ваша модель предсказывает 0 для всех наблюдений в тестовом наборе данных).Вам также необходимо построить таблицу, используя ваш результат (то есть test_data[,ncol(test_data)] возвращает euribor3m).Должно работать следующее:

pre <- predict(efit, test_data, type = "raw") %>%
  as.data.frame() %>%
  mutate(prediction = if_else(0 < 1, 0, 1)) %>%
  pull(prediction)

bayes_table <- table(pre, test_data$y)

accuracy_test_bayes <- sum(diag(bayes_table)) / sum(bayes_table)

list('predict matrix' = bayes_table, 'accuracy' = accuracy_test_bayes)
# $`predict matrix`
#    
# pre    0    1
#   0 7282  956
# 
# $accuracy
# [1] 0.8839524
...