我是统计学学习等的新手,但对文本分类特别感兴趣。我正在追踪在这里找到关于该主题的实验室:https://cfss.uchicago.edu/text_classification.html#fnref1。不幸的是,该实验在训练有素的模型可以用于新数据之前就已经结束了,因此我试图弄清楚如何自己完成该模型。
我使用随机森林对模型进行了训练。当我尝试对新数据使用predict()
时会引发错误:Error in predict.randomForest(modelFit, newdata) :
variables in the training data missing in newdata
在我看来,这毫无意义,因为测试数据实际上是原始数据的一个子集。我假设,此错误与我如何构建模型以及测试数据的数据结构有关,但老实说,我没有足够的能力找出如何解决错误或错误的实际位置甚至源于(尽管我认为我犯了一些荒谬的错误)。
还有其他帖子具有相同的错误,但是我认为它们的错误来源与我的不同,我整天都在努力寻找解决方法!
我在下面使用完整的代码:
library(tidyverse)
library(tidytext)
library(stringr)
library(caret)
library(tm)
data(USCongress, package = "RTextTools")
test <- congress[1:100, ]
congress <- congress[100:nrow(congress), ]
(congress <- as_tibble(USCongress) %>%
mutate(text = as.character(text)))
(congress_tokens <- congress %>%
unnest_tokens(output = word, input = text) %>%
# remove numbers
filter(!str_detect(word, "^[0-9]*$")) %>%
# remove stop words
anti_join(stop_words) %>%
# stem the words
mutate(word = SnowballC::wordStem(word)))
(congress_dtm <- congress_tokens %>%
# get count of each token in each document
count(ID, word) %>%
# create a document-term matrix with all features and tf weighting
cast_dtm(document = ID, term = word, value = n))
congress_dtm <- removeSparseTerms(congress_dtm, sparse = .99)
congress_rf <- train(x = as.matrix(congress_dtm),
y = factor(congress$major),
method = "rf",
ntree = 200,
trControl = trainControl(method = "oob"))
final_predictions <- predict(congress_rf, newdata = test)
出现错误的最后一行(final_predictions <- predict(congress_rf, newdata = test
),在此之前没有错误消息发生。
答案 0 :(得分:0)
问题在于,test
不是您要为其拟合模型的数据的子集(congress_dtm
)。如果您创建congress_dtm
的子集,则可以正常工作:
#....
congress_dtm <- removeSparseTerms(congress_dtm, sparse = .99)
test <- congress_dtm[100, ]
congress_rf <- train(x = as.matrix(congress_dtm),
y = factor(congress$major),
method = "rf",
ntree = 200,
trControl = trainControl(method = "oob"))
final_predictions <- predict(congress_rf, newdata = test)
final_predictions
#> [1] 12
#> Levels: 1 2 3 4 5 6 7 8 10 12 13 14 15 16 17 18 19 20 21 99