2013-01-22 13 views
5

मुझे एक एल्गोरिदम विकसित करने की आवश्यकता है जो कुछ पदानुक्रम में डेटा आइटम स्थिति का पता लगा सके। मेरे पास पदानुक्रम है जो कुछ डेटासेट के तत्वों को वर्गीकृत करता है। पदानुक्रम टैक्सोनोमिक है - शीर्ष तत्व सबसे सामान्य वर्ग है, जो डेटासेट के किसी भी तत्व से मेल खाता है, गहरे तत्वों में डेटासेट के कुछ सबसेट से मेल खाने वाले अधिक विशिष्ट वर्ग होते हैं।पदानुक्रम में डेटा-आइटम स्थिति का पता कैसे लगाएं?

उदाहरण के लिए, नौकाओं के पदानुक्रम पर विचार करें। हमारे पास शीर्ष पर नौका है। अगले स्तर पर हमारे पास सेलिंग याट और मोटर याट है। सेलिंग याट में दो बच्चे हैं - क्रूज़िंग याट और रेसिंग नौका। क्रूजर को निर्माता द्वारा आगे विभाजित किया जा सकता है, उदाहरण के लिए Bavaria Yachts और डुफोर यॉट। तब इन वर्गों में से प्रत्येक को हल प्रकार, लंबाई, पाल क्षेत्र और अन्य द्वारा विभाजित किया जा सकता है।

Drive Class Manufacturer Hull type Len Sails Area ... Model 
Sailing Cruiser Bavaria Yachts Mono-hull 25ft 560sqft ... Bavaria 32 
Sailing Cruiser Dufour Yachts Mono-hull 27ft 580sqft ... Dufour 32 Classic 

मैं आसानी से गहराई-पहले के आदेश में यह खोज के द्वारा पदानुक्रम के लिए प्रत्येक नमूने मैप कर सकते हैं:

यह डेटासेट से एक उदाहरण है।

पहली नज़र में यह एक साधारण खोज समस्या है लेकिन कुछ कठिनाइयां हैं।

पहली कठिनाई: डेटा आइटम में सभी तत्व शामिल नहीं हैं। यह आम बात है कि डेटा आइटम में 10 से 50 प्रतिशत तत्वों की कमी है। इनमें से कई तत्व बहुत महत्वपूर्ण नहीं हैं, उदाहरण के लिए yacht ड्राइव केवल मोटर या सेल से अधिक हो सकता है, इसलिए यह बहुत सारी जानकारी (केवल 1 बिट) नहीं लाता है। इन तत्वों को अधिक महत्वपूर्ण तत्वों का उपयोग करके आसानी से अनुमानित किया जा सकता है, उदाहरण के लिए यदि हम yacht मॉडल जानते हैं, तो हम डेटा-आइटम के सभी अन्य तत्वों (या फ़ील्ड) का अनुमान लगा सकते हैं।

दूसरी कठिनाई: कुछ तत्व अलग-अलग डेटा आइटम्स के बीच भिन्न हो सकते हैं भले ही वे पदानुक्रम (उसी नौका मॉडल) में एक ही स्थान से मेल खाते हों। उदाहरण के लिए सेल क्षेत्र काफी भिन्न हो सकता है क्योंकि नाव मालिकों ने उन्हें याट के रिग को अलग-अलग तरीकों से संशोधित किया है या बस क्षेत्र के मूल्य को बदल दिया है।

जैसा कि मैंने पहले ही उल्लेख किया है, मुझे पदानुक्रम में डेटासेट से विभिन्न डेटा आइटमों को ढूंढने की आवश्यकता है। प्रत्येक डेटा आइटम अलग परिशुद्धता के साथ स्थित किया जा सकता है। प्रेसिजन पदानुक्रम में गहराई है जिस पर खोज प्रक्रिया बंद हो जाती है। दूसरे शब्दों में, मुझे पदानुक्रम में पथ प्राप्त करने की आवश्यकता है जो प्रत्येक डेटा आइटम से मेल खाती है और यह पथ अपूर्ण हो सकता है। उदाहरण के लिए, एल्गोरिदम यह देख सकता है कि डेटा आइटम जूलियट 23 नौका से मेल खाता है लेकिन उत्पादन वर्ष अभी भी अज्ञात हो सकता है।

यह अच्छा होगा अगर मैं प्रत्येक के लिए संभाव्यता माप के साथ कई पथ प्राप्त कर सकूं। उदाहरण के लिए, एल्गोरिदम विभिन्न उत्पादन वर्षों के लिए जूलियट 23 के लिए 4 पथ वापस कर सकता है, प्रत्येक 25% संभावना के साथ।

इस समय मैं कुछ ह्यूरिस्टिक्स के साथ गहराई से पहली खोज का उपयोग करके इस समस्या को हल करता हूं। यह अच्छे परिणाम देता है लेकिन मुझे लगता है कि बेहतर परिणाम प्राप्त करना संभव है। हो सकता है कि आप इस समस्या को अधिक सामान्य तरीके से तैयार कर सकें ताकि मैं इसके बारे में कुछ अकादमिक कागजात खोज सकूं।

उत्तर

1

मुझे लगता है कि एसक्यूएल वास्तव में आप अपनी समस्याओं को हल करने में मदद कर सकते हैं,

अपने पहले कठिनाई के लिए: NVL का उपयोग करें (क्षेत्र, मूल्य अगर-शून्य)

उदाहरण: प्रिंट प्रकार & उत्पादन साल, रेसिंग नौकाओं के (यदि वह मौजूद)

SELECT Y.TYPE, NVL(Y.PRDYEAR, 'UNKNOWN') 
FROM T_YACHT Y WHERE Y.CLASS = 'RACING' 

उदाहरण: उपयोग ग्रुप द्वारा \ व्यापक-SQL \ DISTINCT \ NVL

उदाहरण:: सभी याच जो उत्पादन वर्ष साल 2000

SELECT * FROM T_YACHT Y WHERE 
NVL(Y.PRDYEAR,TO_TIMESTAMP('01-01-0001','DD-MM-YYYY')) 
    > TO_TIMESTAMP('01-01-2000','DD-MM-YYYY') 

खत्म हो गया है अपने दूसरे कठिनाई के लिए मिल में से कितने प्रकार देख रेसिंग याट

SELECT Y.TYPE, COUNT(Y.ID) AS YACHT_TYPE 
FROM T_YACHT Y 
WHERE Y.CLASS = 'RACING' 
GROUP BY Y.TYPE 
संबंधित मुद्दे