Machine Learning Academy · पाठ

रैंडम अंडरसैंपलिंग और ClusterCentroids

शिक्षार्थी बहुसंख्यक वर्ग के नमूनों को यादृच्छिक रूप से और ClusterCentroids के साथ कम करेंगे तथा सूचना-हानि और परिणामी मॉडल प्रदर्शन की तुलना करेंगे।

पाठ 3, कुल 4 में से13 चरण

रैंडम अंडरसैंपलिंग और ClusterCentroids, CoddyKit पर Machine Learning Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Machine Learning Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

Undersampling: Majority Class को घटाना

जहाँ oversampling minority class को बढ़ाता है, वहीं undersampling dataset को संतुलित करने के लिए majority class को छोटा करता है। इसका मुख्य लाभ यह है कि training तेज़ होती है, क्योंकि कुल data कम हो जाता है। मुख्य जोखिम यह है कि आप majority class की वास्तविक information हटा देते हैं, जिससे model अधिक false positives दे सकता है। Undersampling तब सबसे उपयोगी होता है जब majority class इतनी बड़ी हो कि oversampling से training अत्यधिक धीमी हो जाए।

Random Undersampling: Majority Examples को Randomly हटाना

RandomUnderSampler desired ratio प्राप्त होने तक majority-class samples को randomly चुनकर हटा देता है। यह सबसे तेज़ undersampling method है, लेकिन संभावित रूप से उपयोगी information को फेंक देता है। छोटे datasets में random undersampling decision boundary के पास मौजूद majority samples को हटाकर model का प्रदर्शन काफी खराब कर सकता है।

from imblearn.under_sampling import RandomUnderSampler
from sklearn.datasets import make_classification
import numpy as np

X, y = make_classification(n_samples=1000, weights=[0.95, 0.05],
                            n_features=10, random_state=42)

print('Before undersampling:', np.bincount(y))

rus = RandomUnderSampler(sampling_strategy=1.0, random_state=42)
X_res, y_res = rus.fit_resample(X, y)

print('After undersampling:', np.bincount(y_res))
print('New total samples:', len(y_res))

Sampling Strategy को नियंत्रित करना

sampling_strategy पैरामीटर अल्पसंख्यक और बहुसंख्यक वर्ग के अंतिम अनुपात को नियंत्रित करता है। 1.0 दोनों को बराबर कर देता है; 0.5 बहुसंख्यक वर्ग का 2:1 अनुपात बनाए रखता है। बहुत बड़े डेटासेट के लिए आप 0.1 सेट कर सकते हैं, जिससे 10:1 अनुपात बनेगा — यह मूल 100:1 अनुपात से फिर भी बेहतर है और प्रशिक्षण तेज़ रहता है। चयन गलत-सकारात्मक और गलत-नकारात्मक परिणामों की व्यावसायिक लागत के आधार पर करें।

from imblearn.under_sampling import RandomUnderSampler
from sklearn.datasets import make_classification
import numpy as np

X, y = make_classification(n_samples=10000, weights=[0.99, 0.01], random_state=42)
print('Original:', np.bincount(y))

for ratio in [1.0, 0.5, 0.2]:
    rus = RandomUnderSampler(sampling_strategy=ratio, random_state=0)
    _, y_r = rus.fit_resample(X, y)
    counts = np.bincount(y_r)
    print(f'ratio={ratio}: {counts} ({counts[1]/counts[0]:.2f} min:maj)')

क्लस्टर सेंट्रॉइड: बुद्धिमान अंडरसैंपलिंग

ClusterCentroids बहुसंख्यक वर्ग पर K-Means क्लस्टरिंग लागू करता है और प्रत्येक क्लस्टर को उसके सेंट्रॉइड से बदल देता है। बहुसंख्यक वर्ग के यादृच्छिक नमूने रखने के बजाय, यह एक संक्षिप्त और प्रतिनिधि समूह बनाए रखता है। यादृच्छिक विलोपन की तुलना में इससे बहुसंख्यक वर्ग की समग्र संरचना बेहतर बनी रहती है, लेकिन यह धीमा होता है और क्लस्टरों की संख्या को समायोजित करना पड़ता है (रीसैंपलिंग के बाद यही लक्षित बहुसंख्यक नमूनों की संख्या होती है)।

from imblearn.under_sampling import ClusterCentroids
from sklearn.datasets import make_classification
import numpy as np

X, y = make_classification(n_samples=1000, weights=[0.9, 0.1],
                            n_features=5, random_state=42)

print('Before:', np.bincount(y))

cc = ClusterCentroids(sampling_strategy=1.0, random_state=42)
X_cc, y_cc = cc.fit_resample(X, y)

