评论星级 - R 中的预测

Review star rating - prediction in R

我有一个具有以下结构的评论数据集:

{
"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") 创建预测。

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

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

需要的包(不是全部都需要)

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

其中 table 个评论文本被转换为语料库。

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

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

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

我想要一个程序来测试我的模型的预测效果(实际总体评分与预测评分之间的比较)。

所以我完全没有注意到您实际上是在处理 class化问题,而不是回归问题。因此进行了完整的编辑。

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

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

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

 confusionMatrix(obs, mypred)

你会得到一个混淆矩阵和一些统计数据作为输出。混淆矩阵告诉您每个 class 有多少实例的预测和观察结果一致——这些将是对角线上的值。一般来说,矩阵的第 ij 个条目会告诉您有多少实例被 class 化为 j 而真正的 class 是 i

confusionMatrix 输出的总体统计部分中,您将看到准确度 -- 这是测试集中 class 正确化的实例的百分比。

接下来在 Class 部分的统计数据中,名为 Pos Pred Value 的行将告诉您 class x 中有多少百分比的观察结果被 class 正确化。该函数输出了很多其他有用的统计数据,您可以在线阅读,例如 here or here.

希望对您有所帮助。