Skip to content

Latest commit

 

History

History
387 lines (257 loc) · 33.5 KB

File metadata and controls

387 lines (257 loc) · 33.5 KB

Scikit-learn کا استعمال کرتے ہوئے ریگریشن ماڈل بنائیں: ریگریشن کے چار طریقے

ابتدائی نوٹ

لکیری ریگریشن اس وقت استعمال ہوتی ہے جب ہم ایک عددی قدر کی پیش گوئی کرنا چاہتے ہیں (مثلاً، گھر کی قیمت، درجہ حرارت، یا فروخت)۔ یہ اس طرح کام کرتی ہے کہ ایک سیدھی لائن تلاش کی جاتی ہے جو انپٹ خصوصیات اور آؤٹ پٹ کے درمیان تعلق کو بہترین انداز میں ظاہر کرے۔

اس سبق میں، ہم بنیادی تصور کو سمجھنے پر توجہ دیں گے اس سے پہلے کہ ہم مزید ترقی یافتہ ریگریشن تکنیکوں کو دریافت کریں۔ لکیری بمقابلہ کثیر رکنی ریگریشن کی انفوگرافک

انفوگرافک بنائی گئی توسط Dasani Madipalli

تعارف

اب تک آپ نے ریگریشن کیا ہے یہ جانچا ہے مثال کے طور پر کدو کی قیمت کے ڈیٹا سیٹ سے حاصل کردہ نمونہ ڈیٹا کے ساتھ جسے ہم اس سبق میں استعمال کریں گے۔ آپ نے اسے Matplotlib کے ذریعے تصویری شکل میں بھی دیکھا ہے۔

اب آپ مشین لرننگ کے لیے ریگریشن میں مزید گہرائی میں جانے کے لیے تیار ہیں۔ جب کہ بصری نمائندگی آپ کو ڈیٹا سمجھنے میں مدد دیتی ہے، مشین لرننگ کی اصل طاقت ماڈلز کی تربیت میں ہے۔ ماڈلز ماضی کے ڈیٹا پر تربیت دیتے ہیں تاکہ خود بخود ڈیٹا کی انحصاریت کو سمجھ سکیں، اور یہ آپ کو نئے ڈیٹا کے لیے پیش گوئی کرنے کی اجازت دیتے ہیں جو ماڈل نے پہلے نہیں دیکھا۔

اس سبق میں، آپ دو قسم کی ریگریشنز کے بارے میں مزید جانیں گے: بنیادی لکیری ریگریشن اور کثیر رکنی ریگریشن، اور ان تکنیکوں کے پیچھے کچھ ریاضی بھی سیکھیں گے۔ یہ ماڈلز ہمیں مختلف انپٹ ڈیٹا کے مطابق کدو کی قیمت کی پیش گوئی کرنے کی اجازت دیں گے۔

مشین لرننگ مبتدیوں کے لیے - لکیری ریگریشن کو سمجھنا

🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ لکیری ریگریشن کا مختصر ویڈیو جائزہ دیکھ سکیں۔

اس نصاب کے دوران، ہم فرض کرتے ہیں کہ ریاضی کی معلومات بہت کم ہیں، اور کوشش کرتے ہیں کہ اسے ان طلباء کے لیے قابل فہم بنایا جائے جو دوسرے شعبوں سے آ رہے ہیں، لہٰذا نوٹسز، 🧮 کال آؤٹس، خاکے، اور دیگر تعلیمی اوزار پر دھیان دیں جو سمجھنے میں مدد دیں۔

پیشگی شرائط

آپ کو اب تک کدو کے ڈیٹا کے ڈھانچے سے واقف ہونا چاہیے جسے ہم جانچ رہے ہیں۔ آپ اسے اس سبق کی notebook.ipynb فائل میں پری لوڈڈ اور پری کلین کیا ہوا پا سکتے ہیں۔ فائل میں، کدو کی قیمت فی بوشل نئے ڈیٹافریم میں دکھائی گئی ہے۔ اس بات کو یقینی بنائیں کہ آپ یہ نوٹ بکس Visual Studio Code کے کرنلز میں چلا سکیں۔

