اس مضمون میں کیا شامل ہے؟
جنگل، جھاڑی، یا سبزی کی آگ کو قدرتی ماحول جیسے جنگل، گھاس کے میدان، وغیرہ میں کسی بھی بے قابو اور غیر مشروع دہن یا پودوں کے جلنے کے طور پر بیان کیا جا سکتا ہے۔ اس مضمون میں ہم اس بات کا تعین نہیں کر رہے ہیں کہ جنگل میں آگ لگ جائے گی یا نہیں۔ یا نہیں، ہم کچھ اوصاف کی بنیاد پر جنگل کی آگ کے اعتماد کی پیشین گوئی کر رہے ہیں۔
ہمیں جنگل کی آگ کی پیشن گوئی کے ماڈل کی ضرورت کیوں ہے؟
ٹھیک ہے، پہلا سوال یہ پیدا ہوتا ہے کہ ہمیں اس مخصوص علاقے میں جنگل کی آگ کی پیش گوئی کرنے کے لیے مشین لرننگ کی ضرورت کیوں ہے؟ تو ہاں یہ سوال درست ہے کہ محکمہ جنگلات کے تجربہ کار ہونے کے باوجود جو طویل عرصے سے ان مسائل سے نمٹ رہا ہے تو ایم ایل کی ضرورت کیوں پیش آئی، انہوں نے کہا کہ جواب بہت آسان ہے کہ تجربہ کار محکمہ جنگلات 3- پر چیک کر سکتا ہے۔ ان کے انسانی دماغ سے 4 پیرامیٹرز لیکن دوسری طرف ایم ایل متعدد پیرامیٹرز کو سنبھال سکتا ہے چاہے یہ عرض البلد، طول البلد، سیٹلائٹ، ورژن، اور کیا ہو سکتا ہے، لہذا ایک پیرامیٹر کے اس کثیر رشتے سے نمٹنا جو جنگل میں آگ کے لیے ذمہ دار ہے۔ ہمیں یقینی طور پر ایم ایل کی ضرورت ہے!
فھرست
- ضروری لائبریریوں کو درآمد کرنا
- تحقیقی ڈیٹا کا تجزیہ
- ڈیٹا کی صفائی
- ماڈل ڈویلپمنٹ (RandomForestRegressor)
- ماڈل ٹیوننگ (RandomSearchCV)
- 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 – https://www.theleader.info/wp-content/uploads/2017/08/forest-fire.jpg
ماخذ: https://www.analyticsvidhya.com/blog/2021/10/forest-fire-prediction-using-machine-learning/
- "
- 100
- 116
- 39
- 420
- 7
- 9
- تک رسائی حاصل
- یلگوردمز
- تمام
- تجزیاتی
- رقبہ
- مضمون
- مضامین
- مصنوعی ذہانت
- آٹو
- BEST
- جانچ پڑتال
- صفائی
- کوڈ
- کالم
- کمپیوٹر ویژن
- آپکا اعتماد
- مشاورت
- تخلیق
- اعداد و شمار
- ڈیٹا سائنس
- دن
- معاملہ
- فیصلہ درخت
- گہری سیکھنے
- ترقی
- ڈومینز
- چھوڑ
- وغیرہ
- کی تلاش
- خصوصیات
- آگ
- پہلا
- فٹ
- فارمیٹ
- مفت
- اچھا
- عظیم
- سر
- یہاں
- HTTPS
- بھارت
- معلومات
- انٹیلی جنس
- دلچسپی
- مسائل
- IT
- لیبل
- بڑے
- طول بلد
- معروف
- سیکھنے
- لنکڈ
- لانگ
- مشین لرننگ
- میڈیا
- پیمائش کا معیار
- ML
- ایم ایل الگورتھم
- ماڈل
- دیگر
- دیگر
- پودوں
- کی پیشن گوئی
- منصوبے
- ازگر
- رینج
- پڑھنا
- رن
- سیٹلائٹ
- اسکین
- سائنس
- تلاش کریں
- قائم کرنے
- سادہ
- سائز
- چھوٹے
- So
- تقسیم
- شروع کریں
- ذخیرہ
- ذخیرہ
- ہدف
- زمین
- ٹیسٹنگ
- وقت
- ٹریک
- ٹریننگ
- قیمت
- نقطہ نظر
- ڈبلیو
- کام
- X
- سال