SVM 입력 변수에 대해 R에서 유전자 알고리즘 변수 선택을 수행하는 방법은 무엇입니까?


9

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

답변:


7

내 조언은 이것을하지 않는 것입니다. 과적 합을 피하는 SVM의 이론적 장점은 지연 범위 승수 (모델의 매개 변수)의 결정에만 적용됩니다. 기능 선택을 시작하자마자 모델 선택이나 기능 선택을 다루는 이론이 거의 없기 때문에 이러한 장점이 사라집니다. 특히 기능을 사용하여 열심히 검색하는 경우 기능 선택 기준을 과도하게 맞출 가능성이 높습니다 GA. 기능 선택이 중요한 경우 LASSO, LARS 또는 Elastic net과 같은 것을 사용합니다. 여기서 기능 선택은 구속을 통해 발생하며, 기능 선택이 더 제한적이므로 효과적인 자유도가 적고 과적 합이 줄어 듭니다.

SVM의 주요 장점은 형상 공간의 차원과 무관 한 일반화 경계의 대략적인 구현이라는 점에 유의하십시오. 이는 기능 선택이 반드시 성능 향상을 기대할 필요는 없으며, 선택 과정의 결함 (예 : 선택 기준을 과도하게 맞추는 것)은 상황을 악화시킬 수 있습니다!


5
+1 유전자 알고리즘으로 특징 선택을 할 때마다 달콤한 강아지가 죽습니다.

@mbq LOL! (분명히 내가 정말로 원하는 것보다 적어도 6 개 이상의 문자를 입력 할 필요가 있었다.)
Dikran 유대류

1
@mbq 강아지와 새끼 고양이 내 결과가 지나갈 경우 나타납니다 ...
tfb

@mbq 현재 작성중인 논문에 대해 GA를 사용하여 일부 기능을 선택하려고합니다 (작동하지 않을 것으로 예상되지만 일부 데이터 세트에는 전체 검색을위한 기능이 너무 많습니다). 미안 피도!
Dikran Marsupial

@DikranMarsupial 글쎄, 난 당신이 내 목재 도구 중 일부를 사용하여 사전 필터링을 시도하도록 초대 할 수 있습니다 (;

2

결국 나는 R에서 'genalg'패키지를 사용하게되었습니다. 이것은 승리 한 염색체를 이진 형식에서 변환하여 내 데이터의 변수를 나타내는 것을 의미하지만 GA가 실행되면 비교적 사소합니다. 자세한 내용을 원하시면 알려주세요.


코드를 게시 하시겠습니까?
B_Miner

@B_Miner 지연에 대해 죄송합니다. SO를 사용한지 오래되었습니다. R에서이 문제로 어려움을 겪고있는 것도 오래 전입니다. 오래된 파일을 살펴 added above
보았는데

2
(면책 조항 : IMHO 유전자 알고리즘은 통계 모델에 대한 더 악의적 인 최적화 도구 중 하나입니다. 성능 추정의 차이를 매우 나쁜 방식으로 활용하고 있습니다). 따라서 최소한 독립적 인 테스트 데이터로 최종 모델을 확인하십시오!
SX에 불만족 cbeleites
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.