एसवीएम इनपुट चर के लिए आर में आनुवंशिक-एल्गोरिथ्म चर चयन कैसे करें?


9

मैं कुछ डेटा को वर्गीकृत करने के लिए SVM बनाने के लिए R में kernlab पैकेज का उपयोग कर रहा हूं ।

एसवीएम अच्छी तरह से काम कर रहा है कि यह एक सभ्य सटीकता की 'भविष्यवाणियां' प्रदान करता है, हालांकि इनपुट चर की मेरी सूची मेरी पसंद से बड़ी है और मैं विभिन्न चर के सापेक्ष महत्व के अनुसार अनिश्चित हूं।

मैं एक आनुवंशिक-एल्गोरिथ्म लागू करना चाहता हूं जो कि सबसे अच्छे प्रशिक्षित / योग्यतम एसवीएम का उत्पादन करने वाले इनपुट चर के उप-सेट का चयन करे।

मैं इस GA कार्यान्वयन का प्रयास करते समय कौन से R पैकेज का उपयोग करना चाहता हूं (और संभवतः एक संक्षिप्त उदाहरण-उदाहरण) का उपयोग करने के साथ कुछ मदद चाहूंगा।

मैं बाहर वहाँ (आर जीए / पी संकुल की एक सबसे देखा है आरजीपी , genalg , सबसिलेक्ट , GALGO ), लेकिन मैं यह देखने के लिए कि कैसे मैं फिटनेस फंक्शन और इनपुट मेरी के हिस्से के रूप में मेरे ksvm समारोह में पास होता धारणात्मक संघर्ष कर रहा हूँ चर पूल जनसंख्या पूल के रूप में ...?

कोई मदद, विचार, या सही दिशा में आभार प्राप्त किया।

धन्यवाद

कोड जो इसे हल करता है उसे बाद में EDIT में जोड़ा गया है

# 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

मेरी सलाह यही होगी कि ऐसा न करें। एसवीएम के सैद्धांतिक फायदे जो ओवर-फिटिंग से बचते हैं, केवल लैग्रेग मल्टीप्लायरों (मॉडल के मापदंडों) के निर्धारण पर लागू होते हैं। जैसे ही आप फीचर चयन करना शुरू करते हैं, उन लाभों को अनिवार्य रूप से खो दिया जाता है, क्योंकि थोड़ा सा सिद्धांत है जो मॉडल चयन या सुविधा चयन को कवर करता है, और आप सुविधा चयन मानदंड को ओवर-फिट करने की अत्यधिक संभावना रखते हैं, खासकर यदि आप वास्तव में हार्ड का उपयोग करके खोज करते हैं जीए। यदि सुविधा का चयन महत्वपूर्ण है, तो मैं LASSO, LARS या इलास्टिक नेट जैसी किसी चीज़ का उपयोग करूँगा, जहाँ सुविधा चयन reguarisation के माध्यम से उत्पन्न होता है, जहाँ सुविधा का चयन अधिक विवश होता है, इसलिए स्वतंत्रता की कम प्रभावी डिग्रीएँ होती हैं, और कम ओवर-फिटिंग होती हैं।

नोट करें कि SVM का एक प्रमुख लाभ यह है कि यह सामान्यीकरण बाउंड का एक अनुमानित कार्यान्वयन है जो फीचर स्पेस की आयामीता से स्वतंत्र है, जो बताता है कि फीचर चयन से शायद प्रदर्शन में सुधार की उम्मीद नहीं की जानी चाहिए, और यदि कोई हो चयन की अतिरिक्तता में दक्षता (जैसे चयन मानदंड को ओवर-फिटिंग) यह अच्छी तरह से चीजों को बदतर बना सकता है!


5
+1 जब आप आनुवंशिक एल्गोरिदम के साथ फीचर चयन करते हैं तो हर बार एक मीठा पिल्ला मर जाता है।

@ लब लोल! (स्पष्ट रूप से मुझे कम से कम छह और पात्रों को टाइप करने की आवश्यकता थी, जो मैं वास्तव में चाहता था।)
डिक्रान मार्सुपियल

1
@ पिल्लों पिल्ले और बिल्ली के बच्चे, अगर मेरे परिणाम कुछ भी हो, तो यह दिखाई देगा ...
tfb

@mbq मैं GA के साथ कुछ फीचर चयन करने की योजना बना रहा हूं जो मैं इस समय लिख रहा हूं (काम की उम्मीद नहीं है, लेकिन कुछ डेटासेट में संपूर्ण खोज के लिए बहुत अधिक विशेषताएं हैं)। सॉरी फिदो!
डिक्रान मार्सुपियल 19

@DikranMarsupial खैर, मैं आपको केवल अपने कुछ लकड़ी के औजारों के साथ पूर्व फ़िल्टर करने की कोशिश करने के लिए आमंत्रित कर सकता हूं; (;

2

अंत में मैंने आर पर 'जनलॉग' पैकेज का उपयोग करके समाप्त कर दिया है। इसका मतलब है कि अपने डेटा में चर का प्रतिनिधित्व करने के लिए द्विआधारी प्रारूप से जीतने वाले गुणसूत्र को परिवर्तित करना, लेकिन जीए के चलने के बाद यह अपेक्षाकृत तुच्छ है। अगर आपको कोई और जानकारी चाहिए तो मुझे बताएं।


क्या आप कोड पोस्ट करने का मन करेंगे?
B_Miner

@B_Miner विलंब के लिए खेद है, जब से मैं SO पर आया हूं, तब तक थोड़ी देर हो चुकी है। आर में इस समस्या से जूझने के बाद भी मुझे कुछ समय हो गया है। मुझे अपनी पुरानी फ़ाइलों के माध्यम से एक नज़र आई है और मुझे लगता है कि नीचे दिया गया कोड था जिसने इसे हल किया - आशा है कि यह मदद करता है:added above
tfb

2
(अस्वीकरण: IMHO आनुवंशिक एल्गोरिदम सांख्यिकीय मॉडल के लिए अधिक दुष्ट ऑप्टिमाइज़र के बीच हैं। वे बहुत खराब तरीके से प्रदर्शन अनुमान में विचरण का शोषण कर रहे हैं)। तो: कम से कम अपने अंतिम मॉडल को वास्तव में स्वतंत्र परीक्षण डेटा के साथ जांचें!
SX
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.