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_split र StandardScaler पहिले नै देख्नुभयो। 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 सकिँदा, तपाईंले आफ्नो पहिलो वास्तविक मोडेल तालिम दिइसक्नुभएको हुनेछ र त्यहाँ भइरहेको सबै कुरा तपाईं चिन्नुहुनेछ।