19 votos

Métodos en R o Python para realizar la selección de características en el aprendizaje no supervisado

¿Cuáles son los métodos/implementaciones disponibles en R/Python para descartar/seleccionar características no importantes/importantes en los datos? Mis datos no tienen etiquetas (sin supervisión).

Los datos tienen ~100 características con tipos mixtos. Algunos son numéricos mientras que otros son binarios (0/1).

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...

3voto

sd2k9 Puntos 21

El sparcl en R realiza una agrupación jerárquica dispersa y una agrupación K-means dispersa. Esto puede ser útil. http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2930825/

1voto

Maurice Puntos 22343

El análisis de rasgos principales parece ser una solución para la selección de rasgos sin supervisión. Se describe en este documento .

0 votos

El enlace está muerto. Compartido una implementación en python del método propuesto en el artículo stats.stackexchange.com/a/203978/76815 .

0 votos

Gracias, he eliminado el enlace (se ha borrado por ser off-topic).

0voto

voon Puntos 433

He encontrado un enlace que puede ser útil, son implementaciones de matlab, pueden servirte http://www.cad.zju.edu.cn/home/dengcai/Data/MCFS.html es un método de selección de características multiclúster, puedes encontrar fundamentos sólidos al respecto en artículos recientes Hágame saber si funciona para usted

0voto

Joshua Puntos 946

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: scatter plots

1 votos

Esto no es un aprendizaje no supervisado como pedía el OP, ya que su modelo utiliza mpg como resultado. ¿Hay alguna forma de utilizar métodos como estos en modelos no supervisados?

0voto

Maurice Puntos 22343

El nsprcomp Paquete R proporciona métodos para el análisis de componentes principales dispersos, que podrían satisfacer sus necesidades.

Por ejemplo, si cree que sus características están generalmente correlacionadas de forma lineal, y quiere seleccionar las cinco principales, podría ejecutar un PCA disperso con un máximo de cinco características, y limitarse al primer componente principal:

m <- nsprcomp(x, scale.=T, k=5, ncomp=1)
m$rotation[, 1]

Alternativamente, si quiere capturar la naturaleza ortogonal de las características, puede seleccionar la característica principal de cada uno de los cinco primeros PC, limitando cada PC a una característica:

m <- nsprcomp(x, scale.=T, k=1, ncomp=5)
m$rotation

Un conjunto de ellas también podría ser útil; es decir, las características que aparecen sistemáticamente en la parte superior de los diferentes métodos probablemente explican una gran cantidad de varianza en el espacio de características. Después de haber jugado con nsprcomp un poco, parece que los dos primeros métodos elevan ~1/2 de las mismas características a la cima. Dicho esto, optimizar este proceso puede ser un esfuerzo empírico.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X