|
2 weeks ago | |
---|---|---|
.. | ||
solution | 3 weeks ago | |
README.md | 2 weeks ago | |
assignment.md | 3 weeks ago | |
notebook.ipynb | 3 weeks ago |
README.md
वर्गीकरण का परिचय
इन चार पाठों में, आप क्लासिक मशीन लर्निंग के एक महत्वपूर्ण पहलू - वर्गीकरण - का अन्वेषण करेंगे। हम एशिया और भारत के सभी अद्भुत व्यंजनों के बारे में एक डेटासेट का उपयोग करके विभिन्न वर्गीकरण एल्गोरिदम का उपयोग करना सीखेंगे। उम्मीद है कि आप भूखे हैं!
इन पाठों में पैन-एशियाई व्यंजनों का जश्न मनाएं! छवि Jen Looper द्वारा
वर्गीकरण सुपरवाइज्ड लर्निंग का एक रूप है, जो रिग्रेशन तकनीकों के साथ बहुत समानता रखता है। यदि मशीन लर्निंग का उद्देश्य डेटासेट का उपयोग करके चीजों के मान या नाम की भविष्यवाणी करना है, तो वर्गीकरण आम तौर पर दो समूहों में विभाजित होता है: बाइनरी वर्गीकरण और मल्टीक्लास वर्गीकरण।
🎥 ऊपर दी गई छवि पर क्लिक करें: MIT के John Guttag वर्गीकरण का परिचय देते हैं
याद रखें:
- लिनियर रिग्रेशन ने आपको वेरिएबल्स के बीच संबंधों की भविष्यवाणी करने और यह अनुमान लगाने में मदद की कि एक नया डेटा पॉइंट उस रेखा के संबंध में कहां गिरेगा। उदाहरण के लिए, आप भविष्यवाणी कर सकते हैं कि सितंबर बनाम दिसंबर में कद्दू की कीमत क्या होगी।
- लॉजिस्टिक रिग्रेशन ने आपको "बाइनरी श्रेणियों" की खोज करने में मदद की: इस मूल्य बिंदु पर, क्या यह कद्दू नारंगी है या नारंगी नहीं है?
वर्गीकरण विभिन्न एल्गोरिदम का उपयोग करके यह निर्धारित करता है कि किसी डेटा पॉइंट का लेबल या वर्ग क्या हो सकता है। आइए इस व्यंजन डेटा के साथ काम करें और देखें कि क्या हम सामग्री के एक समूह को देखकर उसके मूल व्यंजन का निर्धारण कर सकते हैं।
पाठ-पूर्व क्विज़
यह पाठ R में भी उपलब्ध है!
परिचय
वर्गीकरण मशीन लर्निंग शोधकर्ता और डेटा वैज्ञानिक की मूलभूत गतिविधियों में से एक है। बाइनरी मान ("क्या यह ईमेल स्पैम है या नहीं?") के सरल वर्गीकरण से लेकर, कंप्यूटर विज़न का उपयोग करके जटिल छवि वर्गीकरण और खंडन तक, डेटा को वर्गों में छांटना और उससे प्रश्न पूछना हमेशा उपयोगी होता है।
वैज्ञानिक दृष्टिकोण से कहें तो, आपका वर्गीकरण तरीका एक प्रेडिक्टिव मॉडल बनाता है जो इनपुट वेरिएबल्स और आउटपुट वेरिएबल्स के बीच संबंध को मैप करने में सक्षम बनाता है।
बाइनरी बनाम मल्टीक्लास समस्याएं जिन्हें वर्गीकरण एल्गोरिदम संभाल सकते हैं। इन्फोग्राफिक Jen Looper द्वारा
हमारे डेटा को साफ करने, उसका विज़ुअलाइज़ेशन करने और हमारे एमएल कार्यों के लिए तैयार करने की प्रक्रिया शुरू करने से पहले, आइए जानें कि मशीन लर्निंग का उपयोग करके डेटा को वर्गीकृत करने के विभिन्न तरीके क्या हैं।
सांख्यिकी से व्युत्पन्न, क्लासिक मशीन लर्निंग का उपयोग करके वर्गीकरण विशेषताओं का उपयोग करता है, जैसे smoker
, weight
, और age
, यह निर्धारित करने के लिए कि किसी बीमारी के विकसित होने की संभावना कितनी है। एक सुपरवाइज्ड लर्निंग तकनीक के रूप में, जो आपने पहले रिग्रेशन अभ्यासों में की थी, आपका डेटा लेबल किया गया होता है और एमएल एल्गोरिदम उन लेबल्स का उपयोग डेटा सेट की कक्षाओं (या 'विशेषताओं') को वर्गीकृत और भविष्यवाणी करने और उन्हें एक समूह या परिणाम में असाइन करने के लिए करते हैं।
✅ एक पल लें और व्यंजनों के बारे में एक डेटासेट की कल्पना करें। एक मल्टीक्लास मॉडल क्या उत्तर दे सकता है? एक बाइनरी मॉडल क्या उत्तर दे सकता है? यदि आप यह निर्धारित करना चाहते हैं कि कोई विशेष व्यंजन मेथी का उपयोग करता है या नहीं, तो क्या होगा? यदि आपके पास स्टार ऐनीज़, आर्टिचोक, फूलगोभी, और हॉर्सरैडिश से भरा एक ग्रॉसरी बैग है, तो क्या आप एक विशिष्ट भारतीय व्यंजन बना सकते हैं?
🎥 ऊपर दी गई छवि पर क्लिक करें। शो 'Chopped' का पूरा आधार 'मिस्ट्री बास्केट' है, जहां शेफ को यादृच्छिक सामग्री से कुछ व्यंजन बनाना होता है। निश्चित रूप से एक एमएल मॉडल ने मदद की होगी!
हैलो 'क्लासिफायर'
हम इस व्यंजन डेटासेट से जो प्रश्न पूछना चाहते हैं, वह वास्तव में एक मल्टीक्लास प्रश्न है, क्योंकि हमारे पास काम करने के लिए कई संभावित राष्ट्रीय व्यंजन हैं। सामग्री के एक बैच को देखते हुए, इन कई वर्गों में से डेटा किस वर्ग में फिट होगा?
Scikit-learn विभिन्न प्रकार की समस्याओं को हल करने के लिए डेटा को वर्गीकृत करने के लिए कई अलग-अलग एल्गोरिदम प्रदान करता है। अगले दो पाठों में, आप इन एल्गोरिदम के बारे में जानेंगे।
अभ्यास - अपने डेटा को साफ और संतुलित करें
इस प्रोजेक्ट को शुरू करने से पहले पहला कार्य यह है कि आप अपने डेटा को साफ और संतुलित करें ताकि बेहतर परिणाम प्राप्त हो सकें। इस फ़ोल्डर की रूट में notebook.ipynb फ़ाइल से शुरुआत करें।
पहली चीज़ जो आपको इंस्टॉल करनी है वह है imblearn। यह एक Scikit-learn पैकेज है जो आपको डेटा को बेहतर संतुलित करने की अनुमति देगा (आप इस कार्य के बारे में थोड़ी देर में और जानेंगे)।
-
imblearn
को इंस्टॉल करने के लिए,pip install
चलाएं, इस प्रकार:pip install imblearn
-
अपने डेटा को आयात करने और विज़ुअलाइज़ करने के लिए आवश्यक पैकेज आयात करें, साथ ही
imblearn
सेSMOTE
भी आयात करें।import pandas as pd import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np from imblearn.over_sampling import SMOTE
अब आप डेटा को आयात करने के लिए तैयार हैं।
-
अगला कार्य डेटा को आयात करना होगा:
df = pd.read_csv('../data/cuisines.csv')
read_csv()
का उपयोग करके, cusines.csv फ़ाइल की सामग्री को पढ़ा जाएगा और इसे वेरिएबलdf
में रखा जाएगा। -
डेटा का आकार जांचें:
df.head()
पहले पांच पंक्तियाँ इस प्रकार दिखती हैं:
| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | | 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
-
इस डेटा के बारे में जानकारी प्राप्त करें
info()
को कॉल करके:df.info()
आपका आउटपुट इस प्रकार दिखता है:
<class 'pandas.core.frame.DataFrame'> RangeIndex: 2448 entries, 0 to 2447 Columns: 385 entries, Unnamed: 0 to zucchini dtypes: int64(384), object(1) memory usage: 7.2+ MB
अभ्यास - व्यंजनों के बारे में जानना
अब काम अधिक दिलचस्प होने लगता है। आइए व्यंजन के अनुसार डेटा के वितरण की खोज करें।
-
डेटा को बार के रूप में प्लॉट करें
barh()
को कॉल करके:df.cuisine.value_counts().plot.barh()
व्यंजनों की संख्या सीमित है, लेकिन डेटा का वितरण असमान है। आप इसे ठीक कर सकते हैं! ऐसा करने से पहले, थोड़ा और अन्वेषण करें।
-
पता करें कि प्रत्येक व्यंजन के लिए कितना डेटा उपलब्ध है और इसे प्रिंट करें:
thai_df = df[(df.cuisine == "thai")] japanese_df = df[(df.cuisine == "japanese")] chinese_df = df[(df.cuisine == "chinese")] indian_df = df[(df.cuisine == "indian")] korean_df = df[(df.cuisine == "korean")] print(f'thai df: {thai_df.shape}') print(f'japanese df: {japanese_df.shape}') print(f'chinese df: {chinese_df.shape}') print(f'indian df: {indian_df.shape}') print(f'korean df: {korean_df.shape}')
आउटपुट इस प्रकार दिखता है:
thai df: (289, 385) japanese df: (320, 385) chinese df: (442, 385) indian df: (598, 385) korean df: (799, 385)
सामग्री की खोज
अब आप डेटा में गहराई से जा सकते हैं और जान सकते हैं कि प्रत्येक व्यंजन के लिए विशिष्ट सामग्री क्या हैं। आपको बार-बार आने वाले डेटा को साफ करना चाहिए जो व्यंजनों के बीच भ्रम पैदा करता है, तो आइए इस समस्या के बारे में जानें।
-
एक फ़ंक्शन
create_ingredient()
Python में बनाएं, जो एक सामग्री डेटा फ्रेम बनाए। यह फ़ंक्शन एक अनुपयोगी कॉलम को हटाकर और सामग्री को उनकी गिनती के अनुसार छांटकर शुरू करेगा:def create_ingredient_df(df): ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] ingredient_df = ingredient_df.sort_values(by='value', ascending=False, inplace=False) return ingredient_df
अब आप इस फ़ंक्शन का उपयोग करके प्रत्येक व्यंजन के लिए शीर्ष दस सबसे लोकप्रिय सामग्री का अंदाजा लगा सकते हैं।
-
create_ingredient()
को कॉल करें और इसेbarh()
को कॉल करके प्लॉट करें:thai_ingredient_df = create_ingredient_df(thai_df) thai_ingredient_df.head(10).plot.barh()
-
जापानी डेटा के लिए भी ऐसा ही करें:
japanese_ingredient_df = create_ingredient_df(japanese_df) japanese_ingredient_df.head(10).plot.barh()
-
अब चीनी सामग्री के लिए:
chinese_ingredient_df = create_ingredient_df(chinese_df) chinese_ingredient_df.head(10).plot.barh()
-
भारतीय सामग्री को प्लॉट करें:
indian_ingredient_df = create_ingredient_df(indian_df) indian_ingredient_df.head(10).plot.barh()
-
अंत में, कोरियाई सामग्री को प्लॉट करें:
korean_ingredient_df = create_ingredient_df(korean_df) korean_ingredient_df.head(10).plot.barh()
-
अब, सबसे सामान्य सामग्री को हटा दें जो विभिन्न व्यंजनों के बीच भ्रम पैदा करती हैं,
drop()
को कॉल करके:हर कोई चावल, लहसुन और अदरक पसंद करता है!
feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) labels_df = df.cuisine #.unique() feature_df.head()
डेटासेट को संतुलित करें
अब जब आपने डेटा को साफ कर लिया है, तो SMOTE - "सिंथेटिक माइनॉरिटी ओवर-सैंपलिंग टेक्नीक" - का उपयोग करके इसे संतुलित करें।
-
fit_resample()
को कॉल करें, यह रणनीति इंटरपोलेशन द्वारा नए सैंपल उत्पन्न करती है।oversample = SMOTE() transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)
अपने डेटा को संतुलित करके, आपके पास इसे वर्गीकृत करते समय बेहतर परिणाम होंगे। एक बाइनरी वर्गीकरण के बारे में सोचें। यदि आपके अधिकांश डेटा एक वर्ग के हैं, तो एक एमएल मॉडल उस वर्ग की अधिक बार भविष्यवाणी करेगा, केवल इसलिए कि उसके लिए अधिक डेटा है। डेटा को संतुलित करना किसी भी असंतुलित डेटा को लेता है और इस असंतुलन को दूर करने में मदद करता है।
-
अब आप सामग्री के प्रति लेबल की संख्या की जांच कर सकते हैं:
print(f'new label count: {transformed_label_df.value_counts()}') print(f'old label count: {df.cuisine.value_counts()}')
आपका आउटपुट इस प्रकार दिखता है:
new label count: korean 799 chinese 799 indian 799 japanese 799 thai 799 Name: cuisine, dtype: int64 old label count: korean 799 indian 598 chinese 442 japanese 320 thai 289 Name: cuisine, dtype: int64
डेटा साफ, संतुलित और बहुत स्वादिष्ट है!
-
अंतिम चरण यह है कि आपके संतुलित डेटा, जिसमें लेबल और विशेषताएं शामिल हैं, को एक नए डेटा फ्रेम में सहेजें जिसे एक फ़ाइल में निर्यात किया जा सके:
transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')
-
आप
transformed_df.head()
औरtransformed_df.info()
का उपयोग करके डेटा पर एक और नज़र डाल सकते हैं। भविष्य के पाठों में उपयोग के लिए इस डेटा की एक प्रति सहेजें:transformed_df.head() transformed_df.info() transformed_df.to_csv("../data/cleaned_cuisines.csv")
यह ताजा CSV अब रूट डेटा फ़ोल्डर में पाया जा सकता है।
🚀चुनौती
इस पाठ्यक्रम में कई दिलचस्प डेटासेट शामिल हैं। data
फ़ोल्डर्स को खंगालें और देखें कि क्या उनमें से कोई ऐसा डेटासेट है जो बाइनरी या मल्टी-क्लास वर्गीकरण के लिए उपयुक्त हो? आप इस डेटासेट से कौन से प्रश्न पूछेंगे?
पाठ-उत्तर क्विज़
समीक्षा और स्व-अध्ययन
SMOTE के API का अन्वेषण करें। यह किन उपयोग मामलों के लिए सबसे अच्छा उपयोग किया जाता है? यह किन समस्याओं को हल करता है?
असाइनमेंट
वर्गीकरण विधियों का अन्वेषण करें
अस्वीकरण:
यह दस्तावेज़ AI अनुवाद सेवा Co-op Translator का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।