2011-10-16 2 views
24

나는 R에 새로 온 사람과 나는 다음과 같은 코드를 사용 R에서 SVM의 예측 결과를 해석하는 방법?

R.

에서 SVM 분류에 대한 e1071 패키지를 사용하고 있습니다 :

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이다

,745,

위의 코드에서와 같이 예측을 위해 처음 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은 상당히 복잡한 동물입니다. 실제 데이터에 적용하기 시작하기 전에 일반적으로 SVM 및 분류 이론에 대한 독서를하는 것이 좋습니다.

좋아하는 참조는 The Elements of Statistical Learning, Hastie, Tibshirani 및 Friedman입니다.

+0

대단히 좋습니다! –

관련 문제