Veuillez voir le question listed here pour plus de contexte. modèleClassification Text2Vec avec signe d'avertissement - Naive Bayes
Je tente d'utiliser une matrice terme document, construit en utilisant text2vec
, pour former un Bayes naïf (nb
) en utilisant le package caret
. Cependant, je reçois ce message d'avertissement:
message d'avertissement: eval (XPR, Envir = Envir): ajustement du modèle a échoué pour Fold01.Rep1: usekernel = FAUX, fL = 0, régler = 1 Erreur dans NaiveBayes.default (x, y, usekernel = FALSE, fL = $ fL param, ...): zéro les écarts pour au moins une classe dans les variables:
S'il vous plaît aidez-moi à comprendre ce message et quelles mesures Je dois prendre pour éviter l'échec du modèle. J'ai le sentiment que je dois supprimer des termes plus rares du DTM mais je ne suis pas sûr.
Code pour construire le modèle:
control <- trainControl(method="repeatedcv", number=10, repeats=3, savePredictions=TRUE, classProbs=TRUE)
Train_PRDHA_String.df$Result <- ifelse(Train_PRDHA_String.df$Result == 1, "X", "Y")
(warn=1)
(warnings=2)
t4 = Sys.time()
svm_nb <- train(x = as.matrix(dtm_train), y = as.factor(Train_PRDHA_String.df$Result),
method = "nb",
trControl=control,
tuneLength = 5,
metric ="Accuracy")
print(difftime(Sys.time(), t4, units = 'sec'))
Code pour construire la matrice du document Terme (Text2Vec):
library(text2vec)
library(data.table)
#Define preprocessing function and tokenization fucntion
preproc_func = tolower
token_func = word_tokenizer
#Union both of the Text fields - learn vocab from both fields
union_txt = c(Train_PRDHA_String.df$MAKTX_Keyword, Train_PRDHA_String.df$PH_Level_04_Description_Keyword)
#Create an iterator over tokens with the itoken() function
it_train = itoken(union_txt,
preprocessor = preproc_func,
tokenizer = token_func,
ids = Train_PRDHA_String.df$ID,
progressbar = TRUE)
#Build Vocabulary
vocab = create_vocabulary(it_train)
vocab
#Dimensional Reduction
pruned_vocab = prune_vocabulary(vocab,
term_count_min = 10,
doc_proportion_max = 0.5,
doc_proportion_min = 0.001)
vectorizer = vocab_vectorizer(pruned_vocab)
#Start building a document-term matrix
#vectorizer = vocab_vectorizer(vocab)
#learn vocabulary from Train_PRDHA_String.df$MAKTX_Keyword
it1 = itoken(Train_PRDHA_String.df$MAKTX_Keyword, preproc_func,
token_func, ids = Train_PRDHA_String.df$ID)
dtm_train_1 = create_dtm(it1, vectorizer)
#learn vocabulary from Train_PRDHA_String.df$PH_Level_04_Description_Keyword
it2 = itoken(Train_PRDHA_String.df$PH_Level_04_Description_Keyword, preproc_func,
token_func, ids = Train_PRDHA_String.df$ID)
dtm_train_2 = create_dtm(it2, vectorizer)
#Combine dtm1 & dtm2 into a single matrix
dtm_train = cbind(dtm_train_1, dtm_train_2)
#Normalise
dtm_train = normalize(dtm_train, "l1")
dim(dtm_train)
Merci topepo. Cela a fait l'affaire. Et gardera un exemple reproductible à l'esprit pour la prochaine fois! – UbuntuNewbie