R错误:所有参数必须具有相同的长度

时间:2018-12-02 23:54:47

标签: r naivebayes

我在用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 <-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”      list('预测矩阵'= bayes_table,'accuracy'= accuracy_test_bayes)       错误:找不到对象“ bayes_table”

我真的不知道发生了什么,因为我是R语言的新手

1 个答案:

答案 0 :(得分:0)

由于某种原因,默认的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