【问题标题】:Classification using a data set contains text and numbers使用包含文本和数字的数据集进行分类
【发布时间】:2023-03-12 21:10:01
【问题描述】:

我有以下数据集myDataSet

sentence1    sentence2    lengthofsentence1   lengthOfsentence2    label
Thank you     Thanks             9                    6              1
Hello           Hi               5                    2              2
Goodbye         Bye              7                    3              3
Many thanks   Thanks to you      11                   13             1
    .            .               .                    .              .
    .            .               .                    .              .
    .            .               .                    .              .

我想使用SVM 进行分类。我可以只使用数字的第 3 列和第 4 列来创建我的训练集:

train_data <- myDataSet[3:4]
lables <- myDataSet[5]
train <- svm(train_data, lables, type = "C-classification")

但我想知道如何使用前四列创建训练集?事实上,我想使用第 1、2、3、4 列,其中两个是文本,其余是数字来创建训练集。我看了这个页面:SVM Tutorial: How to classify text in R,但它只是针对类型为文本的列。

【问题讨论】:

  • 您只能将数字数据输入 SVM,因此您必须找到一些有意义的方式来表示您的文本数据。在sentence1, sentence2 中,有多少种可能的组合?如果一个合理的数字,考虑将它们表示为虚拟变量。每个级别 1 个。
  • 如果SVM不适合我的目的,你推荐什么分类算法? @山姆
  • SVM 绝对可以用于目的。您只需要对数字表示单词进行更多研究。您已经开始计算每个句子的字符数,但这种方法是有问题的。许多句子的单词数相同,但含义可能完全不同!
  • 这就是为什么我也想使用前两列作为分类的文本。 @山姆

标签: r dataset classification text-classification training-data


【解决方案1】:

有很多方法可以做到这一点。考虑到您需要数值,您可以重新编码来实现它。重新编码后,您可以使用 SVM。 记住要保持等价。

# using car package
library(car)

# Recode grade "Hello" to 1
myDataSet$sentence1 <- car::recode(myDataSet$sentence1,"Hello=1")


# using dplyr recode

dplyr::recode(myDataSet, Hello = 1)


# other dplyr way for all factor columns (beware the data types)
# return only the mutated columns

dplyr::mutate_if(myDataSet, is.factor, funs(as.numeric(interaction(., drop = TRUE))))


# preserve the original columns (useful for keeping a dictionnary for later use)
dplyr::mutate_if(myDataSet, is.factor, funs(new = as.numeric(interaction(., drop = TRUE))))


# using match
oldvalues <- c("Hello", "Hi")
newvalues <- factor(c("1","2")) 
myDataSet$sentence1 <- newvalues[ match(myDataSet$sentence1, oldvalues) ]

【讨论】:

  • 你正在假设一个有限的句子集。
  • Sam ,使用 dplyr::mutate_if 不需要担心有限句集
  • 好的,假设每个句子只出现一次,它们的数据点 > 100,000。那么
  • 从问题中的数据来看,我唯一关心的是解决问题。如果案例是 100.000 个独特的句子,那么这种方法不合适,Patris 应该搜索和研究 NLP,并依赖特定的包进行文本分析。
  • 这是公平的。但是 OP 没有提供 3 个点所示的完整数据,因此如果没有更多信息,您不能假设您已经解决了问题。
猜你喜欢
  • 2018-12-26
  • 2012-11-24
  • 2011-08-31
  • 2018-03-24
  • 2013-05-19
  • 2016-03-17
  • 2019-03-01
  • 2018-05-09
  • 2017-05-10
相关资源
最近更新 更多