print('After ClusterCentroids:', np.bincount(y_cc))
print('Note: synthetic centroids replace real majority samples')

अंडरसैंपलिंग विधियों की तुलना

आइए एक ही असंतुलित डेटासेट पर यादृच्छिक अंडरसैंपलिंग, क्लस्टर सेंट्रॉइड और बिना रीसैंपलिंग की तुलना करें तथा मूल्यांकन मापदंड के रूप में अल्पसंख्यक वर्ग का F1-स्कोर उपयोग करें।

from imblearn.under_sampling import RandomUnderSampler, ClusterCentroids
from imblearn.pipeline import Pipeline as ImbPipeline
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import f1_score
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import numpy as np

X, y = make_classification(n_samples=1000, weights=[0.95, 0.05], random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)

sc = StandardScaler()
X_tr = sc.fit_transform(X_train)
X_te = sc.transform(X_test)

for name, sampler in [('None', None),
                       ('RUS', RandomUnderSampler(random_state=0)),
                       ('ClusterCentroids', ClusterCentroids(random_state=0))]:
    if sampler:
        Xr, yr = sampler.fit_resample(X_tr, y_train)
    else:
        Xr, yr = X_tr, y_train
    lr = LogisticRegression().fit(Xr, yr)
    f1 = f1_score(y_test, lr.predict(X_te))
    print(f'{name:20s}: F1={f1:.4f}  n_train={len(yr)}')

अंडरसैंपलिंग में सूचना की हानि

अंडरसैंपलिंग का सबसे गंभीर नुकसान सूचना की हानि है। जब हर 100 बहुसंख्यक-वर्ग नमूनों में से 95 हटा दिए जाते हैं, तो मॉडल को वास्तविकता से बहुत अलग प्रशिक्षण वितरण दिखाई देता है। इससे प्रोडक्शन में गलत-सकारात्मक दर बढ़ सकती है। इसी कारण डेटासेट को संतुलित करने और सूचना की हानि को न्यूनतम रखने के लिए अंडरसैंपलिंग को अक्सर ओवरसैंपलिंग के साथ जोड़ा जाता है (जैसे SMOTEENN या SMOTETomek का उपयोग करके)।

ओवरसैंपलिंग और अंडरसैंपलिंग का संयोजन

SMOTETomek, SMOTE (अल्पसंख्यक वर्ग का ओवरसैंपलिंग) को Tomek Links हटाने (अस्पष्ट सीमा वाले बहुसंख्यक नमूनों की सफाई) के साथ जोड़ता है। परिणामस्वरूप दोनों वर्ग संतुलित होते हैं और ऐसे सीमा-निकट बहुसंख्यक नमूने हट जाते हैं जो वर्गीकारक को भ्रमित करते हैं। यह संयुक्त तरीका अक्सर केवल ओवरसैंपलिंग या केवल अंडरसैंपलिंग से बेहतर प्रदर्शन करता है।

from imblearn.combine import SMOTETomek
from sklearn.datasets import make_classification
import numpy as np

X, y = make_classification(n_samples=1000, weights=[0.95, 0.05], random_state=42)
print('Before:', np.bincount(y))

st = SMOTETomek(random_state=42)
X_res, y_res = st.fit_resample(X, y)
print('After SMOTETomek:', np.bincount(y_res))

नियर मिस: दूरी के आधार पर सूचित अंडरसैंपलिंग

NearMiss अल्पसंख्यक नमूनों से उनकी दूरी के आधार पर बहुसंख्यक-वर्ग नमूने चुनता है — या तो सबसे निकट वाले (NearMiss-1) या सबसे दूर वाले (NearMiss-3)। यादृच्छिक अंडरसैंपलिंग के विपरीत, NearMiss उन बहुसंख्यक नमूनों को बनाए रखता है जो निर्णय सीमा निर्धारित करने के लिए सबसे अधिक प्रासंगिक होते हैं। NearMiss-3 सभी अल्पसंख्यक नमूनों से सबसे दूर स्थित बहुसंख्यक नमूने रखता है, जिससे सीमा का क्षेत्र अधिक स्वच्छ बनता है।

from imblearn.under_sampling import NearMiss
from sklearn.datasets import make_classification
import numpy as np

X, y = make_classification(n_samples=1000, weights=[0.9, 0.1], random_state=42)
print('Before:', np.bincount(y))

for version in [1, 2, 3]:
    nm = NearMiss(version=version)
    _, y_nm = nm.fit_resample(X, y)
    print(f'NearMiss-{version}:', np.bincount(y_nm))

