使用e1071(SVM)进行文本分类

4
我有一个数据帧,其中包含两列。一列包含文本。该列的每一行都包含三个不同类别(技能、资格和经验)的某种数据类型,另一列是它们各自的类别标签。
数据帧快照:
如何使用e1071软件包中的svm?如何将文本数据列转换为某些分数?我考虑将文本列转换为文档-术语矩阵。还有其他方法吗?如何制作一个d-t-matrix?
3个回答

5
你可以使用 RTextTools 包来创建文档-词项矩阵。 使用 create_matrix 函数:
# Create the document term matrix. If column name is v1
dtMatrix <- create_matrix(data["v1"])

然后,您可以使用以下内容训练您的SVM模型:
# Configure the training data
container <- create_container(dtMatrix, data$label, trainSize=1:102, virgin=FALSE)
 
# train a SVM Model
model <- train_model(container, "SVM", kernel="linear", cost=1)

关于信息,RTextTools 用户使用 e1071 包内部进行模型训练。

更多细节,请参考 RTextTools 和 e1071 文档。


注意:RTextTools不再得到积极维护。 - dfrankow

0
您可以在R中使用tm包。在形成文档术语矩阵之前,您需要预处理文本,包括去除停用词、标点符号、数字、规范化(美国=U.S.A)、词干提取等。添加权重到dtm - (tfidf)以使显著术语更加重要。
完成这些步骤后,您可以使用e1071中的svm()来训练分类器。
 fit <- svm(x, y, kernel = "linear") 

这里,

  x = dtm 

  y = a vector of the corresponding labels 

使用模型来预测测试数据的类别(确保您的测试数据也经过预处理)。

0

我也考虑过使用RTextTools。它的实现相对容易。然而,如果你的数据存在类别不平衡,它就没什么用了。它不允许你在容器中控制分层拆分。

container <- create_container(dtMatrix, data$label, trainSize=1:102, virgin=FALSE)

你不知道你的类别标签在 "trainSize=1:102" 参数中的比例会如何。 而且,它也没有得到维护。所以,我建议避免使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接