ailiteracynepal 🇳🇵
पाठ आकार

अध्याय १ · खण्ड II · 24 मिनेट

scikit-learn: निर्माताको ML पुस्तकालय

Python मा हरेक कार्यरत ML अभ्यासकर्ताले उही पुस्तकालय — scikit-learn — समात्छ। यसमा तीस फरक मोडेलमा एक समान आकार छ, र एक पटक एक मोडेलका लागि प्रयोग गरेपछि सबैका लागि प्रयोग गरेको हुन्छ।

Python का हरेक कार्यरत ML अभ्यासकर्ताले दिनभर खोल्ने एउटै पुस्तकालय छ भने त्यो scikit-learn हो। बीस वर्ष पुरानो, क्षेत्रका केही उत्तम तथ्याङ्कशास्त्री र सफ्टवेयर इन्जिनियरहरूले लेखेको र मर्मत गर्ने, निःशुल्क, र चलाखीबिनाको — यसले तपाईंले अपेक्षा गर्ने कुरा, अपेक्षा गर्ने तरिकाले, हरेक पटक गर्छ। यो खण्डको अन्त्यसम्ममा तपाईंले यसलाई स्थापना गरिसक्नुभएको हुनेछ, हरेक scikit-learn मोडेलको विश्वव्यापी आकार जान्नुहुनेछ, र खण्ड 3 मा आफ्नो पहिलो वास्तविक वर्गीकरणकर्ता तालिम दिन तयार हुनुहुनेछ।

scikit-learn स्थापना

Course 01 अध्याय 4 को तपाईंको सक्रिय भर्चुअल वातावरणमा:

pip install scikit-learn

संयम भनेको sklearn का रूपमा आयात गर्ने हो:

import sklearn
print(sklearn.__version__)

तपाईंले पूरा पुस्तकालय विरलै आयात गर्नुहुनेछ। बरु, तपाईं चाहिने विशिष्ट टुक्रा आयात गर्नुहुन्छ — हामी हरेक उदाहरणमा देख्ने ढाँचा।

तपाईंले सधैं गर्ने चार आयात

झन्डै हरेक scikit-learn स्क्रिप्टले चार कुरा समात्छ:

# मोडेल — नब भएको फङ्क्सन
from sklearn.linear_model import LogisticRegression

# पूर्व-प्रशोधन — उही पुस्तकालय, अलग्गै स्थापना छैन
from sklearn.preprocessing import StandardScaler

# स्कोरिङ फङ्क्सन — मोडेलले कति राम्रो गर्‍यो न्याय गर्न
from sklearn.metrics import accuracy_score

# बाँड्ने — इमानदारीसँग मूल्याङ्कन गर्न
from sklearn.model_selection import train_test_split

तपाईंले Course 02 मा train_test_splitStandardScaler पहिले नै देख्नुभयो। LogisticRegression उपलब्ध दर्जनौं मोडेलमध्ये एक हो। accuracy_score उपलब्ध धेरै मेट्रिक्समध्ये एक हो। पुस्तकालय ठूलो छ तर राम्रोसँग व्यवस्थित छ, र चार-आयात ढाँचाले कार्यरत कोडको लगभग 80% ओगट्छ।

विश्वव्यापी API: .fit().predict()

scikit-learn को एकल सबैभन्दा महत्त्वपूर्ण तथ्य: हरेक मोडेलको एउटै इन्टरफेस छ। तपाईंले एक-नब थ्रेसहोल्ड वर्गीकरणकर्ता प्रयोग गरे पनि हजार-नब र्‍यान्डम फरेस्ट, कोड यस्तै देखिन्छ:

model = SomeModelClass(...config...)  # मोडेल बनाउनुहोस्
model.fit(X_train, y_train)            # तालिम दिनुहोस्
predictions = model.predict(X_test)    # नयाँ डाटामा पूर्वानुमान गर्नुहोस्

तीन लाइन, सधैं। मोडेल कक्षा बदलिन्छ, कन्फिग आर्गुमेन्ट बदलिन्छन्, डाटा बदलिन्छ — आकार कहिल्यै बदलिँदैन। यही निरन्तरताले scikit-learn लाई कार्यकर्ता बनाउँछ: एक पटक तपाईंले एक मोडेलका लागि प्रयोग गरेपछि, सबैका लागि प्रयोग गरेको हुनुहुन्छ।