imblearn पाइपलाइन के भीतर अंडरसैंपलिंग

ओवरसैंपलिंग की तरह, क्रॉस-वैलिडेशन के दौरान डेटा-लीकेज रोकने के लिए अंडरसैंपलिंग भी पाइपलाइन के भीतर होनी चाहिए। imblearn.pipeline.Pipeline का उपयोग करें और वर्गीकारक से पहले अंडरसैंपलर को एक चरण के रूप में रखें। प्रत्येक प्रशिक्षण फोल्ड पर सैंपलर का fit_resample चलाया जाता है और परीक्षण फोल्ड में कभी कोई बदलाव नहीं किया जाता।

from imblearn.pipeline import Pipeline as ImbPipeline
from imblearn.under_sampling import RandomUnderSampler
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_classification
import numpy as np

X, y = make_classification(n_samples=1000, weights=[0.95, 0.05], random_state=42)

pipe = ImbPipeline([
    ('sc', StandardScaler()),
    ('rus', RandomUnderSampler(random_state=42)),
    ('lr', LogisticRegression())
])

scores = cross_val_score(pipe, X, y, cv=5, scoring='f1')
print(f'CV F1 (RUS): {np.mean(scores):.4f} +/- {np.std(scores):.4f}')

ओवरसैंपलिंग के बजाय अंडरसैंपलिंग कब चुनें

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

अंडरसैंपलिंग के बाद मूल्यांकन

रीसैंपलिंग के बाद हमेशा मूल असंतुलित परीक्षण समूह पर मूल्यांकन करें — रीसैंपल किए गए परीक्षण समूह पर कभी नहीं। परीक्षण डेटा का रीसैंपलिंग करने से प्रोडक्शन प्रदर्शन का अवास्तविक अनुमान मिलेगा। लक्ष्य वास्तविक डेटा वितरण पर मॉडल के व्यवहार को बेहतर बनाना है, न कि कृत्रिम संतुलित वितरण के लिए उसे अनुकूलित करना।

from sklearn.metrics import classification_report
from imblearn.under_sampling import RandomUnderSampler
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(n_samples=1000, weights=[0.95, 0.05], random_state=42)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42)

sc = StandardScaler()
X_train_s = sc.fit_transform(X_train)
X_test_s = sc.transform(X_test)

rus = RandomUnderSampler(random_state=0)
X_r, y_r = rus.fit_resample(X_train_s, y_train)

lr = LogisticRegression().fit(X_r, y_r)
# Evaluate on ORIGINAL imbalanced test set
print(classification_report(y_test, lr.predict(X_test_s)))

त्वरित जाँच

इस पाठ से अंडरसैंपलिंग और Cluster Centroids की अपनी समझ जाँचें।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा: RandomUnderSampler बहुसंख्यक नमूनों को यादृच्छिक रूप से हटाता है — यह तेज़ है, लेकिन महत्वपूर्ण सीमा-सूचना खोने का जोखिम रहता है; ClusterCentroids बहुसंख्यक क्लस्टरों को उनके सेंट्रॉइड से बदलता है, जिससे वर्ग वितरण अधिक विश्वसनीय रूप से सुरक्षित रहता है; और वास्तविक दुनिया में मॉडल के व्यवहार को मापने के लिए हमेशा मूल असंतुलित परीक्षण समूह पर मूल्यांकन करें। आगे हम रीसैंपलिंग के विकल्प के रूप में वर्ग भार और थ्रेशहोल्ड को स्थानांतरित करने का अध्ययन करेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “रैंडम अंडरसैंपलिंग और ClusterCentroids” पाठ निःशुल्क है?

हाँ—“रैंडम अंडरसैंपलिंग और ClusterCentroids” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Machine Learning Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“रैंडम अंडरसैंपलिंग और ClusterCentroids” में मैं क्या सीखूँगा?

शिक्षार्थी बहुसंख्यक वर्ग के नमूनों को यादृच्छिक रूप से और ClusterCentroids के साथ कम करेंगे तथा सूचना-हानि और परिणामी मॉडल प्रदर्शन की तुलना करेंगे। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Machine Learning Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Machine Learning Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Machine Learning Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“रैंडम अंडरसैंपलिंग और ClusterCentroids” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Machine Learning Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Machine Learning Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. असंतुलन का पता लगाना: वर्ग वितरण और आधाररेखा की समस्याएँ
  2. रैंडम ओवरसैंपलिंग और SMOTE
  3. रैंडम अंडरसैंपलिंग और ClusterCentroids
  4. वर्ग भार और सीमा स्थानांतरण
← Machine Learning Academy पर वापस जाएँ