我正在使用下面的R脚本对Twitter评论(哈萨克语)进行情绪分析。 3000(1500sad,1500happy)评论训练集和1000(快乐悲伤混合)评论测试集。一切都很好,但最后,预测值显示所有快乐,这是不对的。
我检查了每个功能,所有功能都在进行,直到naiveBayes
功能。我检查了分类器值,它们是正确的。我认为naiveBayes
或predict
搞砸了。
当我只使用一个快乐评论(列表中的第一个)和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
答案 0 :(得分:0)
您的问题非常基本,您的问题设置错误。理想情况下,您需要为训练数据分为50-50分的正面和负面。由于Naive Bayes分类器的工作原理,它试图最小化熵。
我猜你的情况只有1个正面评论,分类器能够根据多个预测变量很容易地最小化熵。
如果您绝对没有使用正面评论,那么您基本上是说唯一预测值/唯一可能的结果是"悲伤"这正是你的模型正在做的事情。
至于您的主要问题,请尝试使用不同的数据集。 你从哪里得到你的推文,它们是否足够多样化?