10 votos

Cómo realizar genética-el algoritmo de selección de variables en R para SVM variables de entrada?

Estoy usando el kernlab paquete en R para construir una SVM para la clasificación de algunos datos.

El SVM está trabajando muy bien en que se da 'predicciones' de una manera decente de precisión, sin embargo mi lista de variables de entrada es más grande de lo que me gusta y no estoy seguro de que en cuanto a la importancia relativa de las diferentes variables.

Me gustaría implementar una genética-algoritmo para seleccionar el sub-conjunto de las variables de entrada que produce la mejor capacitados y más fuerte de la SVM.

Me gustaría un poco de ayuda con la elección de que paquete de R para utilizar a la hora de GA aplicación (y, posiblemente, una breve pseudo-ejemplo).

He mirado la mayoría de la R GA/P paquetes (RGP, genalg, subselección, GALGO), pero estoy luchando por conceptualmente a ver cómo iba a pasar en mi ksvm función como parte de la función de aptitud y de entrada de mi matriz de variables como la población de la piscina...?

Cualquier ayuda, pensamientos, o zumbidos en la dirección correcta recibido con gratitud.

Gracias

código que resuelve esto, añadido a continuación en una posterior EDICIÓN

# Prediction function to be used for backtesting
pred1pd = function(t) {
print(t)
##add section to select the best variable set from those available using GA
  # evaluation function - selects the best indicators based on miminsied training error
mi.evaluate <- function(string=c()) {
    tmp <- data[(t-lookback):t,-1]
    x <- string
    tmp <- tmp[,x==1]
    tmp <- cbind(data[(t-lookback):t,1],tmp)
    colnames(tmp)[1] <- "targets"
    trainedmodel = ksvm(targets ~ ., data = tmp, type = ktype, kernel="rbfdot", kpar=list(sigma=0.1), C = C, prob.model = FALSE, cross = crossvalid)
    result <- error(trainedmodel)
    print(result)
    }

## monitor tge GA process
monitor <- function(obj) {
minEval = min(obj$evaluations);
plot(obj, type="hist");
}

## pass out the GA results; size is set to be the number of potential indicators
gaResults <- rbga.bin(size=39, mutationChance=0.10, zeroToOneRatio=10, evalFunc=mi.evaluate, verbose=TRUE, monitorFunc=monitor, popSize=50, iters=3, elitism=10)

## now need to pull out the best chromosome and rebuild the data frame based on these results so that we can train the model

bestChro <- gaResults$population[1,]
newData <- data[,-1]
newData <- newData[,bestChro==1]
newData <- cbind(data[,1],newData)
colnames(newData)[1] <- "targets"
print(colnames(newData))

# Train model using new data set
model = trainSVM(newData[(t-lookback):t, ], ktype, C, crossvalid)
# Prediction
pred = as.numeric(as.vector(predict(model, newData[t+1, -1], type="response")))
# Print for user inspection
print(pred)
}

8voto

John Richardson Puntos 1197

Mi consejo sería no hacerlo. Las ventajas teóricas de la SVM que evitar el sobre-ajuste sólo se aplican a la determinación de los multiplicadores de lagrange (los parámetros del modelo). Tan pronto como usted comience a realizar la selección de características, las ventajas son esencialmente perdido, ya que hay poca teoría que cubre modelo de selección o selección de características, y que es muy probable que más de ajuste de la función de criterio de selección, especialmente si usted busca realmente duro utilizando un GA. Si la selección de características es importante, me gustaría usar algo como LAZO, LARS o red Elástica, donde la característica de selección surge a través de reguarisation, donde la selección de características es más limitada, por lo que hay menos grados efectivos de libertad, y menos con el ajuste.

Nota una ventaja clave de la SVM es que es un aproximado de la implementación de una generalización obligado que es independiente de la dimensionalidad del espacio de características, lo que sugiere que la selección de características, tal vez no necesariamente se espera mejorar el rendimiento, y si hay una insuficiencia en la selección prcess (por ejemplo, ajuste el criterio de selección) puede empeorar las cosas!

3voto

Al final he acabado usando el 'genalg' paquete en el R. significa la conversión de la ganancia del cromosoma de un formato binario para representar las variables en mis datos, pero esto es relativamente trivial una vez que la asamblea general ha de ejecutar. Déjame saber si le gustaría obtener más detalles.

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