J'ai un problème avec l'algorithme des bayes naïfs et je ne suis pas capable de trouver pourquoi. J'ai essayé un tutoriel en ligne et donc au début j'ai commencé à créer des données d'entraînement. Dans le code ci-dessous, j'utilise juste très peu de données d'entraînement, mais c'est le même problème.Analyse de sentiment R Naive Bayes en allemand
pos_tweets = rbind(
c('Ich liebe das auto', 'positive'),
c('Diese Aussicht ist großartig', 'positive'),
c('toller morgen', 'positive'),
c('ich freue mich so', 'positive'),
c('du bist aber lieb, danke', 'positive')
)
neg_tweets = rbind(
c('ich hasse autos', 'negative'),
c('der blick ist horror', 'negative'),
c('voll müde heute', 'negative'),
c('schreckliche stille', 'negative'),
c('er ist ein feind', 'negative')
)
test_tweets = rbind(
c('Schöne Momente erlebt', 'positive'),
c('zusammen macht es gleich doppelt spass', 'positive'),
c('Yeah, toller Tag', 'positive'),
c('Super schöne Umgebung', 'positive'),
c('es zieht ein leichter wind auf, sehr angenehm', 'positive')
)
tweetsbind = rbind(pos_tweets, neg_tweets, test_tweets)
matrix1= create_matrix(tweetsbind[,1], language="german",
removeStopwords=FALSE, removeNumbers=TRUE,
stemWords=FALSE)
mat1 = as.matrix(matrix1)
Maintenant, je former mon modèle:
classifier1 = naiveBayes(mat1[1:10,], as.factor(tweetsbind[1:10,2]))
Et maintenant, je veux l'utiliser:
predicted = predict(classifier1, mat1[11:15,]); predicted
Quand je regarde dans mon modèle il l'air assez bon, parce que les mots négatifs sont marqués comme négatifs et les positifs comme positifs. Mais en utilisant le modèle pour analyser les données de test, il ne sort que des résultats négatifs, même lorsque les instructions sont évidemment positives et que le mot utilisé existe également dans l'ensemble d'apprentissage.
Mon nouveau code est:
# search for some twitter data
happy <- searchTwitter(":)",n = 10000, lang ='de')
happy_text <- sapply(happy, function (x) x$getText())
sad <- searchTwitter(":(",n = 10000, lang ='de')
sad_text <- sapply(sad, function (x) x$getText())
# create the matrix
tweets <- rbind(sad_text[1:2500,], happy_text[1:2500,]) # if I use more training data, I get a storage error
tweet <- as.matrix(tweets)
matrix= create_matrix(tweet[,2], language= "german", removeStopwords=FALSE, removeNumbers=TRUE, stemWords=FALSE)
matrixdoc = as.matrix(matrix)
# transform to factor and train the model
X <- as.data.frame(matrixdoc[1:5000,])
X$out <- as.factor(tweet[1:5000,3])
X <- as.data.frame(lapply(X, factor))
classifierstack <- naiveBayes(out ~ ., data=X)
# predict
predicted = predict(classifierstack, mat1[11:15,],type = "raw")
Et voici le résultat: tout ist negativ, même si toutes mes entrées sont très positiv (je les ai changé).
negativ positiv
[1,] 1 5.828223e-176
[2,] 1 4.110223e-244
[3,] 1 3.274458e-244
[4,] 1 3.534996e-176
[5,] 1 0.000000e+00
Et si j'essaie ceci:
> predict(classifierstack, "zeigt", type = "raw")
negativ positiv
[1,] 0.5 0.5
-> il sort toujours de 0,5 à 0,5 et est finalement toujours negativ:/
Utilisez-vous le 'naiveBayes' du paquet' e1071'? – ekstroem
Oui, j'utilise le paquet e1071 –
Votre mise à jour n'est pas reproductible, donc ne peut pas voir ce qui ne va pas avec vos données. Qu'est-ce que 'testS'? Avez-vous obtenu les mêmes résultats que ci-dessous sur vos données/questions d'origine? – ekstroem