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
# क्यूज़ीन क्लासिफायर्स 2
|
|
|
|
इस दूसरे वर्गीकरण पाठ में, आप संख्यात्मक डेटा को वर्गीकृत करने के और तरीकों का अन्वेषण करेंगे। आप यह भी जानेंगे कि एक क्लासिफायर चुनने के क्या परिणाम हो सकते हैं।
|
|
|
|
## [पूर्व-व्याख्यान क्विज़](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
### आवश्यक शर्त
|
|
|
|
हम मानते हैं कि आपने पूर्व के पाठ पूरे कर लिए हैं और आपके `data` फ़ोल्डर में एक साफ़ किया गया डेटासेट है जिसका नाम _cleaned_cuisines.csv_ है, जो इस 4-पाठ फ़ोल्डर के रूट में है।
|
|
|
|
### तैयारी
|
|
|
|
हमने आपके _notebook.ipynb_ फ़ाइल को साफ़ किए गए डेटासेट के साथ लोड कर लिया है और इसे X और y डेटा फ्रेम्स में विभाजित कर दिया है, ताकि मॉडल निर्माण प्रक्रिया के लिए तैयार हो।
|
|
|
|
## एक वर्गीकरण मानचित्र
|
|
|
|
पहले, आपने माइक्रोसॉफ्ट की चीट शीट का उपयोग करके डेटा वर्गीकृत करने के विभिन्न विकल्पों के बारे में सीखा। 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 क्लासिफायर
|
|
|
|
सपोर्ट-वेक्टर क्लस्टरिंग (SVC) ML तकनीकों के सपोर्ट-वेक्टर मशीन परिवार का एक हिस्सा है (नीचे इसके बारे में और जानें)। इस विधि में, आप लेबलों को क्लस्टर करने के लिए एक 'कर्नेल' चुन सकते हैं। 'C' पैरामीटर 'रेग्युलराइजेशन' को संदर्भित करता है जो पैरामीटरों के प्रभाव को नियंत्रित करता है। कर्नेल [कई](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) हो सकते हैं; यहाँ हमने इसे 'linear' पर सेट किया है ताकि हम linear SVC का लाभ उठा सकें। Probability डिफ़ॉल्ट रूप से 'false' होता है; यहाँ हमने इसे '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 "नेबर" परिवार का हिस्सा है जो निगरानी वाले और बिना निगरानी वाले दोनों प्रकार के शिक्षण के लिए इस्तेमाल होता है। इस विधि में, पूर्वनिर्धारित संख्या में पॉइंट बनाए जाते हैं और डेटा इन पॉइंट्स के आसपास इकट्ठा किया जाता है ताकि सामान्यीकृत लेबल्स की भविष्यवाणी की जा सके।
|
|
|
|
### अभ्यास - 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 क्लासिफायर
|
|
|
|
Support-Vector क्लासिफायर्स ML विधियों के [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) परिवार का हिस्सा हैं जो वर्गीकरण और प्रतिगमन कार्यों के लिए उपयोग होते हैं। SVMs "प्रशिक्षण उदाहरणों को स्थान में पॉइंट्स के रूप में मैप करते हैं" ताकि दो श्रेणियों के बीच की दूरी अधिकतम हो सके। बाद के डेटा को इस स्थान में मैप किया जाता है ताकि उनकी श्रेणी की भविष्यवाणी की जा सके।
|
|
|
|
### अभ्यास - Support Vector क्लासिफायर लागू करें
|
|
|
|
थोड़ी बेहतर सटीकता के लिए Support Vector क्लासिफायर आज़माएँ।
|
|
|
|
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 क्लासिफायर्स
|
|
|
|
चलो पिछले परीक्षण के बावजूद, हम रास्ते के अंत तक चलते हैं। कुछ '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) के बारे में जानें
|
|
|
|
यह मशीन लर्निंग विधि "कई बुनियादी अनुमानों (base estimators) की भविष्यवाणियों को संयोजित करती है" ताकि मॉडल की गुणवत्ता सुधारी जा सके। हमारे उदाहरण में, हमने 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 -->
|
|
**अस्वीकरण**:
|
|
इस दस्तावेज़ का अनुवाद एआई अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियां हो सकती हैं। मूल दस्तावेज़ को इसकी मूल भाषा में अधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानवीय अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या व्याख्या के लिए हम जिम्मेदार नहीं हैं।
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |