Używam kernlab paczkę w R zbudować SVM klasyfikowania niektórych danych.
SVM działa dobrze, ponieważ zapewnia „przewidywania” przyzwoitej dokładności, jednak moja lista zmiennych wejściowych jest większa niż chciałbym i nie jestem pewien co do względnej ważności różnych zmiennych.
Chciałbym zaimplementować algorytm genetyczny, aby wybrać podzestaw zmiennych wejściowych, który tworzy najlepiej wyszkolony / najlepiej przystosowany SVM.
Chciałbym pomóc w wyborze pakietu R, który będzie używany podczas próby implementacji GA (i ewentualnie krótki przykład psuedo).
Szukałem większości dostępnych pakietów R GA / P ( RGP , genalg , subselect , GALGO ), ale staram się koncepcyjnie zobaczyć, jak mógłbym przekazać moją funkcję ksvm jako część funkcji fitness i wprowadzić mój tablica zmiennych jako pula populacji ...?
Każda pomoc, przemyślenia lub troski we właściwym kierunku z wdzięcznością otrzymane.
Dzięki
kod, który rozwiązuje ten problem dodany poniżej w późniejszej edycji
# 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)
}
W końcu ostatecznie użyłem pakietu „genalg” na R. Oznacza to konwersję zwycięskiego chromosomu z formatu binarnego do reprezentowania zmiennych w moich danych, ale jest to stosunkowo trywialne po uruchomieniu GA. Daj mi znać, jeśli chcesz uzyskać dodatkowe informacje.
źródło
added above