1

我正在玩 R 语言中的支持向量机。具体来说,我使用的是 e1071 包。

只要我按照手册页或wikibooks上的教程进行操作,一切正常。但是,如果我尝试将自己的数据集与这些示例一起使用,那么事情就不再那么好了。

由于某种原因,模型创建似乎失败了。至少我没有得到目标列的水平。您可以在下面找到用于说明的示例。

也许有人可以帮助我弄清楚我在这里做错了什么。所以这里是所有的代码和数据。

测试数据集

target,col1,col2
0,1,2
0,2,3
0,3,4
0,4,5
0,5,6
0,1,2
0,2,3
0,3,4
0,4,5
0,5,6
0,1,2
0,2,3
0,3,4
0,4,5
1,6,7
1,7,8
1,8,9
1,9,0
1,0,10
1,6,7
1,7,8
1,8,9
1,9,0
1,0,10
1,6,7
1,7,8
1,8,9
1,9,0
1,0,10

R脚本

library(e1071)

dataset <- read.csv("test.csv", header=TRUE, sep=',')

tuned <- tune.svm(target~., data = dataset, gamma = 10^(-6:-1), cost = 10^(-1:1))

summary(tuned)

model  <- svm(target~., data = dataset, kernel="radial", gamma=0.001, cost=10)

summary(model)

摘要(模型)语句的输出

+ summary(model)

Call:
svm(formula = target ~ ., data = dataset, kernel = "radial", gamma = 0.001, 
    cost = 10)

Parameters:
   SVM-Type:  eps-regression 
 SVM-Kernel:  radial 
       cost:  10 
      gamma:  0.001 
    epsilon:  0.1 

Number of Support Vectors:  28
>

维基教科书示例

如果我将此输出与 wikibooks 示例的输出进行比较,它会丢失一些信息。请注意输出中的“级别”部分:

library(MASS)
library(e1071)
data(cats)
model  <- svm(Sex~., data = cats)
summary(model)

输出

> summary(model)

Call:
svm(formula = Sex ~ ., data = cats)

Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  radial 
       cost:  1 
      gamma:  0.5 

Number of Support Vectors:  84

 ( 39 45 )

Number of Classes:  2 

Levels: 
 F M
4

1 回答 1

2

将 Roland 的答案放在正确的“答案”格式中:

target是数字

sex是一个因素

让我再提几点建议:

  • 似乎target真的应该是一个因素。(它只有 2 个级别,0 和 1,我怀疑您正在尝试分类为 0 或 1。)所以坚持在dataset$target <- factor(dataset$target)某个地方。
  • 现在,因为target是数字,所以正在运行回归模型而不是分类。
  • 在运行模型(尤其是模型)之前,对任何变量进行类似的检查是值得的。例如,在您给出的情况下,什么col1col2是什么并不明显。如果它们中的任何一个是分组或分类,您也应该将它们作为因素。
    • 在 R 中,许多函数有多种运行方式,具体取决于提供给它们的数据类型。如果您将因素输入模型,它将运行分类。如果你输入数字,回归。这实际上在许多编程语言中很常见,称为函数重载
于 2013-07-25T20:47:06.720 回答