【问题标题】:R e1071 SVM model twitter classificationR e1071 SVM 模型推特分类
【发布时间】:2023-03-18 19:30:01
【问题描述】:

我一直在使用 e1071 库对文本进行分类。我已经能够使用 NB 算法,但很难应用 SVM。 我一直在关注Cran website的指南

该网站有一段代码没有解释对象类型以及我如何为自己的代码获取它。

> svm
> svm.model <- svm(Type ~ ., data = trainset, cost = 100, gamma = 1)
> svm.pred <- predict(svm.model, testset[,-10])

我的代码:

library(e1071)
library(dplyr)
library(caret)
library(rpart)



df<- read.csv("C:/Users/Suki/Projects/RProject/tweets.csv", stringsAsFactors = FALSE)


trainSVM <- apply(dtm.train.svm, 2, convert_count)
testSVM <- apply(dtm.test.svm, 2, convert_count)

svm.model <- svm(Type~., data = trainSVM, cost = 100, gamma = 1)
svm.pred <- predict(svm.model, testSVM)

我找不到解释,但看到了另一个类似的例子。我是否相信“类型”是我希望 SVM 模型预测的?正如我到目前为止所做的那样,我不确定如何为 SVM 模型提供这些信息。

感谢您的时间和帮助。

【问题讨论】:

  • 是的,Type 就是您要预测的内容。它应该是您作为data 参数提供的data.frame 中的一列。更具体地说,Type ~ . 是一个公式,基本上说“预测列 Type 中的值,使用所有其他列中的值”。
  • 感谢您的回复。我尝试通过在读取 csv 时添加 header = TRUE 并为我要使用的第一列创建变量 df[,c(col1)] 来听取您的建议,但我仍然收到错误消息。您能否进一步详细说明我应该如何在 data.frame 中创建列,或者我是否需要更改读取数据帧 csv 的方法?
  • 我们无权访问您的数据,因此无法说出问题所在。有关内置数据集的演示,请参阅下面的答案。

标签: r svm


【解决方案1】:

Type ~ . 是将模型定义为“列类型中的值取决于所有其他列中的值”的公式。我们无权访问您的数据文件,所以让我们考虑一下内置数据集iris

head( iris )   ## Look at the first few rows of the data
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa
# 3          4.7         3.2          1.3         0.2  setosa
# ...

假设我想根据所有其他列中的值来预测 Species 列中的值。我可以将对应的模型定义为Species ~ .。或者,如果我只想使用某些列,我会将它们放在~ 的右侧。例如,Species ~ Sepal.Length + Petal.Length 将仅使用 *Length 列。

现在我有了数据集和公式,我可以使用您在答案中提供的代码训练我的 SVM

myModel <- e1071::svm( Species ~ ., data = iris )

出于演示目的,我们可以将模型应用回训练数据以检索预测

predict( myModel, iris )
#           1          2          3          4          5          6          7
#      setosa     setosa     setosa     setosa     setosa     setosa     setosa
#           8          9         10         11         12         13         14
#      setosa     setosa     setosa     setosa     setosa     setosa     setosa
# ...

最后,请注意svm 函数有另一种提供数据/标签的方法(请查看?e1071::svm)。以下是训练模型的等效方法:

e1071::svm( iris[,1:4], iris[,5] )  # Predict Column 5 values from Column 1:4 values

【讨论】:

    猜你喜欢
    • 2012-06-16
    • 2016-08-13
    • 2014-08-01
    • 2014-03-27
    • 2017-02-24
    • 2011-11-15
    • 2019-01-21
    • 2018-02-10
    • 2016-09-21
    相关资源
    最近更新 更多