You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
242 lines
18 KiB
242 lines
18 KiB
# खाना वर्गीकरण २
|
|
|
|
यस दोस्रो वर्गीकरण पाठमा, तपाईंले संख्यात्मक डाटालाई वर्गीकृत गर्ने थप तरिकाहरू अन्वेषण गर्नुहुनेछ। तपाईंले अर्को वर्गीकर्तालाई छनौट गर्दा के कस्तो प्रभाव पर्नेछ भनेर पनि सिक्नु हुनेछ।
|
|
|
|
## [पूर्व-व्याख्यान क्विज](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
### पूर्वसर्त
|
|
|
|
हामी मान्छौं कि तपाईंले पहिलेका पाठहरू पूरा गरिसक्नु भएको छ र तपाईंको `data` फोल्डरमा एउटा सफा गरिएको डेटासेट _cleaned_cuisines.csv_ छ जुन ४-पाठको फोल्डरको मूल भागमा रहेको छ।
|
|
|
|
### तयारी
|
|
|
|
हामीले तपाईंको _notebook.ipynb_ फाइलमा सफा गरिएको डेटासेट लोड गरेका छौं र यसलाई X र y डाटाफ्रेमहरूमा विभाजित गरेर मोडल निर्माण प्रक्रियाका लागि तयार पारिएको छ।
|
|
|
|
## एक वर्गीकरण नक्सा
|
|
|
|
पहिले, तपाईंले Microsoft को चिट शीट प्रयोग गरेर डाटा वर्गीकरण गर्दा उपलब्ध विभिन्न विकल्पहरू सिक्नु भएको थियो। Scikit-learn ले पनि यस्तै, तर थप सटिक चिट शीट प्रदान गर्छ जुन तपाईंलाई तपाईंका ईस्टिमेटरहरू (अरू शब्दमा वर्गीकर्ता) निर्धारण गर्न थप सहयोग गर्दछ:
|
|
|
|

