संवादी तंत्रिका नेटवर्क (CNN) द्वारा असंतुलित डेटासेट को कैसे वर्गीकृत किया जाए?


10

मेरे पास एक द्विआधारी वर्गीकरण कार्य में असंतुलित डेटासेट है, जहां सकारात्मक राशि बनाम नकारात्मक राशि 0.3% बनाम 99.7% है। सकारात्मक और नकारात्मक के बीच अंतर बहुत बड़ा है। जब मैं MNIST समस्या में प्रयुक्त संरचना के साथ एक CNN को प्रशिक्षित करता हूं, तो परीक्षण परिणाम एक उच्च झूठी नकारात्मक दर दिखाता है। इसके अलावा, प्रशिक्षण त्रुटि वक्र शुरुआत में युगों के जोड़े में जल्दी से नीचे चला जाता है, लेकिन निम्न युगों में एक ही मूल्य रहता है।

क्या आप मुझे इस समस्या को संसाधित करने का एक तरीका सुझा सकते हैं? धन्यवाद!

जवाबों:


10

ऐसा इसलिए होता है क्योंकि जब आप एक मिनी-बैच लेते हैं, तो इसकी संभावना बहुत कम होती है (यहाँ अनुपात का अनुपात देखते हुए) कि एक मिनी बैच में आपकी सकारात्मकता के नमूने होंगे। तो यह नकारात्मक वर्ग के लिए पैटर्न सीखना समाप्त कर देगा और एक-दो युगों के बाद, सब कुछ सिर्फ नकारात्मक वर्ग के रूप में वर्गीकृत हो जाएगा।

ऐसी स्थिति को संभालने के दो संभावित तरीके हैं।

  1. अनुपात को 0.3% से 99.7% के रूप में देखते हुए, यह एक बहुत ही तिरछा डेटा सेट है। आपके पास शायद ही हर 1000 नमूनों के लिए सकारात्मक वर्गों के 3 नमूने हैं। मैं कहूंगा कि आपको अधिक सकारात्मक कक्षाएं प्राप्त करके डेटा सेट को संतुलित करना चाहिए। जाओ और जितना हो सके उतने सकारात्मक नमूने लें। फिर, आप अधिक संतुलित डेटासेट का उपयोग कर सकते हैं। उदाहरण के लिए, आप 1000 सकारात्मक नमूने प्राप्त कर सकते हैं और फिर 1000 नकारात्मक नमूनों का यादृच्छिक सेट चुन सकते हैं और क्लासिफायरियर का निर्माण कर सकते हैं। अब, यह दोनों वर्गों को सीखने में सक्षम होना चाहिए।

  2. एक मिनी-बैच के बाद भार को अद्यतन करते समय एक भारित त्रुटि माप का उपयोग करें। किसी भी मिनी-बैच के दौरान वज़न सकारात्मक और नकारात्मक वर्गों के नमूनों की संख्या के अनुपात में अपडेट किया जाता है। अब, वर्तमान स्थिति में 3: 1000 के अनुपात को देखते हुए, यह चाल भी काम नहीं कर सकती है। तो आप 297 अधिक सकारात्मक नमूने प्राप्त करके और 1000 नकारात्मक नमूनों के साथ संयोजन करके 300: 1000 जैसे कुछ के अनुपात प्राप्त करने का प्रयास कर सकते हैं। फिर 300: 1000 अनुपात के साथ आपको प्रत्येक कक्षाओं में नमूनों की संख्या के आधार पर मिनी-बैचों के दौरान त्रुटि का वजन करना चाहिए। यह काम करना चाहिए।


क्या आप जानते हैं कि यहाँ का इष्टतम अनुपात क्या है? यह 3:10 है, या कुछ और है?
क्रिस्टोफर

4

आप यहां सीएनएन का उपयोग क्यों करना चाहते हैं? क्या आपने अन्य मॉडलों पर विचार किया है जो वास्तव में असंतुलित डेटा को संभालते हैं?

उदाहरण के लिए, मैंने पाया है कि निम्नलिखित दो तकनीकों ने मेरे लिए वास्तव में अच्छा काम किया है:

  • रैंडम फ़ॉरेस्ट w / SMOTE बूस्टिंग : एक हाइब्रिड का उपयोग करें जो SMOTEकि बहुसंख्यक वर्ग को रेखांकित करता है और समायोज्य प्रतिशत द्वारा अल्पसंख्यक वर्ग को ओवर-सैंपल करता है। प्रशिक्षण सेट में अपने प्रतिक्रिया चर के वितरण के आधार पर इन प्रतिशत का चयन करें। इस डेटा को अपने RF मॉडल में फ़ीड करें। अपने RFs के लिए सर्वोत्तम पैरामीटर सेटिंग खोजने के लिए हमेशा क्रॉस-वैलिडेट / प्रदर्शन करें।

  • XGBoost w / हाइपर-पैरामीटर ऑप्टिमाइज़ेशन : फिर से, मॉडल के लिए सर्वोत्तम पैरामीटर सेटिंग खोजने के लिए क्रॉस- वेलिडेट करें या गर्ड-सर्च करें। इसके अतिरिक्त, xgboostआप का उपयोग करके सकारात्मक और नकारात्मक वर्ग भार को संतुलित करने की अनुमति देता है scale_pos_weight। पूरी सूची के लिए पैरामीटर प्रलेखन देखें ।

मुझे यह भी जोड़ना चाहिए कि मैं जिस डेटा-सेट पर काम कर रहा था, उसमें तिरछा प्रतिशत समान था और मैं 0.941 की संवेदनशीलता स्कोर और 0.71 की एक विशिष्टता प्राप्त करने में सक्षम था xgboost, जिसका अर्थ है कि मॉडल सही सकारात्मकता का अनुमान लगा रहा है और यह बहुत ही सटीक है। मेरे लिए अच्छा है।

(क्षमा करें, मैं एक टिप्पणी नहीं छोड़ सकता, पर्याप्त प्रतिष्ठा नहीं और मैं वास्तव में जानना चाहता था कि आपने सीएनएन क्यों चुना)


1

असंतुलित डेटासेट सभी क्षेत्रों में एक सामान्य समस्या है और यह विशेष रूप से कंप्यूटर दृष्टि और चिंता संबंधी तंत्रिका नेटवर्क (CNNs) द्वारा निपटाए गए समस्याओं की चिंता नहीं करता है।

इस समस्या से निपटने के लिए, आपको अपने डेटासेट को संतुलित करने की कोशिश करनी चाहिए, या तो अल्पसंख्यक वर्गों द्वारा या बहु-नमूना वर्गों (या दोनों) के नमूने लेने से। संभवतः, जैसा कि ऊपर बताया गया है, एक अच्छा विकल्प SMOTE (सिंथेटिक माइनॉरिटी ओवर-सैंपलिंग तकनीक) एल्गोरिदम होगा। यहां आप विभिन्न ओवर-सैंपलिंग एल्गोरिदम की तुलना पा सकते हैं। यदि आप एक पायथन उपयोगकर्ता हैं, तो असंतुलित-सीखना एक अच्छा पुस्तकालय है जो डेटासेट को संतुलित करने के लिए कई उपयोगी तकनीकों को लागू करता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.