تیاری

یاد دہانی کے طور پر، آپ یہ ڈیٹا لوڈ کر رہے ہیں تاکہ اس سے سوالات پوچھ سکیں۔

  • کب کدو خریدنا سب سے بہتر وقت ہے؟
  • ایک کیس کے منیچر کدو کی قیمت کیا ہوسکتی ہے؟
  • کیا مجھے انہیں آدھے بوشل ٹوکریوں میں خریدنا چاہیے یا 1 1/9 بوشل باکس کے حساب سے؟ آئیے اس ڈیٹا میں مزید کھنگالیں۔

پچھلے سبق میں، آپ نے پانڈا ڈیٹافریم تخلیق کیا اور اصل ڈیٹا سیٹ کے ایک حصے کے ساتھ اسے بھر دیا، قیمتوں کو بوشل کے لحاظ سے یکساں بنایا۔ اس طرح کرنے سے آپ تقریباً 400 ڈیٹا پوائنٹس جمع کر سکے لیکن صرف خزاں کے مہینوں کے لیے۔

اس سبق کی ساتھ پیش آنے والی نوٹ بک میں ہم نے جو ڈیٹا پری لوڈ کیا ہے اسے دیکھیں۔ ڈیٹا پری لوڈ ہے اور مہینے کے ڈیٹا کو دکھانے کے لیے ابتدائی اسکیٹر پلاٹ بھی بنایا گیا ہے۔ شاید ہم ڈیٹا کی نوعیت کے بارے میں زیادہ تفصیل حاصل کر سکیں اگر ہم اسے مزید صاف کریں۔

لکیری ریگریشن لائن

جیسا کہ آپ نے سبق 1 میں سیکھا، لکیری ریگریشن کا مقصد یہ ہے کہ ایک لائن کھینچی جائے تاکہ:

  • متغیرات کے تعلقات دکھائے جائیں۔ متغیرات کے درمیان تعلق دکھائیں
  • پیش گوئیاں کی جائیں۔ نئی ڈیٹا پوائنٹ کہاں آ سکتی ہے اس کی ٹھیک پیش گوئی کریں۔

یہ عام طور پر Least-Squares Regression کا نامی عمل ہوتا ہے کہ اس قسم کی لائن کشید کی جائے۔ “Least-Squares” اصطلاح ماڈل کی کل غلطی کو کم سے کم کرنے کے عمل کی طرف اشارہ کرتی ہے۔ ہر ڈیٹا پوائنٹ کے لیے، ہم اصل نقطہ اور ریگریشن لائن کے درمیان عمودی فاصلہ ناپتے ہیں (جسے ریزیڈیول کہتے ہیں)۔

ہم ان فاصلات کو دو وجوہات کی بنا پر مربع کرتے ہیں:

  1. مقدار کی اہمیت سمت سے زیادہ: ہم چاہتے ہیں کہ -5 کی غلطی کو +5 کی غلطی کی طرح سمجھا جائے۔ مربع کرنے سے تمام قدر مثبت ہوجاتی ہیں۔

  2. آؤٹ لائرز کو سزا دینا: مربع کرنے سے بڑی غلطیوں کو زیادہ وزن ملتا ہے، جو لائن کو ان نقاط کے قریب رکھنے پر مجبور کرتا ہے جو دور ہوتے ہیں۔

ہم پھر ان تمام مربعوں کو جمع کرتے ہیں۔ ہمارا ہدف وہ مخصوص لائن تلاش کرنا ہے جہاں یہ مجموعہ کم سے کم ہو (سب سے چھوٹی ممکنہ قیمت)—یعنی "Least-Squares" کا مطلب۔

🧮 مجھے ریاضی دکھائیں

اس لائن کو، جسے بہترین فٹ لائن کہا جاتا ہے، ایک مساوات کے ذریعے ظاہر کیا جا سکتا ہے:

Y = a + bX

X وضاحتی متغیر ہے۔ Y منحصر متغیر ہے۔ لائن کی ڈھلوان b ہے اور a y-قاطع ہے، جو اس قدر کی وضاحت کرتا ہے جب X = 0 ہو۔