अझ पूर्ण उदाहरण, सुरुदेखि अन्त्यसम्म:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# X तपाईंको फिचर DataFrame हो; y तपाईंको लक्ष्य Series — Course 02 बाट
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y,
)

model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)

predictions = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, predictions))

दस वास्तविक लाइन। तिनले वास्तविक डाटामा वास्तविक मोडेल तालिम दिन्छन् र तपाईंलाई इमानदारीसाथ भन्छन् यसले कति राम्रो गर्‍यो। अर्को खण्डले Course 02 को loan-default डाटासेटसँग यो कोडलाई लाइनदर-लाइन हिँडाउँछ। अहिलेलाई, आकारसँग बस्नुहोस्।

fit ले के गर्छ — अघिल्लो खण्डसँग जोड्ने

खण्ड 1 मा हामीले भन्यौं मोडेल तालिम दिनु भनेको: अप्टिमाइजेसन प्रक्रियाले लोस फङ्क्सन घटाउन नब समायोजन गर्छ। model.fit(X_train, y_train) त्यही अप्टिमाइजेसन प्रक्रिया हो, Python को एउटा लाइनमा लुकाइएको।

LogisticRegression का लागि, लोस फङ्क्सन logistic loss (वा “log-loss”) भनिन्छ, र अप्टिमाइजर केही मानक एल्गोरिथममध्ये एक (LBFGS पूर्वनिर्धारित) हो। तपाईंले यीमध्ये कुनैको नाम दिनुपरेन। scikit-learn ले उपयुक्त छनोट गर्‍यो। जब .fit(...) फर्किन्छ, मोडेलका आन्तरिक नब तपाईंको तालिम डाटामा लोस घटाउने मानमा सेट हुन्छन्।

तालिमपछि नब हेर्न:

print(model.coef_)       # भार (प्रति फिचर एक)
print(model.intercept_)  # अफसेट

पाँच फिचर भएको मोडेलका लागि, coef_ पाँच सङ्ख्याको एरे हो — प्रत्येक फिचरले पूर्वानुमानमा कसरी योगदान गर्छ भन्ने मोडेलको विचार। यी पढ्नु मोडेलले के सिक्यो भनेर सन्दर्भ-जाँच्ने राम्रो तरिका हो: के भारका चिन्ह तपाईंले अपेक्षा गरेजस्तै छन् (loan_to_income_ratio ले डिफल्ट पूर्वानुमानका लागि सकारात्मक भार हुनुपर्छ), र लगभग अपेक्षित परिमाणमा छ?

predict ले के गर्छ

model.predict(X_test) ले तालिम प्राप्त मोडेललाई X_test को हरेक पङ्क्तिमा लागू गर्छ र पूर्वानुमानित लेबल फर्काउँछ। वर्गीकरणकर्ताका लागि, नतिजा कक्षा लेबलको एरे हो (जस्तै [0, 1, 0, 0, 1, ...])। रिग्रेसरका लागि, सङ्ख्याको एरे।

नजिकको आफन्त predict_proba हो, अधिकांश वर्गीकरणकर्तामा उपलब्ध:

probabilities = model.predict_proba(X_test)
print(probabilities[:5])

यसले मोडेलले प्रत्येक कक्षालाई दिएको सम्भावना फर्काउँछ, केवल अन्तिम लेबल होइन। “आत्मविश्वास” स्कोर चाहिँदा उपयोगी — र निर्णय थ्रेसहोल्ड समायोजन गर्न चाहँदा महत्त्वपूर्ण (जस्तै, ऋणलाई जोखिमपूर्ण भनेर फ्ल्याग गर्नुहोस् केवल यदि पूर्वानुमानित सम्भावना > 0.7 भए, > 0.5 भए मात्र होइन)।

पुस्तकालयमा के छ भन्ने सानो नक्सा

