30 KiB
لاجسٹک ریگریشن کے ذریعے کیٹیگریز کی پیش گوئی
لیکچر سے پہلے کا کوئز
یہ سبق R میں دستیاب ہے!
تعارف
ریگریشن پر اس آخری سبق میں، جو کہ مشین لرننگ کی بنیادی کلاسک تکنیکوں میں سے ایک ہے، ہم لاجسٹک ریگریشن پر نظر ڈالیں گے۔ آپ اس تکنیک کو بائنری کیٹیگریز کی پیش گوئی کے لیے پیٹرنز دریافت کرنے کے لیے استعمال کریں گے۔ کیا یہ کینڈی چاکلیٹ ہے یا نہیں؟ کیا یہ بیماری متعدی ہے یا نہیں؟ کیا یہ کسٹمر اس پروڈکٹ کو منتخب کرے گا یا نہیں؟
اس سبق میں آپ سیکھیں گے:
- ڈیٹا ویژولائزیشن کے لیے ایک نئی لائبریری
- لاجسٹک ریگریشن کے طریقے
✅ اس قسم کی ریگریشن کے ساتھ کام کرنے کی سمجھ کو گہرا کریں اس لرن ماڈیول میں۔
پیشگی شرط
کدو کے ڈیٹا کے ساتھ کام کرنے کے بعد، ہم اس سے کافی واقف ہو چکے ہیں کہ ہمیں ایک بائنری کیٹیگری مل سکتی ہے جس کے ساتھ ہم کام کر سکتے ہیں: Color
۔
آئیے ایک لاجسٹک ریگریشن ماڈل بنائیں تاکہ کچھ ویریبلز کے ذریعے پیش گوئی کی جا سکے کہ کسی دیے گئے کدو کا رنگ کیا ہو سکتا ہے (نارنجی 🎃 یا سفید 👻)۔
ہم ریگریشن کے سبق میں بائنری کلاسیفیکیشن کے بارے میں کیوں بات کر رہے ہیں؟ صرف لسانی سہولت کے لیے، کیونکہ لاجسٹک ریگریشن واقعی ایک کلاسیفیکیشن طریقہ ہے، اگرچہ یہ لینیئر پر مبنی ہے۔ ڈیٹا کو کلاسیفائی کرنے کے دیگر طریقے اگلے سبق گروپ میں سیکھیں۔
سوال کی وضاحت کریں
ہمارے مقصد کے لیے، ہم اسے بائنری کے طور پر ظاہر کریں گے: 'سفید' یا 'سفید نہیں'۔ ہمارے ڈیٹا سیٹ میں ایک 'پٹی دار' کیٹیگری بھی ہے لیکن اس کے چند ہی مثالیں ہیں، اس لیے ہم اسے استعمال نہیں کریں گے۔ یہ ویسے بھی ڈیٹا سیٹ سے null ویلیوز کو ہٹانے کے بعد غائب ہو جاتی ہے۔
🎃 دلچسپ حقیقت، ہم کبھی کبھی سفید کدو کو 'بھوت' کدو کہتے ہیں۔ انہیں تراشنا بہت آسان نہیں ہوتا، اس لیے وہ نارنجی کدو کی طرح مقبول نہیں ہیں لیکن وہ دیکھنے میں بہت اچھے لگتے ہیں! تو ہم اپنے سوال کو اس طرح بھی دوبارہ ترتیب دے سکتے ہیں: 'بھوت' یا 'بھوت نہیں'۔ 👻
لاجسٹک ریگریشن کے بارے میں
لاجسٹک ریگریشن لینیئر ریگریشن سے مختلف ہے، جس کے بارے میں آپ نے پہلے سیکھا، چند اہم طریقوں سے۔
🎥 اوپر دی گئی تصویر پر کلک کریں لاجسٹک ریگریشن کا مختصر ویڈیو جائزہ دیکھنے کے لیے۔
بائنری کلاسیفیکیشن
لاجسٹک ریگریشن وہی خصوصیات پیش نہیں کرتا جو لینیئر ریگریشن پیش کرتا ہے۔ پہلا بائنری کیٹیگری ("سفید یا سفید نہیں") کے بارے میں پیش گوئی پیش کرتا ہے جبکہ دوسرا مسلسل ویلیوز کی پیش گوئی کرنے کے قابل ہے، مثال کے طور پر کدو کی اصل اور فصل کے وقت کو دیکھتے ہوئے، اس کی قیمت کتنی بڑھے گی۔
انفوگرافک از دسانی مڈیپالی
دیگر کلاسیفیکیشنز
لاجسٹک ریگریشن کی دیگر اقسام بھی ہیں، جن میں ملٹی نومیئل اور آرڈینل شامل ہیں:
- ملٹی نومیئل، جس میں ایک سے زیادہ کیٹیگریز شامل ہوتی ہیں - "نارنجی، سفید، اور پٹی دار"۔
- آرڈینل، جس میں ترتیب شدہ کیٹیگریز شامل ہوتی ہیں، مفید اگر ہم اپنے نتائج کو منطقی طور پر ترتیب دینا چاہتے ہیں، جیسے ہمارے کدو جو ایک محدود تعداد کے سائز (mini, sm, med, lg, xl, xxl) کے ذریعے ترتیب دیے گئے ہیں۔
ویریبلز کو ہم آہنگ ہونے کی ضرورت نہیں
یاد ہے کہ لینیئر ریگریشن زیادہ ہم آہنگ ویریبلز کے ساتھ بہتر کام کرتا تھا؟ لاجسٹک ریگریشن اس کے برعکس ہے - ویریبلز کو ہم آہنگ ہونے کی ضرورت نہیں۔ یہ اس ڈیٹا کے لیے کام کرتا ہے جس میں کچھ کمزور ہم آہنگیاں ہیں۔
آپ کو بہت زیادہ صاف ڈیٹا کی ضرورت ہے
لاجسٹک ریگریشن زیادہ درست نتائج دے گا اگر آپ زیادہ ڈیٹا استعمال کریں؛ ہمارا چھوٹا ڈیٹا سیٹ اس کام کے لیے موزوں نہیں ہے، لہذا اسے ذہن میں رکھیں۔
🎥 اوپر دی گئی تصویر پر کلک کریں لینیئر ریگریشن کے لیے ڈیٹا کی تیاری کا مختصر ویڈیو جائزہ دیکھنے کے لیے۔
✅ ان ڈیٹا کی اقسام کے بارے میں سوچیں جو لاجسٹک ریگریشن کے لیے موزوں ہوں۔
مشق - ڈیٹا کو صاف کریں
سب سے پہلے، ڈیٹا کو تھوڑا صاف کریں، null ویلیوز کو ہٹائیں اور صرف کچھ کالمز منتخب کریں:
-
درج ذیل کوڈ شامل کریں:
columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] pumpkins = full_pumpkins.loc[:, columns_to_select] pumpkins.dropna(inplace=True)
آپ ہمیشہ اپنے نئے ڈیٹا فریم پر ایک نظر ڈال سکتے ہیں:
pumpkins.info
ویژولائزیشن - کیٹیگریکل پلاٹ
اب تک آپ نے اسٹارٹر نوٹ بک کو کدو کے ڈیٹا کے ساتھ دوبارہ لوڈ کر لیا ہے اور اسے صاف کر لیا ہے تاکہ ایک ڈیٹا سیٹ محفوظ کیا جا سکے جس میں چند ویریبلز شامل ہوں، جن میں Color
بھی شامل ہے۔ آئیے نوٹ بک میں ڈیٹا فریم کو ایک مختلف لائبریری کا استعمال کرتے ہوئے ویژولائز کریں: Seaborn، جو پہلے استعمال کیے گئے Matplotlib پر مبنی ہے۔
Seaborn آپ کے ڈیٹا کو ویژولائز کرنے کے کچھ دلچسپ طریقے پیش کرتا ہے۔ مثال کے طور پر، آپ Variety
اور Color
کے لیے ڈیٹا کی تقسیم کا موازنہ کیٹیگریکل پلاٹ میں کر سکتے ہیں۔
-
catplot
فنکشن کا استعمال کرتے ہوئے ایسا پلاٹ بنائیں، ہمارے کدو کے ڈیٹاpumpkins
کا استعمال کرتے ہوئے، اور ہر کدو کی کیٹیگری (نارنجی یا سفید) کے لیے رنگ کی میپنگ کی وضاحت کریں:import seaborn as sns palette = { 'ORANGE': 'orange', 'WHITE': 'wheat', } sns.catplot( data=pumpkins, y="Variety", hue="Color", kind="count", palette=palette, )
ڈیٹا کا مشاہدہ کرتے ہوئے، آپ دیکھ سکتے ہیں کہ Color ڈیٹا Variety سے کیسے تعلق رکھتا ہے۔
✅ اس کیٹیگریکل پلاٹ کو دیکھتے ہوئے، آپ کون سے دلچسپ تجزیے تصور کر سکتے ہیں؟
ڈیٹا کی پیشگی پروسیسنگ: فیچر اور لیبل انکوڈنگ
ہمارے کدو کے ڈیٹا سیٹ میں تمام کالمز کے لیے اسٹرنگ ویلیوز ہیں۔ کیٹیگریکل ڈیٹا کے ساتھ کام کرنا انسانوں کے لیے آسان ہے لیکن مشینوں کے لیے نہیں۔ مشین لرننگ الگورتھمز نمبرز کے ساتھ بہتر کام کرتے ہیں۔ یہی وجہ ہے کہ انکوڈنگ ڈیٹا کی پیشگی پروسیسنگ کے مرحلے میں ایک بہت اہم قدم ہے، کیونکہ یہ ہمیں کیٹیگریکل ڈیٹا کو عددی ڈیٹا میں تبدیل کرنے کے قابل بناتا ہے، بغیر کسی معلومات کو کھوئے۔ اچھی انکوڈنگ ایک اچھا ماڈل بنانے میں مدد دیتی ہے۔
فیچر انکوڈنگ کے لیے دو اہم قسم کے انکوڈرز ہیں:
-
آرڈینل انکوڈر: یہ آرڈینل ویریبلز کے لیے موزوں ہے، جو کیٹیگریکل ویریبلز ہیں جہاں ان کے ڈیٹا کا منطقی ترتیب ہوتا ہے، جیسے ہمارے ڈیٹا سیٹ میں
Item Size
کالم۔ یہ ایک میپنگ بناتا ہے تاکہ ہر کیٹیگری کو ایک نمبر کے ذریعے ظاہر کیا جا سکے، جو کالم میں کیٹیگری کی ترتیب ہے۔from sklearn.preprocessing import OrdinalEncoder item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']] ordinal_features = ['Item Size'] ordinal_encoder = OrdinalEncoder(categories=item_size_categories)
-
کیٹیگریکل انکوڈر: یہ نومینل ویریبلز کے لیے موزوں ہے، جو کیٹیگریکل ویریبلز ہیں جہاں ان کے ڈیٹا کا منطقی ترتیب نہیں ہوتا، جیسے ہمارے ڈیٹا سیٹ میں
Item Size
کے علاوہ تمام فیچرز۔ یہ ایک ون-ہاٹ انکوڈنگ ہے، جس کا مطلب ہے کہ ہر کیٹیگری کو ایک بائنری کالم کے ذریعے ظاہر کیا جاتا ہے: انکوڈڈ ویریبل 1 کے برابر ہے اگر کدو اس Variety سے تعلق رکھتا ہے اور 0 ورنہ۔from sklearn.preprocessing import OneHotEncoder categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] categorical_encoder = OneHotEncoder(sparse_output=False)
پھر، ColumnTransformer
کو متعدد انکوڈرز کو ایک ہی مرحلے میں یکجا کرنے اور انہیں مناسب کالمز پر لاگو کرنے کے لیے استعمال کیا جاتا ہے۔
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer(transformers=[
('ord', ordinal_encoder, ordinal_features),
('cat', categorical_encoder, categorical_features)
])
ct.set_output(transform='pandas')
encoded_features = ct.fit_transform(pumpkins)
دوسری طرف، لیبل کو انکوڈ کرنے کے لیے، ہم scikit-learn LabelEncoder
کلاس کا استعمال کرتے ہیں، جو لیبلز کو نارملائز کرنے میں مدد کرنے کے لیے ایک یوٹیلیٹی کلاس ہے تاکہ وہ صرف 0 اور n_classes-1 (یہاں، 0 اور 1) کے درمیان ویلیوز پر مشتمل ہوں۔
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
encoded_label = label_encoder.fit_transform(pumpkins['Color'])
ایک بار جب ہم فیچرز اور لیبل کو انکوڈ کر لیتے ہیں، تو ہم انہیں ایک نئے ڈیٹا فریم encoded_pumpkins
میں ضم کر سکتے ہیں۔
encoded_pumpkins = encoded_features.assign(Color=encoded_label)
✅ Item Size
کالم کے لیے آرڈینل انکوڈر استعمال کرنے کے فوائد کیا ہیں؟
ویریبلز کے درمیان تعلقات کا تجزیہ کریں
اب جب کہ ہم نے اپنے ڈیٹا کو پیشگی پروسیس کر لیا ہے، ہم فیچرز اور لیبل کے درمیان تعلقات کا تجزیہ کر سکتے ہیں تاکہ یہ سمجھ سکیں کہ ماڈل لیبل کو فیچرز کے ذریعے کتنی اچھی طرح پیش گوئی کر سکے گا۔
اس قسم کے تجزیے کو انجام دینے کا بہترین طریقہ ڈیٹا کو پلاٹ کرنا ہے۔ ہم دوبارہ Seaborn catplot
فنکشن کا استعمال کریں گے، Item Size
, Variety
اور Color
کے تعلقات کو کیٹیگریکل پلاٹ میں ویژولائز کرنے کے لیے۔ ڈیٹا کو بہتر طور پر پلاٹ کرنے کے لیے ہم انکوڈڈ Item Size
کالم اور ان انکوڈڈ Variety
کالم کا استعمال کریں گے۔
palette = {
'ORANGE': 'orange',
'WHITE': 'wheat',
}
pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size']
g = sns.catplot(
data=pumpkins,
x="Item Size", y="Color", row='Variety',
kind="box", orient="h",
sharex=False, margin_titles=True,
height=1.8, aspect=4, palette=palette,
)
g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6))
g.set_titles(row_template="{row_name}")
ایک سوارم پلاٹ استعمال کریں
چونکہ Color ایک بائنری کیٹیگری ہے (سفید یا نہیں)، اسے ویژولائزیشن کے لیے 'ایک خصوصی طریقہ' کی ضرورت ہے۔ اس کیٹیگری کے تعلق کو دیگر ویریبلز کے ساتھ ویژولائز کرنے کے دیگر طریقے موجود ہیں۔
آپ Seaborn پلاٹس کے ذریعے ویریبلز کو ساتھ ساتھ ویژولائز کر سکتے ہیں۔
-
ویلیوز کی تقسیم کو ظاہر کرنے کے لیے ایک 'سوارم' پلاٹ آزمائیں:
palette = { 0: 'orange', 1: 'wheat' } sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette)
دھیان دیں: اوپر دیا گیا کوڈ ایک وارننگ پیدا کر سکتا ہے، کیونکہ Seaborn اتنے زیادہ ڈیٹا پوائنٹس کو سوارم پلاٹ میں ظاہر کرنے میں ناکام ہو جاتا ہے۔ ایک ممکنہ حل مارکر کے سائز کو کم کرنا ہے، 'size' پیرامیٹر کا استعمال کرتے ہوئے۔ تاہم، اس بات سے آگاہ رہیں کہ یہ پلاٹ کی پڑھنے کی صلاحیت کو متاثر کرتا ہے۔
🧮 مجھے ریاضی دکھائیں
لاجسٹک ریگریشن 'زیادہ سے زیادہ امکان' کے تصور پر انحصار کرتا ہے، sigmoid functions کا استعمال کرتے ہوئے۔ ایک 'Sigmoid Function' پلاٹ پر 'S' شکل کی طرح نظر آتی ہے۔ یہ ایک ویلیو لیتا ہے اور اسے 0 اور 1 کے درمیان کہیں میپ کرتا ہے۔ اس کا منحنی خط بھی 'لاجسٹک منحنی خط' کہلاتا ہے۔ اس کا فارمولا اس طرح نظر آتا ہے:
جہاں sigmoid کا وسط x کے 0 پوائنٹ پر پایا جاتا ہے، L منحنی خط کی زیادہ سے زیادہ ویلیو ہے، اور k منحنی خط کی ڈھلوان ہے۔ اگر فنکشن کا نتیجہ 0.5 سے زیادہ ہے، تو متعلقہ لیبل کو بائنری انتخاب کے '1' کلاس کے طور پر دیا جائے گا۔ اگر نہیں، تو اسے '0' کے طور پر کلاسیفائی کیا جائے گا۔
اپنا ماڈل بنائیں
Scikit-learn میں ان بائنری کلاسیفیکیشنز کو تلاش کرنے کے لیے ماڈل بنانا حیرت انگیز طور پر سیدھا ہے۔
🎥 اوپر دی گئی تصویر پر کلک کریں لینیئر ریگریشن ماڈل بنانے کا مختصر ویڈیو جائزہ دیکھنے کے لیے۔
-
ان ویریبلز کو منتخب کریں جنہیں آپ اپنے کلاسیفیکیشن ماڈل میں استعمال کرنا چاہتے ہیں اور
train_test_split()
کو کال کرتے ہوئے ٹریننگ اور ٹیسٹ سیٹس کو تقسیم کریں:from sklearn.model_selection import train_test_split X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])] y = encoded_pumpkins['Color'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
-
اب آپ اپنے ماڈل کو ٹرین کر سکتے ہیں، اپنے ٹریننگ ڈیٹا کے ساتھ
fit()
کو کال کرتے ہوئے، اور اس کا نتیجہ پرنٹ کر سکتے ہیں:from sklearn.metrics import f1_score, classification_report from sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(X_train, y_train) predictions = model.predict(X_test) print(classification_report(y_test, predictions)) print('Predicted labels: ', predictions) print('F1-score: ', f1_score(y_test, predictions))
اپنے ماڈل کے اسکور بورڈ پر ایک نظر ڈالیں۔ یہ برا نہیں ہے، اس بات کو مدنظر رکھتے ہوئے کہ آپ کے پاس صرف تقریباً 1000 قطاریں ڈیٹا کی ہیں:
precision recall f1-score support 0 0.94 0.98 0.96 166 1 0.85 0.67 0.75 33 accuracy 0.92 199 macro avg 0.89 0.82 0.85 199 weighted avg 0.92 0.92 0.92 199 Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 1] F1-score: 0.7457627118644068
بہتر سمجھ بوجھ کے لیے کنفیوزن میٹرکس
جبکہ آپ اوپر دیے گئے آئٹمز کو پرنٹ کر کے اصطلاحات کے ذریعے اسکور بورڈ رپورٹ حاصل کر سکتے ہیں، آپ اپنے ماڈل کو زیادہ آسانی سے سمجھ سکتے ہیں اگر آپ کنفیوزن میٹرکس کا استعمال کریں تاکہ یہ سمجھ سکیں کہ ماڈل کی کارکردگی کیسی ہے۔
🎓 ایک 'کنفیوزن میٹرکس' (یا 'ایرر میٹرکس') ایک ٹیبل ہے جو آپ کے ماڈل کے حقیقی بمقابلہ غلط مثبت اور منفی کو ظاہر کرتی ہے، اس طرح پیش گوئیوں کی درستگی کا اندازہ لگاتی ہے۔
-
کنفیوزن میٹرکس استعمال کرنے کے لیے،
confusion_matrix()
کو کال کریں:from sklearn.metrics import confusion_matrix confusion_matrix(y_test, predictions)
اپنے ماڈل کی کنفیوزن میٹرکس پر ایک نظر ڈالیں:
array([[162, 4], [ 11, 22]])
Scikit-learn میں، کنفیوزن میٹرکس کی قطاریں (axis 0) اصل لیبلز ہیں اور کالمز (axis 1) پیش گوئی شدہ لیبلز ہیں۔
0 | 1 | |
---|---|---|
0 | TN | FP |
1 | FN | TP |
یہاں کیا ہو رہا ہے؟ فرض کریں ہمارا ماڈل کدو کو دو بائنری کیٹیگریز کے درمیان کلاسیفائی کرنے کے لیے کہا جاتا ہے، کیٹیگری 'سفید' اور کیٹیگری 'سفید نہیں'۔
- اگر آپ کا ماڈل کدو کو سفید نہیں پیش گوئی کرتا ہے اور یہ حقیقت میں کیٹیگری 'سفید نہیں' سے تعلق رکھتا ہے تو ہم اسے true negative کہتے ہیں، جو اوپر بائیں نمبر سے ظاہر ہوتا ہے۔
- اگر آپ کا ماڈل کدو کنفیوزن میٹرکس کا پریسیشن اور ریکال سے کیا تعلق ہے؟ یاد رکھیں، اوپر دی گئی کلاسفیکیشن رپورٹ نے پریسیشن (0.85) اور ریکال (0.67) دکھایا تھا۔
پریسیشن = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461
ریکال = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666
✅ سوال: کنفیوزن میٹرکس کے مطابق، ماڈل کی کارکردگی کیسی رہی؟ جواب: بری نہیں؛ کافی تعداد میں ٹرو نیگیٹیوز ہیں لیکن کچھ فالس نیگیٹیوز بھی موجود ہیں۔
آئیے کنفیوزن میٹرکس کے TP/TN اور FP/FN کی میپنگ کی مدد سے پہلے دیکھے گئے اصطلاحات کو دوبارہ سمجھتے ہیں:
🎓 پریسیشن: TP/(TP + FP) وہ تناسب جو بازیافت شدہ مثالوں میں متعلقہ مثالوں کو ظاہر کرتا ہے (مثلاً کون سے لیبلز درست طریقے سے لیبل کیے گئے تھے)
🎓 ریکال: TP/(TP + FN) وہ تناسب جو بازیافت شدہ متعلقہ مثالوں کو ظاہر کرتا ہے، چاہے وہ درست لیبل کیے گئے ہوں یا نہ ہوں
🎓 f1-score: (2 * پریسیشن * ریکال)/(پریسیشن + ریکال) پریسیشن اور ریکال کا وزنی اوسط، بہترین 1 اور بدترین 0
🎓 سپورٹ: ہر لیبل کی بازیافت کی تعداد
🎓 ایکوریسی: (TP + TN)/(TP + TN + FP + FN) نمونے کے لیے درست طریقے سے پیش گوئی کیے گئے لیبلز کا فیصد
🎓 میکرو ایوریج: ہر لیبل کے لیے غیر وزنی اوسط میٹرکس کا حساب، لیبل کے عدم توازن کو مدنظر نہ رکھتے ہوئے
🎓 ویٹڈ ایوریج: ہر لیبل کے لیے اوسط میٹرکس کا حساب، لیبل کے عدم توازن کو مدنظر رکھتے ہوئے، ان کی سپورٹ (ہر لیبل کے لیے درست مثالوں کی تعداد) کے ذریعے وزن دے کر
✅ کیا آپ سوچ سکتے ہیں کہ کون سا میٹرک دیکھنا چاہیے اگر آپ چاہتے ہیں کہ آپ کا ماڈل فالس نیگیٹیوز کی تعداد کم کرے؟
اس ماڈل کے ROC کرف کو بصری طور پر دیکھیں
🎥 اوپر دی گئی تصویر پر کلک کریں ROC کرف کا مختصر ویڈیو جائزہ دیکھنے کے لیے
آئیے ایک اور بصری جائزہ لیتے ہیں تاکہ نام نہاد 'ROC' کرف کو دیکھ سکیں:
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
y_scores = model.predict_proba(X_test)
fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1])
fig = plt.figure(figsize=(6, 6))
plt.plot([0, 1], [0, 1], 'k--')
plt.plot(fpr, tpr)
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.show()
Matplotlib کا استعمال کرتے ہوئے، ماڈل کے Receiving Operating Characteristic یا ROC کو پلاٹ کریں۔ ROC کرف اکثر کسی کلاسیفائر کے آؤٹ پٹ کو اس کے ٹرو اور فالس پازیٹیوز کے لحاظ سے دیکھنے کے لیے استعمال کیے جاتے ہیں۔ "ROC کرف عام طور پر Y محور پر ٹرو پازیٹیو ریٹ اور X محور پر فالس پازیٹیو ریٹ کو ظاہر کرتے ہیں۔" لہٰذا، کرف کی ڈھلوان اور درمیانی لائن اور کرف کے درمیان جگہ اہمیت رکھتی ہے: آپ ایک ایسا کرف چاہتے ہیں جو جلدی سے اوپر اور لائن کے اوپر جائے۔ ہمارے کیس میں، شروع میں فالس پازیٹیوز موجود ہیں، اور پھر لائن صحیح طریقے سے اوپر اور آگے بڑھتی ہے:
آخر میں، Scikit-learn کے roc_auc_score
API کا استعمال کرتے ہوئے اصل 'ایریا انڈر دی کرف' (AUC) کا حساب لگائیں:
auc = roc_auc_score(y_test,y_scores[:,1])
print(auc)
نتیجہ 0.9749908725812341
ہے۔ چونکہ AUC 0 سے 1 تک ہوتا ہے، آپ ایک بڑا اسکور چاہتے ہیں، کیونکہ ایک ماڈل جو اپنی پیش گوئیوں میں 100% درست ہے اس کا AUC 1 ہوگا؛ اس کیس میں، ماڈل کافی اچھا ہے۔
آئندہ کلاسیفیکیشن کے اسباق میں، آپ سیکھیں گے کہ اپنے ماڈل کے اسکورز کو بہتر بنانے کے لیے کیسے تکرار کریں۔ لیکن ابھی کے لیے، مبارک ہو! آپ نے یہ ریگریشن کے اسباق مکمل کر لیے ہیں!
🚀چیلنج
لاجسٹک ریگریشن کے بارے میں مزید جاننے کے لیے بہت کچھ ہے! لیکن سیکھنے کا بہترین طریقہ تجربہ کرنا ہے۔ ایسا ڈیٹا سیٹ تلاش کریں جو اس قسم کے تجزیے کے لیے موزوں ہو اور اس کے ساتھ ایک ماڈل بنائیں۔ آپ کیا سیکھتے ہیں؟ مشورہ: دلچسپ ڈیٹا سیٹس کے لیے Kaggle آزمائیں۔
لیکچر کے بعد کا کوئز
جائزہ اور خود مطالعہ
اسٹینفورڈ کے اس مقالے کے پہلے چند صفحات پڑھیں، جس میں لاجسٹک ریگریشن کے عملی استعمالات پر روشنی ڈالی گئی ہے۔ ان کاموں کے بارے میں سوچیں جو اب تک ہم نے مطالعہ کیے گئے ریگریشن کے مختلف اقسام کے لیے زیادہ موزوں ہوں گے۔ کون سا طریقہ بہترین کام کرے گا؟
اسائنمنٹ
ڈسکلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