naiveBayes和预测功能在R中不起作用

时间:2016-04-15 09:40:25

标签: r sentiment-analysis predict naivebayes

我正在使用下面的R脚本对Twitter评论(哈萨克语)进行情绪分析。 3000(1500sad,1500happy)评论训练集和1000(快乐悲伤混合)评论测试集。一切都很好,但最后,预测值显示所有快乐,这是不对的。

我检查了每个功能,所有功能都在进行,直到naiveBayes功能。我检查了分类器值,它们是正确的。我认为naiveBayespredict搞砸了。

当我只使用一个快乐评论(列表中的第一个)和1500个悲伤(负面)评论作为此代码的训练集时,预测结果都很满意,我认为这应该是最悲伤的。

classifier = naiveBayes(mat[1500:3000,], as.factor(sentiment_all[1500:3000]))

然而,当我对训练集使用所有悲伤或负面评论时,预测结果都很难过。

classifier = naiveBayes(mat[1501:3000,], as.factor(sentiment_all[1501:3000]))

我花了好几个小时,我完全迷失了问题所在。请帮我解决这个问题。

这是脚本:

setwd("Path")
happy = readLines("Path")
sad = readLines("Path")
happy_test = readLines("Path")
sad_test = readLines("Path")

tweet = c(happy, sad)
tweet_test= c(happy_test, sad_test)
tweet_all = c(tweet, tweet_test)
sentiment = c(rep("happy", length(happy) ), 
              rep("sad", length(sad)))
sentiment_test = c(rep("happy", length(happy_test) ), 
                   rep("sad", length(sad_test)))
sentiment_all = as.factor(c(sentiment, sentiment_test))

library(RTextTools)
library(e1071)

# naive bayes
mat= create_matrix(tweet_all, language="kazakh", 
                   removeStopwords=FALSE, removeNumbers=TRUE, 
                   stemWords=FALSE, tm::weightTfIdf)

mat = as.matrix(mat)

classifier = naiveBayes(mat[1:3000,], as.factor(sentiment_all[1:3000]))
predicted = predict(classifier, mat[3001:4000,]); predicted

1 个答案:

答案 0 :(得分:0)

您的问题非常基本,您的问题设置错误。理想情况下,您需要为训练数据分为50-50分的正面和负面。由于Naive Bayes分类器的工作原理,它试图最小化熵。

我猜你的情况只有1个正面评论,分类器能够根据多个预测变量很容易地最小化熵。

如果您绝对没有使用正面评论,那么您基本上是说唯一预测值/唯一可能的结果是"悲伤"这正是你的模型正在做的事情。

至于您的主要问题,请尝试使用不同的数据集。 你从哪里得到你的推文,它们是否足够多样化?