20 KiB
تعارف برائے کلاسیفکیشن
ان چار اسباق میں، آپ مشین لرننگ کے ایک بنیادی پہلو - کلاسیفکیشن - کو دریافت کریں گے۔ ہم مختلف کلاسیفکیشن الگورتھمز کا استعمال کریں گے ایک ڈیٹاسیٹ کے ساتھ جو ایشیا اور بھارت کے شاندار کھانوں کے بارے میں ہے۔ امید ہے کہ آپ بھوکے ہیں!
ان اسباق میں پین-ایشیائی کھانوں کا جشن منائیں! تصویر: Jen Looper
کلاسیفکیشن سپر وائزڈ لرننگ کی ایک قسم ہے جو ریگریشن تکنیکوں سے کافی مشابہت رکھتی ہے۔ اگر مشین لرننگ کا مقصد ڈیٹاسیٹس کا استعمال کرتے ہوئے چیزوں کے نام یا قدریں پیش گوئی کرنا ہے، تو کلاسیفکیشن عام طور پر دو گروپوں میں تقسیم ہوتی ہے: بائنری کلاسیفکیشن اور ملٹی کلاس کلاسیفکیشن۔
🎥 اوپر دی گئی تصویر پر کلک کریں ویڈیو کے لیے: MIT کے جان گٹٹیگ کلاسیفکیشن کا تعارف کروا رہے ہیں
یاد رکھیں:
- لینیئر ریگریشن نے آپ کو متغیرات کے درمیان تعلقات کی پیش گوئی کرنے اور یہ اندازہ لگانے میں مدد دی کہ ایک نیا ڈیٹا پوائنٹ اس لائن کے ساتھ کہاں گرے گا۔ مثال کے طور پر، آپ پیش گوئی کر سکتے ہیں کہ ستمبر کے مقابلے میں دسمبر میں کدو کی قیمت کیا ہوگی۔
- لاجسٹک ریگریشن نے آپ کو "بائنری کیٹیگریز" دریافت کرنے میں مدد دی: اس قیمت پر، کیا یہ کدو نارنجی ہے یا غیر نارنجی؟
کلاسیفکیشن مختلف الگورتھمز کا استعمال کرتی ہے تاکہ یہ تعین کیا جا سکے کہ کسی ڈیٹا پوائنٹ کا لیبل یا کلاس کیا ہو سکتا ہے۔ آئیے اس کھانے کے ڈیٹاسیٹ کے ساتھ کام کریں تاکہ یہ دیکھ سکیں کہ اجزاء کے ایک گروپ کو دیکھ کر ہم اس کے کھانے کی اصل کا تعین کر سکتے ہیں یا نہیں۔
لیکچر سے پہلے کا کوئز
یہ سبق R میں بھی دستیاب ہے!
تعارف
کلاسیفکیشن مشین لرننگ کے محقق اور ڈیٹا سائنسدان کی بنیادی سرگرمیوں میں سے ایک ہے۔ چاہے یہ کسی بائنری ویلیو کی بنیادی کلاسیفکیشن ہو ("کیا یہ ای میل اسپیم ہے یا نہیں؟") یا کمپیوٹر وژن کا استعمال کرتے ہوئے پیچیدہ امیج کلاسیفکیشن اور سیگمنٹیشن، ڈیٹا کو کلاسز میں ترتیب دینا اور اس سے سوالات پوچھنا ہمیشہ مفید ہوتا ہے۔
اگر اس عمل کو زیادہ سائنسی انداز میں بیان کیا جائے، تو آپ کا کلاسیفکیشن طریقہ ایک پیش گوئی ماڈل بناتا ہے جو ان پٹ متغیرات اور آؤٹ پٹ متغیرات کے درمیان تعلق کو نقشہ بنانے کے قابل بناتا ہے۔
بائنری بمقابلہ ملٹی کلاس مسائل جنہیں کلاسیفکیشن الگورتھمز ہینڈل کرتے ہیں۔ انفوگرافک: Jen Looper
اپنے ڈیٹا کو صاف کرنے، اسے بصری بنانے، اور مشین لرننگ کے کاموں کے لیے تیار کرنے کے عمل کو شروع کرنے سے پہلے، آئیے یہ سیکھیں کہ مشین لرننگ کو ڈیٹا کی کلاسیفکیشن کے لیے کس طرح استعمال کیا جا سکتا ہے۔
شماریات سے ماخوذ، کلاسیکی مشین لرننگ کا استعمال کرتے ہوئے کلاسیفکیشن خصوصیات جیسے smoker
، weight
، اور age
کا استعمال کرتی ہے تاکہ کسی بیماری کے ہونے کے امکان کا تعین کیا جا سکے۔ جیسا کہ آپ نے پہلے ریگریشن مشقوں میں کیا، یہ ایک سپر وائزڈ لرننگ تکنیک ہے، جہاں آپ کا ڈیٹا لیبل شدہ ہوتا ہے اور مشین لرننگ الگورتھمز ان لیبلز کا استعمال کرتے ہوئے ڈیٹاسیٹ کی کلاسز (یا 'خصوصیات') کی پیش گوئی کرتے ہیں اور انہیں کسی گروپ یا نتیجے میں تفویض کرتے ہیں۔
✅ ایک لمحہ نکال کر کھانوں کے بارے میں ایک ڈیٹاسیٹ کا تصور کریں۔ ایک ملٹی کلاس ماڈل کیا جواب دے سکتا ہے؟ ایک بائنری ماڈل کیا جواب دے سکتا ہے؟ اگر آپ یہ تعین کرنا چاہتے ہیں کہ آیا کسی خاص کھانے میں میتھی استعمال ہوتی ہے یا نہیں؟ یا اگر آپ یہ دیکھنا چاہتے ہیں کہ، اگر آپ کو ستارے کی سونف، آرٹچوک، گوبھی، اور ہارسریڈش سے بھرا ہوا ایک گروسری بیگ دیا جائے، تو کیا آپ ایک عام بھارتی ڈش بنا سکتے ہیں؟
🎥 اوپر دی گئی تصویر پر کلک کریں ویڈیو کے لیے۔ شو 'چاپڈ' کا پورا مقصد 'مستری باسکٹ' ہے، جہاں شیفس کو اجزاء کے ایک بے ترتیب انتخاب سے کوئی ڈش بنانی ہوتی ہے۔ یقیناً ایک مشین لرننگ ماڈل مددگار ثابت ہوتا!
ہیلو 'کلاسیفائر'
ہم اس کھانے کے ڈیٹاسیٹ سے جو سوال پوچھنا چاہتے ہیں وہ دراصل ایک ملٹی کلاس سوال ہے، کیونکہ ہمارے پاس کام کرنے کے لیے کئی ممکنہ قومی کھانے ہیں۔ اجزاء کے ایک بیچ کو دیکھتے ہوئے، ان میں سے کون سی کلاسز ڈیٹا کے مطابق ہوں گی؟
Scikit-learn مختلف الگورتھمز پیش کرتا ہے جو آپ کے مسئلے کی نوعیت کے مطابق ڈیٹا کو کلاسیفائی کرنے کے لیے استعمال کیے جا سکتے ہیں۔ اگلے دو اسباق میں، آپ ان الگورتھمز کے بارے میں سیکھیں گے۔
مشق - اپنے ڈیٹا کو صاف کریں اور متوازن بنائیں
پہلا کام، اس پروجیکٹ کو شروع کرنے سے پہلے، یہ ہے کہ آپ اپنے ڈیٹا کو صاف کریں اور متوازن بنائیں تاکہ بہتر نتائج حاصل ہو سکیں۔ اس فولڈر کی جڑ میں موجود notebook.ipynb فائل سے شروع کریں۔
پہلی چیز جو انسٹال کرنی ہے وہ ہے imblearn، جو Scikit-learn کا ایک پیکیج ہے جو آپ کو ڈیٹا کو بہتر طریقے سے متوازن بنانے کی اجازت دے گا (آپ اس کام کے بارے میں مزید سیکھیں گے)۔
-
imblearn
انسٹال کرنے کے لیے،pip install
چلائیں، اس طرح:pip install imblearn
-
وہ پیکیجز درآمد کریں جن کی آپ کو اپنے ڈیٹا کو درآمد کرنے اور بصری بنانے کے لیے ضرورت ہے، اور
SMOTE
کوimblearn
سے درآمد کریں۔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)
اجزاء دریافت کرنا
اب آپ ڈیٹا میں مزید گہرائی میں جا سکتے ہیں اور یہ جان سکتے ہیں کہ ہر کھانے کے لیے عام اجزاء کیا ہیں۔ آپ کو بار بار آنے والے ڈیٹا کو صاف کرنا چاہیے جو کھانوں کے درمیان الجھن پیدا کرتا ہے، تو آئیے اس مسئلے کے بارے میں سیکھیں۔
-
Python میں ایک فنکشن
create_ingredient()
بنائیں تاکہ ایک اجزاء کا ڈیٹافریم بنایا جا سکے۔ یہ فنکشن ایک غیر مددگار کالم کو ہٹا کر اور اجزاء کو ان کی گنتی کے لحاظ سے ترتیب دے کر شروع کرے گا: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 - "Synthetic Minority Over-sampling Technique" - کا استعمال کریں تاکہ اسے متوازن بنایا جا سکے۔
-
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 کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