2015-02-21 8 views
10

प्रतिनिधित्व करने के लिए मैं सभी स्पष्ट चर के साथ निम्न डेटा है:Vowpal wabbit कैसे स्पष्ट सुविधाओं

class education income social_standing 
    1  basic  low  good 
    0  low  high  V_good 
    1  high  low  not_good 
    0  v_high  high  good 

यहाँ शिक्षा चार स्तरों (बुनियादी कम, उच्च और v_high) है। आय में दो स्तर कम और उच्च हैं; और social_standing में तीन स्तर हैं (अच्छा, v_good और not_good)।

में अब तक के रूप में VW प्रारूप करने के लिए उपरोक्त डेटा परिवर्तित करने की मेरी समझ का सवाल है, यह कुछ इस तरह होगा:

1 |person education_basic income_low social_standing_good 
    0 |person education_low income_high social_standing_v_good 
    1 |person education_high income_low social_standing_not_good 
    0 |person education_v_high income_high social_standing_good 

यहाँ, 'व्यक्ति', नाम स्थान है और अन्य सभी सुविधा मान होते हैं, संबंधित फीचर नामों से prefixed। क्या मैं सही हूँ? किसी भी तरह फीचर वैल्यू का यह प्रतिनिधित्व मेरे लिए काफी परेशान है। क्या सुविधाओं का प्रतिनिधित्व करने का कोई और तरीका है? मदद के लिए आभारी होंगे।

उत्तर

16

हां, आप सही हैं।

यह प्रतिनिधित्व निश्चित रूप से vowpal wabbit साथ काम करेंगे, लेकिन कुछ शर्तों के तहत, नहीं इष्टतम हो सकता है (यह निर्भर करता है)।

गैर आदेश दिया, स्पष्ट चर (असतत मूल्यों के साथ) का प्रतिनिधित्व करने के लिए, मानक vowpal wabbit चाल प्रत्येक संभव (नाम, मूल्य) संयोजन (उदा person_is_good, color_blue, color_red) के लिए तार्किक/बूलियन मूल्यों का प्रयोग है। इसका कारण यह है कि vw स्पष्ट रूप से 1 व्हीवर का मान मानता है जो एक मान गुम है। स्मृति में हैश स्थानों को छोड़कर color_red, color=red, , या (color,red) और color_red:1 के बीच कोई व्यावहारिक अंतर नहीं है। वेरिएबल नाम में आप जिन अक्षरों का उपयोग नहीं कर सकते वे विशेष विभाजक (: और |) और सफेद-स्थान हैं।

शब्दावली ध्यान दें: एक अलग सुविधा में प्रत्येक (फीचर + मूल्य) जोड़ी परिवर्तित करने की यह चाल कभी कभी कहा जाता है "एक गर्म एन्कोडिंग"।

लेकिन इस मामले में चर-मान "सख्ती से स्पष्ट" नहीं हो सकते हैं। वे हो सकता है:

  • कड़ाई, जैसे (low < basic < high < v_high)
  • मुमकिन है अगर आप तक

भविष्यवाणी करने के लिए कोशिश कर रहे हैं लेबल के साथ एक monotonic संबंध है का आदेश दिया उन्हें "सख्त स्पष्ट" बनाते हैं (एक चरम सीमा के साथ एक चर के लिए मेरा शब्द जिसमें ऊपर दो गुण नहीं हैं) आप कुछ जानकारी खो सकते हैं टोपी सीखने में मदद कर सकता है।

अपने विशेष मामले में, आप मूल्यों को संख्यात्मक रूप से परिवर्तित करके बेहतर परिणाम प्राप्त कर सकते हैं, उदा। (1, 2, 3, 4) शिक्षा के लिए। मैं।ई आप की तरह कुछ इस्तेमाल कर सकते हैं:

1 |person education:2 income:1 social_standing:2 
0 |person education:1 income:2 social_standing:3 
1 |person education:3 income:1 social_standing:1 
0 |person education:4 income:2 social_standing:2 

