Я тренирую наивную байесовскую модель, чтобы предсказать тип обзора фильма. Модель была создана и работает хорошо, но я застрял с вопросом, как я могу оценить, насколько важно каждое слово для классификации метки, ранжируя слова по их условным вероятностям в пределах вероятности.
Задачасостоит в том, чтобы обучить наивную байесовскую модель предсказывать тип обзора фильма, положительный или отрицательный. После обучения модели я написал «таблицу nbclassifier $», чтобы показать список условной вероятности каждой функции. Тогда я не знаю, как выбрать топ-5 наиболее различимых характеристик для положительных отзывов и другие топ-5 для отрицательных отзывов.
rm(list = ls(all.names = TRUE))
library(knitr)
knitr::opts_chunk$set(echo = TRUE)
library(quanteda)
library(readtext)
library(pacman)
pacman::p_load(ElemStatLearn,foreign,class,caret,e1071)
url = "http://www.ocf.berkeley.edu/~janastas/data/movie-pang02.csv"
dataframe <- readtext(url, text_field = "text")
## change the column names for own use
colnames(dataframe) <- c("doc_id", "text","posneg_type")
## creating corpus
doc.corpus <- corpus(dataframe)
summary(doc.corpus,5)
#remove punctuation, remove numbers, remove all the spaces, stem the words,
remove all of the stop words, and convert everything into lowercase.
doc.corpus.dfm <- tokens(doc.corpus,
remove_numbers = TRUE,
remove_symbols = TRUE,
remove_url = TRUE,
remove_punct = TRUE,
remove_twitter = TRUE,
remove_separators = TRUE) %>%
tokens_remove("\\p{P}", valuetype = "regex", padding = TRUE) %>%
tokens_remove(stopwords("english"), padding = TRUE) %>%
tokens_remove( "s", padding = TRUE) %>%
tokens_remove( "t", padding = TRUE) %>%
tokens_ngrams(n=1) %>%
tokens_tolower() %>%
tokens_wordstem() %>%
dfm()
doc.corpus.dfm <- dfm(doc.corpus.dfm)
doc.corpus.dfm.sparse <- dfm_trim(doc.corpus.dfm, sparsity = 0.9)
reviewsDTM_F <- data.matrix(dfm_weight(doc.corpus.dfm.sparse, scheme =
"count"))
## Train a naive Bayes classifier called "nbclassifier" with a 70\%/30\%
training/testing split
# convert to a dataframe
reviewsDTM_F <- as.data.frame(reviewsDTM_F, stringsAsFactors = FALSE)
# set NA values to 0
reviewsDTM_F[is.na(reviewsDTM_F)] <- 0
sum(is.na(reviewsDTM_F))
## Creating training dataset
reviewtrunc <- data.frame(yvar =
factor(doc.corpus.dfm@docvars$posneg_type), reviewsDTM_F)
# Resample the data
train <- sample(1:dim(reviewtrunc)[1]) #Random Indices shuffling helpful
reviewtrunc.train <- reviewtrunc[train[1:1400],]
reviewtrunc.test <- reviewtrunc[train[1401:2000],]
set.seed(20191013)
## Train the "nbclassifier"
nbclassifier <- naiveBayes(yvar ~ ., data = reviewtrunc.train)
## Now predict the test data
test_pred <- predict(nbclassifier, reviewtrunc.test[ ,
names(reviewtrunc.test) != "yvar"])
## Retrieve the probabilities of each term from nbclassifier
nbclassifier$tables
Итак, как я могу использовать данные «таблиц» из функции «naiveBayes», которая обеспечивает эти условные вероятности, предоставить список из 5 лучших терминов, которые предсказывают положительный отзыв, и список лучших5 терминов, которые предсказывают отрицательные отзывы.