ڈھلوان کا حساب لگائیں

سب سے پہلے، ڈھلوان b کا حساب لگائیں۔ انفوگرافک توسط Jen Looper

دوسرے الفاظ میں، اور ہمارے کدو کے ڈیٹا کے آغاز کے سوال کی طرف اشارہ کرتے ہوئے: "ہر ماہ فی بوشل کدو کی قیمت کی پیش گوئی کریں"، X قیمت کی طرف اشارہ کرے گا اور Y فروخت کے مہینے کی طرف۔

مساوات مکمل کریں

Y کی قدر کا حساب لگائیں۔ اگر آپ تقریباً $4 ادا کر رہے ہیں، تو ضرور اپریل ہوگا! انفوگرافک توسط Jen Looper

وہ ریاضی جو لائن کا حساب لگاتی ہے، لائن کی ڈھلوان کو ظاہر کرتی ہے، جو اس قطعۂ حاصل ضرب پر بھی منحصر ہے، یا جہاں Y واقع ہوتا ہے جب X = 0۔

آپ اس حساب کا طریقہ کار Math is Fun ویب سائٹ پر بھی دیکھ سکتے ہیں۔ اس کے علاوہ، یہ Least-squares کیلکولیٹر ملاحظہ کریں تاکہ دیکھیں کہ اعداد کی قدر لائن کو کیسے متاثر کرتی ہے۔

ربط

ایک اور اصطلاح جو سمجھنی ضروری ہے وہ ہے ربط کا گتانک جو دیے گئے X اور Y متغیرات کے درمیان ہوتا ہے۔ اس کو اسکیٹر پلاٹ کے ذریعے جلدی سمجھا جا سکتا ہے۔ اگر نقاط قطار میں سیدھے ہوتے ہیں تو ربط زیادہ ہوگا، اور اگر نقاط ہر جگہ منتشر ہوں تو ربط کم ہوگا۔

ایک اچھا لکیری ریگریشن ماڈل وہی ہوگا جس کا ربط درصد (0 کے مقابلے میں 1 کے نزدیک) زیادہ ہو، اور جسے Least-Squares Regression طریقہ استعمال کرتے ہوئے ریگریشن لائن کے ساتھ بنایا گیا ہو۔

✅ اس سبق کے ساتھ آنے والی نوٹ بک چلائیں اور Month to Price اسکیٹر پلاٹ دیکھیں۔ کیا آپ کے خیال میں مہینے اور کدو کی قیمت کے درمیان ربط زیادہ ہے یا کم، آپ کی بصری تعبیر کے مطابق؟ کیا یہ بدلتا ہے اگر آپ Month کی بجائے زیادہ باریک پیمائش استعمال کریں، مثلاً سال کا دن (یعنی سال کے آغاز سے دنوں کی تعداد)؟

نیچے دیے گئے کوڈ میں، ہم فرض کریں گے کہ ہم نے ڈیٹا کو صاف کر لیا ہے، اور ایک ڈیٹافریم حاصل کیا ہے جسے new_pumpkins کہا گیا ہے، جیسا کہ درج ذیل:

ID Month DayOfYear Variety City Package Low Price High Price Price
70 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 15.0 13.636364
71 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 18.0 16.363636
72 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 18.0 16.363636
73 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 17.0 17.0 15.454545
74 10 281 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 15.0 13.636364

ڈیٹا صاف کرنے کا کوڈ notebook.ipynb میں دستیاب ہے۔ ہم نے پچھلے سبق کی طرح صفائی کے اقدامات کیے ہیں، اور DayOfYear کالم نچے دیے گئے اظہار کے ذریعے حساب کیا ہے:

day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)

اب جب کہ آپ کو لکیری ریگریشن کے پیچھے کے ریاضی کا فہم حاصل ہے، آئیے ایک ریگریشن ماڈل بنائیں تاکہ دیکھ سکیں کہ آیا ہم پیش گوئی کر سکتے ہیں کہ کدو کے کون سے پیکج کی قیمت سب سے اچھی ہوگی۔ کوئی جو تعطیلات کے لیے کدو خرید رہا ہو، وہ اس معلومات کو حاصل کرنا چاہے گا تاکہ اپنے آرڈر کو بہتر بنا سکے۔

