【问题标题】:How to Interpret Predict Result of SVM in R?如何解释 R 中 SVM 的预测结果?
【发布时间】:2011-12-08 14:39:23
【问题描述】:

我是 R 新手,我正在使用 e1071 包在 R 中进行 SVM 分类。

我使用了以下代码:

data <- loadNumerical()

model <- svm(data[,-ncol(data)], data[,ncol(data)], gamma=10)

print(predict(model, data[c(1:20),-ncol(data)]))

loadNumerical用于加载数据,数据形式为(前8列输入,最后一列分类):

   [,1] [,2] [,3] [,4] [,5] [,6] [,7]      [,8] [,9]
1    39    1   -1   43   -1    1    0 0.9050497    0
2    23   -1   -1   30   -1   -1    0 1.6624974    1
3    50   -1   -1   49    1    1    2 1.5571429    0
4    46   -1    1   19   -1   -1    0 1.3523685    0
5    36    1    1   29   -1    1    1 1.3812029    1
6    27   -1   -1   19    1    1    0 1.9403649    0
7    36   -1   -1   25   -1    1    0 2.3360004    0
8    41    1    1   23    1   -1    1 2.4899738    0
9    21   -1   -1   18    1   -1    2 1.2989637    1
10   39   -1    1   21   -1   -1    1 1.6121595    0

数据行数为500。

如上面的代码所示,我测试了前 20 行进行预测。输出是:

         1          2          3          4          5          6          7 
0.04906014 0.88230392 0.04910760 0.04910719 0.87302217 0.04898187 0.04909523 
         8          9         10         11         12         13         14 
0.04909199 0.87224979 0.04913189 0.04893709 0.87812890 0.04909588 0.04910999 
        15         16         17         18         19         20 
0.89837037 0.04903778 0.04914173 0.04897789 0.87572114 0.87001066 

从结果我可以直观地看出,当结果接近0时,表示0类,如果接近1,则表示在1类。

但我的问题是我如何精确地解释结果:是否有一个阈值 s 我可以使用以便低于 s 的值分类为 0 且高于 s 的值分类为 1 ?

如果存在这样的s,我该如何推导出来?

【问题讨论】:

  • 将来,让您的示例可重现。 loadNumeric 行没有用,因为它指的是一个神秘的函数。一个好的策略是在一个小示例中使用 dput 并将其粘贴到您的问题中。
  • @IanFellows 感谢您的提示。

标签: r classification svm


【解决方案1】:

由于您的结果变量是数字,因此它使用 SVM 的回归公式。我想你想要分类公式。您可以通过将结果强制转换为因子或设置 type="C-classification" 来更改此设置。

回归:

> model <- svm(vs ~ hp+mpg+gear,data=mtcars)
> predict(model)
          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive 
       0.8529506670        0.8529506670        0.9558654451        0.8423224174 
  Hornet Sportabout             Valiant          Duster 360           Merc 240D 
       0.0747730699        0.6952501964        0.0123405904        0.9966162477 
           Merc 230            Merc 280           Merc 280C          Merc 450SE 
       0.9494836511        0.7297563543        0.6909235343       -0.0327165348 
         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental 
      -0.0092851098       -0.0504982402        0.0319974842        0.0504292348 
  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla 
      -0.0504750284        0.9769206963        0.9724676874        0.9494910097 
      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28 
       0.9496260289        0.1349744908        0.1251344111        0.0395243313 
   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa 
       0.0983094417        1.0041732099        0.4348209129        0.6349628695 
     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E 
       0.0009258333        0.0607896408        0.0507385269        0.8664157985 

分类:

> model <- svm(as.factor(vs) ~ hp+mpg+gear,data=mtcars)
> predict(model)
          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive 
                  1                   1                   1                   1 
  Hornet Sportabout             Valiant          Duster 360           Merc 240D 
                  0                   1                   0                   1 
           Merc 230            Merc 280           Merc 280C          Merc 450SE 
                  1                   1                   1                   0 
         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental 
                  0                   0                   0                   0 
  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla 
                  0                   1                   1                   1 
      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28 
                  1                   0                   0                   0 
   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa 
                  0                   1                   0                   1 
     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E 
                  0                   0                   0                   1 
