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

时间:2016-10-14 20:32:07

标签: r svm text-classification multilabel-classification

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

数据框的快照:

snapshot of the dataframe

如何从包e1071应用svm。如何将文本数据列转换为某个分数。我想过将文本列转换为文档术语矩阵。他们是其他任何方式吗?如何制作d-t矩阵?

3 个答案:

答案 0 :(得分: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文档。

答案 1 :(得分:0)

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

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

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

下面,

  x = dtm 

  y = a vector of the corresponding labels 

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

答案 2 :(得分:0)

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

{{1}}

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