Estoy usando el paquete kernlab en R para construir un SVM para clasificar algunos datos.
El SVM está funcionando bien ya que proporciona 'predicciones' de una precisión decente, sin embargo, mi lista de variables de entrada es más grande de lo que quisiera y no estoy seguro de la importancia relativa de las diferentes variables.
Me gustaría implementar un algoritmo genético para seleccionar el subconjunto de variables de entrada que produce el SVM mejor capacitado / más apto.
Me gustaría recibir ayuda para elegir qué paquete R usar al intentar esta implementación de GA (y posiblemente un breve ejemplo de psuedo).
He visto la mayoría de los paquetes R GA / P ( RGP , genalg , subselect , GALGO ), pero estoy luchando conceptualmente para ver cómo pasaría mi función ksvm como parte de la función fitness e ingresar mi matriz variable como el grupo de población ...?
Cualquier ayuda, pensamientos o empujones en la dirección correcta recibidos con gratitud.
Gracias
código que resuelve esto agregado a continuación en una EDICIÓN posterior
# 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)
}
Al final, terminé usando el paquete 'genalg' en R. Significa convertir el cromosoma ganador de un formato binario para representar las variables en mis datos, pero esto es relativamente trivial una vez que el GA se ha ejecutado. Avíseme si desea más detalles.
fuente
added above