【发布时间】:2016-08-26 18:22:25
【问题描述】:
我有一个包含两列的 BBC 文章数据集:“类别”和“文本”。我需要构建一个朴素贝叶斯算法,根据类型预测文章的类别(即商业、娱乐)。
我正在尝试使用 Quanteda 并拥有以下代码:
library(quanteda)
bbc_data <- read.csv('bbc_articles_labels_all.csv')
text <- textfile('bbc_articles_labels_all.csv', textField='text')
bbc_corpus <- corpus(text)
bbc_dfm <- dfm(bbc_corpus, ignoredFeatures = stopwords("english"), stem=TRUE)
# 80/20 split for training and test data
trainclass <- factor(c(bbc_data$category[1:1780], rep(NA, 445)))
testclass <- factor(c(bbc_data$category[1781:2225]))
bbcNb <- textmodel_NB(bbc_dfm, trainclass)
bbc_pred <- predict(bbcNb, testclass)
它似乎工作顺利,直到 predict(),它给出:
Error in newdata %*% log.lik :
requires numeric/complex matrix/vector arguments
谁能提供有关如何解决此问题的见解?我仍然掌握文本分析和 quanteda 的窍门。谢谢!
【问题讨论】:
-
您应该提供足够的数据来制作您的示例reproducible。它可能与您的数据有关,但由于我们无法确定,因此无法确定。
-
@MrFlick 我已编辑帖子以包含指向 .csv 文件的直接链接。我应该提供任何其他信息吗?新手!
-
newdatapredict()的第二个参数不能是一个因素,test class是,而是它需要是一个 dfm。见??predict.textmodel_NB_fitted。如果您的最后一行是predict(bbcNb)应该可以工作 - 但不能。显然 k >2 时 predict 方法中存在错误。请在github.com/kbenoit/quanteda/issues 提出问题。 -
感谢@KenBenoit!如果我想保留
predict()的newdata参数,那么转换testclass的正确方法是什么?会是testclass_dfm <- dfm(as.matrix(testclass))吗?这样做会在使用predict()时出现以下错误:“newdata %*% log.lik 中的错误:文件 ../MatrixOps/cholmod_sdmult.c 第 90 行中的 Cholmod 错误‘X 和/或 Y 尺寸错误’”跨度>