2012-07-02 16 views
7

क्या कोई < 10-15ms रेंज (तेजी से बेहतर) में एक ग्रेडियेंट बूस्टिंग मॉडल का उपयोग करके भविष्यवाणियां करने की रणनीति की सिफारिश कर सकता है?कम विलंबता उत्पादन वातावरण में ग्रेडियेंट बूस्टिंग भविष्यवाणियां?

मैं का उपयोग कर दिया गया है R के gbm पैकेज है, लेकिन पहले भविष्यवाणी ~ 50ms लेता है (बाद vectorized 1ms के लिए औसत भविष्यवाणियों, तो शायद सी ++ पुस्तकालय के लिए कॉल में भूमि के ऊपर होने के लिए यहां प्रदर्शित हो)। दिशानिर्देश के रूप में, ~ 10-50 इनपुट और ~ 50-500 पेड़ होंगे। कार्य वर्गीकरण है और मुझे भविष्यवाणी की संभावनाओं तक पहुंच की आवश्यकता है।

मुझे पता है कि वहाँ बहुत सारी पुस्तकालय हैं, लेकिन मुझे उनके लिए किसी न किसी भविष्यवाणी के समय भी जानकारी मिल रही है। प्रशिक्षण ऑफ़लाइन होगा, इसलिए केवल भविष्यवाणियों को तेज़ी से होने की आवश्यकता है - भविष्यवाणी भी कोड/लाइब्रेरी के टुकड़े से आ सकती है जो प्रशिक्षण से जो कुछ भी करता है उससे पूरी तरह से अलग है (जब तक पेड़ का प्रतिनिधित्व करने के लिए एक आम प्रारूप है) ।

उत्तर

14

मैं scikit-learngradient boosting module का लेखक हूं, जो पाइथन में एक ग्रेडियेंट बूस्टेड रेग्रेशन ट्रेज़ कार्यान्वयन है। मैंने पूर्वानुमान समय को अनुकूलित करने में कुछ प्रयास किया क्योंकि विधि कम-विलंबता वातावरण (विशेष रूप से रैंकिंग समस्याओं में) पर लक्षित थी; भविष्यवाणी दिनचर्या सी में लिखी गई है, फिर भी पाइथन फ़ंक्शन कॉल के कारण कुछ ओवरहेड है। यह कहकर कि: 50 डेटा सुविधाओं और लगभग 250 पेड़ों के साथ एकल डेटा बिंदुओं के लिए पूर्वानुमान समय < < 1ms होना चाहिए।

मेरे उपयोग-मामलों में भविष्यवाणी समय अक्सर फीचर निष्कर्षण की लागत से शासित होता है। मैं दृढ़ता से ओवरहेड के स्रोत को पिन-पॉइंट करने के लिए प्रोफाइलिंग की अनुशंसा करता हूं (यदि आप पायथन का उपयोग करते हैं, तो मैं line_profiler की सिफारिश कर सकता हूं)।

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

यदि यह मदद नहीं करता है तो आपको पेड़ की संख्या को सीमित करने की कोशिश करनी चाहिए क्योंकि रनटाइम लागत पूर्वानुमान के लिए मूल रूप से पेड़ की संख्या में रैखिक है। मॉडल सटीकता को प्रभावित किए बिना पेड़ की संख्या को सीमित करने के कई तरीके हैं:

  1. सीखने की दर का उचित ट्यूनिंग; सीखने की दर जितनी छोटी होगी, उतने पेड़ की आवश्यकता होगी और इस प्रकार धीमी भविष्यवाणी होगी।

  2. एल 1 नियमितकरण (लासो) के साथ पोस्ट-प्रोसेस जीबीएम; Elements of Statistical Learning अनुभाग 16.3.1 देखें - प्रत्येक पेड़ की भविष्यवाणियों का उपयोग नई सुविधाओं के रूप में करें और एल 1 नियमितीकृत रैखिक मॉडल के माध्यम से प्रतिनिधित्व चलाएं - उन पेड़ों को हटा दें जिन्हें कोई वज़न नहीं मिलता है।

  3. पूरी तरह से सुधारात्मक वजन अपडेट; सबसे हाल के पेड़ के लिए लाइन-सर्च/वेट अपडेट करने के बजाय, सभी पेड़ अपडेट करें (देखें [वार्मथ 2006] और [जॉनसन2012])। बेहतर अभिसरण - कम पेड़।

उपरोक्त में से कोई चाल आप झरने या जल्दी-बाहर निकलें रणनीति की जांच कर सकता है करता है ([Chen2012] देखें)

संदर्भ:

[Warmuth2006] एम Warmuth, जे लियाओ , और जी Ratsch।मार्जिन को अधिकतम करने वाले पूरी तरह से सुधारात्मक एल्गोरिदम को बढ़ावा देना। मशीन सीखने पर 23 वें अंतर्राष्ट्रीय सम्मेलन की कार्यवाही, में 2006

[Johnson2012] री जॉनसन, टोंग जांग, नियमित किए लालची वन, arXiv का उपयोग करते हुए गैर रेखीय कार्य सीखना, 2012

[Chen2012] Minmin चेन, Zhixiang जू , किलियन वेनबर्गर, ओलिवियर चैपल, डोर केडेम, क्लासिफायर कैस्केड फीचर मूल्यांकन मूल्य को कम करने के लिए, जेएमएलआर डब्ल्यू & सीपी 22: 218-226, 2012.

+0

मैंने जुलाई में विज्ञान-सीखने के पूर्वानुमान के समय के बारे में जानकारी खोजने की कोशिश की थी लेकिन ' टी, इसलिए मैंने इसके बजाय उथले सीखने वाले एल्गोरिदम का उपयोग करना चुना (जो मुझे पता था कि विलंबता आवश्यकताओं को पूरा करेगा)। मेरा उपयोग मामला ऑनलाइन विज्ञापन में बोलियां रैंकिंग कर रहा था, इसलिए बैच भविष्यवाणी में मदद मिलेगी, लेकिन प्रत्येक इंप्रेशन के लिए निर्णय अभी भी 10ms से कम में पूरा करना था। पुन: पेड़ के # को कम करने के लिए आपके सुझाव, मैंने कोशिश की 1, बस 2 के माध्यम से पढ़ें, और 3 में देखेंगे - संदर्भ/विचारों के लिए धन्यवाद। एक नई परियोजना के लिए, मैं वेका और विज्ञान-सीखने पर विचार कर रहा हूं, इसलिए आपकी प्रतिक्रिया सहायक थी। – lockedoff

+0

स्कीलेर्न के मौजूदा सिर में भविष्यवाणी विलंबता बनाम सटीकता के लिए एक बेंचमार्क है, जिसमें कई क्लासिफायर/रेग्रेसर्स के पूर्वानुमान पूर्वानुमान के साथ विषय पर एक (आई बेलीव) पूरी तरह से प्रलेखन शामिल है। उदाहरण के लिए इस स्क्रिप्ट को देखें: https://github.com/oddskool/scikit-learn/blob/pred_latency/examples/applications/plot_prediction_latency.py – oDDsKooL

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