Рассмотрим следующий пример
dtrain <- data_frame(text = c("Chinese Beijing Chinese",
"Chinese Chinese Shanghai",
"Chinese Macao",
"Tokyo Japan Chinese"),
doc_id = 1:4,
class = c("Y", "Y", "Y", "N"))
dtrain <- dtrain %>% mutate(class = as.factor(class))
> dtrain
# A tibble: 4 x 3
text doc_id class
<chr> <int> <fct>
1 Chinese Beijing Chinese 1 Y
2 Chinese Chinese Shanghai 2 Y
3 Chinese Macao 3 Y
4 Tokyo Japan Chinese 4 N
Следующий код, который обучает наивный байесовский классификатор по этим текстовым данным, работает хорошо:
trainingset <- dfm(corpus(dtrain, docid_field = 'doc_id', text_field = 'text'))
nb_test <- textmodel_nb(trainingset, docvars(trainingset, "class"), prior = "docfreq")
myprediction <- predict(nb_test, trainingset)$nb.predicted
confusionMatrix(table(trainingclass, myprediction), mode = 'prec_recall')
Confusion Matrix and Statistics
myprediction
trainingclass N Y
N 1 0
Y 0 3
Accuracy : 1
95% CI : (0.3976, 1)
No Information Rate : 0.75
P-Value [Acc > NIR] : 0.3164
Kappa : 1
Mcnemar's Test P-Value : NA
Precision : 1.00
Recall : 1.00
F1 : 1.00
Моя проблема в том, что это простоin-sample
.
Другими словами, я не знаю, как я могу использовать такие инструменты, как caret
, чтобы выполнить некоторую базовую перекрестную проверку (осторожно, мои классы сильно разбалансированы в данных) и оптимизировать, скажем, F1
,Кажется, quanteda
не совместим с caret
.Как эффективно провести перекрестную проверку?
Есть идеи?Спасибо!