我有一个评论数据集,其结构如下:
{
"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格式提供:
在此表中,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_test
和mypred
时,我会得到以下情节:
不幸的是,我不知道最后几行是否会引导我找到解决方案。
我想有一个程序,我可以测试我的模型预测的效果(实际整体评级和预测评级之间的比较)。
答案 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
中的观察值的百分比是否正确分类。函数输出还有许多其他有用的统计信息,您可以在线阅读,例如here或here。
我希望这会有所帮助。