अत्यधिक असंतुलित सेटिंग में लागत-संवेदनशील सीखने के सुझाव


15

मेरे पास कुछ मिलियन पंक्तियों और ~ 100 कॉलमों के साथ एक डेटासेट है। मैं डेटासेट में 1% उदाहरणों का पता लगाना चाहूंगा, जो एक सामान्य वर्ग के हैं। मेरे पास एक न्यूनतम परिशुद्धता बाधा है, लेकिन बहुत ही असममित लागत के कारण मैं किसी भी विशेष याद के लिए उत्सुक नहीं हूं (जब तक मैं 10 सकारात्मक मैचों के साथ नहीं छोड़ा जाता!)

इस सेटिंग में कुछ दृष्टिकोण क्या हैं, जिन्हें आप सुझाएंगे? (कागजात के लिंक का स्वागत, कार्यान्वयन की कड़ियों की सराहना)

जवाबों:


15

मैंने पाया है कि वह और ग्रेसिया (2009) असंतुलित वर्ग की समस्याओं में सीखने की एक सहायक समीक्षा थे। यहाँ कुछ निश्चित रूप से व्यापक बातें नहीं हैं:

डेटा-आधारित दृष्टिकोण:

बहुसंख्यक वर्ग को रेखांकित कर सकता है या अल्पसंख्यक वर्ग को जीत सकता है। (ब्रेमेन ने बताया कि यह औपचारिक रूप से गैर-समान विविधीकरण लागतों को निर्दिष्ट करने के बराबर है।) इससे समस्याएं पैदा हो सकती हैं: अंडरसम्पलिंग सीखने वाले को बहुसंख्यक वर्ग के पहलुओं को याद करने का कारण बन सकता है; ओवरस्पीटिंग से ओवरफिटिंग का खतरा बढ़ जाता है।

इन मुद्दों को कम करने वाले "सूचित अंडरसम्पलिंग" तरीके हैं। उनमें से एक ईज़ी एंबेम्बे है , जो स्वतंत्र रूप से बहुसंख्यक वर्ग से कई सबसेट का नमूना लेता है और सभी अल्पसंख्यक वर्ग के डेटा के साथ प्रत्येक सबसेट को मिलाकर कई क्लासिफायर बनाता है।

SMOTE (सिंथेटिक माइनॉरिटी ओवरसैंपलिंग तकनीक) या SMOTEBoost, (बूस्ट के साथ SMOTE का संयोजन) फीचर स्पेस में निकटतम पड़ोसी बनाकर अल्पसंख्यक वर्ग के सिंथेटिक उदाहरण बनाते हैं। SMOTE को R को DMwR पैकेज में लागू किया गया है (जो कि लुइस टोर्गो की पुस्तक "R के साथ डेटा माइनिंग, केस स्टडीज के साथ सीखते हुए" CRC प्रेस 2016 में शामिल है )।

मॉडल फिटिंग दृष्टिकोण

अपने नुकसान के कार्य में वर्ग-विशिष्ट भार लागू करें (अल्पसंख्यक मामलों के लिए बड़ा वजन)।

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

एक कक्षा के क्लासिफायरियर का उपयोग करें , या तो (मॉडल के आधार पर) एक कक्षा के लिए एक संभावना घनत्व या सीमा और दूसरे वर्ग को आउटलेर के रूप में व्यवहार करना।

बेशक, मॉडल निर्माण के लिए मीट्रिक के रूप में सटीकता का उपयोग न करें। कोहेन का कप्पा एक उचित विकल्प है।

मॉडल मूल्यांकन दृष्टिकोण

यदि आपके मॉडल ने संभाव्यता या अन्य स्कोर की भविष्यवाणी की है, तो एक निर्णय कटऑफ चुना जो त्रुटियों में एक उपयुक्त व्यापार बनाता है (प्रशिक्षण और परीक्षण से स्वतंत्र डेटासेट का उपयोग करके)। R में, पैकेज OptimalCutpoint एक कटऑफ तय करने के लिए लागत-संवेदनशील लोगों सहित कई एल्गोरिदम को लागू करता है।


विस्तृत जवाब के लिए शुक्रिया। मैंने बिना सोचे समझे और बुरी तरह असफल होने का प्रयास किया है। मॉडल उत्कृष्ट नमूना प्रदर्शन दिखाते हैं, लेकिन परीक्षण सेट में असंतुलन अभी भी मौजूद है (और वास्तविक दुनिया डेटा जिसका मैं अंततः उपयोग करूंगा) इसलिए मॉडल का ओओएस सटीक भयानक है। मैंने वर्ग-विशिष्ट भार भी आज़माए हैं, लेकिन मेरे आवेदन में झूठी नकारात्मक के मुकाबले झूठे सकारात्मक के लिए आसानी से मात्रात्मक उच्च लागत शामिल है । एक वर्ग के वर्गीकरण के लिए, मैंने एक रैखिक svm (गैर-रैखिक वाले बहुत धीमे हैं) को फिट करने की कोशिश की और वह भी नमूने में 0 परिशुद्धता है ...
em70

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

शानदार जवाब, धन्यवाद। मैं कुछ समय के लिए उल्लेख किए गए EasyEnsemble के समान तकनीक का उपयोग कर रहा हूं, लेकिन इसके बारे में संदिग्ध था (डेटा पर समझदार प्रदर्शन के बावजूद)। अब मुझे पता है कि यह समझ में आता है।
ayorgo

5

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

यदि आप एक पैरामीट्रिक मॉडल (लॉजिस्टिक रिग्रेशन) का उपयोग कर रहे हैं, तो यह एक समस्या से कम होना चाहिए और आप केवल अपने नुकसान फ़ंक्शन (झूठी नकारात्मक के लिए गलत नकारात्मक की लागत) के आधार पर सीमा को भिन्न कर सकते हैं

यदि आप मशीन लर्निंग एल्गोरिदम का उपयोग कर रहे हैं तो यह मुश्किल हो सकता है। मैक्स कुह्न "एप्लाइड प्रेडिक्टिव मॉडलिंग" के अध्याय 16 में इस मुद्दे को संक्षेप में प्रस्तुत करने का एक उचित प्रयास करता है। लेकिन संक्षेप में विषय को चुनौती देना। यदि आप पुस्तक नहीं खरीदना चाहते हैं, तो R कोड इस अध्याय के लिए AppliedPredictiveModeling पैकेज में उपलब्ध है और आपके परिचित आर और इस्तेमाल किए गए एल्गोरिदम के आधार पर पर्याप्त हो सकता है।

आमतौर पर चर्चा अंडरसम्पलिंग / ओवरसैंपलिंग +/- लागत-संवेदनशील एल्गोरिदम के आसपास घूमती है। जूस-बूस्ट जैसे बदलाव भी संभव हैं।
इस तरह की चर्चा का एक उदाहरण: चेन एट अल "असंतुलित डेटा जानने के लिए यादृच्छिक वन का उपयोग करना" http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf


अलग सीमा के साथ मुद्दा यह है कि यह एक प्रतिगमन मॉडल के अवरोधन को बदलने जैसा है। वास्तव में, मैं लागत को ध्यान में रखने के लिए वेट वेक्टर को बदलना चाहता हूं। लेकिन अगर मैं ऐसा करता हूं, तो पहले से ही गंभीर असंतुलन को देखते हुए, मैं 0 परिशुद्धता के साथ समाप्त होता हूं! मैं किसी भी एल्गोरिथ्म पर बस नहीं गया हूं और अत्याधुनिक अनुसंधान विचारों को लागू करने के लिए संसाधन हैं, यदि वे आशाजनक हैं। आपके द्वारा सुझाई गई पुस्तक पर एक नज़र डालूंगा।
em70

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

0

आप scikit-learn के कार्यान्वयन पर एक नज़र डाल सकते हैं। वर्ग_ भार तर्क पर ध्यान दें जिसमें कक्षा भार या 'ऑटो' के शब्दकोश के मूल्य हो सकते हैं:

वर्ग sklearn.svm.SVC (C = 1.0, कर्नेल = 'rbf', डिग्री = 3, गामा = 0.0, coef0 = 0.0, सिकुड़ता = सत्य, संभाव्यता = गलत, tol = 0.001, cache_size = 200, class_weight = कोई नहीं, क्रिया शब्द = गलत, max_iter = -1, random_state = कोई नहीं)

आप क्लास_वेट तर्क के मूल्य के साथ खेल सकते हैं जो क्लास वेट डिक्शनरी या 'ऑटो' हो सकता है। 'ऑटो' मोड में लर्निंग एल्गोरिदम स्वचालित रूप से उनमें से प्रत्येक के भीतर नमूनों की संख्या के आधार पर प्रत्येक वर्ग को वज़न प्रदान करेगा।

scikit-learn में कई अन्य वर्गीकरण एल्गोरिदम हैं, जिनमें से कुछ वर्ग भार को स्वीकार करते हैं।


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

हाँ, क्लास_वेट तर्क का मान 'ऑटो' हो सकता है यदि कुछ दस्तावेज़ीकरण में दिखता है या इसमें एक शब्दकोष मान हो सकता है, जिसमें क्लास की जगहें हों। 'ऑटो' के मामले में सीखने का एल्गोरिथ्म प्रत्येक वर्ग में नमूनों की संख्या के अनुसार प्रत्येक वर्ग का वजन पाता है।
ऐश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.