考虑以下示例
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
这样的工具来进行一些基本的交叉验证(小心,我的类在数据中高度不平衡)并优化,比如{{1} }。似乎F1
与quanteda
不兼容。那么如何有效地进行交叉验证?
有什么想法吗? 谢谢!