ربط کی تلاش

مشین لرننگ مبتدیوں کے لیے - ربط کی تلاش: لکیری ریگریشن کی کنجی

🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ ربط کا مختصر ویڈیو جائزہ دیکھ سکیں۔

پچھلے سبق میں آپ نے شاید دیکھا ہو کہ مختلف مہینوں کی اوسط قیمت کچھ یوں دکھائی دیتی ہے:

مہینوں کے مطابق اوسط قیمت

یہ ظاہر کرتا ہے کہ یہاں ربط موجود ہونا چاہیے، اور ہم کوشش کر سکتے ہیں کہ لکیری ریگریشن ماڈل تیار کریں تاکہ Month اور Price کے درمیان یا DayOfYear اور Price کے درمیان تعلق کی پیش گوئی کریں۔ یہ اسکیٹر پلاٹ دکھاتا ہے جو بعد والے تعلق کو ظاہر کرتا ہے:

قیمت بمقابلہ دنِ سال کا اسکیٹر پلاٹ

آئیے corr فنکشن استعمال کرکے دیکھتے ہیں کہ ربط کیا ہے:

print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))

ایسا لگتا ہے کہ ربط تھوڑا کم ہے، مہینے کے لیے -0.15 اور دنِ مہینے کے لیے -0.17، لیکن ایک اور اہم تعلق ممکن ہے۔ ایسا لگتا ہے کہ قیمتوں کے مختلف کلسٹرز مختلف کدو کی اقسام سے متعلق ہیں۔ اس مفروضے کی تصدیق کے لیے، آئیے ہر کدو کی قسم کو مختلف رنگ میں پلاٹ کریں۔ scatter فنکشن کو ax پیرامیٹر دینے سے ہم تمام نقاط ایک ہی گراف پر دکھا سکتے ہیں:

ax=None
colors = ['red','blue','green','yellow']
for i,var in enumerate(new_pumpkins['Variety'].unique()):
    df = new_pumpkins[new_pumpkins['Variety']==var]
    ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)

قیمت بمقابلہ دنِ سال کا رنگین اسکیٹر پلاٹ

ہماری تفتیش بتاتی ہے کہ مختلف اقسام کا مجموعی قیمت پر زیادہ اثر ہے بجائے اصلی فروخت کی تاریخ کے۔ ہم اس کو بار گراف سے دیکھ سکتے ہیں:

new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')

قسم کے مقابلے قیمت کا بار گراف

آئیے اس لمحے صرف ایک کدو کی قسم، 'pie type' پر توجہ دیں اور دیکھیں کہ تاریخ کا قیمت پر کیا اثر ہے:

pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price') 

قیمت بمقابلہ دنِ سال کا اسکیٹر پلاٹ

اگر ہم اب corr فنکشن استعمال کرکے Price اور DayOfYear کے درمیان ربط کا حساب لگائیں تو ہمیں تقریباً -0.27 ملے گا—جوبتاتا ہے کہ پیش گوئی کرنے والا ماڈل تربیت دینا معقول ہے۔

لکیری ریگریشن ماڈل تربیت دینے سے پہلے، یہ ضروری ہے کہ ہمارا ڈیٹا صاف ہو۔ لکیری ریگریشن خالی اقدار کے ساتھ بہتر کام نہیں کرتی، لہٰذا تمام خالی جگہوں کو دور کرنا منطقی ہے:

pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()

ایک اور طریقہ یہ ہوگا کہ ان خالی اقدار کو متعلقہ کالم کی اوسط قیمت سے بھر دیا جائے۔

سادہ لکیری ریگریشن

مشین لرننگ مبتدیوں کے لیے - Scikit-learn استعمال کرتے ہوئے لکیری اور کثیر رکنی ریگریشن

🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ لکیری اور کثیر رکنی ریگریشن کا مختصر ویڈیو جائزہ دیکھ سکیں۔

ہم اپنے لکیری ریگریشن ماڈل کو تربیت دینے کے لیے Scikit-learn لائبریری استعمال کریں گے۔

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split

ہم انپٹ ویلیوز (خصوصیات) اور متوقع آؤٹ پٹ (لیبل) کو الگ الگ numpy ارریوں میں تقسیم کرنا شروع کرتے ہیں:

X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']

نوٹ کریں کہ ہمیں اپنے انپٹ ڈیٹا پر reshape کرنا پڑا تاکہ لکیری ریگریشن پیکیج اسے صحیح طور پر سمجھ سکے۔ لکیری ریگریشن 2D ارری کو بطور انپٹ توقع کرتا ہے، جہاں ارری کی ہر صف انپٹ خصوصیات کے ویکٹر کے برابر ہو۔ ہمارے کیس میں، چونکہ صرف ایک انپٹ ہے، ہمیں N×1 اشکال کی ارری چاہیے جہاں N ڈیٹا سیٹ کی تعداد ہے۔

پھر، ہمیں ڈیٹا کو تربیتی اور جانچ ڈیٹا سیٹ میں تقسیم کرنا چاہیے، تاکہ تربیت کے بعد ہم اپنے ماڈل کی توثیق کر سکیں:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

آخر میں، اصل لکیری ریگریشن ماڈل کی تربیت صرف دو لائنوں کوڈ میں ہوتی ہے۔ ہم LinearRegression آبجیکٹ کو تعریف کرتے ہیں، اور اسے fit طریقہ سے اپنے ڈیٹا پر فٹ کرتے ہیں:

lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)

LinearRegression آبجیکٹ fit کرنے کے بعد ریگریشن کے تمام کو efficient coefficients رکھتا ہے، جن تک .coef_ پراپرٹی کے ذریعے رسائی حاصل کی جا سکتی ہے۔ ہمارے کیس میں صرف ایک coefficient ہے، جو تقریباً -0.017 ہونا چاہیے۔ اس کا مطلب ہے کہ قیمتیں وقت کے ساتھ تھوڑی سی کم ہوتی نظر آتی ہیں، لیکن زیادہ نہیں، تقریباً دو سینٹ فی دن۔ ہم ریگریشن کے Y-محور سے انٹرسیکشن پوائنٹ بھی lin_reg.intercept_ کے ذریعے حاصل کر سکتے ہیں - جو ہمارے کیس میں تقریباً 21 ہوگا، جو سال کے شروع کے وقت کی قیمت کی نشاندہی کرتا ہے۔

یہ جاننے کے لیے کہ ہمارا ماڈل کتنا درست ہے، ہم ٹیسٹ ڈیٹاسیٹ پر قیمتوں کا اندازہ لگا سکتے ہیں، اور پھر دیکھ سکتے ہیں کہ ہماری پیشن گوئی متوقع قدروں سے کتنی قریب ہے۔ یہ rms (root mean square error) میٹرکس کے ذریعے کیا جا سکتا ہے، جو کہ تمام متوقع اور پیشن گوئی شدہ قدروں کے درمیان تمام مربع فرقوں کے وسط کی جذر ہے۔

pred = lin_reg.predict(X_test)

rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')

ہمارا error تقریباً 2 پوائنٹس کے آس پاس ہے، جو کہ ~17% ہے۔ زیادہ اچھا نہیں۔ ماڈل کے معیار کی ایک اور نشانی coefficient of determination ہے، جو اس طرح حاصل کی جا سکتی ہے:

score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)

اگر قیمت 0 ہو، تو اس کا مطلب ہے کہ ماڈل ان پٹ ڈیٹا کو مدنظر نہیں رکھتا، اور بدترین خطی پیشگو کے طور پر کام کرتا ہے، جو صرف نتیجہ کا اوسط ویلیو ہوتا ہے۔ قیمت 1 کا مطلب ہے کہ ہم تمام متوقع نتائج کو مکمل طور پر پیش گوئی کر سکتے ہیں۔ ہمارے کیس میں، coefficient تقریباً 0.06 ہے، جو کہ کافی کم ہے۔

