Как заставить объект списка набрать 'integer', Ошибка в R - PullRequest
0 голосов
/ 20 февраля 2019

Я новичок в использовании R для интеллектуального анализа данных и машинного обучения.Пока я изучаю наивную байесовскую классификацию, я сталкиваюсь с этой ошибкой:

"Ошибка, в которой ((sapply (newdata [ind_factor], nlevels)! = Sapply (tables [ind_factor],: (list) объект не может быть приведен к типу 'integer' "

Это мой код:

data <- read.csv(file.choose(),header = T) 
str(data)
set.seed(1234)
splitData <- sample(2,nrow(data),replace = T,prob = c(0.8,0.2))
train<-data[splitData == 1,]
test <- data[splitData == 2,]
mdl <- naive_bayes(admit ~ .,data = train)
predicted <- predict(mdl, train, type = 'prob')

Когда я запускаю последнюю строку, он выдает сообщение об ошибке выше. Можеткто-нибудь, помогите мне, пожалуйста! Большое спасибо.

1 Ответ

0 голосов
/ 20 февраля 2019

Похоже, что одна из ваших независимых переменных является строковой или факторной переменной, и все они должны быть числовыми.Смотрите мой набор данных игрушек ниже.Я получаю ту же ошибку при включении всех переменных;однако, когда я вынимаю var4 (где переменные являются строками), это работает).

Если вы хотите использовать переменную, вы можете преобразовать строковую переменную в коэффициент, а затем преобразовать в коэффициент в числовое значение.переменная (которая будет фиксировать базовые значения фактора).

library(naivebayes)
#data <- read.csv(file.choose(),header = T) 
data <- data.frame(admit = sample(100, x=c(F,T), prob=c(.5,.5), replace=T),
           var1 = sample(100, x=1:4, replace=T),
           var2 = sample(100, x=1:3, replace=T),
           var3 = sample(100, x=1:3, replace=T),
           var4 = sample(100, x=c("s1", "s2"), replace=T))

str(data)
set.seed(1234)
splitData <- sample(2,nrow(data),replace = T,prob = c(0.8,0.2))
train<-data[splitData == 1,]
test <- data[splitData == 2,]

# Doesn't work
mdl <- naive_bayes(admit ~ .,data = train)
predicted <- predict(mdl, train, type = 'prob')

# Works
mdl <- naive_bayes(admit ~ var1 + var2 + var3,data = train)
predicted <- predict(mdl, train, type = 'prob')

# Convert string to factor then numeric
train$var4 <- as.numeric(as.factor(train$var4))

mdl <- naive_bayes(admit ~ .,data = train)
predicted <- predict(mdl, train, type = 'prob')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...