2017-02-03 3 views
0

Я пытаюсь классифицировать 94 текст речи. Поскольку naiveBayes не может работать хорошо, если категории trainset не существуют в категориях тестов, я рандомизирован и подтвержден. Не было проблем с категориями. Но классификатор не работал с набором тестов. Ниже сообщение об ошибке:ошибка наивных заливов в R: индекс за пределами

Df.dtm<-cbind(Df.dtm, category) 
dim(Df.dtm) 
Df.dtm[1:10, 530:532] 

# Randomize and Split data by rownumber 
train <- sample(nrow(Df.dtm), ceiling(nrow(Df.dtm) * .50)) 
test <- (1:nrow(Df.dtm))[- train] 

# Isolate classifier 
cl <- Df.dtm[, "category"] 
> summary(cl[train]) 
    dip eds ind pols 
    23 8 3 13 

# Create model data and remove "category" 
modeldata <- Df.dtm[,!colnames(Df.dtm) %in% "category"] 

#Boolean feature Multinomial Naive Bayes 
#Function to convert the word frequencies to yes and no labels 
convert_count <- function(x) { 
    y <- ifelse(x > 0, 1,0) 
    y <- factor(y, levels=c(0,1), labels=c("No", "Yes")) 
    y 
} 

#Apply the convert_count function to get final training and testing DTMs 
train.cc <- apply(modeldata[train, ], 2, convert_count) 
test.cc <- apply(modeldata[test, ], 2, convert_count) 

#Training the Naive Bayes Model 
#Train the classifier 
system.time(classifier <- naiveBayes(train.cc, cl[train], laplace = 1)) 

Этот классификатор работал хорошо: 用户 系统 流逝 0,45 0,00 0,46

#Use the classifier we built to make predictions on the test set. 
system.time(pred <- predict(classifier, newdata=test.cc)) 

Однако предсказание не удалось. Ошибка в [.default (объект $ таблицы [[v]], Н.Д.): 下 标出 界 Timing остановились: 0,2 0 0,2

ответ

0

Рассмотрим следующий пример:

# Indicies of training observations as observations. 
train <- sample(nrow(Df.dtm), ceiling(nrow(Df.dtm) * .50)) 

# Indicies of whatever is left over from the previous sample, again, also observations are being returned. 
#that still remains inside of Df.dtm, notation as follows: 
test <- Df.dtm[-train,] 

После выяснения, что мои возвращаемый образец (указатели строк) и как я хотел нарезать свой тестовый набор (опять же, строки или столбцы должны быть установлены в этот момент), я бы отредактировал эту функцию apply с аргументом, необходимым here is a link of how the apply function works, но ради времени , если вы передадите его 2, вы применяете по каждому column, и если вы передадите его 1, он применит функция, заданная по каждому row. Опять же, в зависимости от того, как вы хотите свой образец (строки или столбцы), мы можем настроить это в любом случае.

Смежные вопросы