ہم ٹیسٹ ڈیٹا کو ریگریشن لائن کے ساتھ بھی پلاٹ کر سکتے ہیں تاکہ دیکھ سکیں کہ ہمارے کیس میں ریگریشن کس طرح کام کرتی ہے:

plt.scatter(X_test,y_test)
plt.plot(X_test,pred)

Linear regression

پولینومیل ریگریشن

ریگریشن کی ایک اور قسم پولینومیل ریگریشن ہے۔ جب کبھی متغیرات کے درمیان خطی تعلق ہوتا ہے — جیسے جتنا زیادہ کدو حجم میں ہو، قیمت بھی زیادہ ہو — بعض اوقات یہ تعلقات سیدھی لائن یا سطح کی حیثیت سے ظاہر نہیں کیے جا سکتے۔

✅ یہاں کچھ مزید مثالیں ہیں جو پولینومیل ریگریشن استعمال کر سکتی ہیں۔

ایک بار پھر تاریخ اور قیمت کے درمیان تعلق کو دیکھیں۔ کیا یہ سکریٹرپلٹ لازمی سیدھی لائن سے تجزیہ ہونا چاہیے؟ کیا قیمتیں اُتار چڑھاؤ نہیں کر سکتیں؟ اس صورت میں، آپ پولینومیل ریگریشن آزما سکتے ہیں۔

✅ پولینومیلز ریاضی کے بیانات ہوتے ہیں جو ایک یا زیادہ متغیرات اور coefficients پر مشتمل ہو سکتے ہیں۔

پولینومیل ریگریشن ایک خمیدہ لائن بناتی ہے تاکہ غیر خطی ڈیٹا کو بہتر فٹ کیا جا سکے۔ ہمارے کیس میں، اگر ہم ان پٹ ڈیٹا میں DayOfYear کا مربع شامل کریں، تو ہمیں ایک پیرا بولک منحنی کا فٹ کرنا چاہیے، جس کا کم از کم نقطہ سال کے درمیان ہوگا۔

Scikit-learn میں ایک مفید pipeline API شامل ہے جو مختلف ڈیٹا پروسیسنگ کے مراحل کو یکجا کرتا ہے۔ پائپ لائن estimators کی ایک چین ہے۔ ہمارے کیس میں، ہم ایک پائپ لائن بنائیں گے جو پہلے پولینومیل فیچرز کو ہمارے ماڈل میں شامل کرے گا، اور پھر ریگریشن کو ٹرین کرے گا:

from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())

pipeline.fit(X_train,y_train)

PolynomialFeatures(2) کے استعمال کا مطلب ہے کہ ہم ان پٹ ڈیٹا سے تمام دوسرے درجے کے پولینومیل شامل کریں گے۔ ہمارے کیس میں یہ صرف DayOfYear² ہوگا، لیکن اگر دو ان پٹ ویریبلز X اور Y ہوں، تو یہ X²، XY اور Y² شامل کرے گا۔ ہم اگر چاہیں تو زیادہ درجے کے پولینومیل بھی استعمال کر سکتے ہیں۔

پائپ لائنز کو اسی طرح استعمال کیا جا سکتا ہے جیسے LinearRegression آبجیکٹ، یعنی ہم پائپ لائن کو fit کر سکتے ہیں، اور پھر predict سے پیش گوئی حاصل کر سکتے ہیں۔ یہاں ایک گراف ہے جو ٹیسٹ ڈیٹا اور اندازہ شدہ منحنی دکھاتا ہے:

Polynomial regression

پولینومیل ریگریشن سے ہمیں تھوڑا سا کم MSE اور زیادہ determination ملتا ہے، لیکن نمایاں طور پر نہیں۔ ہمیں دیگر فیچرز کو بھی مدنظر لینا ہوگا!

آپ دیکھ سکتے ہیں کہ کم سے کم کدو کی قیمتیں ہالووین کے آس پاس دیکھی جاتی ہیں۔ آپ اس کی وضاحت کیسے کریں گے؟

