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)
}