2011-10-16 84 views
24

我新的R和我使用e1071包在R.如何解釋預測R中SVM的結果?

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班。

但我的問題是我怎麼能精確解釋結果:有沒有門檻小號我可以使用,這樣下小號值被歸類爲0以上小號值被歸類爲1?

如果存在這樣的小號,我怎樣才能得到呢?

+0

在未來,讓你的例子可重複性。帶有loadNumeric的行沒有用,因爲它涉及到一個神祕功能。一個好的策略是在一個小例子中使用dput並將其粘貼到您的問題中。 –

+0

@IanFellows感謝您的提示。 –

回答

34

由於您的結果變量是數字,它使用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..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 
+0

非常詳細的解釋!謝謝伊恩。 –

+0

如何使用結果繪製直方圖? – aceminer

4

像這樣的分類器非常廣義地說,爲一個二進制響應變量的預測值可以被看作是該觀察屬於類別1(在這種情況下你的類實際上是標記爲0/1的概率;在其他情況下你需要知道函數將哪個類作爲1或0; R通常按字母順序排列因素的標籤,因此最後一個類將是1)。

所以人們最常見的就是使用0.5爲分界。但我應該警告你,這個決定背後有很多數學問題,你的建模環境的細節可能需要不同的臨界值。使用0.5爲分界是經常做的最好的事情,但支持向量機是相當複雜的野獸;我建議你在開始嘗試將它們應用於真實數據之前,先閱讀SVM和分類理論。

我最喜歡引用The Elements of Statistical Learning,由黑斯蒂,Tibshirani和弗裏德曼。

+0

非常感謝您的推薦! –