🎃 مبارک ہو، آپ نے ابھی ایک ماڈل بنایا ہے جو کدو کی قیمت پیش گوئی کرنے میں مدد دے سکتا ہے۔ آپ شاید یہی طریقہ کار تمام کدو کی اقسام کے لیے دہرائیں، لیکن یہ بہت تھکا دینے والا ہوگا۔ اب سیکھتے ہیں کہ اپنے ماڈل میں کدو کی اقسام کو کیسے شامل کریں!

زمرہ بندی شدہ خصوصیات

آئیڈیل دنیا میں، ہم ایک ہی ماڈل استعمال کر کے مختلف کدو کی اقسام کی قیمتیں پیش گوئی کرنا چاہتے ہیں۔ تاہم، Variety کالم Month جیسے کالموں سے مختلف ہے کیونکہ اس میں غیر عددی قدریں ہوتی ہیں۔ ایسے کالمز کو زمرہ بندی شدہ (categorical) کہا جاتا ہے۔

ML for beginners - Categorical Feature Predictions with Linear Regression

🎥 اوپر موجود تصویر پر کلک کریں زمرہ بندی شدہ فیچرز کے استعمال پر مختصر ویڈیو کے لیے۔

یہاں ہم دیکھ سکتے ہیں کہ اوسط قیمت قسم پر کس طرح منحصر ہے:

Average price by variety

قسم کو مدنظر رکھنے کے لیے، سب سے پہلے ہمیں اس کو عددی شکل میں تبدیل کرنا پڑے گا، یعنی انکوڈ کرنا ہوگا۔ اس کے لیے کئی طریقے ہیں:

  • سادہ نو مریکی انکوڈنگ مختلف اقسام کی ایک ٹیبل بنائے گی، اور پھر قسم کے نام کو اس ٹیبل میں انڈیکس سے تبدیل کر دے گی۔ یہ لائنیر ریگریشن کے لیے بہترین طریقہ نہیں ہے، کیونکہ لائنیر ریگریشن اس انڈیکس کی عددی قیمت لے کر اسے کسی coefficient کے ساتھ ضرب دے کر نتیجہ میں شامل کرتی ہے۔ ہمارے کیس میں، انڈیکس نمبر اور قیمت کے تعلق کا تعلق واضح طور پر غیر خطی ہے، چاہے ہم انڈیکس کو مخصوص ترتیب دیں۔
  • ون-ہوٹ انکوڈنگ Variety کالم کی جگہ چار مختلف کالم بنائے گی، ہر قسم کے لیے ایک۔ ہر کالم میں 1 تب ہوگا جب متعلقہ قطار اس قسم کی ہو، ورنہ 0 ہوگا۔ اس کا مطلب ہے کہ لائنیر ریگریشن میں چار coefficients ہوں گے، ہر کدو کی قسم کے لیے، جو اس خاص قسم کی "ابتدائی قیمت" (یا "اضافی قیمت") کی نمائندگی کریں گے۔

نیچے دیا کوڈ دکھاتا ہے کہ قسم کو ون-ہوٹ انکوڈ کیسے کیا جائے:

pd.get_dummies(new_pumpkins['Variety'])
ID FAIRYTALE MINIATURE MIXED HEIRLOOM VARIETIES PIE TYPE
70 0 0 0 1
71 0 0 0 1
... ... ... ... ...
1738 0 1 0 0
1739 0 1 0 0
1740 0 1 0 0
1741 0 1 0 0
1742 0 1 0 0

ون-ہوٹ انکوڈ شدہ قسم کو ان پٹ کے طور پر استعمال کرتے ہوئے لائنیر ریگریشن ٹرین کرنے کے لیے، ہمیں بس X اور y ڈیٹا کو صحیح طریقے سے initialize کرنا ہوگا:

X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']

