2016-04-15 29 views
0

我正在使用下面的R腳本對Twitter評論(以哈薩克語)進行情感分析。 3000(1500sad,1500happy)對訓練集的評論和對測試集的1000(快樂悲傷混合)評論。一切都很好,但最終,預測值顯示出所有的樂趣,這是不對的。naiveBayes和預測功能不工作在R

我已經檢查過每個功能,並且所有功能都正在運行,直到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 
+0

沒有人可以評論? –

+0

我懷疑預測()函數工作不正常。當我運行'code' predict = predict(分類器,mat [1:1,],type =「raw」);預測'代碼'它返回'代碼'快樂難過 [1,] 0.5 0.5'代碼'這意味着預測功能不起作用。 –

回答

0

你的問題是非常基本的,你要設置你的問題是錯誤的。理想情況下,您需要爲您的訓練數據提供50-50的積極和消極分數。由於樸素貝葉斯分類器的工作原理,它試圖使熵最小化。

我猜測,在你只有1個正面評論的情況下,分類器能夠很容易地基於多個預測因子最小化熵。

如果你絕對沒有正面評論,你基本上只是說唯一的預測值/唯一可能的結果是「悲傷」,這正是你的模型正在做的。

至於你的主要問題,嘗試不同的使用不同的數據集。 你從哪裏得到你的推文,是否足夠多樣?

+0

最初,我嘗試了50-50分裂,1500快樂和1500傷心評論訓練數據,它沒有奏效。我遵循這個來源的說明http://datascienceplus.com/sentiment-analysis-with-machine-learning-in-r/。它與他們的數據完美配合,但是當我用我的哈薩克語言評論替換他們的數據時,它會停止工作。我懷疑這是一個語言問題。 –

+0

你從哪裏得到數據?我認爲你的數據集可能有些偏頗。樸素貝葉斯傾向於這樣做。你可以發佈你的ROC曲線的結果嗎? – krthkskmr

+0

如何獲得ROC曲線?你確定這不是語言問題嗎?我的數據看起來像這樣 –