Когда я добавил «есть» во втором документе и аргумент weighting = weightTfIdf
должен уменьшить вес «есть», но это не так.varImp(fit)
всегда один и тот же?Поэтому, пожалуйста, запустите код с несколькими «есть» и с одним «есть» и посмотрите результат train
и varImp(fit)
.Надеюсь, что вы можете помочь, большое спасибо заранее.
library(caret)
library(tm)
### Training data.
data <- c('Cats like to chase mice.', 'Dogs like to eat eat eat eat eat eat big bones.')
corpus <- VCorpus(VectorSource(data))
corpus <- tm_map(corpus , removePunctuation)
corpus <- tm_map(corpus , removeNumbers)
corpus <- tm_map(corpus , content_transformer(tolower))
corpus <- tm_map(corpus , removeWords, stopwords("en"))
corpus <- tm_map(corpus , stripWhitespace)
corpus <- tm_map(corpus, stemDocument)
dtm <- tm::DocumentTermMatrix(corpus,
control = list(weighting=weightTfIdf))
train <- as.matrix(dtm); train
train <- cbind(train, c(0, 1))
colnames(train)[ncol(train)] <- 'y'
train <- as.data.frame(train)
train$y <- as.factor(train$y)
### Train.
fit <- train(y ~ ., data = train, method = 'bayesglm')
varImp(fit)
### Check accuracy on training.
predict(fit, newdata = train)
### Test data.
data2 <- c('Bats eat bugs.')
corpus <- VCorpus(VectorSource(data2))
dtm <- DocumentTermMatrix(corpus, control = list(dictionary = Terms(dtm), removePunctuation = TRUE, stopwords = TRUE, stemming = TRUE, removeNumbers = TRUE))
test <- as.matrix(dtm)
### Check accuracy on test.
predict(fit, newdata = test)