Levels: 0 1

此外,如果您希望将概率作为预测而不仅仅是原始分类,您可以通过拟合概率选项来做到这一点。

概率:

> model <- svm(as.factor(vs) ~ hp+mpg+gear,data=mtcars,probability=TRUE)
> predict(model,mtcars,probability=TRUE)
          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive 
                  1                   1                   1                   1 
  Hornet Sportabout             Valiant          Duster 360           Merc 240D 
                  0                   1                   0                   1 
           Merc 230            Merc 280           Merc 280C          Merc 450SE 
                  1                   1                   1                   0 
         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental 
                  0                   0                   0                   0 
  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla 
                  0                   1                   1                   1 
      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28 
                  1                   0                   0                   0 
   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa 
                  0                   1                   0                   1 
     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E 
                  0                   0                   0                   1 
attr(,"probabilities")
                            0          1
Mazda RX4           0.2393753 0.76062473
Mazda RX4 Wag       0.2393753 0.76062473
Datsun 710          0.1750089 0.82499108
Hornet 4 Drive      0.2370382 0.76296179
Hornet Sportabout   0.8519490 0.14805103
Valiant             0.3696019 0.63039810
Duster 360          0.9236825 0.07631748
Merc 240D           0.1564898 0.84351021
Merc 230            0.1780135 0.82198650
Merc 280            0.3402143 0.65978567
Merc 280C           0.3829336 0.61706640
Merc 450SE          0.9110862 0.08891378
Merc 450SL          0.8979497 0.10205025
Merc 450SLC         0.9223868 0.07761324
Cadillac Fleetwood  0.9187301 0.08126994
Lincoln Continental 0.9153549 0.08464509
Chrysler Imperial   0.9358186 0.06418140
Fiat 128            0.1627969 0.83720313
Honda Civic         0.1649799 0.83502008
Toyota Corolla      0.1781531 0.82184689
Toyota Corona       0.1780519 0.82194807
Dodge Challenger    0.8427087 0.15729129
AMC Javelin         0.8496198 0.15038021
Camaro Z28          0.9190294 0.08097056
Pontiac Firebird    0.8361349 0.16386511
Fiat X1-9           0.1490934 0.85090660
Porsche 914-2       0.5797194 0.42028060
Lotus Europa        0.4169587 0.58304133
Ford Pantera L      0.8731716 0.12682843
Ferrari Dino        0.8392372 0.16076281
Maserati Bora       0.8519422 0.14805785
Volvo 142E          0.2289231 0.77107694

【讨论】:

  • 解释得很透彻!谢谢伊恩。
  • 那么如何使用结果绘制直方图?
【解决方案2】:

从广义上讲,对于这样的分类器,二元响应变量的预测值可以被认为是观察属于类 1 的概率(在这种情况下,您的类实际上标记为 0/1;在其他情况下,您'd 需要知道函数将哪个类视为 1 或 0;R 通常按字母顺序对因子的标签进行排序,因此最后一个将是 1 类。

所以人们最常做的事情是使用 0.5 作为截止值。但我应该警告您,该决定背后有很多数学问题,并且您的建模环境的细节可能需要不同的截止值。使用 0.5 作为截止值通常是最好的做法,但 SVM 是相当复杂的野兽;我建议您在开始尝试将 SVM 和分类理论应用于实际数据之前,先阅读一些有关 SVM 和分类理论的知识。

我最喜欢的参考是 The Elements of Statistical Learning,作者是 Hastie、Tibshirani 和 Friedman。

【讨论】:

  • 感谢您的精彩推荐!
猜你喜欢
  • 2014-07-16
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2016-02-21
  • 2014-09-16
  • 2018-01-13
相关资源
最近更新 更多