vectorial soporte regresion para multiclase maquina lineal libreria generalizacion funcion error r classification svm

soporte - ¿Cómo interpretar el resultado predicho de SVM en R?



svm para regresion (2)

Soy nuevo en R y estoy usando el paquete e1071 para la clasificación SVM en R.

Use el siguiente código:

data <- loadNumerical() model <- svm(data[,-ncol(data)], data[,ncol(data)], gamma=10) print(predict(model, data[c(1:20),-ncol(data)]))

El loadNumerical es para cargar datos, y los datos son de la forma (las primeras 8 columnas se ingresan y la última columna es la clasificación):

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

El número de filas en los datos es 500.

Como se muestra en el código anterior, probé las primeras 20 filas para la predicción. Y la salida es:

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

Puedo decir intuitivamente del resultado que cuando el resultado está cerca de 0, significa 0 clase, y si está cerca de 1 está en la clase 1.

Pero mi pregunta es ¿cómo puedo interpretar con precisión el resultado? ¿Existe un umbral que pueda usar para que los valores que figuran a continuación s se clasifiquen como 0 y los valores que s arriba se clasifiquen como 1?

Si existen tales s , ¿cómo puedo derivarlas?


Dado que su variable de resultado es numérica, utiliza la formulación de regresión de SVM. Creo que quieres la formulación de la clasificación. Puede cambiar esto coaccionando su resultado en un factor, o configurando type="C-classification" .

Regresión:

> 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

Clasificación:

> 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

Además, si desea probabilidades como su predicción en lugar de solo la clasificación en bruto, puede hacerlo ajustando la opción de probabilidad.

Con Probabilidades:

> 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


En términos generales, con clasificadores como este, se puede considerar que el valor predicho para una variable de respuesta binaria es la probabilidad de que esa observación pertenezca a la clase 1 (en este caso, sus clases están etiquetadas como 0/1; en otros casos, es necesario para saber a qué clase trata la función como 1 o 0; R a menudo ordena las etiquetas de los factores alfabéticamente y la última sería la clase 1).

Así que lo más común que hacen las personas es usar 0.5 como límite. Pero debo advertirle que hay muchas matemáticas detrás de esa decisión y que los detalles de sus circunstancias de modelado pueden requerir un valor de corte diferente. Usar 0.5 como límite es a menudo lo mejor que se puede hacer, pero los SVM son bestias bastante complicadas; Le recomendaría que lea algo sobre SVM y la teoría de clasificación en general antes de comenzar a aplicarlos a datos reales.

Mi referencia favorita es The Elements of Statistical Learning , de Hastie, Tibshirani y Friedman.