我最近使用了词袋分类器来制作一个96%的文档矩阵。然后我使用决策树来训练我的模型,将词袋输入用于预测句子是否重要。在测试数据集上,该模型表现非常好,但当我使用一个样本外的数据集时,它无法进行预测,反而会出现错误。
以下是我在R中创建的模型:
library('caTools')
library('tm')
library('rpart')
library(rpart.plot)
library(ROCR)
data= read.csv('comments.csv', stringsAsFactors = FALSE)
corpus = Corpus(VectorSource(data$Word))
# Pre-process data
corpus <- tm_map(corpus, tolower)
corpus <- tm_map(corpus, stemDocument)
# Create matrix
dtm = DocumentTermMatrix(corpus)
# Remove sparse terms
#dtm = removeSparseTerms(dtm, 0.96)
# Create data frame
labeledTerms = as.data.frame(as.matrix(dtm))
# Add in the outcome variable
labeledTerms$IsImp = data$IsImp
#Splitting into train and test data using caTools
set.seed(144)
spl = sample.split(labeledTerms$IsImp , 0.60)
train = subset(labeledTerms, spl == TRUE)
test = subset(labeledTerms, spl == FALSE)
#Build CART Model
CART = rpart(IsImp ~., data=train, method="class")
这在测试数据集上效果很好,准确率大约为83%。然而,当我使用这个cart模型对一个样本外的数据集进行预测时,会出现错误。
head(train)
terms A B C D E F..............(n terms)
Freqs 0 1 2 1 3 0..............(n terms)
head(test)
terms A B C D E F..............(n terms)
Freqs 0 0 1 1 1 0..............(n terms)
data_random = read.csv('comments_random.csv', stringsAsFactors = FALSE)
head(data_random)
terms A B D E F H..............(n terms)
Freqs 0 0 1 1 1 0..............(n terms)
我遇到的错误是"data_random"中的 "can't find C"。我不知道应该怎么做才能解决这个问题。在这里使用拉普拉斯平滑会有帮助吗?