Weather prediction using Recurrent Neural Network
Weather prediction using Recurrent Neural Network
در این ، Notebookما نشان می دهیم که چگونه روند طوالنی مدت پارامترهای آب و هوا (رطوبت ،دما،
فشار اتمسفر و ) ...را می توان با دقت مناسب با استفاده از شبکه عصبی بازگشتی ساده ( )RNNپیش بینی
کرد .ما حتی نیازی به استفاده از ماژول حافظه پیچیده مانند GRUیا LSTMبرای این کار نداریم .به نظر
میرسد یک مدل مبتنی بر RNNیک الیه ساده برای پیشبینی روندهای بلندمدت از دادههای آموزشی محدود
به طرز قابل توجهی کافی به نظر میرسد.
این تقریباً دلیلی است بر چیزی که Andrej Karpathyبه نام (اثربخشی غیرمعمول شبکه های عصبی
مکرر) تعریف کرده است.
مجموعه داده ها شامل پارامترهای آب و هوا برمبنای تاریخ (دما ،فشار ،رطوبت نسبی) برای شهرهای بزرگ
آمریکای شمالی و دیگر شهرهای سراسر جهان در یک دوره زمانی طوالنی از 2012تا 2017است .داده ها
ساعتی ثبت میشوند و در مجموع بیش از 45000داده را ارائه میدهند.
با تالش برای انجام یک پیشبینی سری زمانی ،به طور ضمنی فرض میکنیم که الگوی آبوهوای گذشته
شاخص خوبی از آینده است.
برای این تجزیه و تحلیل ،ما فقط بر روی داده های شهر سانفرانسیسکو تمرکز می کنیم.
https://www.kaggle.com/selfishgene/historical-hourly-weather-data
بارگذاری و پیش پردازش داده ها (:)Data loading and pre-processing
انتخاب نقطه ای در سری زمانی برای داده های آموزشی( Choosing a point in the time-series for
:)training data
ما در اینجا Tp=7000را انتخاب می کنیم که به این معنی است که RNNرا فقط با 7000داده اول
آموزش می دهیم و سپس اجازه می دهیم روند بلندمدت را پیش بینی کند (برای 35000داده بعدی یا بیشتر).
در مقایسه با تعداد امتیازات (مقادیر) آزمون ،داده های آموزشی زیادی نیست ،اینطور است؟
ما برخی از مقادیر ( )NaNرا در مجموعه داده مشاهده کردیم .میتوانیم این نقاط را به سادگی حذف کنیم .اما
با فرض اینکه تغییرات پارامترها بسیار ناگهانی نباشند ،میتوانیم سعی کنیم آنها را با استفاده از تقریب خطی
ساده پر کنیم.
مدل RNNبه یک مقدار گام نیاز دارد که شامل nعدد عنصر به عنوان یک دنباله ورودی باشد.
}Suppose x = {1,2,3,4,5,6,7,8,9,10
در اینجا )step=8( ،را انتخاب می کنیم .در RNNپیچیده تر و به ویژه برای پردازش متن ،به آن (اندازه گام
یا اندازه جاگذاری) نیز می گویند .ایده اینجا این است که ما فرض می کنیم که داده های آب و هوای 8ساعته
می تواند به طور موثر داده های ساعت 9را پیش بینی کند و غیره.
اضافه کردن عناصر مرحله به آموزش و تست ( :)add step elements into train and test
در مرحله بعد ،داده های آزمون و آموزش را به ماتریس با مقدار گام تبدیل می کنیم ،همانطور که در مثال باال
نشان داده شده است.
مدل سازی(:)Modeling
ما یک تابع ساده برای تعریف مدل RNNمی سازیم .از یک نورون برای الیه خروجی استفاده می کند زیرا ما
در اینجا یک عدد با ارزش واقعی را پیش بینی می کنیم .به عنوان فعال سازی ،از تابع ReLUاستفاده می کند.
استدالل های زیر پشتیبانی می شوند.
از آنجایی که آموزش RNNمعموال طوالنی است ،میخواهیم بهروزرسانیهای منظم درباره پایان Epochsها
را ببینیم .با این حال ،ممکن است نخواهیم این بهروزرسانی را در هر Epochsببینیم زیرا ممکن است
خروجی را تحت تاثیر قرار دهد .بنابراین ،ما یک تابع «بازگشت» مینویسیم تا بهروزرسانی نهایی را در هر دوره
( 50 )Epochsچاپ کنیم .میتوانید به اضافه کردن bellsو whistlesهای دیگری به این تابع فکر کنید
تا خطاها و سایر معیارها را به صورت پویا چاپ کنید.
توجه داشته باشید که معیار (از دست دادن ) lossموجود در ویژگی ( )historyمدل ،از دست دادن MSE
است و برای محاسبه از دست دادن RMSEباید یک ریشه مربع ( )square-rootبگیرید.
ما تاکید می کنیم و دوباره نشان می دهیم که مدل در طول آموزش دقیقاً چه چیزی می بیند .اگر به باال نگاه
کنید ،کد برازش مدل به این صورت است:
بنابراین ،مدل با ( )trainXکه در زیر رسم شده است ،و ( )trainYکه فقط بردار 8مرحله ای جابجا شده و
به شکل زیر داده شده است ،برازش داده شد.
حال نقاط آینده را پیش بینی کنید( :)Now predict the future points
اکنون ،میتوانیم با انتقال ( )testXبه مدل آموزشدیده ،پیشبینیهایی برای آینده ایجاد کنیم.
جادو را ببینید!(:) See the magic
وقتی بردار پیشبینیشده را رسم میکنیم ،میبینیم که با مقادیر واقعی مطابقت دارد و این شگفتانگیز است با
توجه به اینکه چقدر دادههای آموزشی استفاده شده است و چقدر در آینده باید پیشبینی کند .تکنیک های
سری زمانی مانند ، ARIMAهموارسازی نمایی ،نمی توانند آینده بسیار دور را پیش بینی کنند و فاصله
اطمینان آنها به سرعت به گونهای بزرگ میشود که دیگر مفید نیست.
به دقت توجه داشته باشید که مدل چگونه میتواند افزایش ناگهانی رطوبت را در نقاط زمانی 12000
پیشبینی کند .هیچ نشانهای از چنین شکل یا الگوی دادهها در مجموعه آموزشی وجود نداشت ،با این حال،
میتواند شکل کلی را به خوبی از روی دادهها پیشبینی کند .اولین 7000نقطه داده!
ما داده مرجع و پیشبینیهای مدل را با هم ترسیم میکنیم تا نشان دهیم که روندهای کلی در دادههای مرجع را
به خوبی دنبال میکند .با توجه به اینکه کمتر از 25درصد از داده ها برای آموزش استفاده شده است ،این
شگفت انگیز است .مرز بین تقسیمبندیهای آموزش و آزمون با خط قرمز عمودی مشخص میشود.
البته برخی از اشتباهات آشکار در پیش بینی مدل وجود دارد ،مانند مقادیر رطوبت باالی 100و برخی از
مقادیر بسیار پایین .اینها را می توان با پس پردازش ( )post-processingهرس کرد یا با تنظیم هایپرپارامتر
مناسب مدل بهتری ساخت.
از آنجایی که مدلسازی دادههای رطوبت را گام به گام با جزئیات پوشش دادهایم ،مدلسازی را با دو پارامتر
دیگر (دما و فشار) به سرعت با کد مشابه اما نه با متن دقیق نشان خواهیم داد.
در پایان:
مجدداً توجه کنید که چگونه مدل قادر است افزایش ناگهانی فشار را در نقاط زمانی 22000-18000پیش
بینی کند .هیچ نشانه ای از چنین شکل یا الگوی داده در مجموعه آموزشی وجود نداشت (مرز با خط قرمز
عمودی مشخص می شود) ،با این حال ،می تواند شکل کلی را به خوبی از 7000نقطه داده اول پیش بینی
کند!