评论星级评分 - R

时间:2015-11-22 17:41:38

标签: r rpart

我有一个评论数据集,其结构如下:

{
"reviewerID": "XXXX",
"asin": "12345XXX",
"reviewerName": "Paul",
"helpful": [2, 5],
"reviewText": "Nice product, works as it should.",
"overall": 5.0,
"summary": "Nice product",
"unixReviewTime": 1152700000,
"reviewTime": "08 14, 2010"
}

我有一堆评论,并希望使用一些文本挖掘技术根据评论文本(" reviewText")创建预测。

我想训练一个分类器,然后准确度衡量系统的工作情况。给出了每个评价的评分("总体")。

到目前为止,我做了以下事情:

必需的套餐(并非所有套餐都需要)

library(plyr)
library(rjson)
library(magrittr)
library(lubridate)
library(stringi)
library(doSNOW)
library(tm)
library(NLP)
library(wordcloud)
library(SnowballC)
library(rpart)

输入数据以JSON格式提供:

Sample Input

在此表中,reviewTexts被转换为语料库。

创建语料库并应用一些预处理步骤

corpus <- Corpus(VectorSource(tr.review.asin$reviewText))
corpus <- tm_map(corpus, tolower)
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, PlainTextDocument)
corpus <- tm_map(corpus, removeWords, stopwords('english'))
corpus <- tm_map(corpus, stemDocument)

制作文档字词矩阵

dtm <- DocumentTermMatrix(corpus)
dtm <- removeSparseTerms(dtm, 0.999)

创建培训和测试集

dtmsparse <- as.data.frame(as.matrix(dtm))
train <- dtmsparse[1:6500,]
test <- dtmsparse[6501:7561,]

创建模型

train$overall <- tr.review.asin[1:6500,]$overall
model <- rpart(overall ~., data = train, method= 'class')
mypred <- predict(model, newdata =test, type = 'class')

当我正在绘制obs_testmypred时,我会得到以下情节:

Plot obs_test and mypred

不幸的是,我不知道最后几行是否会引导我找到解决方案。

我想有一个程序,我可以测试我的模型预测的效果(实际整体评级和预测评级之间的比较)。

1 个答案:

答案 0 :(得分:0)

所以它完全让我注意到你实际上是在处理分类问题,而不是回归。因此需要完整的编辑。

查看分类树有多好想知道有多少实例(在测试数据中)被错误分类,即分配的类与观察到的类不同。了解预测模型对每个班级的效果如何也是有益的。使用confusionMatrix包中的caret函数,您可以执行以下操作:

 install.packages(`caret`)
 library(caret)

 mypred <- predict(model, newdata =test, type = 'class')
 obs <- tr.review.asin[6501:7561,]$overall

 confusionMatrix(obs, mypred)

你会得到一个混淆矩阵和一些统计数据作为输出。混淆矩阵告诉您每个类有多少实例预测和观察重合 - 这些将是对角线上的值。一般来说,ij矩阵的条目会告诉您有多少实例被归类为j而实际类别为i

confusionMatrix输出的“整体统计”部分中,您将看到“准确度” - 这是测试集中被正确分类的实例的百分比。

接下来,在“按类统计”部分中,名为“Pos Pred Value”的行将告诉您类x中的观察值的百分比是否正确分类。函数输出还有许多其他有用的统计信息,您可以在线阅读,例如herehere

我希望这会有所帮助。

相关问题