|
|
> संकेत: [यो नक्सामा अनलाइन जानुहोस्](https://scikit-learn.org/stable/tutorial/machine_learning_map/) र बाटामा क्लिक गरेर दस्तावेज पढ्नुहोस्।
|
|
|
|
### योजना
|
|
|
|
यो नक्सा तपाईंको डाटा स्पष्ट भएपछि धेरै मद्दत गर्नेछ, किनकि तपाईं यसको बाटामा 'हिँडेर' निर्णयमा पुग्न सक्नुहुन्छ:
|
|
|
|
- हामीसँग >50 नमूना छ
|
|
- हामी एउटा वर्ग पूर्वानुमान गर्न चाहन्छौं
|
|
- हामीसँग लेबल गरिएको डाटा छ
|
|
- हामीसँग 100K नमुनाभन्दा कम छ
|
|
- ✨ हामी Linear SVC छनौट गर्न सक्दछौं
|
|
- यदि त्यो काम गर्दैन, किनकि हामीसँग संख्यात्मक डाटा छ
|
|
- हामी ✨ KNeighbors Classifier प्रयास गर्न सक्छौं
|
|
- यदि त्यो काम गर्दैन भने, ✨ SVC र ✨ Ensemble Classifiers प्रयास गर्नुहोस्
|
|
|
|
यो अध्ययन मार्ग अनुसरण गर्न धेरै उपयोगी छ।
|
|
|
|
## अभ्यास - डाटा विभाजन गर्नुहोस्
|
|
|
|
यो बाटो अनुसरण गर्दै, हामीले केही पुस्तकालयहरू आयात गर्न सुरु गर्नुपर्छ।
|
|
|
|
1. आवश्यक पुस्तकालयहरू आयात गर्नुहोस्:
|
|
|
|
```python
|
|
from sklearn.neighbors import KNeighborsClassifier
|
|
from sklearn.linear_model import LogisticRegression
|
|
from sklearn.svm import SVC
|
|
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
|
|
from sklearn.model_selection import train_test_split, cross_val_score
|
|
from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
|
|
import numpy as np
|
|
```
|
|
|
|
1. तपाईंको प्रशिक्षण र परीक्षण डाटा विभाजन गर्नुहोस्:
|
|
|
|
```python
|
|
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
|
|
```
|
|
|
|
## Linear SVC वर्गीकर्ता
|
|
|
|
Support-Vector clustering (SVC) Support-Vector मेशिन परिवारको एक सदस्य हो (यीका बारेमा तल थप जान्नुहोस्)। यस विधिमा तपाईंले 'kernel' छनौट गर्न सक्नुहुन्छ जसले लेबलहरूलाई कसरी क्लस्टर गर्ने निर्णय गर्छ। 'C' प्यारामीटर 'regularization' सँग सम्बद्ध हुन्छ जसले प्यारामीटरहरूको प्रभावलाई नियन्त्रित गर्छ। kernel विभिन्न [प्रकारहरू](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) को हुन सक्छ; यहाँ हामी 'linear' लाई सेट गर्दछौं ताकि linear SVC को फाइदा लिन सकियोस्। Probability को डिफल्ट 'false' हुन्छ; यहाँ हामीलाई probability अनुमानहरू सङ्कलन गर्न 'true' मा सेट गरेका छौं। डेटा शफल गर्न र सम्भाव्यता सुनिश्चित गर्न र्यान्डम स्टेटलाई '0' मा सेट गरेका छौं।
|
|
|
|
### अभ्यास - linear SVC लागू गर्नुहोस्
|
|
|
|
वर्गीकर्ताहरूको एउटा एरे बनाएर सुरु गर्नुहोस्। परीक्षण गर्दै जाँदा तपाईं यसलाई क्रमिक रूपमा थप्नु हुनेछ।
|
|
|
|
1. Linear SVC बाट सुरु गर्नुहोस्:
|
|
|
|
```python
|
|
C = 10
|
|
# विभिन्न वर्गीकरणकर्ता निर्माण गर्नुहोस्।
|
|
classifiers = {
|
|
'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
|
|
}
|
|
```
|
|
|
|
2. Linear SVC प्रयोग गरेर तपाईंको मोडललाई प्रशिक्षण दिनुहोस् र रिपोर्ट प्रिन्ट गर्नुहोस्:
|
|
|
|
```python
|
|
n_classifiers = len(classifiers)
|
|
|
|
for index, (name, classifier) in enumerate(classifiers.items()):
|
|
classifier.fit(X_train, np.ravel(y_train))
|
|
|
|
y_pred = classifier.predict(X_test)
|
|
accuracy = accuracy_score(y_test, y_pred)
|
|
print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100))
|
|
print(classification_report(y_test,y_pred))
|
|
```
|
|
|
|
नतिजा साँच्चै राम्रो छ:
|
|
|
|
```output
|
|
Accuracy (train) for Linear SVC: 78.6%
|
|
precision recall f1-score support
|
|
|
|
chinese 0.71 0.67 0.69 242
|
|
indian 0.88 0.86 0.87 234
|
|
japanese 0.79 0.74 0.76 254
|
|
korean 0.85 0.81 0.83 242
|
|
thai 0.71 0.86 0.78 227
|
|
|
|
accuracy 0.79 1199
|
|
macro avg 0.79 0.79 0.79 1199
|
|
weighted avg 0.79 0.79 0.79 1199
|
|
```
|
|
|
|
## K-Neighbors वर्गीकर्ता
|
|
|
|
K-Neighbors "neighbors" परिवारको ML विधि हो, जसलाई सुपरभाइज़्ड र अनसुपरभाइज़्ड दुबै शिक्षाका लागि प्रयोग गर्न सकिन्छ। यस विधिमा, पूर्वनिर्धारित संख्यामा पोइन्टहरू बनाइन्छ र डाटा ती पोइन्टहरू वरिपरि समेटिन्छ जसले डेटा को सामान्यीकृत लेबलहरू भविष्यवाणी गर्न मद्दत गर्दछ।
|
|
|
|
### अभ्यास - K-Neighbors वर्गीकर्ता लागू गर्नुहोस्
|
|
|
|
पहिलो वर्गीकर्ता राम्रो थियो, र डाटासँग राम्रोसँग काम गर्यो, तर शायद हामी अझ राम्रो सटीकता प्राप्त गर्न सक्छौं। K-Neighbors वर्गीकर्ता प्रयास गर्नुहोस्।
|
|
|
|
1. तपाईंको वर्गीकर्ता एरेमा एउटा लाइन थप्नुहोस् (Linear SVC आइटम पछि कमामा थिच्नुहोस्):
|
|
|
|
```python
|
|
'KNN classifier': KNeighborsClassifier(C),
|
|
```
|
|
|
|
परिणाम अलि खराब छ:
|
|
|
|
```output
|
|
Accuracy (train) for KNN classifier: 73.8%
|
|
precision recall f1-score support
|
|
|
|
chinese 0.64 0.67 0.66 242
|
|
indian 0.86 0.78 0.82 234
|
|
japanese 0.66 0.83 0.74 254
|
|
korean 0.94 0.58 0.72 242
|
|
thai 0.71 0.82 0.76 227
|
|
|
|
accuracy 0.74 1199
|
|
macro avg 0.76 0.74 0.74 1199
|
|
weighted avg 0.76 0.74 0.74 1199
|
|
```
|
|
|
|
✅ [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) बारे जान्नुहोस्
|
|
|
|
## Support Vector Classifier
|
|
|
|
Support-Vector वर्गीकर्ताहरू [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) परिवारका हुन् जसले वर्गीकरण र रिग्रेसन कार्यहरूका लागि प्रयोग गरिन्छ। SVM ले "प्रशिक्षण उदाहरणहरूलाई अन्तरिक्षका पोइन्टहरूमा नक्साङ्कन" गर्छ र दुई वर्गबीचको दूरी अधिकतम पार्दछ। पछि आउने डेटा यस अन्तरिक्षमा नक्साङ्कन गरिन्छ ताकि तिनीहरूको वर्ग भविष्यवाणी गर्न सकियोस्।
|
|
|
|
### अभ्यास - Support Vector Classifier लागू गर्नुहोस्
|
|
|
|
Support Vector Classifier सँग अलिक राम्रो सटीकता प्रयास गरौं।
|
|
|
|
1. K-Neighbors आइटम पछि कमामा थिचेर यो लाइन थप्नुहोस्:
|
|
|
|
```python
|
|
'SVC': SVC(),
|
|
```
|
|
|
|
नतिजा निकै राम्रो छ!
|
|
|
|
```output
|
|
Accuracy (train) for SVC: 83.2%
|
|
precision recall f1-score support
|
|
|
|
chinese 0.79 0.74 0.76 242
|
|
indian 0.88 0.90 0.89 234
|
|
japanese 0.87 0.81 0.84 254
|
|
korean 0.91 0.82 0.86 242
|
|
thai 0.74 0.90 0.81 227
|
|
|
|
accuracy 0.83 1199
|
|
macro avg 0.84 0.83 0.83 1199
|
|
weighted avg 0.84 0.83 0.83 1199
|
|
```
|
|
|
|
✅ [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) बारे थाहा पाउनुहोस्
|
|
|
|
## Ensemble Classifiers
|
|
|
|
हामी बाटोको अन्त्यसम्म जाने प्रयास गरौं, यद्यपि पहिलेको परीक्षण राम्रो थियो। अब 'Ensemble Classifiers', विशेष रूपमा Random Forest र AdaBoost प्रयास गरौं:
|
|
|
|
```python
|
|
'RFST': RandomForestClassifier(n_estimators=100),
|
|
'ADA': AdaBoostClassifier(n_estimators=100)
|
|
```
|
|
|
|
यो नतिजा धेरै राम्रो छ, विशेष गरेर Random Forest को लागि:
|
|
|
|
```output
|
|
Accuracy (train) for RFST: 84.5%
|
|
precision recall f1-score support
|
|
|
|
chinese 0.80 0.77 0.78 242
|
|
indian 0.89 0.92 0.90 234
|
|
japanese 0.86 0.84 0.85 254
|
|
korean 0.88 0.83 0.85 242
|
|
thai 0.80 0.87 0.83 227
|
|
|
|
accuracy 0.84 1199
|
|
macro avg 0.85 0.85 0.84 1199
|
|
weighted avg 0.85 0.84 0.84 1199
|
|
|
|
Accuracy (train) for ADA: 72.4%
|
|
precision recall f1-score support
|
|
|
|
chinese 0.64 0.49 0.56 242
|
|
indian 0.91 0.83 0.87 234
|
|
japanese 0.68 0.69 0.69 254
|
|
korean 0.73 0.79 0.76 242
|
|
thai 0.67 0.83 0.74 227
|
|
|
|
accuracy 0.72 1199
|
|
macro avg 0.73 0.73 0.72 1199
|
|
weighted avg 0.73 0.72 0.72 1199
|
|
```
|
|
|
|
✅ [Ensemble Classifiers](https://scikit-learn.org/stable/modules/ensemble.html) बारे जान्नुहोस्
|
|
|
|
यो मेसिन लर्निंग विधिले "धेरै आधारभूत ईस्टिमेटरहरूको पूर्वानुमानहरूलाई मिलाएर" मोडलको गुणस्तर सुधार गर्छ। हाम्रो उदाहरणमा, हामीले Random Trees र AdaBoost प्रयोग गरेका छौं।
|
|
|
|
- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), एक औसत गर्ने विधि, 'निर्णय वृक्षहरू' को 'जंगल' बनाउँछ जसमा अनियमितता मिसाइएको हुन्छ ताकि ओभरफिटिङ नहोस्। n_estimators प्यारामीटरले रूखहरूको संख्या सेट गर्दछ।
|
|
|
|
- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) एउटा वर्गीकर्तालाई डेटासेटमा फिट गर्छ र त्यसको प्रतिलिपिहरू त्यहि डेटासेटमा फिट गर्छ। यसले गलत वर्गीकृत वस्तुहरूको तौलमा ध्यान दिन्छ र अर्को वर्गीकर्ताको फिटलाई सुधार्न मिलाउँछ।
|
|
|
|
---
|
|
|
|
## 🚀चुनौती
|
|
|
|
यी प्रत्येक प्रविधिहरूमा धेरै प्यारामीटरहरू छन् जसलाई तपाईंले अनुसार ट्युन गर्न सक्नुहुन्छ। प्रत्येकको डिफल्ट प्यारामीटरहरू अनुसंधान गर्नुहोस् र ती प्यारामीटरहरू ट्विक गर्दा मोडलको गुणस्तरमा के फरक पर्नेछ भनेर सोच्नुहोस्।
|
|
|
|
## [पोस्ट-व्याख्यान क्विज](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
## समीक्षा र आत्म-अध्ययन
|
|
|
|
यी पाठहरूमा धेरै पर्यायवाची शब्दहरू छन्, त्यसैले एक मिनेट लिएर [यो सूची](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) समीक्षा गर्नुहोस् जसले उपयोगी शब्दावली समेट्छ!
|
|
|
|
## असाइनमेन्ट
|
|
|
|
[प्यारामीटर खेल](assignment.md)
|
|
|
|
---
|
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
|
**अस्वीकरण**:
|
|
यो कागजात AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) प्रयोग गरी अनुवाद गरिएको हो। हामी शुद्धताको प्रयास गर्छौं भने पनि, कृपया जानकार हुनुहोस् कि स्वचालित अनुवादमा त्रुटि वा असत्यता हुन सक्छ। मूल कागजात यसको मूल भाषामा आधिकारिक स्रोत मानिनु पर्छ। महत्वपूर्ण जानकारीको लागि व्यावसायिक मानवीय अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार छैनौं।
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |