Hay muchas opciones disponibles en R
. Un buen lugar para buscar es el caret
que proporciona una buena interfaz para muchos otros paquetes y opciones. Puede echar un vistazo al sitio web aquí . Hay muchas opciones, pero voy a ilustrar una.
A continuación se muestra un ejemplo de uso de un filtro simple usando el incorporado en R
"mtcars" (que se muestra a continuación).
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Ahora un poco de configuración del código (carga de paquetes, etc.):
# setup a parallel environment
library(doParallel)
cl <- makeCluster(2) # number of cores to use
registerDoParallel(cl)
library(caret)
Y podemos ajustar un modelo sencillo para seleccionar las variables:
fit1 <- sbf(mtcars[, -1], mtcars[, 1],
sbfControl =
sbfControl(functions = rfSBF, method = "repeatedcv", repeats = 10)
)
Viendo los resultados, obtenemos:
fit1
Selection By Filter
Outer resampling method: Cross-Validated (10 fold, repeated 10 times)
Resampling performance:
RMSE Rsquared RMSESD RsquaredSD
2.266 0.9224 0.8666 0.1523
Using the training set, 7 variables were selected:
cyl, disp, hp, wt, vs...
During resampling, the top 5 selected variables (out of a possible 9):
am (100%), cyl (100%), disp (100%), gear (100%), vs (100%)
On average, 7 variables were selected (min = 5, max = 9)
Por último, podemos trazar las variables seleccionadas (en fit1$optVariables
) contra el resultado, mpg
:
library(ggplot2)
library(gridExtra)
do.call(grid.arrange,
lapply(fit1$optVariables, function(v) {
ggplot(mtcars, aes_string(x = v, y = "mpg")) +
geom_jitter()
}))
El resultado es este gráfico:
0 votos
¿Qué tipo de algoritmo de aprendizaje no supervisado está utilizando? ¿Qué aspecto tienen sus datos?
0 votos
@user1362215, Antes de aplicar cualquier algoritmo no supervisado, estoy tratando de encontrar una manera de realizar la eliminación de características.
0 votos
¿Has visto esto? scikit-learn hoja de trucos ¿antes? Puede ayudarte a empezar...
0 votos
¿Por qué no utilizar un método no supervisado que realice la selección de características por sí mismo, como el bosque aleatorio en modo no supervisado?
0 votos
@SteveS, La hoja de trucos es realmente útil. Gracias.
0 votos
@JEquihua, teniendo en cuenta que los datos que estoy explorando son para la detección de anomalías (la mayoría de los datos son normales, ~5-10% anómalos), ¿está bien aplicar RandomForest?
1 votos
No estoy completamente seguro, quiero decir que el bosque aleatorio es completamente no paramétrico, así que no te preocupes por las suposiciones. Lo que no estoy seguro es si servirá para tu propósito. Lo que SÍ puedo decir es que hay una versión de Random Forest sólo para la "detección de anomalías" llamada bosques de aislamiento: cs.nju.edu.cn/zhouzh/zhouzh.files/publication/ había una implementación en R, pero no estoy seguro de que esté en funcionamiento en este momento.
0 votos
Una técnica que podría ser útil es la "One Class SVM" (es decir, OCSVM). Parece que hay un ejemplo en (este post anterior de stackexchange)[ stackoverflow.com/questions/27375517/ . Creo que la referencia original es aquí y los resultados de google para "OCSVM" apuntan a ejemplos de detección de anomalías
0 votos
El enfoque en R y python me parece fuera de tema para los estándares actuales (de hecho para los de 2014). Sin R ni python, la pregunta se convierte en ¿Cuáles son los métodos disponibles para descartar/seleccionar características no importantes/importantes en los datos? Sin embargo, ninguno de ellos parece haber impedido que el hilo sea interesante o útil.