Saya menggunakan paket kernlab di R untuk membangun SVM untuk mengklasifikasikan beberapa data.
SVM bekerja dengan baik karena memberikan 'prediksi' keakuratan yang layak, namun daftar variabel input saya lebih besar daripada yang saya inginkan dan saya tidak yakin akan pentingnya relatif dari variabel yang berbeda.
Saya ingin menerapkan algoritma genetika untuk memilih sub-set variabel input yang menghasilkan SVM yang paling terlatih / paling cocok.
Saya butuh bantuan dengan memilih paket R mana yang akan digunakan ketika mencoba implementasi GA ini (dan mungkin contoh singkat psuedo).
Saya telah melihat sebagian besar paket R GA / P di luar sana ( RGP , genalg , subselect , GALGO ), tetapi saya berjuang secara konseptual untuk melihat bagaimana saya akan melewati fungsi ksvm saya sebagai bagian dari fungsi kebugaran dan memasukkan saya array variabel sebagai kumpulan populasi ...?
Segala bantuan, pikiran, atau dorongan ke arah yang benar diterima dengan penuh rasa syukur.
Terima kasih
kode yang menyelesaikan ini ditambahkan di bawah dalam EDIT nanti
# 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)
}
Pada akhirnya saya akhirnya menggunakan paket 'genalg' pada R. Ini berarti mengubah kromosom pemenang dari format biner untuk mewakili variabel dalam data saya, tetapi ini relatif sepele setelah GA dijalankan. Beri tahu saya jika Anda menginginkan detail lebih lanjut.
sumber
added above