วิธีการเลือกตัวแปรทางพันธุกรรมขั้นตอนวิธีใน R สำหรับตัวแปรอินพุต SVM?


9

ฉันใช้แพคเกจkernlabใน R เพื่อสร้าง SVM สำหรับการจำแนกข้อมูล

SVM ทำงานได้อย่างดีในการให้ 'คาดการณ์' ของความแม่นยำที่เหมาะสมอย่างไรก็ตามรายการตัวแปรอินพุตของฉันมีขนาดใหญ่กว่าที่ฉันต้องการและฉันไม่แน่ใจว่ามีความสำคัญสัมพัทธ์ของตัวแปรที่แตกต่างกันอย่างไร

ฉันต้องการใช้อัลกอริธึมทางพันธุกรรมเพื่อเลือกชุดย่อยของตัวแปรอินพุตที่สร้าง SVM ที่ได้รับการฝึกอบรม / เหมาะสมที่สุด

ฉันต้องการความช่วยเหลือในการเลือกแพ็กเกจ R ที่จะใช้เมื่อพยายามใช้งาน GA นี้ (และอาจเป็นตัวอย่างสั้น ๆ ของ psuedo)

ฉันดูแพ็คเกจ 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 ซึ่งการเลือกคุณลักษณะเกิดขึ้นผ่าน reguarisation ซึ่งการเลือกคุณลักษณะมีข้อ จำกัด มากขึ้นดังนั้นจะมีองศาอิสระที่มีประสิทธิภาพน้อยลง

หมายเหตุข้อได้เปรียบที่สำคัญของ SVM คือการดำเนินการโดยประมาณของขอบเขตทั่วไปซึ่งเป็นอิสระจากมิติของพื้นที่คุณลักษณะซึ่งแนะนำว่าการเลือกคุณสมบัติอาจไม่จำเป็นต้องคาดหวังว่าจะปรับปรุงประสิทธิภาพและหากมี ความพอเพียงในการคัดเลือก (เช่นการปรับเกณฑ์การเลือกมากเกินไป) อาจทำให้สิ่งเลวร้ายลงได้!


5
+1 ลูกสุนัขหวานตายทุกครั้งที่คุณเลือกคุณสมบัติด้วยอัลกอริธึมทางพันธุกรรม

@mbq LOL! (เห็นได้ชัดว่าผมจำเป็นต้องพิมพ์อย่างน้อยหกตัวขึ้นกว่าที่ฉันอยากจะ.)
Dikran กระเป๋า

1
@mbq ลูกสุนัขและลูกแมวมันจะปรากฏขึ้นถ้าผลลัพธ์ของฉันเป็นอะไรที่ต้องไปโดย ...
tfb

@mbq ฉันวางแผนที่จะทำการเลือกคุณสมบัติด้วย GAs สำหรับกระดาษที่ฉันกำลังเขียนอยู่ในขณะนี้ (ไม่คาดหวังว่ามันจะทำงานได้ แต่ชุดข้อมูลบางชุดมีคุณสมบัติมากเกินไปสำหรับการค้นหาแบบละเอียด) ขออภัย Fido!
Dikran Marsupial

@DikranMarsupial ดีฉันสามารถเชิญให้คุณลองกรองล่วงหน้าด้วยเครื่องมือขอนไม้ของฉัน (;

2

ในที่สุดฉันก็ลงเอยด้วยการใช้แพ็คเกจ 'จีโนม' ในอาร์มันหมายถึงการแปลงโครโมโซมที่ชนะจากรูปแบบไบนารี่เพื่อเป็นตัวแทนของตัวแปรในข้อมูลของฉัน แต่มันค่อนข้างเล็กน้อยเมื่อ GA ทำงาน แจ้งให้เราทราบหากคุณต้องการรายละเอียดเพิ่มเติม


คุณต้องการโพสต์รหัสหรือไม่
B_Miner

@B_Miner ขออภัยในความล่าช้าเป็นเวลานานแล้วตั้งแต่ฉันยังทำงานไม่ได้ อีกไม่นานหลังจากที่ฉันต้องดิ้นรนกับปัญหานี้ในอาร์ฉันได้ดูไฟล์เก่าของฉันแล้วและฉันคิดว่าโค้ดด้านล่างแก้ไขได้ - หวังว่ามันจะช่วยได้:added above
tfb

2
(ข้อจำกัดความรับผิดชอบ: อัลกอริธึมทางพันธุกรรมของ IMHO เป็นหนึ่งในเครื่องมือเพิ่มประสิทธิภาพที่ชั่วร้ายมากขึ้นสำหรับแบบจำลองทางสถิติ ดังนั้นอย่างน้อยทำการตรวจสอบรุ่นสุดท้ายของคุณด้วยข้อมูลการทดสอบอิสระอย่างแท้จริง!
cbeleites ไม่มีความสุขกับ SX
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.