प्रश्न में प्रशिक्षण सेट, ठीक से काम करना चाहिए क्योंकि तब भी जब आप बूलियन चर में अपने सभी खंडित चर परिवर्तित जैसे तुमने किया था, vw दोनों आदेश और स्वयं की खोज करना चाहिए डेटा से लेबल के साथ monotonicity, जब तक उपरोक्त दो गुण सत्य हैं, और उन्हें कम करने के लिए पर्याप्त डेटा है।

Variable type  How to encode    readable example 
-------------  -------------    ---------------- 
boolean    only encode the true case is_alive 
categorical   append value to name   color=green 
ordinal+monotonic :approx_value    education:2 
numeric    :actual_value    height:1.85 

अंतिम नोट:

  • vw में सभी चर सांख्यिक हैं

    यहाँ कम vowpal wabbit में एन्कोडिंग चर के लिए धोखा पत्र है। एन्कोडिंग चालें चीजों को बनाने के लिए व्यावहारिक तरीके हैं categorical या boolean के रूप में दिखाई देते हैं। बूलियन चर केवल संख्यात्मक 0 या 1 हैं; स्पष्ट चर को बूलियन के रूप में एन्कोड किया जा सकता है: नाम + मान: 1।

  • कोई वैरिएबल जिसका मान लेबल के साथ monotonic नहीं है, संख्यात्मक रूप से एन्कोड किए जाने पर कम उपयोगी हो सकता है।
  • किसी भी वेरिएबल जो लेबल से संबंधित नहीं है, प्रशिक्षण से पहले एक गैर-रैखिक परिवर्तन से लाभान्वित हो सकता है।
  • एक शून्य मान के साथ कोई भी चर (अपवाद: जब --initial_weight <value> विकल्प प्रयोग किया जाता है) मॉडल का कोई फर्क नहीं होगा तो यह प्रशिक्षण से छोड़ा जा सकता है सेट
  • किसी सुविधा को पार्स, केवल : एक विशेष माना जाता है विभाजक (परिवर्तनीय नाम और उसके संख्यात्मक मान के बीच) किसी और को नाम का एक हिस्सा माना जाता है और पूरे नाम स्ट्रिंग को स्मृति में किसी स्थान पर रखा जाता है। एक लापता :<value> भाग निकलता है :1

संपादित करें: क्या बारे में नाम-रिक्त स्थान?

नाम रिक्त स्थान एक विशेष-चार विभाजक के साथ नामों के नाम पर प्रीपेड किए गए हैं ताकि वे अलग-अलग हैश स्थानों पर समान सुविधाओं को मानचित्र बना सकें। उदाहरण:

|E low |I low 

अनिवार्य रूप से (कोई नाम रिक्त स्थान फ्लैट उदाहरण) के बराबर है:

| E^low:1 I^low:1 

नाम-रिक्त स्थान का मुख्य उपयोग आसानी से कुछ और करने के लिए एक नाम अंतरिक्ष के सभी सदस्यों को फिर से परिभाषित करने के लिए है , सुविधाओं का एक पूर्ण नाम स्थान, किसी अन्य स्थान के साथ नाम स्थान की क्रॉस फीचर्स को अनदेखा करें। (-q, --cubic, --redefine, --ignore, --keep विकल्प देखें)।

+1

धन्यवाद। बहुत बहुत स्पष्ट सिवाय इसके कि बुलियन (धोखाधड़ी की पहली पंक्ति) द्वारा मैं तार्किक या बाइनरी समझने के लिए हूं? यही है, यदि यह द्विआधारी है (किसी भी दो मानों के साथ और सत्य/गलत के अर्थ में जरूरी नहीं है), मुझे कॉलम नाम का उपसर्ग नहीं करना पड़ेगा, लेकिन केवल वैल्यू लिखना होगा, लेकिन अन्य तीन मामलों में कॉलम नामों को करना होगा कुछ रूपों में मूल्यों से पहले। – user3282777

+0

पहली पंक्ति 'बूलियन' का तार्किक अर्थ है: या तो सत्य या गलत (0 या 1)। दूसरी पंक्ति: वर्गीकृत 2. – arielf

+2

धन्यवाद सहित कई अलग-अलग मूल्यों को मान सकते हैं। ये सभी स्पष्टीकरण वाउपल वैबिट का उपयोग करके अधिक आसान बनाते हैं। – user3282777

संबंधित मुद्दे