首页 文章

R e1071 SVM模型twitter分类

提问于
浏览
1

我一直在使用e1071库来分类文本 . 我已经能够使用NB alogorithm但努力应用SVM . 我一直在关注Cran website的指南

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

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

My code:

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模型提供该信息 .

感谢您的时间和帮助 .

1 回答

  • 1

    Type ~ . 是将模型定义为"Values in column Type are dependent on values in all other columns"的公式 . 我们不考虑内置数据集 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
    

相关问题