【问题标题】:Text classification using e1071 (SVM)使用 e1071 (SVM) 进行文本分类
【发布时间】:2017-02-24 09:07:52
【问题描述】:

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

数据帧的快照:

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

【问题讨论】:

    标签: r svm text-classification multilabel-classification


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

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

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

    这里,

      x = dtm 
    
      y = a vector of the corresponding labels 
    

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-07-16
        • 2016-08-13
        • 2016-01-04
        • 2014-03-27
        • 2023-03-18
        • 2016-12-01
        • 2013-07-13
        • 2012-06-16
        • 2017-03-09
        相关资源
        最近更新 更多