SVM入力変数のRで遺伝的アルゴリズム変数選択を実行する方法は?


9

Rでkernlabパッケージを使用して、データを分類するためのSVMを構築しています。

SVMは適切な精度の「予測」を提供するという点でうまく機能していますが、入力変数のリストは私が望むよりも大きく、さまざまな変数の相対的な重要性についてはわかりません。

遺伝的アルゴリズムを実装して、最適に訓練された/最適なSVMを生成する入力変数のサブセットを選択したいと思います。

このGA実装を試行するときに使用するRパッケージを選択する際にいくつかの助けが必要です(そしておそらく簡単な疑似例)。

私はそこにあるほとんどのR GA / Pパッケージ(RGPgenalgsubselectGALGO)を見てきましたが、フィットネス関数の一部として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 Marsupial

1
@mbq子犬と子猫私の​​結果が何かである場合に表示されます...
tfb

@mbq現在執筆中の論文について、GAを使用して機能選択を行う予定です(機能することを期待していませんが、一部のデータセットには、網羅的な検索には機能が多すぎます)。ごめんフィド!
Dikran Marsupial 2014

@DikranMarsupialさて、私はいくつかの木材ツール(;

2

結局、Rで「genalg」パッケージを使用することになりました。これは、勝者の染色体をバイナリ形式から変換してデータ内の変数を表すことを意味しますが、GAが実行されると、これは比較的簡単です。詳細が必要な場合はお知らせください。


コードを投稿していただけませんか?
B_Miner

@B_Miner遅れて申し訳ありません。私がSOになってからしばらく時間が経過しました。私はR. Iのきた中でこの問題に苦しんでいたので、それはまたしばらくだ私の古いファイルを介し見ていたし、私は以下のことを解決したコードだったと思う-それは役立ちます希望:added above
TFB

2
(免責事項:IMHO遺伝的アルゴリズムは、統計モデルのより悪質なオプティマイザの1つです。パフォーマンス推定の分散を非常に悪い方法で利用しています)。したがって、少なくとも完全に独立したテストデータで最終モデルを確認してください。
cbeleitesはSXに満足していない
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.