繁体   English   中英

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

[英]Text classification using e1071 (SVM)

我有一个包含两列的数据框。 一列包含文本。 该列的每一行包含三个不同类别(技能、资格、经验)的某种类型的数据,另一列是它们各自的类别标签。

数据帧的快照:

数据框的快照

如何从包 e1071 应用 svm。 如何将文本数据列转换为分数。 我想将文本列转换为文档术语矩阵。 他们还有别的办法吗? 如何制作dt矩阵?

您可以使用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 文档。

您可以在 R 中使用tm包。您必须在形成文档术语矩阵之前对文本进行预处理,其中包括 - 去除停用词、标点符号、数字、标准化(美国 = 美国)、词干等。向 dtm 添加权重 - ( tfidf) 增加重要术语的重要性。

完成这些步骤后,您可以使用 e1071 中的 svm() 来训练分类器

 fit <- svm(x, y, kernel = "linear") 

在这里,

  x = dtm 

  y = a vector of the corresponding labels 

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

我也考虑过使用RTextTools 它有一个相对容易的实现。 但是,如果您的数据存在类不平衡,那将毫无用处。 它不允许您控制容器中的分层拆分。

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

您不知道您的类标签的比例将如何在“trainSize=1:102”参数中结束。 它也没有得到维护。 所以,我会避免使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM