2011-10-16 101 views
24

Tôi mới đến R và tôi đang sử dụng gói e1071 phân loại SVM trong R.Làm thế nào để diễn giải dự đoán kết quả của SVM trong R?

tôi đã sử dụng đoạn mã sau:

data <- loadNumerical() 

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

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

Các loadNumerical là cho dữ liệu tải, và các dữ liệu có dạng (cột đầu tiên 8 là đầu vào và cột cuối cùng là phân loại):

[,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 

số lượng hàng trong dữ liệu là 500.

Như được hiển thị trong đoạn mã trên, tôi đã kiểm tra 20 hàng đầu tiên để dự đoán. Và đầu ra là:

  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 

tôi có thể nói trực giác từ kết quả khi kết quả là gần 0, nó có nghĩa là 0 lớp, và nếu đó là gần 1 nó trong lớp 1.

Nhưng câu hỏi của tôi là như thế nào tôi có thể chính xác giải thích kết quả: là có một ngưỡng s tôi có thể sử dụng để các giá trị dưới đây s được phân loại là 0 và các giá trị trên s được phân loại là 1?

Nếu có tồn tại s, làm thế nào tôi có thể lấy được?

+0

Trong tương lai, làm ví dụ của bạn tái sản xuất. Dòng có loadNumeric không hữu ích vì nó đề cập đến một hàm bí ẩn. Một chiến lược tốt là sử dụng dput trên một ví dụ nhỏ và dán nó vào câu hỏi của bạn. –

+0

@IanFellows cảm ơn mẹo. –

Trả lời

34

Vì biến kết quả của bạn là số, nó sử dụng công thức hồi quy SVM. Tôi nghĩ bạn muốn xây dựng phân loại. Bạn có thể thay đổi điều này bằng cách ép buộc kết quả của bạn thành một yếu tố hoặc đặt type="C-classification".

Regression:

> 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 

Phân loại:

> 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 

Ngoài ra, nếu bạn muốn xác suất như dự đoán của bạn chứ không phải chỉ là phân loại nguyên liệu, bạn có thể làm điều đó bằng cách lắp với tùy chọn xác suất.

Với Xác suất:

> 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

Giải thích rất kỹ lưỡng! Cảm ơn Ian. –

+0

Làm cách nào để sử dụng kết quả để vẽ biểu đồ một biểu đồ? – aceminer

4

Nói chung với các bộ phân loại như thế này, giá trị dự đoán cho biến trả lời nhị phân có thể được coi là xác suất mà quan sát đó thuộc về lớp 1 (trong trường hợp này các lớp của bạn thực sự được gắn nhãn 0/1; bạn cần phải biết lớp nào mà hàm xử lý là 1 hoặc 0; R thường sắp xếp các nhãn của các thừa số theo thứ tự bảng chữ cái và vì vậy lớp cuối cùng sẽ là lớp 1).

Vì vậy, điều phổ biến nhất mọi người làm là sử dụng 0,5 làm điểm ngắt. Nhưng tôi nên cảnh báo bạn rằng có rất nhiều toán học đằng sau quyết định đó và các chi tiết cụ thể trong trường hợp lập mô hình của bạn có thể đòi hỏi một giá trị cắt khác nhau. Sử dụng 0,5 như là cắt là thường là điều tốt nhất để làm, nhưng SVM là những con thú khá phức tạp; Tôi khuyên bạn nên đọc một số về SVM và lý thuyết phân loại nói chung trước khi bạn bắt đầu cố gắng áp dụng chúng vào dữ liệu thực.

Tham chiếu yêu thích của tôi là The Elements of Statistical Learning, bởi Hastie, Tibshirani và Friedman.

+0

Cảm ơn bạn đã giới thiệu tuyệt vời! –

Các vấn đề liên quan