2017-07-16 2 views
0

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) 

Répondre

0

Cela signifie, lorsque ces variables sont redimensionnées, ils ne avoir une valeur unique. Vous pouvez utiliser preProc = "zv" pour vous débarrasser de l'avertissement. Cela aiderait à obtenir un petit exemple reproductible pour ces questions.

+0

Merci topepo. Cela a fait l'affaire. Et gardera un exemple reproductible à l'esprit pour la prochaine fois! – UbuntuNewbie