【发布时间】:2017-02-24 09:07:52
【问题描述】:
我有一个包含两列的数据框。一列包含文本。该列的每一行包含三个不同类别(技能、资格、经验)的某种类型的数据,另一列是它们各自的类别标签。
数据帧的快照:
如何从包 e1071 应用 svm。如何将文本数据列转换为一些分数。我想将文本列转换为文档术语矩阵。他们还有其他方式吗?如何制作 d-t 矩阵?
【问题讨论】:
标签: r svm text-classification multilabel-classification
我有一个包含两列的数据框。一列包含文本。该列的每一行包含三个不同类别(技能、资格、经验)的某种类型的数据,另一列是它们各自的类别标签。
数据帧的快照:
如何从包 e1071 应用 svm。如何将文本数据列转换为一些分数。我想将文本列转换为文档术语矩阵。他们还有其他方式吗?如何制作 d-t 矩阵?
【问题讨论】:
标签: r svm text-classification multilabel-classification
您可以使用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”参数中。 它也没有得到维护。所以,我会避免使用它。
【讨论】: