مشین لرننگ کا استعمال کرتے ہوئے جنگل میں آگ کی پیشن گوئی

ماخذ نوڈ: 1194873

اس مضمون میں کیا شامل ہے؟

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

ایم ایل کا استعمال کرتے ہوئے جنگل میں آگ کی پیشن گوئی
تصویری 1

ہمیں جنگل کی آگ کی پیشن گوئی کے ماڈل کی ضرورت کیوں ہے؟

ٹھیک ہے، پہلا سوال یہ پیدا ہوتا ہے کہ ہمیں اس مخصوص علاقے میں جنگل کی آگ کی پیش گوئی کرنے کے لیے مشین لرننگ کی ضرورت کیوں ہے؟ تو ہاں یہ سوال درست ہے کہ محکمہ جنگلات کے تجربہ کار ہونے کے باوجود جو طویل عرصے سے ان مسائل سے نمٹ رہا ہے تو ایم ایل کی ضرورت کیوں پیش آئی، انہوں نے کہا کہ جواب بہت آسان ہے کہ تجربہ کار محکمہ جنگلات 3- پر چیک کر سکتا ہے۔ ان کے انسانی دماغ سے 4 پیرامیٹرز لیکن دوسری طرف ایم ایل متعدد پیرامیٹرز کو سنبھال سکتا ہے چاہے یہ عرض البلد، طول البلد، سیٹلائٹ، ورژن، اور کیا ہو سکتا ہے، لہذا ایک پیرامیٹر کے اس کثیر رشتے سے نمٹنا جو جنگل میں آگ کے لیے ذمہ دار ہے۔ ہمیں یقینی طور پر ایم ایل کی ضرورت ہے!

فھرست

  1. ضروری لائبریریوں کو درآمد کرنا
  2. تحقیقی ڈیٹا کا تجزیہ
  3. ڈیٹا کی صفائی
  4. ماڈل ڈویلپمنٹ (RandomForestRegressor)
  5. ماڈل ٹیوننگ (RandomSearchCV)
  6. bz2 ماڈیول (بڑا بونس)

لائبریریاں درآمد کرنا

ڈیٹ ٹائم درآمد کریں dt کے طور پر پانڈا درآمد کریں pd کے طور پر درآمد کریں numpy کے طور پر np درآمد کریں سمندری طور پر sns درآمد کریں matplotlib.pyplot بطور plt %matplotlib ان لائن sklearn.model_selection سے sklearn.metrics سے ٹرین_test_split درآمد کریں۔

فارسٹ فائر ایکسپلوریشن ڈیٹاسیٹ (.csv) کو پڑھنا

جنگل = pd.read_csv('fire_archive.csv')

آئیے اپنے ڈیٹاسیٹ پر ایک نظر ڈالتے ہیں (2.7+ MB)

forest.head()

: پیداوار

جنگل کی آگ کی پیشن گوئی کے لیے ڈیٹاسیٹ پڑھنا

ڈیٹا ایکسپلوریشن

forest.shape

: پیداوار

(36011، 15)

یہاں ہم دیکھ سکتے ہیں کہ ہمارے پاس ہے۔ 36011 قطار اور 15 کالم ہمارے ڈیٹاسیٹ میں ظاہر ہے، ہمیں پہلے بہت زیادہ ڈیٹا کی صفائی کرنی ہوگی۔

آئیے اس ڈیٹاسیٹ کو مزید دریافت کریں۔

forest.columns

: پیداوار

انڈیکس , 'frp', 'day night', 'type'], dtype='object')

جنگل کی آگ کی پیشن گوئی ڈیٹاسیٹ میں کالعدم اقدار کی جانچ کرنا

forest.isnull().sum()

: پیداوار

عرض البلد 0 طول البلد 0 چمک 0 اسکین 0 ٹریک 0 acq_date 0 acq_time 0 سیٹلائٹ 0 آلہ 0 اعتماد 0 ورژن 0 bright_t31 0 frp 0 دن رات 0 قسم 0 dtype: int64

خوش قسمتی سے، ہمارے پاس اس ڈیٹاسیٹ میں کوئی صفر قدر نہیں ہے۔

forest.describe()

: پیداوار

ڈیٹا سیٹ کی وضاحت
plt.figure(figsize=(10, 10)) sns.heatmap(forest.corr(),annot=True,cmap='viridis',linewidths=.5)

: پیداوار

ڈیٹا سیٹ کے لیے ہیٹ میپ

ڈیٹا کی صفائی

forest = forest.drop(['track'], axis = 1)

یہاں ہم ٹریک کالم چھوڑ رہے ہیں۔

نوٹ: ڈیٹاسیٹ سے ہم یہ نہیں جان رہے ہیں کہ جنگل میں آگ لگتی ہے یا نہیں، ہم جنگل میں لگنے والی آگ کے بارے میں اعتماد تلاش کرنے کی کوشش کر رہے ہیں۔ وہ ایک ہی چیز لگ سکتے ہیں لیکن ان میں بہت چھوٹا فرق ہے، اسے تلاش کرنے کی کوشش کریں 🙂

واضح ڈیٹا تلاش کرنا

پرنٹ("اسکین کالم") پرنٹ(فاریسٹ['اسکین']. ویلیو_کاؤنٹس()) پرنٹ() پرنٹ("دی aqc_time کالم") پرنٹ (فاریسٹ['acq_time'].value_counts()) پرنٹ() پرنٹ() "سیٹیلائٹ کالم") پرنٹ (فاریسٹ ورژن کالم") پرنٹ (جنگل['ورژن']. ویلیو_کاؤنٹس()) پرنٹ () پرنٹ ("دی ڈے نائٹ کالم") پرنٹ (جنگل['ڈے نائٹ']۔ ویلیو_کاؤنٹس()) پرنٹ ()

: پیداوار

اسکین کالم 1.0 8284 1.1 6000 1.2 3021 1.3 2412 1.4 1848 1.5 1610 1.6 1451 1.7 1281 1.8 1041 1.9 847 2.0 707 2.2 691 . 2.1 649 2.3 608 2.5 468 2.4 433 2.8 422 3.0 402 2.7 366 2.9 361 2.6 347 3.1 259 3.2 244 3.6 219 3.4 203 3.3 203 3.8 189 3.9 156 4.7 149 4.3 137 3.5 134 3.7 134 4.1 120 4.6 118 4.5 نا۔ میں: اسکین، ڈی ٹائپ: int116 aqc_time کالم 4.2 108 4.0 103 4.4 100 4.8 70 64 506 ... 851 454 631 122 612 423 574 448 563 1558 نام: acq_time، لمبائی: 1، dtype: int635 سیٹلائٹ کالم Aqua 1 Terra 1153 نام: satelliten. میں: آلہ، dtype: int1 ورژن کالم 302 1 نام: ورژن، dtype: int1519 دن رات کا کالم D 1 N 662 نام: دن رات، dtype: int64

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

یہ کہہ کر، ہم بھی استعمال کر سکتے ہیں اسکین کالم کو ایک میں دوبارہ ترتیب دینے کے لیے واضح ڈیٹا کی قسم کالم. جو ہم کچھ ہی دیر میں کریں گے۔

forest = forest.drop(['instrument', 'version'], axis = 1)
forest.head()

: پیداوار

جنگل کی آگ کی پیشین گوئی کے لیے ڈیٹا کے سر کو دیکھ کر
daynight_map = {"D": 1, "N": 0} satellite_map = {"Terra": 1, "Aqua": 0} forest['daynight'] = forest['daynight'].map(daynight_map) جنگل[ 'satellite'] = جنگل['satellite'].map(satellite_map)
forest.head()

: پیداوار

ڈیٹاسیٹ کی ابتدائی قطاریں دیکھنا

دوسرے کالم کی قسم دیکھ رہے ہیں۔

جنگل['type'].value_counts()

: پیداوار

0 35666 2 335 3 10 نام: قسم، dtype: int64

جنگل اور اقسام کے ڈیٹا فریم کو جوڑنا

type = pd.get_dummies(forest['type']) forest = pd.concat([جنگل، اقسام]، axis=1)
forest = forest.drop(['type'], axis = 1) forest.head()

: پیداوار

جنگلات اور اقسام کے ڈیٹا فریم کو جوڑنے کے بعد ڈیٹا دیکھنا

بہتر تفہیم کے لیے کالم کا نام تبدیل کرنا

forest = forest.rename(columns={0: 'type_0', 2: 'type_2', 3: 'type_3'})

بائننگ کا طریقہ

  • اب میں نے ذکر کیا ہے کہ ہم اسکین کالم کو کلیدی قسم میں تبدیل کریں گے، ہم اسے استعمال کر کے کریں گے۔ بائننگ کا طریقہ.
  • ان کالموں کی حد 1 سے 4.8 تھی۔
ڈبے = [0, 1, 2, 3, 4, 5] لیبل = [1,2,3,4,5] جنگل['scan_binned'] = pd.cut(forest['scan'], bins=bins, لیبلز = لیبلز)
forest.head()

: پیداوار

بائننگ کا طریقہ لاگو کرنا

سے ڈیٹا ٹائپ کو ڈیٹ ٹائپ میں تبدیل کرنا string یا NumPy.

جنگل['acq_date'] = pd.to_datetime(جنگل['acq_date'])

اب ہم چھوڑ دیں گے۔ اسکین کالم اور ہینڈل تاریخ کی قسم ڈیٹا - ہم ان ڈیٹا ٹائپس سے مفید معلومات نکال سکتے ہیں جیسا کہ ہم کرتے ہیں۔ واضح ڈیٹا.

forest = forest.drop(['scan'], axis = 1)

acq_date کالم کی مدد سے ایک نیا کالم سال بنانا

جنگل['year'] = جنگل['acq_date'].dt.year forest.head()

: پیداوار

ایک نیا کالم بنانا

جیسا کہ ہم نے سال کا کالم شامل کیا ہے اسی طرح ہم شامل کریں گے۔ مہینہ اور دن کالم

جنگل['month'] = جنگل['acq_date'].dt.month forest['day'] = forest['acq_date'].dt.day

ڈیٹاسیٹ کی شکل کو دوبارہ چیک کیا جا رہا ہے۔

forest.shape

: پیداوار

(36011، 17)

اب، جیسا کہ ہم دیکھ سکتے ہیں کہ مزید دو کالم شامل کیے گئے ہیں جو کہ تاریخ کے کالموں کی بریک ڈاؤن ہیں۔

ہمارے ہدف متغیر کو الگ کرنا

y = forest['confidence'] fin = forest.drop(['confidence', 'acq_date', 'acq_time', 'bright_t31', 'type_0'], axis = 1)

ایک بار پھر باہمی تعلق کی جانچ کر رہا ہے۔

plt.figure(figsize=(10, 10)) sns.heatmap(fin.corr(),annot=True,cmap='viridis',linewidths=.5)

: پیداوار

ارتباط کی جانچ کر رہا ہے۔
مصنف کی طرف سے تصویر

آئیے اب اپنے صاف اور ترتیب شدہ ڈیٹاسیٹ کو دیکھتے ہیں۔

fin.head()

: پیداوار

صاف اور ترتیب شدہ ڈیٹا دیکھنا

صاف ڈیٹا کو تربیت اور ٹیسٹنگ ڈیٹاسیٹ میں تقسیم کرنا

Xtrain, Xtest, ytrain, ytest = train_test_split(fin.iloc[:, :500], y, test_size=0.2)

ماڈل بلڈنگ

ماڈل کی تعمیر کے لیے RandomForestRegressor کا استعمال

random_model = RandomForestRegressor(n_estimators=300, random_state = 42, n_jobs = -1)
#Fit random_model.fit(Xtrain, ytrain) y_pred = random_model.predict(Xtest) # درستگی کی جانچ کرنا random_model_accuracy = راؤنڈ(random_model.score(Xtrain, ytrain)*100,2) print(round_delmo'), %_delmo', random_model.score ')

: پیداوار

95.32٪

درستگی کی جانچ کر رہا ہے۔

random_model_accuracy1 = راؤنڈ(random_model.score(Xtest, ytest)*100,2) پرنٹ(round(random_model_accuracy1, 2), '%')

: پیداوار

65.32٪

سیریلائزڈ فارمیٹ کا استعمال کرتے ہوئے اچار ماڈیول کے ذریعہ ماڈل کو محفوظ کرنا

امپورٹ اچار saved_model = pickle.dump(random_model, open('ForestModelOld.pickle','wb'))

ماڈل ٹیوننگ

  • درستگی اتنی اچھی نہیں ہے، اس کے علاوہ ماڈل اوور فٹنگ ہے۔
  • لہذا ہم RandomCV استعمال کرتے ہیں۔

ماڈل سے تمام پیرامیٹرز حاصل کرنا

random_model.get_params()

: پیداوار

{'bootstrap': True, 'ccp_alpha': 0.0, 'criterion': 'mse', 'max_depth': کوئی نہیں, 'max_features': 'auto', 'max_leaf_nodes': کوئی نہیں, 'max_samples': کوئی نہیں، 'min_impurity_decrease' : 0.0, 'min_impurity_split': کوئی نہیں، 'min_samples_leaf': 1, 'min_samples_split': 2, 'min_weight_fraction_leaf': 0.0, 'n_estimators': 300, 'n_jobs': -1, 'oob_score', ':_dom': 42، 'verbose': 0، 'warm_start': False}

RadomizedSearchCV کو عمل میں لانا!

""" n_estimators = جنگل میں درختوں کی تعداد max_features = ایک نوڈ کو تقسیم کرنے کے لیے زیر غور خصوصیات کی زیادہ سے زیادہ تعداد max_depth = ہر فیصلے والے درخت میں سطحوں کی زیادہ سے زیادہ تعداد min_samples_split = نوڈ کے تقسیم ہونے سے پہلے نوڈ میں رکھے گئے ڈیٹا پوائنٹس کی کم از کم تعداد min_samples_leaf = لیف نوڈ بوٹسٹریپ میں ڈیٹا پوائنٹس کی کم سے کم تعداد کی اجازت = ڈیٹا پوائنٹس کے نمونے لینے کا طریقہ (متبادل کے ساتھ یا اس کے بغیر) """
sklearn.model_selection سے RandomizedSearchCV درآمد کریں۔
بے ترتیب جنگل میں درختوں کی تعداد
n_estimators = [int(x) np.linspace میں x کے لیے (start = 300، stop = 500، num = 20)]
ہر تقسیم پر غور کرنے کے لیے خصوصیات کی تعداد
max_features = ['آٹو'، 'sqrt']
درخت میں سطحوں کی زیادہ سے زیادہ تعداد
max_depth = [int(x) np.linspace میں x کے لیے(15, 35, num = 7)] max_depth.append(None)
نوڈ کو تقسیم کرنے کے لیے درکار نمونوں کی کم از کم تعداد
min_samples_split = [2, 3, 5]
ہر لیف نوڈ پر مطلوبہ نمونوں کی کم از کم تعداد
کم سے کم_نمونے_لیف = [1، 2، 4]
بے ترتیب گرڈ بنائیں
random_grid = {'n_estimators': n_estimators, 'max_features': max_features, 'max_depth': max_depth, 'min_samples_split': min_samples_split, 'min_samples_leaf': min_samples_leaf, grid_d print)

: پیداوار

{'n_estimators': [300, 310, 321, 331, 342, 352, 363, 373, 384, 394, 405, 415, 426, 436, 447, 457, 468, 478, 489, max _500, 15, 18, 21, : ['آٹو'، 'sqrt']، 'max_depth': [25, 28, 31, 35, 2, 3, 5, none], 'min_samples_split': [1, 2, 4], 'min_samples_leaf': [ XNUMX، XNUMX، XNUMX]}
  • پیرامیٹرز کی بے ترتیب تلاش، 3 گنا کراس توثیق کا استعمال کرتے ہوئے، 100 مختلف مجموعوں میں تلاش کریں اور تمام دستیاب کور استعمال کریں
  • n_iter، جو کوشش کرنے کے لیے مختلف مجموعوں کی تعداد کو کنٹرول کرتا ہے، اور cv جو کہ کراس توثیق کے لیے استعمال کیے جانے والے فولڈز کی تعداد ہے
rf_random = RandomizedSearchCV(اندازہ کرنے والا = random_model, param_distributions = random_grid, n_iter = 50, cv = 3, verbose=2, random_state=42) # بے ترتیب تلاش کے ماڈل کو فٹ کریں rf_random.fit(Xtrain,

: پیداوار

جنگل میں آگ کی پیشن گوئی کے لیے ہمارے ماڈل کا آؤٹ پٹ

بالکل اس ٹکڑوں کی طرح، وہاں ہو جائے گا متعدد تہوں اس RandomizedSearchCV میں

اس سے بہترین پیرامیٹر حاصل کرنا

rf_random.best_params_

: پیداوار

{'n_estimators': 394, 'min_samples_split': 2, 'min_samples_leaf': 1, 'max_features': 'sqrt', 'max_depth': 25}

ٹیونڈ پیرامیٹرز کے ساتھ ایک نیا ماڈل بنانا

random_new = RandomForestRegressor(n_estimators = 394، min_samples_split = 2، min_samples_leaf = 1، max_features = 'sqrt'، max_depth = 25، bootstrap = True)
#Fit random_new.fit(Xtrain, ytrain)
y_pred1 = random_new.predict(Xtest)
درستگی کی جانچ کرنا random_model_accuracy1 = round(random_new.score(Xtrain, ytrain)*100,2) پرنٹ(round(random_model_accuracy1, 2), '%')

: پیداوار

95.31٪

درستگی کی جانچ کر رہا ہے۔

random_model_accuracy2 = round(random_new.score(Xtest, ytest)*100,2) پرنٹ(round(random_model_accuracy2, 2), '%')

: پیداوار

67.39٪

سیریلائزڈ فارمیٹ کا استعمال کرتے ہوئے اچار ماڈیول کے ذریعہ ٹیون شدہ ماڈل کو محفوظ کرنا

saved_model = pickle.dump(random_new, open('ForestModel.pickle','wb'))

ٹیونڈ اچار والے ماڈل کو لوڈ کیا جا رہا ہے۔

reg_from_pickle = pickle.load(saved_model)

bz2 فائل

یہاں کیک کے حصے پر چیری آتی ہے (اس مضمون کا بونس)۔ آئیے سمجھتے ہیں کہ یہ bz2file ماڈیول کیا ہے۔ آو شروع کریں!

bz2file کیا ہے؟

bz2file ازگر کے ماڈیولز میں سے ایک ہے جو فائلوں کے کمپریشن اور ڈیکمپریشن کے لیے ذمہ دار ہے، اس لیے یہ سیریلائزڈ یا ڈی سیریلائزڈ فائل کو چھوٹے سائز میں کم کرنے میں مدد کر سکتا ہے جو طویل مدت میں بہت مددگار ثابت ہو گا جب ہمارے پاس بڑے ڈیٹا سیٹس ہوں گے۔

bz2file یہاں کس طرح مددگار ہے؟

جیسا کہ ہم جانتے ہیں کہ ہمارا ڈیٹاسیٹ 2.7+ MB ہے اور ہمارا رینڈم فاریسٹ ماڈل 700+ MB کا ہے اس لیے ہمیں اسے کمپریس کرنے کی ضرورت ہے تاکہ وہ ماڈل اسٹوریج کے لیے ایک مشکل صورتحال کے طور پر آگے نہ بڑھے۔

bz2file کو کیسے انسٹال کریں؟

  • Jupyter نوٹ بک: !pip bz2file انسٹال کریں۔
  • ایناکونڈا پرامپٹ/سی ایم ڈی: pip install bz2file

لہذا میں نے bz2file انسٹال کیا، جو ڈیٹا کو کمپریس کرنے کے لیے استعمال ہوتا ہے۔ یہ ان لوگوں کے لیے زندگی بچانے والا پیکج ہے جن کی ڈسک میں جگہیں کم ہیں لیکن وہ بڑے ڈیٹا سیٹس کو اسٹور یا استعمال کرنا چاہتے ہیں۔ اب اچار والی فائل ختم ہو چکی تھی۔ 700 MB سائز میں جسے bz2 استعمال کرنے پر سائز کی فائل میں کمپریس کیا جاتا ہے۔ 93 MB یا اس سے کم.

درآمد کریں bz2 compressionLevel = 9 source_file = 'ForestModel.pickle' # یہ فائل مختلف فارمیٹ میں ہو سکتی ہے، جیسے .csv یا دیگر... destination_file = 'ForestModel.bz2' اوپن(source_file, 'rb') بطور ڈیٹا: tarbz2contents = bz2.compress(data.read(), compressionLevel) fh = open(destination_file, "wb") fh.write(tarbz2contents) fh.close()

یہ کوڈ ٹیونڈ اچار کے ماڈل کے سائز کو دبا دے گا۔

ٹھیک ہے تو یہ میری طرف سے ایک لپیٹ ہے!

اختتام

میرا مضمون 🙂 پڑھنے کے لیے آپ کا شکریہ

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

یہ رہا ریپو لنک اس مضمون کو.

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

اگر کوئی سوال ہے تو آپ مجھ سے LinkedIn پر رابطہ کر سکتے ہیں، اس سے رجوع کریں۔ لنک

میرے بارے میں

سب کو سلام، میں فی الحال کام کر رہا ہوں۔ in ٹیسیایس اور اس سے پہلے میں ڈیٹا سائنس ایسوسی ایٹ تجزیہ کار کے طور پر کام کرتا تھا۔ in زوربا کنسلٹنگ انڈیا۔ کل وقتی کام کے ساتھ ساتھ، مجھے اسی شعبے یعنی ڈیٹا سائنس کے ساتھ ساتھ مصنوعی ذہانت کے اس کے دیگر ذیلی سیٹوں جیسے کہ کمپیوٹر ویژن، مشین لرننگ، اور ڈیپ لرننگ میں بے حد دلچسپی ہے کسی بھی پروجیکٹ میں بلا جھجھک میرے ساتھ تعاون کرتا ہوں۔ مذکورہ بالا ڈومینز پر (لنکڈ).

تصویری ماخذ-

  1. تصویر 1 – https://www.theleader.info/wp-content/uploads/2017/08/forest-fire.jpg

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

ماخذ: https://www.analyticsvidhya.com/blog/2021/10/forest-fire-prediction-using-machine-learning/

ٹائم اسٹیمپ:

سے زیادہ تجزیات ودھیا