R 의 kernlab 패키지를 사용하여 일부 데이터를 분류하기위한 SVM을 작성하고 있습니다.
SVM은 적절한 정확도의 '예측'을 제공한다는 점에서 훌륭하게 작동하지만 입력 변수 목록이 원하는 것보다 커서 다른 변수의 상대적 중요성에 대해 확신이 없습니다.
최고의 알고리즘 / 적합한 SVM을 생성하는 입력 변수의 하위 집합을 선택하기 위해 유전자 알고리즘을 구현하고 싶습니다.
이 GA 구현을 시도 할 때 사용할 R 패키지를 선택하는 데 도움이 필요합니다 (약간의 유사 예).
나는 대부분의 R GA / P 패키지를 보았지만 ( RGP , genalg , subselect , GALGO ) 피트니스 기능의 일부로 ksvm 함수를 전달하고 입력하는 방법을 개념적으로 고심하고 있습니다. 인구 풀로 변수 배열 ...?
올바른 방향으로의 도움, 생각 또는 넛지가 감사하게 받았습니다.
감사
나중에이 문제를 해결하는 코드
# 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)
}