मुझे यह समझने में बहुत परेशानी हो रही है कि class_weight
scitit-learn के लॉजिस्टिक रिग्रेशन में पैरामीटर कैसे संचालित होता है।
स्थिति
मैं बहुत असंतुलित डेटा सेट पर द्विआधारी वर्गीकरण करने के लिए लॉजिस्टिक प्रतिगमन का उपयोग करना चाहता हूं। वर्गों को 0 (ऋणात्मक) और 1 (पॉजिटिव) लेबल किया जाता है और मनाया गया डेटा लगभग 19: 1 के अनुपात में होता है, जिसमें अधिकांश नमूने नकारात्मक परिणाम वाले होते हैं।
पहला प्रयास: मैन्युअल रूप से प्रशिक्षण डेटा तैयार करना
मैंने प्रशिक्षण और परीक्षण (लगभग 80/20) के लिए मेरे पास मौजूद डेटा को विभाजित कर दिया था। फिर मैंने 19: 1 की तुलना में अलग-अलग अनुपात में प्रशिक्षण डेटा प्राप्त करने के लिए हाथ से प्रशिक्षण डेटा को बेतरतीब ढंग से नमूना लिया; 2: 1 -> 16: 1 से।
मैंने तब इन विभिन्न प्रशिक्षण डेटा उप-समूहों पर लॉजिस्टिक प्रतिगमन को प्रशिक्षित किया और विभिन्न प्रशिक्षण अनुपातों के एक फ़ंक्शन के रूप में (= टीपी / (टीपी + एफएन)) को वापस बुलाया। बेशक, रिकॉल की गणना असंतुष्ट टेस्ट नमूनों पर की गई थी, जिसमें 19: 1 का अनुपात देखा गया था। ध्यान दें, हालांकि मैंने अलग-अलग प्रशिक्षण डेटा पर विभिन्न मॉडलों को प्रशिक्षित किया है, फिर भी मैंने उन सभी के लिए एक ही (असंतुष्ट) परीक्षण डेटा पर रिकॉल किया।
परिणाम उम्मीद के मुताबिक थे: रीकॉल 2: 1 प्रशिक्षण अनुपात के बारे में 60% था और जब तक यह 16, 1 तक पहुंच गया, तब तक तेजी से गिर गया। कई अनुपात 2: 1 -> 6: 1 थे, जहां रिकॉल 5% से अधिक था।
दूसरा प्रयास: ग्रिड खोज
अगला, मैं विभिन्न नियमितीकरण मापदंडों का परीक्षण करना चाहता था और इसलिए मैंने ग्रिडसर्च सीवी का उपयोग किया और C
पैरामीटर के साथ-साथ पैरामीटर के कई मूल्यों का ग्रिड बनाया class_weight
। मेरे n: m के अनुपात का नकारात्मक अनुवाद करने के लिए: सकारात्मक प्रशिक्षण के नमूने में class_weight
मैंने सोचा था कि मैं इस प्रकार कई शब्दकोश निर्दिष्ट करता हूं:
{ 0:0.67, 1:0.33 } #expected 2:1
{ 0:0.75, 1:0.25 } #expected 3:1
{ 0:0.8, 1:0.2 } #expected 4:1
और मैं भी शामिल किए गए None
और auto
।
इस बार परिणाम पूरी तरह से निराकृत थे। मेरे सभी रिकॉल छोटे (<0.05) को class_weight
छोड़कर हर मूल्य के लिए आए auto
। इसलिए मैं केवल यह मान सकता हूं कि class_weight
शब्दकोश को सेट करने के बारे में मेरी समझ गलत है। दिलचस्प है, class_weight
ग्रिड खोज में 'ऑटो' का मूल्य सभी मूल्यों के लिए लगभग 59% था C
, और मैंने अनुमान लगाया कि यह 1 से 1 तक संतुलित है?
मेरे सवाल
class_weight
आप वास्तव में इसे क्या देते हैं, उससे प्रशिक्षण डेटा में विभिन्न संतुलन हासिल करने के लिए आप कैसे ठीक से उपयोग करते हैं ? विशेष रूप से,class_weight
नकारात्मक: सकारात्मक प्रशिक्षण नमूनों के n: m अनुपात का उपयोग करने के लिए मैं किस शब्दकोश से गुजरता हूं ?यदि आप
class_weight
GridSearchCV के लिए विभिन्न शब्दकोशों को पास करते हैं , तो क्रॉस-वैलिडेशन के दौरान यह शब्दकोश के अनुसार प्रशिक्षण गुना डेटा को फिर से संतुलित करेगा, लेकिन परीक्षण तह पर मेरे स्कोरिंग फ़ंक्शन की गणना के लिए सही दिए गए नमूना अनुपात का उपयोग करें? यह महत्वपूर्ण है क्योंकि किसी भी मीट्रिक मेरे लिए केवल तभी उपयोगी है जब यह देखे गए अनुपात में डेटा से आता है।जहाँ तक आनुपातिकता है, उसका क्या
auto
मूल्य हैclass_weight
? मैंने दस्तावेज़ीकरण पढ़ा और मुझे लगता है "डेटा को उनकी आवृत्ति के विपरीत आनुपातिक संतुलित करता है" बस इसका मतलब है कि यह 1: 1 बनाता है। क्या ये सही है? यदि नहीं, तो क्या कोई स्पष्ट कर सकता है?