باقی کوڈ اسی طرح ہے جیسا کہ ہم نے اوپر لائنیر ریگریشن کے لیے استعمال کیا تھا۔ اگر آپ اسے آزما کر دیکھیں گے تو آپ دیکھیں گے کہ mean squared error تقریباً ویسا ہی ہے، لیکن coefficient of determination بہت زیادہ (~77%) ہو جاتا ہے۔ زیادہ درست پیش گوئیاں حاصل کرنے کے لیے، ہم مزید categorical خصوصیات کے ساتھ ساتھ عددی خصوصیات، جیسے Month یا DayOfYear کو بھی شامل کر سکتے ہیں۔ فیچرز کی ایک بڑی ارے بنانے کے لیے ہم join استعمال کر سکتے ہیں:

X = pd.get_dummies(new_pumpkins['Variety']) \
        .join(new_pumpkins['Month']) \
        .join(pd.get_dummies(new_pumpkins['City'])) \
        .join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']

یہاں ہم City اور Package کی اقسام بھی مدنظر لیتے ہیں، جو ہمیں MSE 2.84 (10%) اور determination 0.94 دیتی ہے!

سب کچھ ایک ساتھ رکھنا

بہترین ماڈل بنانے کے لیے، ہم اوپر والے مثال میں سے مشترکہ (ون-ہوٹ انکوڈ شدہ زمرہ بندی شدہ + عددی) ڈیٹا کو پولینومیل ریگریشن کے ساتھ استعمال کر سکتے ہیں۔ آپ کی سہولت کے لیے مکمل کوڈ یہاں ہے:

# تربیتی ڈیٹا تیار کریں
X = pd.get_dummies(new_pumpkins['Variety']) \
        .join(new_pumpkins['Month']) \
        .join(pd.get_dummies(new_pumpkins['City'])) \
        .join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']

# تربیت اور امتحان کے لیے تقسیم کریں
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# پائپ لائن تیار کریں اور تربیت دیں
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)

# ٹیسٹ ڈیٹا کے لیے نتائج کی پیش گوئی کریں
pred = pipeline.predict(X_test)

# MSE اور تعیناتی کا حساب لگائیں
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')

score = pipeline.score(X_train,y_train)
print('Model determination: ', score)

یہ ہمیں تقریباً 97% کی بہترین determination coefficient دے گا، اور MSE=2.23 (~8% میں پیشگوئی کی غلطی)۔

ماڈل MSE Determination
DayOfYear خطی 2.77 (17.2%) 0.07
DayOfYear پولینومیل 2.73 (17.0%) 0.08
Variety خطی 5.24 (19.7%) 0.77
تمام خصوصیات خطی 2.84 (10.5%) 0.94
تمام خصوصیات پولینومیل 2.23 (8.25%) 0.97

🏆 بہت خوب! آپ نے ایک سبق میں چار ریگریشن ماڈل بنائے، اور ماڈل کا معیار 97% تک بہتر کیا۔ آخری سیکشن میں آپ لاجسٹک ریگریشن کے بارے میں جانیں گے تاکہ زمروں کی تعیین کی جا سکے۔


🚀چیلنج

اس نوٹ بک میں مختلف متغیرات آزمائیں تاکہ دیکھ سکیں کہ correlation ماڈل کی درستگی کے ساتھ کس طرح مطابقت رکھتا ہے۔

جائزہ اور خود مطالعہ

اس سبق میں ہم نے لائنیر ریگریشن کے بارے میں سیکھا۔ ریگریشن کی دیگر اہم اقسام بھی ہیں۔ Stepwise، Ridge، Lasso اور Elasticnet تکنیکوں کے بارے میں پڑھیں۔ زیادہ سیکھنے کے لیے ایک اچھا کورس Stanford Statistical Learning course ہے۔

اسائنمنٹ

ماڈل بنائیں


خبردار: اس دستاویز کا ترجمہ AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے کیا گیا ہے۔ اگرچہ ہم درستگی کی کوشش کرتے ہیں، براہ کرم آگاہ رہیں کہ خودکار تراجم میں غلطیاں یا غلط فہمیاں ہو سکتی ہیں۔ اصل دستاویز اپنی مادری زبان میں مستند ماخذ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ تجویز کیا جاتا ہے۔ ہم اس ترجمہ کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