तंत्रिका नेटवर्क में दिन की सुविधा का निर्माण


19

प्रतिगमन समस्या पर काम करना मैंने "एक सप्ताह का दिन" सुविधा के प्रतिनिधित्व के बारे में सोचना शुरू कर दिया। मुझे आश्चर्य है कि कौन सा दृष्टिकोण बेहतर प्रदर्शन करेगा:

  • एक विशेषता; सोमवार के लिए मूल्य 1/7; 2/7 मंगलवार के लिए ...
  • 7 विशेषताएं: सोमवार के लिए (1, 0, 0, 0, 0, 0, 0); मंगलवार के लिए (0, 1, 0, 0, 0, 0, 0) ...

नेटवर्क कॉन्फ़िगरेशन अंतर के कारण इसे मापना कठिन है। (अतिरिक्त छह विशेषताओं को छिपे हुए नोड्स की संख्या में परिलक्षित किया जाना चाहिए जो मुझे विश्वास है।)

सभी विशेषताओं की संख्या लगभग 20 है। मैं साधारण फ़ीड-फॉर-न्यूरल नेटवर्क सीखने के लिए साधारण बैकप्रॉप का उपयोग करता हूं।


सप्ताह के दिन के लिए द्विआधारी एन्कोडिंग का उपयोग करने के बारे में क्या? 3 सुविधाएँ, जहाँ (0, 0, 0) रविवार है। सोमवार और इतने पर (0, 0, 1)?
शामून

यह अभिकलन समय में कम करने के लिए कुछ अधिक सार्थक सुविधाओं को कम करने का अतिरिक्त लाभ है
शामून

जवाबों:


23

सप्ताह के दिन की तरह श्रेणीबद्ध चर के लिए आपका दूसरा प्रतिनिधित्व अधिक पारंपरिक है।

इसे डमी वैरिएबल बनाने के रूप में भी जाना जाता है और श्रेणीबद्ध वैरिएबल को एन्कोडिंग के लिए एक व्यापक रूप से उपयोग की जाने वाली विधि है। यदि आप 1-7 एन्कोडिंग का उपयोग करते हैं, तो आप मॉडल को बता रहे हैं कि दिन 4 और 5 बहुत समान हैं, जबकि दिन 1 और 7 बहुत भिन्न हैं। वास्तव में, दिन 1 और 7, दिन 4 और 5 के समान ही हैं। महीने के दिनों के लिए 0-30 एन्कोडिंग के लिए एक ही तर्क है।

महीने का दिन थोड़ा पेचीदा होता है, क्योंकि हर सप्ताह में 7 दिन समान होते हैं, हर महीने में समान 30 दिन नहीं होते हैं: कुछ महीनों में 31 दिन होते हैं, और कुछ महीनों में 28 दिन होते हैं। चूंकि दोनों सप्ताह और महीने चक्रीय हैं, इसलिए आप उन्हें रैखिक रैखिक चर में परिवर्तित करने के लिए फूरियर रूपांतरण का उपयोग कर सकते हैं ।

उदाहरण के लिए ( R, मेरी पसंद की प्रोग्रामिंग भाषा का उपयोग करके ):

day_of_month = c(1:31, 1:28, 1:30)
day_of_year <- 1:length(day_of_month)
s = sin((2*pi)/30*day_of_month)
c = cos((2*pi)/30*day_of_month)
plot(day_of_month ~ day_of_year)
lines(15*s+15 ~ day_of_year, col='blue')
lines(15*c+15 ~ day_of_year, col='red')
legend(10, 30, c('raw', 'sin', 'cos'), c('black', 'blue', 'red'))

कच्चा बनाम पाप बनाम कोसाइन

(मैंने साइन / कोसाइन वैरिएबल को 0/30 तक बढ़ाया, बजाय -1/1 के इसलिए ग्राफ बेहतर दिखता है)

जैसा कि आप देख सकते हैं, जबकि कच्चा "महीने का दिन चर" प्रत्येक महीने के अंत में शून्य से वापस कूदता है, साइन और कोसाइन परिवर्तन एक चिकनी संक्रमण बनाते हैं जो मॉडल को एक महीने के अंत के दिनों को जानने देता है। अगले महीने की शुरुआत में दिन।

आप निम्न फ़ॉयर शर्तों को बाकी जोड़ सकते हैं:

for(i in 1:3){
  s = sin((2*pi)/30*day_of_month + 30 * i/4)
  c = cos((2*pi)/30*day_of_month + 30 * i/4)
  lines(15*s+15 ~ day_of_year, col='blue')
  lines(15*c+15 ~ day_of_year, col='red')
}
legend(10, 30, c('raw', 'sin', 'cos'), c('black', 'blue', 'red'))

पूर्ण रूपांतर

साइन / कोसाइन तरंगों की प्रत्येक जोड़ी एक चक्र बनाती है:

m <- lapply(1:4, function(i){
  as.matrix(
    data.frame(
    s = sin((2*pi)/30*day_of_month + 30 * i/4),
    c = cos((2*pi)/30*day_of_month + 30 * i/4)
    )
  )
})
m <- do.call(cbind, m)
pairs(m)

वृत्त इस पृष्ठ में साइन और कोसाइन तरंगों में हेरफेर करने का एक बहुत ही आसान विवरण है।


क्या ऐसा करने का कोई विशेष कारण है? मुझे आश्चर्य है कि यह अभिसरण को कैसे प्रभावित कर सकता है। मेरा दूसरा संदेह है जब एक चर अभी भी श्रेणीबद्ध है - महीने के दिन के बारे में क्या? (0 - 30)
ओपस दोस्त

वही चीज; सूचक चर का उपयोग करें। पहला एन्कोडिंग एक समानता माप को प्रेरित करता है जो उचित नहीं हो सकता है; उदाहरण के लिए, क्या रविवार वास्तव में सोमवार से सबसे अधिक दुखी दिन है? यही एन्कोडिंग का तात्पर्य है ...
Emre

@OepasDost अगर मेरी पोस्ट आपके प्रश्न का उत्तर देती है, तो बेझिझक इसे वोट दें और / या चेकमार्क पर क्लिक करके इसे स्वीकार करें।
Zach

@Zach आप सप्ताह के दिन (जिसे 0 से 6 तक एन्कोड किया जा सकता है) को श्रेणीबद्ध और महीने के दिन को क्रमिक चक्रीय के रूप में मान सकते हैं (और इसलिए फूरियर ट्रांसफॉर्म का उपयोग करें)। और उन दोनों को क्रमिक चक्रीय के रूप में नहीं और इसलिए सप्ताह के दिन के लिए एक फूरियर रूपांतरण भी करते हैं?
zipp

1
@ जिप आप सप्ताह के दिन के लिए एक फूरियर का भी उपयोग कर सकते हैं। मेरे अनुभव में, सप्ताह के दिन का प्राथमिक मूल्य सप्ताह के दिनों और सप्ताहांत के बीच का अंतर है, जो डमी चर (या एक संकेतक चर) के साथ कैप्चर करने के लिए बहुत सरल है।
Zach
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.