支持向量机的RTextTools实现

支持向量机的RTextTools实现,r,svm,R,Svm,这是我第一次使用RTextTools。我必须在一组文本文档上实现SVM分类。我遵循这个教程 我会逐步给你我的密码 首先,我读取数据并给出一个索引文件。索引文件有一个要分类的所有文本文档的列表,以及它们各自的标记。例如,如果有一个文件abc.txt属于类型X,则索引文件将其存储为abc.txt、X等 data = read_data('C:/Users/dell/Dropbox/Bundeli/corpus/wob/sklearn/folder', type=c('folder'), in

这是我第一次使用RTextTools。我必须在一组文本文档上实现SVM分类。我遵循这个教程

我会逐步给你我的密码

首先,我读取数据并给出一个索引文件。索引文件有一个要分类的所有文本文档的列表,以及它们各自的标记。例如,如果有一个文件abc.txt属于类型X,则索引文件将其存储为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_matrix <- create_matrix(data, language="english", removeNumbers=TRUE, stemWords=TRUE, removeSparseTerms=.8)
当我看到容器的结构时,它会向我显示空的训练代码。像这样

    Slot "training_codes":
    factor(0)
    Levels: 

    Slot "testing_codes":
    factor(0)
    Levels: 
如果您愿意,我可以向您展示对象容器的完整结构,但这不应该发生。谁能帮帮我吗?我一直在拼命地寻找答案。read_数据的索引文件可能有问题,或者data$genre变量有问题吗?这些都是新事物,我可能弄错了。我将非常感激

***解决****

按照@Theja的建议,已检查标准数据。然后更改如下:

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)

通过检查容器的结构来调试问题,您已经走上了正确的轨道

在creatematrix步骤中可能使用data$text或类似的东西,因为在createcontainer步骤中,数据似乎是一个以流派作为元素之一的列表


使用strdata检查数据结构,并传递正确的参数以创建_矩阵

就连我也面临着同样的问题,并像这样解决了它。基本上,问题出在

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_矩阵,它将解决问题

我今天也面临同样的问题。在我的例子中,发生这种情况是因为标签的长度与文档的长度不匹配。每个文档都需要分配一个类别/标签

在您的情况下,您应该将文本数据和相应的标签作为两个单独的列,例如

trainData$data ## contains your text 
trainData$label ## has your genre
确保,
lengthtrainData$data==lengthtrainData$label

谢谢@Theja。分析结构确实有帮助。然而,另一个问题出现在实际的SVM实现中。它只将整个数据排序为2个标签,而不是指定的3个。我已经检查了数据中每个$variable的结构。一切似乎都井然有序。正确读取数据,并指定标签。有人有什么解决方案吗?这个支持向量机可以通过基于训练数据标记测试数据来给出分类结果吗?如果有的话
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)
trainData$data ## contains your text 
trainData$label ## has your genre