छोटो, गैर-सम्पूर्ण परिचय:

  • sklearn.linear_model — रेखीय/लोजिस्टिक रिग्रेसन र साथीहरू। सरल, छिटो, व्याख्यायोग्य।
  • sklearn.tree — निर्णय रुख। हामी अध्याय 2 मा प्रयोग गर्छौँ।
  • sklearn.ensemble — random forests, gradient boosting। झन्डै सधैं बक्सबाहिर बलियो। अध्याय 5 मा भेट्नेछौं।
  • sklearn.neighbors — k-निकटतम छिमेकी। साना डाटासेटका लागि अचम्मलाग्दो प्रतिस्पर्धी।
  • sklearn.svm — support vector machines। शक्तिशाली, कहिलेकाहीं ट्युन गर्न झमेलापूर्ण।
  • sklearn.preprocessing — स्केलर, इन्कोडर, बहुपद फिचर।
  • sklearn.model_selection — बाँड्ने, cross-validation, हाइपरपारामिटर खोजी।
  • sklearn.metrics — तपाईंलाई कहिल्यै चाहिने हरेक मूल्याङ्कन मेट्रिक।
  • sklearn.pipeline — Course 02 अध्याय 5 को Pipeline कक्षा।

आधिकारिक कागजात (scikit-learn.org) असाधारण राम्रो छ — हरेक कक्षामा उदाहरण, हरेक आर्गुमेन्टमा विवरण, र क्रस-सन्दर्भ सफा छन्। बारम्बार पढ्नुहोस्।

चेतावनीबारे व्यवहारिक टिप्पणी

कुनै पनि scikit-learn स्क्रिप्ट चलाउँदा तपाईंले चेतावनी देख्न सक्नुहुन्छ — convergence बारे, फिचर नाम बारे, deprecated आर्गुमेन्टबारे। पढ्नुहोस्। अधिकांश उपयोगी छन्। तपाईंले चाँडै भेट्ने सबैभन्दा सामान्य:

ConvergenceWarning: lbfgs failed to converge (status=1):
STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.

यसको अर्थ अप्टिमाइजरले लोसको तल भेट्नुअघि पुनरावृत्ति सकियो। दुई सामान्य उपचार: max_iter=1000 (वा 5000) पास गर्नुहोस् बढी पुनरावृत्ति दिन, वा पहिले StandardScaler ले आफ्ना फिचर स्केल गर्नुहोस् ताकि अप्टिमाइजरको काम सजिलो हुन्छ। हामीले माथिको उदाहरणमा दुवै गर्‍यौं।

अर्को जुन तपाईंले देख्नुहुनेछ:

UserWarning: X does not have valid feature names...

यो देखापर्छ जब तपाईं .fit() लाई NumPy एरे र .predict() लाई pandas DataFrame पास गर्नुहुन्छ (वा उल्टो)। एउटैमा टिक्नुहोस् र चेतावनी हट्छ।

आफ्नो बुझाइ जाँच्नुहोस्

Quick check

एक साथीले काठमाडौं भाडा पूर्वानुमान परियोजनाका लागि रेखीय रिग्रेसनबाट random forest मा सर्न चाहन्छिन्। तिनले कति कोड फेरि लेख्नुपर्नेछ चिन्ता गर्छिन्। यो खण्डले के सुझाव दिन्छ?

Quick check

तपाईंको कोडले model.predict(X_test) कल गर्छ र 0 र 1 को एरे फिर्ता पाउँछ। तपाईंले महसुस गर्नुहुन्छ कि तपाईंलाई पूर्वानुमानित लेबल 1 हुँदा मात्र होइन, मोडेल कम्तीमा 70% आत्मविश्वासी हुँदा मात्र जोखिमपूर्ण ऋण फ्ल्याग गर्नुपर्छ। सबैभन्दा सफा उपचार के हो?

अब के आउँछ

तपाईंलाई पुस्तकालयको आकार थाहा छ। अर्को खण्ड अध्याय 1 को पन्च लाइन हो: पूर्ण, वास्तविक, अन्त-देखि-अन्त वर्गीकरणकर्ता। हामी Course 02 को सफा गरिएको ऋण डाटा लोड गर्छौँ, बाँड्छौँ, स्केल गर्छौँ, LogisticRegression तालिम दिन्छौँ, मूल्याङ्कन गर्छौँ, र यसका भार पढ्छौँ — सबै 50 भन्दा कम लाइनमा। खण्ड 3 सकिँदा, तपाईंले आफ्नो पहिलो वास्तविक मोडेल तालिम दिइसक्नुभएको हुनेछ र त्यहाँ भइरहेको सबै कुरा तपाईं चिन्नुहुनेछ।