Tôi đang sử dụng gói kernlab trong R để xây dựng một SVM để phân loại một số dữ liệu.
SVM đang hoạt động tốt ở chỗ nó cung cấp 'dự đoán' về độ chính xác khá, tuy nhiên danh sách các biến đầu vào của tôi lớn hơn tôi muốn và tôi không chắc về tầm quan trọng tương đối của các biến khác nhau.
Tôi muốn triển khai một thuật toán di truyền để chọn tập hợp con của các biến đầu vào tạo ra SVM được đào tạo tốt nhất / tốt nhất.
Tôi muốn một số trợ giúp với việc chọn gói R nào sẽ sử dụng khi thử triển khai GA này (và có thể là một ví dụ psuedo ngắn).
Tôi đã xem hầu hết các gói R GA / P ngoài đó ( RGP , genache , subselect , GALGO ), nhưng tôi đang vật lộn để xem làm thế nào tôi sẽ vượt qua chức năng ksvm của mình như là một phần của chức năng tập thể dục và nhập vào mảng biến như nhóm dân số ...?
Bất kỳ trợ giúp, suy nghĩ, hoặc khỏa thân theo đúng hướng biết ơn nhận được.
Cảm ơn
mã giải quyết được thêm vào bên dưới trong EDIT sau này
# 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)
}