7 votos

R knn selección de variables

Tengo un conjunto de datos que son 200k filas X 50 columnas. Estoy tratando de usar un knn pero hay una enorme variación en el rendimiento dependiendo de las variables que se utilicen (es decir.., rsqd va de 0,01 (usando todas las variables) a 0,98 (usando sólo 5 variables)).

Este tipo de problema se agrava, ya que ahora tengo que determinar k y qué variables utilizar.

¿Hay un paquete en R que ayuda a seleccionar las variables para un knn modelo, mientras se afina k ? He mirado rfe() en caret pero parece estar construido sólo para la regresión lineal, randomforest bayes ingenuos, etc., pero no knn .

Como un aparte, he intentado construir manualmente un bucle para usar la función de tren de carros de esta manera:

for(i in 2:50){
knnFit <- train(x[,i],y,...) ## trains model using single variable
}

Mi problema es que knnFit$results imprime todos los resultados y knnFit$bestTune sólo imprime el parámetro final de k .

> data1 <- data.frame(col1=runif(20), col2=runif(20), col3=runif(20), col4=runif(20), col5=runif(20))
> bootControl <- trainControl(number = 1)
> knnGrid <- expand.grid(.k=c(2:5))
> set.seed(2)
> knnFit1 <- train(data1[,-c(1)], data1[,1]
+ , method = "knn", trControl = bootControl, verbose = FALSE,
+ tuneGrid = knnGrid )
> knnFit1 
20 samples
 4 predictors

No pre-processing
Resampling: Bootstrap (1 reps) 

Summary of sample sizes: 20 

Resampling results across tuning parameters:

  k  RMSE   Rsquared
  2  0.485  0.124   
  3  0.54   0.369   
  4  0.52   0.241   
  5  0.528  0.232   

RMSE was used to select the optimal model using  the smallest value.
The final value used for the model was k = 2. 

> knnFit1$results
      k      RMSE  Rsquared RMSESD RsquaredSD
    1 2 0.4845428 0.1241031     NA         NA
    2 3 0.5401009 0.3690569     NA         NA
    3 4 0.5197262 0.2410814     NA         NA
    4 5 0.5277939 0.2317607     NA         NA

> knnFit1$bestTune
      .k
    1  2

Necesito alguna forma de imprimir la métrica RMSE/rsqd/otras métricas para el mejor modelo de rendimiento individual (es decir, sólo "R-cuadrado: 0,91").

¿Alguna sugerencia?

1 votos

Este es uno de mis problemas con R. ¿Qué biblioteca es train() de? Sin el library(...) es increíblemente difícil de entender en este caso con una función de nombre tan vago como train . Si la convención fuera llamar a funciones como lib.name::function() entonces esto no sería tan difícil...

0 votos

@wordsforthewise: train es de la caret paquete.

0 votos

Sí, debería haber sido capaz de ver que a partir de las etiquetas, pero no creo que mirar allí. gracias

7voto

Jenny Puntos 51

KnnFit1$results es en realidad un data.frame, por lo que puede imprimir todos los resultados de R-cuadrado con:

knnFit1$results$Rsquared

O el resultado de R-cuadrado sólo para el mejor modelo:

knnFit1.sorted <- results[order(results$Rsquared),]
knnFit1.sorted[1,'Rsquared']

¿Responde esto a su pregunta?

0 votos

@screechOwl ¡Me alegro de oírlo! Me encanta R data.frame s.

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