Задача при обучении наивной модели Байеса в R - PullRequest
1 голос
/ 21 апреля 2020

Я использую пакет Caret (не имел большого опыта использования Caret) для обучения моих данных с помощью Naive Bayes, как указано в коде R ниже. У меня возникла проблема с включением предложений при выполнении «nb_model», так как он генерирует серию сообщений об ошибках:

1: predictions failed for Fold1: usekernel= TRUE, fL=0, adjust=1 Error in 
predict.NaiveBayes(modelFit, newdata) : 
Not all variable names used in object found in newdata

2: model fit failed for Fold1: usekernel=FALSE, fL=0, adjust=1 Error in 
NaiveBayes.default(x, y, usekernel = FALSE, fL = param$fL, ...) : 

Пожалуйста, не могли бы вы высказать предложение о том, как адаптировать код R ниже чтобы решить эту проблему?

Набор данных, используемый в приведенном ниже коде R

Быстрый пример того, как выглядит набор данных (10 переменных):

  Over arrested at in | Negative | Negative | Neutral | Neutral | Neutral | Negative |
  Positive | Neutral | Negative
library(caret)

# Loading dataset
setwd("directory/path")
TrainSet = read.csv("textsent.csv", header = FALSE)

# Specifying an 80-20 train-test split
# Creating the training and testing sets
train = TrainSet[1:1200, ]
test = TrainSet[1201:1500, ]

# Declaring the trainControl function
train_ctrl = trainControl(
  method  = "cv", #Specifying Cross validation
  number  = 3, # Specifying 3-fold
)

nb_model = train(
  V10 ~., # Specifying the response variable and the feature variables
  method = "nb", # Specifying the model to use
  data = train, 
  trControl = train_ctrl,
)

# Get the predictions of your model in the test set
predictions = predict(nb_model, newdata = test)

# See the confusion matrix of your model in the test set
confusionMatrix(predictions, test$V10)

1 Ответ

1 голос
/ 21 апреля 2020

Набор данных - это все символьные данные. В этих данных есть комбинация легко закодированных слов (V2 - V10) и предложений, для которых вы можете выполнить любое количество функций и создать любое количество функций.

Чтобы прочитать текст майнинг, посмотрите практический пример пакета tm, его документов или блогов, таких как hack-r.com . Вот код Github из связанной статьи.

ОК, поэтому сначала я установил stringsAsFactors = F, потому что у вас V1 есть тонны уникальных предложений

TrainSet <- read.csv(url("https://raw.githubusercontent.com/jcool12/dataset/master/textsentiment.csv?token=AA4LAP5VXI6I7FRKMT6HDPK6U5XBY"),
                     header = F,
                     stringsAsFactors = F)

library(caret)

Затем Я разработал функцию

## Feature Engineering
# V2 - V10
TrainSet[TrainSet=="Negative"] <- 0
TrainSet[TrainSet=="Positive"] <- 1

# V1 - not sure what you wanted to do with this
#     but here's a simple example of what 
#     you could do
TrainSet$V1 <- grepl("london", TrainSet$V1) # tests if london is in the string

Тогда это сработало, хотя вы захотите усовершенствовать разработку V1 (или отбросить ее), чтобы получить лучшие результаты.

# In reality you could probably generate 20+ decent features from this text
#  word count, tons of stuff... see the tm package

# Specifying an 80-20 train-test split
# Creating the training and testing sets
train = TrainSet[1:1200, ]
test = TrainSet[1201:1500, ]

# Declaring the trainControl function
train_ctrl = trainControl(
  method  = "cv", # Specifying Cross validation
  number  = 3,    # Specifying 3-fold
)

nb_model = train(
  V10 ~., # Specifying the response variable and the feature variables
  method = "nb", # Specifying the model to use
  data = train, 
  trControl = train_ctrl,
)

# Resampling: Cross-Validated (3 fold) 
# Summary of sample sizes: 799, 800, 801 
# Resampling results across tuning parameters:
#   
#   usekernel  Accuracy   Kappa    
# FALSE      0.6533444  0.4422346
# TRUE      0.6633569  0.4185751

You Вы получите несколько игнорируемых предупреждений с этим примером c только потому, что в нескольких предложениях V1 содержалось слово «Лондон». Я бы предложил использовать этот столбец для таких вещей, как анализ настроений, термин частота / частота обратных документов и т. Д. c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...