这是我第一次使用RTextTools。我必须在一组文本文档上实现SVM分类。我正在学习本教程。
http://journal.r-project.org/archive/2013-1/collingwood-jurka-boydstun-etal.pdf
我逐步给你我的代码。
首先,我读取了我的数据,并给出了一个索引文件。索引文件包含要分类的所有文本文档及其各自标记的列表。例如,如果存在属于类型X的文件abc.txt,则索引文件将其存储为abc.txt,X等。
data = read_data('C:/Users/dell/Dropbox/Bundeli/corpus/wob/sklearn/folder', type=c('folder'), index = 'C:/Users/dell/Dropbox/Bundeli/corpus/wob/sklearn/index.txt')
其次,我创建了一个doc-term矩阵。
doc_matrix <- create_matrix(data, language="english", removeNumbers=TRUE, stemWords=TRUE, removeSparseTerms=.8)
第三,我创建了一个容纳
的容器 container <- create_container(doc_matrix, data$genre, trainSize=1:93, testSize=94:116, virgin=FALSE)
此处,数据$ genre是一个标签,其中每个文档的类型标签都按照确切的顺序给出,与索引对齐。
但是现在,当我尝试使用以下代码训练容器上的SVM时,
SVM <- train_model(container, "SVM")
它给了我这个错误。: -
Error in svm.default(x = container@training_matrix, y = container@training_codes, : x and y don't match.
当我看到&#34;容器&#39;的结构时,它显示我的训练代码为空。像这样。
Slot "training_codes":
factor(0)
Levels:
Slot "testing_codes":
factor(0)
Levels:
我可以向你展示对象的完整结构&#34; container&#34;如果你愿意,但这不应该发生。有人可以请帮忙吗?我一直在拼命寻找答案。 read_data的索引文件可能有问题,还是数据$ genre变量有问题?那些是新事物,我可能让它们变得不正确。我将非常感激。
***已解决****
根据@Theja的建议检查str(data)
。然后改变如下:
doc_matrix <- create_matrix(data, language="english", removeNumbers=TRUE, stemWords=TRUE, removeSparseTerms=.8)
这也改变了:
container <- create_container(doc_matrix, data$genre, trainSize=1:93, testSize=94:116, virgin=FALSE)
答案 0 :(得分:0)
您正在检查容器的结构以调试问题。
也许在创建矩阵步骤中使用数据$ text或类似的东西,因为看起来数据是一个带有类型作为其元素之一的列表(如创建容器步骤中所示)。
使用str(data)
检查数据结构,并将正确的参数传递给create_matrix()
。
答案 1 :(得分:0)
即使我遇到了完全相同的问题,也解决了这个问题。基本上问题在于
doc_matrix <- create_matrix(data, language="english", removeNumbers=TRUE, stemWords=TRUE, removeSparseTerms=.8)
这里数据格式需要从向量构建的数据帧。
m <- data.frame(v1,v2)
doc_matrix <- create_matrix(m$v1, language="english", removeNumbers=TRUE,
stemWords=TRUE, removeSparseTerms=.998)
container <- create_container(doc_matrix, m$v2, trainSize=1:2500,
testSize=2501:2676, virgin=FALSE)
SVM <- train_model(container,"SVM")
SVM_CLASSIFY <- classify_model(container, SVM)
因此,如果你使用它并从向量构建你的doc_matrix,它将解决问题!
答案 2 :(得分:0)
我今天遇到了同样的问题。在我的情况下,它发生的原因是标签的长度与文件的长度不匹配。每个文档都需要分配一个类/标签。
在您的情况下,您应该将文本数据和相应的标签分为两个单独的列,例如
trainData$data ## contains your text
trainData$label ## has your genre
确保, length(trainData $ data)== length(trainData $ label)