r - 带有插入符号问题的 Text2Vec 分类

标签 r svm r-caret text-classification text2vec

一些上下文:Working with text classification and big sparse matrices in R

我一直在研究 text2vec 的文本多类分类问题。包装和 caret .计划是使用text2vec用于构建文档项矩阵、修剪词汇和各种预处理内容,然后使用 caret 尝试不同的模型但我无法获得训练时的结果,插入符号会引发一些如下所示的错误:

+ Fold02.Rep1: cost=0.25 
predictions failed for Fold01.Rep1: cost=0.25 Error in as.vector(data) : 
no method for coercing this S4 class to a vector

所有折叠和重复都会发生这种情况。我认为在转换 text2vec 的文档项矩阵时出现问题产生一个向量,因为插入符号需要做一些计算,但老实说我不确定,这是这个问题的主要原因。

使用的代码,有一些跳过的部分,如下所示。请注意,我喂了 caret与文档项矩阵的直接结果 text2vec返回,我不完全确定这是否可以。
library(text2vec)
library(caret)
data("movie_review")
train = movie_review[1:4000, ]
test = movie_review[4001:5000, ]

it <- itoken(train$review, preprocess_function = tolower, tokenizer = word_tokenizer)
vocab <- create_vocabulary(it, stopwords = tokenizers::stopwords())
pruned_vocab <- prune_vocabulary(vocab, term_count_min = 10, doc_proportion_max = 0.5, doc_proportion_min = 0.001)

vectorizer <- vocab_vectorizer(pruned_vocab)
it = itoken(train$review, tokenizer = word_tokenizer, ids = train$id)
dtm_train = create_dtm(it, vectorizer)
it = itoken(test$review, tokenizer = word_tokenizer, ids = test$id)
dtm_test = create_dtm(it, vectorizer)

ctrl.svm.1 <- trainControl(method="repeatedcv",
                           number=10,
                           repeats=5,
                           summaryFunction = multiClassSummary,
                           verboseIter = TRUE)

fit.svm.1 <- train(x = dtm_train, y= as.factor(train$sentiment), 
                   method="svmLinear2",  
                   metric="Accuracy", 
                   trControl = ctrl.svm.1, 
                   scale = FALSE, verbose = TRUE)

正如我所说,问题出现在启动 train() 函数时。
dtm_train 对象属于以下类别:
[1] "dgCMatrix"
attr(,"package")
[1] "Matrix"

结构如下所示:
str(dtm_train)
> Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int [1:368047] 2582 2995 3879 3233 2118 2416 2468 2471 3044 3669 ...
  ..@ p       : int [1:6566] 0 0 3 4 4 10 10 14 14 22 ...
  ..@ Dim     : int [1:2] 4000 6565
  ..@ Dimnames:List of 2
  .. ..$ : chr [1:4000] "5814_8" "2381_9" "7759_3" "3630_4" ...
  .. ..$ : chr [1:6565] "floriane" "lil" "elm" "kolchak" ...
  ..@ x       : num [1:368047] 1 1 1 1 1 1 2 2 1 3 ...
  ..@ factors : list()

我究竟做错了什么?如果在文档中暗示可以使用这种数据,为什么插入符号无法处理此类数据?

最佳答案

Í如果你把你的 S4 类 dtm_train 变成一个简单的矩阵,代码就会起作用。

fit.svm.1 <- train(x = as.matrix(dtm_train), y= as.factor(train$sentiment), 
                   method="svmLinear2",  
                   metric="Accuracy", 
                   trControl = ctrl.svm.1, 
                   scale = FALSE, verbose = TRUE)

不要忘记为您的 dtm_test 做同样的事情,否则 predict 函数也会提示。
pred <- predict(fit.svm.1, newdata = as.matrix(dtm_test)

关于r - 带有插入符号问题的 Text2Vec 分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38768499/

相关文章:

r - 创建具有 4M 行的语料库和 DTM 的更有效方法

r - 使用 Caret 在 R 中为 k-fold CV 创建折叠

r - R : Error in names(resamples) <- gsub ("^\\.", ""、names(resamples)) 中带有 SVM 的插入符号:尝试在 NULL 上设置属性

matlab - 使用我自己的核函数时出现 SVM 分类错误 - Matlab

r - 插入符和 Shiny : cannot create prediction app driven by caret model

r - 使用 MASS 和插入符进行判别分析时相同的数据,不同的结果

r - lapply 估计许多因变量,然后用 Stargazer 制表

r - 想知道如何输出我在经济学家杂志上看到的图表

r - 使用另一个R包中的未导出功能?

machine-learning - SVM 分数 - 上限?