R में असंतुलित डेटा के लिए smote का उपयोग कैसे करें (उदाहरण के साथ)


अक्सर मशीन लर्निंग वर्गीकरण एल्गोरिदम के साथ काम करते समय, डेटासेट में कक्षाएं असंतुलित हो जाएंगी।

उदाहरण के लिए:

  • कॉलेज के खिलाड़ियों को एनबीए में ड्राफ्ट किया गया है या नहीं, इसकी जानकारी वाले डेटासेट में 98% खिलाड़ी अनड्राफ्ट और 2% ड्राफ्ट किए जा सकते हैं।
  • मरीजों को कैंसर है या नहीं, इसकी जानकारी वाले डेटासेट में 99% मरीज बिना कैंसर के और केवल 1% कैंसर से पीड़ित हो सकते हैं।
  • बैंक धोखाधड़ी की जानकारी वाले डेटासेट में 96% वैध लेनदेन और 4% धोखाधड़ी वाले लेनदेन हो सकते हैं।

इन असंतुलित वर्गों के कारण, आपके द्वारा बनाया गया पूर्वानुमानित मॉडल अल्पसंख्यक वर्ग पर अच्छा काम नहीं कर सकता है।

इससे भी बुरी बात यह है कि अक्सर अल्पसंख्यक वर्ग ही वह वर्ग होता है जिसके बारे में हम सबसे अधिक भविष्यवाणी करना चाहते हैं।

इस असंतुलन की समस्या को हल करने का एक तरीका सिंथेटिक अल्पसंख्यक ओवरसैंपलिंग तकनीक का उपयोग करना है, जिसे अक्सर संक्षिप्त रूप से SMOTE कहा जाता है।

इस तकनीक में अल्पसंख्यक वर्ग के अवलोकनों का निरीक्षण करके एक नया डेटासेट बनाना शामिल है, जो अधिक संतुलित वर्गों के साथ एक डेटासेट तैयार करता है।

R में SMOTE का उपयोग करने का सबसे आसान तरीका DMwR पैकेज से SMOTE() फ़ंक्शन का उपयोग करना है।

यह फ़ंक्शन निम्नलिखित मूल सिंटैक्स का उपयोग करता है:

 SMOTE(form, data, perc. over = 200 , perc. under = 200 , ...)

सोना:

  • प्रपत्र : उस मॉडल का वर्णन करने वाला एक सूत्र जिसे आप अनुकूलित करना चाहते हैं
  • डेटा : डेटा फ़्रेम का नाम
  • perc.over : वह संख्या जो यह निर्धारित करती है कि अल्पसंख्यक वर्ग के कितने अतिरिक्त मामले उत्पन्न हुए हैं
  • perc.under : संख्या जो निर्धारित करती है कि बहुसंख्यक वर्ग के कितने अतिरिक्त मामले उत्पन्न होते हैं

निम्नलिखित उदाहरण दिखाता है कि व्यवहार में इस फ़ंक्शन का उपयोग कैसे करें।

उदाहरण: R में SMOTE का उपयोग कैसे करें

मान लीजिए कि हमारे पास आर में 100 अवलोकनों के साथ निम्नलिखित डेटासेट हैं जिनमें 90 में “हां” वर्ग है और 10 में प्रतिक्रिया चर के लिए “नहीं” वर्ग है:

 #make this example reproducible
set. seed ( 0 )

#create data frame with one response variable and two predictor variables
df <- data. frame (y=rep(as. factor (c(' Yes ', ' No ')), times=c( 90 , 10 )),
                 x1=rnorm( 100 ),
                 x2=rnorm( 100 ))

#view first six rows of data frame
head(df)

    y x1 x2
1 Yes 1.2629543 0.7818592
2 Yes -0.3262334 -0.7767766
3 Yes 1.3297993 -0.6159899
4 Yes 1.2724293 0.0465803
5 Yes 0.4146414 -1.1303858
6 Yes -1.5399500 0.5767188
 
#view distribution of response variable
table(df$y)

 Drowned 
 10 90

यह असंतुलित डेटासेट का एक उत्कृष्ट उदाहरण है क्योंकि हम जिस प्रतिक्रिया चर की भविष्यवाणी कर रहे हैं उसमें “हां” वर्ग के साथ 90 अवलोकन हैं और “नहीं” वर्ग के साथ केवल 10 अवलोकन हैं।

अधिक संतुलित डेटासेट बनाने के लिए, हम DMwR पैकेज से SMOTE() फ़ंक्शन का उपयोग कर सकते हैं:

 library ( DMwR)

#use SMOTE to create new dataset that is more balanced
new_df <- SMOTE(y ~ ., df, perc. over = 2000 , perc. under = 400 )

#view distribution of response variable in new dataset
table(new_df$y)

 Drowned 
210,800

परिणामी डेटासेट में वर्ग के रूप में “नहीं” के साथ 210 अवलोकन और वर्ग के रूप में “हां” के साथ 800 अवलोकन शामिल हैं।

यहां बताया गया है कि SMOTE फ़ंक्शन ने इस नए डेटा सेट को कैसे तैयार किया:

  • perc.over तर्क ने निर्दिष्ट किया कि हम डेटासेट में मौजूदा अल्पसंख्यक टिप्पणियों की संख्या का 2000/100 (या 20) गुना जोड़ना चाहते थे। चूंकि मूल डेटासेट में 10 अवलोकन मौजूद थे, इसलिए हमने 20*10 = 200 अतिरिक्त अल्पसंख्यक अवलोकन जोड़े।
  • perc.under तर्क में निर्दिष्ट किया गया है कि हम बहुसंख्यक टिप्पणियों की संख्या को मौजूदा अल्पसंख्यक टिप्पणियों में जोड़े गए अल्पसंख्यक टिप्पणियों की संख्या के 400/100 (या 4) गुना के बराबर बनाना चाहते हैं। चूंकि 200 अतिरिक्त अल्पसंख्यक अवलोकन जोड़े गए, इसलिए हमने बहुमत अवलोकनों की संख्या 200 * 4 = 800 बहुमत अवलोकनों के बराबर कर दी।

अंतिम परिणाम एक डेटासेट है जिसमें अभी भी अधिक बहुसंख्यक वर्ग शामिल हैं, लेकिन फिर भी यह मूल डेटासेट की तुलना में अधिक संतुलित है।

अब आप अपनी पसंद के वर्गीकरण एल्गोरिदम को इस नए डेटासेट में अनुकूलित कर सकते हैं, जिसे अल्पसंख्यक वर्ग पर बेहतर प्रदर्शन करना चाहिए क्योंकि इस नए डेटासेट में अल्पसंख्यक वर्ग के अधिक अवलोकन हैं।

ध्यान दें : अपनी आवश्यकताओं के अनुरूप डेटासेट प्राप्त करने के लिए SMOTE फ़ंक्शन में perc.over और perc.under तर्कों के साथ बेझिझक खेलें।

अतिरिक्त संसाधन

निम्नलिखित ट्यूटोरियल बताते हैं कि आर में अन्य सामान्य कार्य कैसे करें:

आर में सारांश तालिकाएँ कैसे बनाएँ
आर में डेटा को सामान्य कैसे करें
आर में आउटलेर्स को कैसे हटाएं

एक टिप्पणी जोड़ने

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *