خلاصه مبحث آموزشی :

پیشگویی سری زمانی یک مساله مهم کاربردی است که در بسیاری از زمینه ها نظیر پیش بینی وضع هوا، اقتصاد ، کنترل و … استفاده می شود .

در این پست ما از هوش مصنوعی (شبکه عصبی ، الگوریتم ژنتیک و الگوریتم فازی) برای مدل کردن سیستم ( مساله سری زمانی ) استفاده می کنیم و این روشها را با یکدیگر مقایسه می نماییم .

مساله سری زمانی به عنوان یک مساله شناسایی سیستم در نظر گرفته شده است ، درحالیکه ورودی های سیستم مقادیر گذشته سری زمانی اند و خروجی مطلوب مقدار آینده آن می باشد .

شبکه های عصبی backpropagation ، RBF (Radial Basis Functions) و PNN (polynomial neural network ) مورد بررسی قرار گرفته و سپس مدل پیشرفته PNN یعنی GBSON (genetic-based self organizing network) که تلفیقی از الگوریتم ژنتیک و شبکه عصبی PNN می باشد مورد بررسی قرار گرفته است .

در نهایت نیز یک مدل خاص از شبکه فازی برای تحلیل مورد استفاده قرار گرفته است .

مقدمه :

یک سری زمانی مجموعه ای از مشاهدات X(t) می باشد که هر کدام در یک زمان معین استخراج شده اند .

یک سری زمانی گسسته ، سری ای است که در زمانهای گسسته نمونه برداری شده است .

سری زمانی پیوسته سری ای است که با ثبت پیوسته مشاهدات در یک دوره زمانی بدست آمده است.[1]

مثالی از یک سری زمانی در شکل (1) آمده است .

برای تحلیل داده های سری زمانی باید آن را به اجزایش تجزیه کرد .

هر جزء به عنوان یک فاکتور که در سری زمانی تاثیرگذار است در نظر گرفته میشود .

سه جزء اصلی سری زمانی مشخص شده اند .

1- Trend (تمایل) : گرایش به افزایش یا کاهش در دراز مدت را در یک سری زمانی نمایش می دهد .

2- Seasonality (فصلی) : رفتار تناوبی یک سری زمانی را در یک دوره معین از زمان نمایش می دهد .

3- Fluctuation (نوسان، تغییر) جزء بی قاعده سری زمانی می باشد . [1]

سری زمانی مکی گلاس

شکل (1) سری زمانی مکی گلاس

کاربردهای پیشگویی سری های زمانی را می توان در حوزه های تجارت ، اقتصاد ، کنترل موجودی ، پیش بینی وضع هوا ، پردازش سیگنال و کنترل و سایر زمینه ها پیدا کرد .

در این مقاله هوش مصنوعی برای حل مساله سری زمانی بکار گرفته شده است .

مساله سری زمانی به عنوان یک مساله شناسایی سیستم در نظر گرفته شده است ، درحالیکه ورودی های سیستم مقادیر گذشته سری زمانی اند و خروجی مطلوب مقدار آینده آن می باشد .

یک روش برای حل اینگونه مسائل استفاده از شبکه عصبی می باشد .

 

از میان شبکه های عصبی شبکه های عصبی TDNN و PNN بیشتر برای تشخیص سری زمانی بکار می روند در این مقاله شبکه های عصبی backpropagation ، RBF و PNN مورد بررسی قرار گرفته است و سپس برای رفع اشکالات آن از الگوریتم ژنتیک استفاده شده است و در نهایت نیز یک سیستم فازی برای حل مساله بکار گرفته شده است .

  1. سری زمانی مکی گلاس:

سری زمانی مکی گلاس با استفاده از فرمول زیر بدست می آید :

Time series prediction using neural network

این سری برای T>17 حالت آشوبگونه و اغتشاشی از خود نشان می دهد و بنابراین در مسایل پیش بینی سری های زمانی چون پیش بینی نقاط بعدی این سری مشکل می شود از این سری جهت آزمایش استفاده می شود .

[2] نمونه این سری برای نقطه شروع 8/0 X=و 25T= به صورت زیر می شود :

Time series prediction using neural network

2-شبکه های عصبی :

ایده شبکه عصبی در سال 1943 توسط مک کلوچ و پیتز ارایه شد.

این دو نفر مدل ساده نرون را ایجاد کردند که این نرون قابلیت ساخت دروازه های AND و OR را داشت .

سپس این مدل توسط دانشمندان دیگر توسعه پیدا کرد و از حالت تک نرون به شبکه ای از نرون ها توسعه یافت .

برای استفاده از یک شبکه عصبی باید ابتدا شبکه را تعلیم داد.

در سالهای گذشته ساختار های متنوعی برای شبکه های عصبی ارایه شده است.

شاید به مطالب زیر نیز علاقمند باشید:

که از مهمترین آنها می توان به شبکه های بازگشتی و feedforward اشاره کرد .

برای این شبکه ها الگوریتم های مختلف تعلیم ارایه شده اند که می توان آنها را به دو دسته نظارتی و بدون ناظر تقسیم کرد .

از جمله کاربردهای شبکه های عصبی می توان به شناخت الگوهای مرئی (صوت،چهره،تصویر)، تقریب توابع، طبقه بندی، کنترل کننده ها و پیش بینی (وضع هوا،سریهای زمانی و…) اشاره کرد.

در بخش های بعد از شبکه های عصبی گوناگون برای پیش بینی سری زمانی استفاده شده است که ابتدا نوع شبکه ، ساختار آن و سپس الگوریتم تعلیم شبکه توضیح داده شده است .

2-1 شبکه عصبی RBF :

شبکه های عصبی بطور وسیعی در مسایل سری های زمانی و پیش بینی بکار می روند ساختارها و مدلهای گوناگونی از این شبکه ها برای این گونه مسایل طراحی شده اند یکی از این شبکه های عصبی شبکه عصبی توابع پایه ای شعاعی می باشد .

این شبکه یک لایه پنهان دارد که متشکل از نرونهایی است که تابع فعالیت آنها یک تابع گوسین ، چندجمله ای ، مکعبات و … می تواند باشد .

پارامترهای شبکه عصبی RBF وزنهای بین لایه پنهان و لایه خروجی ، مراکز توابع فعالیت وشعاع توابع فعالیت می باشند .

این شبکه برای مدلسازی سیستم سری زمتنی بکار برده شده است و نتایج آن در قسمت آزمایشات با بقیه شبکه ها مقایسه شده است .

الگوریتم تعلیم شبکه عصبی RBF :

ورودی الگوریتم:

حداکثر خطای مورد نظر ، الگوهای تعلیم و شعاع نرون های لایه مخفی

مراحل:

  1. l=1 تعداد یک نرون در لایه مخفی
  2. یک الگوی تعلیم را بطور تصادفی انتخاب کرده و آن را به عنوان مرکز نرون l قرار می دهیم .
  3. محاسبه وزنهای لایه دومTime series prediction using neural network
  4. خطای شبکه به تمامی الگوهای تعلیم را بدست می آوریمTime series prediction using neural network
  5. اگر خطا از خطای مورد نظر کمتر است توقف کن
  6. در غیر اینصورت l=l+1 به گام 2 برگرد .

مزایا و معایب شبکه RBF :

  • اشکالات RBF :
  1. این شبکه برای الگوهای تعلیم خطای نسبتا کمی دارد ولی برای الگوهای تست خطا زیاد می شود
  2. شعاع r باید ابتدا تعیین شود که با تغییر r وزنها خیلی تغییر می کنند .
  3. 2هر چه تعداد نرون ها بیشتر شود تعمیم پذیری شبکه (جواب آن به داده های تست) بدتر می شود .

2-2- شبکه عصبی Backpropagation :

  • الگوریتم شبکه عصبی Backpropagation :

الگوریتم دسته ای :

  1. وزنهای اولیه شبکه را در مقادیر تصادفی کوچک قرار می دهیم .
  2. برای تمام الگوهای تعلیم P=1,2,…,p مراحل انتشار مستقیم و معکوس زیر را تکرار کن

2-1) انتشار مستقیم : ورودی Xp را به شبکه اعمال و تمام خروجیها و خالص ورودیها (net)را حساب کن .

2-2) انتشار معکوس : ابتدا خطا را حساب می کنیم سپس را حساب مي كنيم .

يعنی از لايه خروجي شروع كرده و اين محاسبات را انجام مي دهيم و براي لايه های دیگر نيز محاسبات را به صورت زير انجام مي دهیم:

2-3) مقادیر را ذخیره می کنیم .

2-4) حساسیت نسبت به تک تک الگوها را حساب کرده و همه را با هم جمع می کنیم

  1. وزنهای جدید را محاسبه می کنیم :
  2. به قدم 2 برگرد تا شرط پایان برقرار شود. (ساده ترین شرط توقف تعداد تکرار الگوریتم یا رسیدن الگوریتم به یکخطای مطلوب است )

الگوریتم تکراری نیز دقیقا مانند این روش است با این تفاوت که بعد از بدست آوردن خطای یک الگو وزنها را عوض می کنیم .

البته الگوریتم تکراری همگرایی اش سریعتر است .

1476-4598-4-29-1-lسیستم فازی :

نظريه فازی برای اولين بار در سال 1960 توسط استاد ايرانی دانشگاه کاليفرنيا، پروفسور لطفی زاده مطرح شد.

درکنترل فازی برای هر پديده يک تابع در نظر مي گيرند که ميزان تعلق آن را به يک مجموعه بيان مي کند .

در این شيوه سه مرحله وجود دارد.

ابتدا مرحله فازی سازی است که مرحله تعريف مجموعه های فازی برای متغيرهای ورودی وخروجی است.

برای تعريف اين مجموعه های فازی، بايد دانش اوليه ای از دامنه تعريف هر کدام از اين متغيرها داشته باشيم .

در مرحله بعد يا مرحله استنتاج،تعدادی قاعده فازی بوجود مي آوريم و در مرحله آخر که مرحله غيرفازی سازی نام دارد،با توجه به مقادیری که در مرحله استنتاج بدست آمده است مقداری حقيقی برای خروجی بدست مي آوريم

الگوریتم تعليم (روش جدول جستجو):

  1. مجموعه های فازیی را تعیین می کنیم که زوج های ورودی – خروجی را پوشش دهد
  2. از روی هر زوج ورودی – خروجی یک قاعده تولید می کنیم.
  3. یک درجه به هر قاعده تولید شده در گام دوم نسبت می دهیم و از بین قواعد متضاد قاعده ای که بالاترین درجه را دارا می باشد نگه می داریم. که به این ترتیب تعداد قواعد کاهش می یابد.
  4. پایگاه قواعد فازی را ایجاد می کنیم.
  5. ساخت سیستم فازی بر اساس پایگاه قواعد.

این طراحی بر اساس سیستم فازی با موتور استنتاج ضرب، فازی ساز منفرد و غیر فازی ساز میانگین مراکز به صورت زیر خواهد بود:

Time series prediction using neural network

اشکالات سیستم (روش جدول جستجو):

  1. در این روش توابع تعلق ثابت اند و به زوج های ورودی خروجی بستگی ندارند . بدین معنی که توابع تعلق با توجه به زوج های ورودی خروجی به طور بهینه ای به دست نمی آیند.
  2. پایگاه قواعد فازی در این روش ممکن است کامل نباشد که در نتیجه سیستم پاسخ خوبی به داده های تست نمی دهد.

GMDH (Group Method Data Handling) :

در اواخر دهه 1960 توسط Ivakhnenko به عنوان وسیله ای برای شناسایی ارتباطات غیرخطی بین متغیرهای ورودی و خروجی ارائه شد .

الگوریتم GMDH یک ساختار بهینه از مدل را توسط نسلهای موفق توصیفات جزئی (PD) داده که به عنوان چندجمله ای های درجه دوم با دو ورودی در نظر گرفته شده اند را ارائه می کند .

البته این الگوریتم مشکلاتی نیز دارد که بعدها این مشکلات توسط ارائه شبکه عصبی چند جمله ای تا حدودی مرتفع شده است .

تابع انتقال هرPD از فرمول زیر بدست می آید :

Time series prediction using neural network

اشکالات GMDH :

1- گرایش به ایجاد چندجمله ای کاملا پیچیده برای سیستمهای نسبتا ساده دارد .

2- به علت ساختار عمومی GMDH ( چند جمله ای دو متغیره درجه دوم ) ، گرایش به ایجاد یک شبکه (مدل) کاملا پیچیده وقتی که برای سیستمهای غیرخطی مراتب بالاتر بکار می رود دارد .

3- برای سیستمهای کمتر از سه ورودی ساختار مناسبی ندارد .

راه حل :

استفاده از شبکه عصبی چندجمله ای در این روش

GMDH-network

2-3- شبکه عصبی PNN (Polynomial neural network):

 

شبکه عصبی چندجمله ای الگوریتم جدیدی است که قابلیت انعطاف بسیار زیادی دارد به طوریکه هر گره در این شبکه هم از لحاظ تعداد ورودی (حداکثر سه ورودی) و هم از لحاظ تابع انتقال آن (حداکثر سه ورودی) می تواند متفاوت باشد .

مرتبه چندجمله ای ها در هر گره شبکه می تواند متفاوت (خطی ، درجه دوم ومکعب)باشد .

معماری این شبکه از ابتدا ثابت نیست (هم ساختار و هم پارامترهای شبکه ) اما کاملا بهینه می شود ، بطور مثال تعداد لایه ها می تواند با اضافه شدن لایه جدید اگر لازم باشد افزایش یابد .

الگوریتمهای آموزش شبکه‏های چندجمله‏ای

    • Group Method of Data Handling (GMDH)
    • Polynomial Network Training Routine (PNETTR)
    • Algorithm for Synthesis of Polynomial Network (ASPN)
    • همگی توسط A.G.Ivakhnenko معرفی شده‏اند.

ساختار کلی شبکه عصبی PNN به صورت شماتیک :

Time series prediction using neural network

الگوریتم تعلیم شبکه عصبیPNN :

ابتدا داده ها را به صورت زیر در می آوریم :

Time series prediction using neural network

برای محاسبه خروجی تخمینی ، ما برای هر جفت ورودی یک PD تشکیل می دهیم. تعداد PD ها بر اساس تعداد ورودیها می باشد .

مثلا اگر 4 ورودی داشته باشیم تعداد آنها 6 عدد می شود . پارامترهای مدل از روی حداقل خطای داده های آموزش بدست می آیند .

بعلاوه ما بهترین مدل را برای تشکیل لایه اول انتخاب می کنیم.

 

در نهایت ما PD های جدید را از روی متغیرهای میانه (Zm ها) که در تکرار جدید واقع شده اند ایجاد می کنیم .

سپس ما یک جفت از متغیرهای ورودی جدید را گرفته و عملیات را روی آن انجام می دهیم تا زمانیکه به معیار توقف برسیم .

هنگامی که لایه پایانی ساخته شد گره با بهترین عملکرد به عنوان خروجی در نظر گرفته می شود . بقیه گره های آن لایه حذف می شوند . این عملیات در لایه های قبلی تا لایه اول انجام می شود .

مراحل طراحی شبکه PNN :

  1. ابتدا متغیرهای ورودی را نرمالیزه کرده و مطابق جدول زیر آنها را تقسیم می کنیم .

X متغیرهای ورودی

خروجیY

x1 x2 ….. xN

Y

2-داده ها را به دو دسته تست و آموزش تقسیم می کنیم :

X

Y

x11 x21 ….. xN1

x12 x22 ….. xN2

.

.

.

x1ntr x2ntr ….. xNntr

Y1

Y2

.

.

.

Yntr

x11 x21 ….. xN1

x12 x22 ….. xN2

.

.

.

x1nte x2nte ….. xNnte

Y1

Y2

.

.

.

Ynte

n=nte+ntr داده آموزش برای تشکیل مدل PNN استفاده می شود .

(محاسبه ثوابت هر PD گرههای موجود در هر لایه)سپس داده تست برای ارزیابی مدل PNN استفاده می شود .

شاید به مطالب زیر نیز علاقمند باشید:

  1. انتخاب یک ساختار برای PNN :

ساختار PNN براساس تعداد ورودی ها و مرتبه PD هر لایه انتخاب می شود .

دو نوع ساختار PNN بنیادی و PNN اصلاح شده ، متمایز شده اند . هر کدام از آنها به دو دسته تقسیم می شوند : جدول زیر این دو ساختار را نشان می دهد .

  1. تعیین تعداد متغیرهای ورودی و مرتبه چندجمله ای تشکیل دهنده PD :

ما متغیرهای ورودی یک گره را ازبین N متغیر ورودی انتخاب می کنیم .

تعداد کل PD های لایه حاضر بر طبق تعداد متغیرهای ورودی انتخاب شده از گره های لایه قبل تغییر می کند .

در نتیجه تعداد گرهها برابر N!/(N-r)!r! می شود که r تعداد متغیرهای ورودی انتخاب شده است.

  1. تخمین ثوابت PD :

از رابطه زیر محاسبه می شوند :

Time series prediction using neural network

i شماره گره ، k شماره داده ntr تعداد داده آموزش ، n تعداد ورودیهای انتخابی ، m ماکسیمم درجه، n’ تعداد ثوابت تخمینی .

5- انتخاب PD با بهترین عملکرد :

هر PD توسط داده های آموزش و تست تخمین زده شده و ارزیابی می شود .

سپس ما اینها را باهم مقایسه کرده و PD هایی را که عملکرد بهتری داشته اند جدا می کنیم .

معمولا ما یک تعداد W از قبل تعیین شده از این PD ها را انتخاب می کنیم .

6-چک کردن شرط توقف :

الف- اگر خطای مرحله بعدی از خطای مرحله قبلی بزرگتر باشد .

ب-اگر تعداد لایه ها به تعداد از قبل تعیین شده توسط کاربر برسد.

7- انتخاب متغیرهای جدید برای لایه بعد.

خروجی های لایه قبل را به عنوان ورودی لایه جدید در نظر می گیریم.

مراحل 4 تا 7 را تا رسیدن به شرط توقف تکرار می کنیم .

Time series prediction using neural network

همان طور که دیده می شود ضرایب این شبکه به وسیله فرمول زیر به دست می آیند :

Time series prediction using neural network

این ضرایب به صورت زیر بدست می آیند ، همانطورکه می دانیم خروجی به صورت زیر بدست می آید:

حال برای محاسبه ضرایب مراحل زیر طی می شوند :

Time series prediction using neural network

هر چند این فرمول ضرایبی را می دهد که خطا را کاهش می دهد اما این خطا می نیمم خطا نیست و با تغییر ضرایب می توان به جوابهای بهتری دست یافت .

اما این ضرایب را چگونه می توان از میان انبوه اعداد یافت؟

یکی از راه حلها استفاده از الگوریتم ژنتیک برای بدست آوردن بهترین ضرایب جهت کاهش خطا می باشد .

حال به صورت زیر از الگوریتم ژنتیک برای بهبود ضرایب در شبکه عصبی PNN استفاده شده است :

الف – ورودیهای لایه اول را همان متغیرهای مستقل داده ورودی در نظر می گیریم .

ب – خروجی های هر لایه بهترین گره های بدست آمده توسط الگوریتم ژنتیک هستند که اینها خود ورودی های لایه بعد می شوند .

ج – ضرایب هر گره را به صورت جمعیت اولیه برای الگوریتم ژنتیک در نظر می گیریم و الگوریتم ژنتیک را برای یافتن بهترین ضرایب بکار می بریم .

پس از بدست آوردن بهترین ضرایب این گره های با بهترین ضرایب را از بقیه جدا می کنیم و ورودی را به اینها می دهیم تا خروجی گره های لایه اول بدست آید .

این خروجی ها را به عنوان ورودی لایه بعدی در نظر می گیریم .

این کار را تا زمانی که به خطای مورد نظر برسیم ادامه می دهیم .

روشی که در این تحقیق استفاده شده است به صورت زیر می باشد :

ابتدا سه گره را در نظر می گیریم .

سپس برای هر گره به ترتیب 20 جمعیت در نظر می گیریم .

هر فرد به صورت زیر در نظر گرفته می شود .

هر فرد را به عنوان یک رشته 128 بیتی در نظر می گیریم که هر 32 بیت آن مربوط به یک ضریب می باشد .

در اینجا 4 ضریب در نظر گرفته شده است .

بیت اول از هر 32 بیت به عنوان بیت علامت در نظر گرفته می شود (+ یا – ) .

2 بیت بعدی برای قسمت صحیح ضریب و مابقی بیت ها برای قسمت اعشاری در نظر گرفته می شوند .

Time series prediction using neural network

 

حال ابتدا با استفاده از روش تورنمنت (q=6) 6 فرد را انتخاب کرده دو نفر را به عنوان والد انتخاب می کنیم .

سپس عمل تقاطع را با ضریب Pc=0.95 و بعد آن عمل جهش را با ضریب Pm=.05 انجام می دهیم ، تا دو فرزند جدید ایجاد شوند . این کار را تا زمان تولید P=20 فرزند تکرار می کنیم.

حال با استفاده از روش Elitism (نخبه گرایی) بهترین فرد نسل قبل را نیز به نسل جدید منتقل می کنیم . این کار را به تعداد نسل های لازم (3500 نسل ) تکرار می کنیم .

سپس بهترین فرد نسل آخر را به عنوان ضرایب برای این گره انتخاب میکنیم و به گره بعد می رویم .

بعد از این که لایه اول تمام شد اگر به شرط توقف رسیدیم می ایستیم در غیر اینصورت به لایه بعد می رویم .

خروجی های لایه اول را به عنوان ورودی لایه بعد در نظر گرفته و همین مراحل را برای لایه بعد تا زمان رسیدن به پاسخ مطلوب ادامه می دهیم .

در کلیه محاسبات برای شبکه ها تعداد ورودی ها را 3 در نظر گرفته ایم . یعنی جمله چهارم را بر اساس سه جمله قبل مشخص می کنیم .

– نتایج بدست آمده از شبکه BP :

در اینجا از شبکه عصبی BP با ساختار 3L 15N 1L استفاده شده است که نتایج زیر بدست آمده است.

نمودار تعداد تکرار اموزش شبکه وخطای بدست امده برای داده ها:

نمودار جواب مطلوب و جواب شبکه به داده آموزش که به صورت زیر می باشد ولی به علت خطای بسیار ناچیز با چشم قابل مشاهده نیست .

خطای بدست آمده از داده آموزش:

نمودار جواب مطلوب و جواب شبکه به داده تست که به صورت زیر می باشد ولی به علت خطای بسیار ناچیز با چشم قابل مشاهده نیست .

Time series prediction using neural network

 

خطای داده تست:

Time series prediction using neural network

2- نتایج بدست آمده از شبکه RBF:

شکل زیر داده آموزش مطلوب و پاسخ شبکه به داده های ورودی را نشان می دهد.

Time series prediction using neural network

 

شکل زیر خطای شبکه نسبت به داده آموزش را نشان می دهد :

Time series prediction using neural network

نمودار جواب مطلوب و جواب شبکه RBF به داده تست که به صورت زیر می باشد :

Time series prediction using neural network

خطای داده تست:

3- نتایج بدست آمده از سیستم فازی (جدول جستجو):

شکل زیر داده آموزش مطلوب و پاسخ سیستم به داده های ورودی را نشان می دهد:

به علت خطای زیاد سیستم فازی با چشم نیز این خطا قابل مشاهده است .

شکل زیر خطای سیستم نسبت به داده آموزش را نشان می دهد : 1246/0 = Etr

نمودار جواب مطلوب و جواب سیستم فازی به داده تست که به صورت زیر می باشد :

Time series prediction using neural network

هر چند که در داده های تست سیستم فازی بهتر عمل کرده است اما باز هم خطا نسبت به شبکه عصبی زیاد است.

خطای داده تست: 032/0Ete =

Time series prediction using neural network

4- نتایج بدست آمده از شبکه عصبی PNN :

شکل زیر داده آموزش مطلوب و پاسخ سیستم به داده های ورودی را نشان می دهد:

Time series prediction using neural network

شکل زیر خطای شبکه نسبت به داده آموزش را نشان می دهد :Time series prediction using neural network

نمودار جواب مطلوب و جواب شبکه PNN به داده تست که به صورت زیر می باشد :

 

شکل زیر خطای شبکه نسبت به داده آموزش را نشان می دهد :

5- نتایج بدست آمده از شبکه عصبی GBSON:

شکل اصلی و شکل پیش بینی شده داده آموزش :

شکل زیر خطای شبکه نسبت به داده آموزش را نشان می دهد :

نمودار جواب مطلوب و جواب شبکه GBSON به داده تست :

خطای داده تست :

مقایسه عملکرد شبکه ها در پیش بینی سری زمانی

شبکه عصبی ژنتیک GBSONشبکه عصبی PNNشبکه عصبی RBFشبکه عصبی BPسیستم فازی
0023/000245/00011/00023/01246/0خطای داده آموزش
0016/000186/00031/00017/0032/0خطای داده تست
00195/00022/00022/0002/00639/0میانگین خطا

نتیجه گیری :

از لحاظ سرعت شبکه عصبی PNN بهترین سرعت را چه در مرحله آموزش و چه در مرحله تست دارا می باشد .

بهترین پاسخ برای داده آموزش را شبکه عصبی RBF دارا می باشد و بدترین پاسخ مربوط به سیستم فازی می باشد .

بهترین پاسخ برای داده تست را شبکه عصبی- ژنتیک GBSON دارا می باشد و بدترین پاسخ مربوط به سیستم فازی می باشد . البته سرعت آموزش شبکه GBSON بسیار پایین است .

از لحاظ میانگین خطا نسبت به داده تست و آموزش نیز بهترین پاسخ مربوط به شبکه GBSON می باشد .

MFILE ها :

1- برنامه نوشته شده برای شبکه BP در مطلب :

clc

clear

load(‘E:\shenasaey projeh\x’);load(‘E:\shenasaey projeh\xtr’);load(‘E:\shenasaey projeh\xte’)

load(‘E:\shenasaey projeh\ytr’);load(‘E:\shenasaey projeh\yte’);

xtr=xtr’;

ytr=ytr’;

xte=xte’;

net.trainParam.epochs = 500;

net.trainParam.goal = 0;

net.performFcn=’mse’;

net = newff(xtr,ytr,[15]);

net = train(net,xtr,ytr);

y = sim(net,xtr);

y=[x(1:3) y];

figure(1)

plot(y)

hold on

plot(x(1:300),’k’)

etr=(x(1:300)-y).^2;

figure(2)

plot(x(1:300)-y,’r’)

Etr=sqrt(sum(etr)/300)

figure(3)

yte=sim(net,xte);

plot(yte,’r’)

hold on

plot(x(301:600),’b’)

e=(x(301:600)-yte).^2;

figure(4)

plot(x(301:600)-yte,’k’)

E=sqrt(sum(e)/300)

2- برنامه نوشته شده برای شبکه RBF :

clc

clear

load(‘E:\shenasaey projeh\x’)

load(‘E:\shenasaey projeh\xte’)

load(‘E:\shenasaey projeh\xtr’)

load(‘E:\shenasaey projeh\yte’)

load(‘E:\shenasaey projeh\ytr’)

xtr=xtr’;

ytr=ytr’;

xte=xte’;

yte=yte’;

net=newrbe(xtr,ytr);

Y=[];

for i=1:297

Y =[Y sim(net,xtr(:,i))];

end

Y=[x(1,1:3) Y];

plot(x(1,1:300),’b’)

hold on

plot(Y,’k’)

figure(2)

plot(x(1,1:300)-Y,’b’)

Etr=sqrt(sum((x(1,1:300)-Y).^2)/300)

Y=[];

for i=1:300

Y =[Y sim(net,xte(:,i))];

end

figure(3)

plot(yte,’k’)

hold on

plot(Y,’b’)

Ete=sqrt(sum((yte-Y).^2)/300)

figure(4)

plot(yte-Y,’b’)

  1. برنامه نوشته شده برای سیستم فازی :

clc

clear

T=30;

x=[1.2];

delta=1;

for i=2:T

x(i)=x(i-1)/1.1;

end

for i=T+1:round(600/delta)

x(i)=(1/1.1)*(x(i-1)+0.2*x(i-T)/(1+x(i-T)^10));

end

max_x=max(x)+0.2;

min_x=min(x)-0.2;

n=4;

sin=15;

stp=(max_x-min_x)/(sin-1);

y=min_x:0.01:max_x;

cent=min_x:stp:max_x;

% for i=1:sin

% k=trimf(y,[cent(i)-stp cent(i) cent(i)+stp]);

% end

so=15;

stp_o=(max_x-min_x)/(so-1);

cent_o=min_x:stp_o:max_x;

% for i=1:so

% k=trimf(y,[cent_o(i)-stp_o cent_o(i) cent_o(i)+stp_o]);

% end

for k=1:296

for t=1:4

for i=1:sin

mu_a(i)=trimf(x(k+t-1),[cent(i)-stp cent(i) cent(i)+stp]);

end

rule(k,t)=find(mu_a==max(mu_a));

rule_d(k,t)=max(mu_a);

end

for i=1:so

mu_b(i)=trimf(x(k+4),[cent_o(i)-stp_o cent_o(i) cent_o(i)+stp_o]);

end

B(k,1)=find(mu_b==max(mu_b));

B_d(k,1)=max(mu_b);

end

D=prod(rule_d’)’.*B_d;

for i=296:-1:1

for j=i-1:-1:1

if rule(i,:)==rule(j,:)

if D(j)<D(i)

D(j)=-inf;

else

D(i)=D(j);

B(i)=B(j);

D(j)=-inf;

end

end

end

end

for i=296:-1:1

if D(i)==-inf

D(i)=[];

rule(i,:)=[];

B(i)=[];

end

end

l_rule=length(rule);

hold on;

for u=1:596

suming_s=0;

suming_m=0;

pro=ones(1,l_rule);

y=[x(u) x(u+1) x(u+2) x(u+3)];

for k=1:l_rule

for t=1:4

pro(k)=pro(k)*trimf(y(t),[cent(rule(k,t))-stp cent(rule(k,t)) cent(rule(k,t))+stp]);

end

suming_s=suming_s+pro(k)*cent_o(B(k));

suming_m=suming_m+pro(k);

end

f(u+4)=suming_s/suming_m;

end

plot(x(1,1:300),’b’)

hold on

plot(f(1,1:300),’r’)

figure(2)

plot(x(1,1:300)-f(1,1:300),’b’)

Etr=sqrt(sum((x(1,1:300)-f(1:300)).^2)/300)

figure(3)

plot(x(1,301:600),’r’)

hold on

plot(f(1,301:600),’b’)

Ete=sqrt(sum((x(1,301:600)-f(1,301:600)).^2)/300)

figure(4)

plot(x(1,301:600)-f(1,301:600),’r’)

  1. برنامه نوشته شده برای شبکه PNN :

clc

clear

load(‘E:\shenasaey projeh\x’);load(‘E:\shenasaey projeh\xte’);load(‘E:\shenasaey projeh\yte’)

load(‘E:\shenasaey projeh\ytr’);load(‘E:\shenasaey projeh\xtr’)

c=[];

[sx,lx]=size(xtr);

y_col=[ytr;yte];

zte=[]; % khoroji laye 1

ztr=[];

xpd=cell(1,3);

ff=0;preE=10^10;

while 1

ff=ff+1

t=0;

for i=1:lx-1

for j=i+1:lx

t=t+1;

xpd{t}=Xpd([xtr(:,i) xtr(:,j)]);

end

end

for k=1:3

c(k,:)=inv(xpd{k}’*xpd{k})*xpd{k}’*ytr;

end

for kk=1:297

ztr=[ztr quad(xtr(kk,:),c)];

end

for kk=1:300

zte=[zte quad(xte(kk,:),c)];

end

z=[ztr’;zte’];

E_col=[];

for k=1:3

e=0;

for jj=1:597

e=e+(y_col(jj,1)-z(jj,k))^2;

end

u=e/597;

E_col=[E_col sqrt(u)];

end

xtr=ztr’;xte=zte’;

zz=z;

z=[];

if min(preE)<=min(E_col)

break

end

preE=E_col;

ztr1=ztr;zte1=zte;

ztr=[];zte=[];

[sx,lx]=size(xtr);

xpd=[];

end

Etr=[];

for k=1:3

e=0;

for jj=1:297

e=e+(y_col(jj,1)-zz(jj,k))^2;

end

u=e/297;

Etr=[Etr sqrt(u)]

end

Ete=[];

for k=1:3

e=0;

for jj=298:597

e=e+(y_col(jj,1)-zz(jj,k))^2;

end

u=e/300;

Ete=[Ete sqrt(u)]

end

y_col=[x(1:3)’; y_col];

figure(1)

plot(y_col(1:300,1))

hold on

ztr1=ztr1′;

zte1=zte1′;

ztr=[ztr1(:,1);zte1(:,1)];

ztr=[x(1:3)’;ztr];

plot(ztr(1:300,1),’r’)

s=(y_col-ztr);

figure(2)

plot(s)

figure(3)

plot(y_col(301:600,1))

hold on

plot(ztr(301:600,1),’r’)

s=(y_col(301:600,1)-ztr(301:600,1));

figure(4)

plot(s)

5- M-FILE مربوط به آموزش شبکه عصبی – ژنتیک GBSON :

clc

clear

load(‘C:\Documents and Settings\PC\Desktop\New Folder\Dtr’)

load(‘C:\Documents and Settings\PC\Desktop\New Folder\Dte’)

x=Dtr(:,1:3); % dadeye vorodi

xte=Dte(:,1:3);yte=Dte(:,4);

[sx,lx]=size(x);ytr=Dtr(:,4); % khoroji matlob

y_col=[ytr;yte];cs=[];c_f=[];P=20;l=128;

yyte=[]; % khoroji laye

Pc=.95;Pm=.1;q=6;

a1=cell(1,3);

c=cell(1,3);

c_laye=[];

xu=cell(1,3);

for laye=1:15

E=[];

ztr_col=[];ztr=[];

aa=[];a_new=[];

n=300;

for i=1:3

a1{i}=randint(P,l); %matrice valedin

end

for node=1:3

k=node;

a=a1{node};

for g=1:3500

E=[];

i=1;

while i<5

for ii=1:P

c_f(ii,i)=2.^(-1:-1:-29)*a(ii,32*(5-i)-28:(32*(5-i)))’;

cs(ii,i)=bi2de(a(ii,32*(5-i)-30:32*(5-i)-29),’left-msb’)+c_f(ii,i); %halgheye ijade sabetha

if a(ii,32*(5-i)-31)==1

cs(ii,i)=-cs(ii,i);

end

end

i=i+1;

end

for i=1:P %halgheye be dast avardane khoroji

xpd=Xpd(x,k);

for kk=1:300

ztr=[ztr;sum(xpd(kk,:).*cs(i,:))];

end

ztr_col(:,i)=ztr;

ztr=[];

end

syy=0;

for i=1:P %halgheye be dast avardane khata

for j=1:300

syy=syy+(ztr_col(j,i)-ytr(j,1))^2;

end

E=[E;sqrt((1/n)*(syy))];

syy=0;

end

if rem(g,50)==0

g

laye

E(1:3,:)

cs(1:3,:)

end

e=E;

fd=[];

ii=0;

while ii<3

ii=ii+1;

fd=find(e==min(e));

if length(fd)>1

for j=2:length(fd)

e(fd(j,1),1)=10^5*e(fd(j,1),1);

end

end

a_e(ii,:)=a(fd(1,1),:);

[sa,la]=size(a_e);

e(fd(1,1),:)=10^5*e(fd(1,1),:);

cr=[];

if sa>2

cr=[];

for k1=1:sa

for k2=k1+1:sa

if k1~=k2

k3=1;

cu=0;

while k3<128

if a_e(k1,k3)==a_e(k2,k3)

cu=cu+1;

end

k3=k3+32;

end

if cu==4

cr=[cr k2];

end

end

end

end

end

if cr~=0

if length(cr)==3

a_e(2:3,:)=[];

ii=ii-2;

end

if length(cr)==1

a_e(cr(1),:)=[];

ii=ii-1;

end

end

fd=[];

end

for i=1:P %halgheye fitnes

f(i,1)=1/(E(i,1));

end

sum_f=sum(f(1,:));

ss=0;

m=0;

for tt=1:P/2 %halgheye tolide farzandan

o=[];

while m<2 %halgheye entekhabe 2 valed

ff=[];

for i=1:q

rd=fix(P*rand)+1;

o=[o;a(rd,:)];

ff=[ff;f(rd,1)];

end

sum_ff=sum(ff(1,:));

r=sum_ff*rand;

for i=1:q

if ss<r

ss=ss+ff(i);

end

if ss>r

aa=[aa;o(i,:)];

ss=0;

r=sum_ff*rand;

[m,vv]=size(aa);

end

if m==2

ss=0;

break

end

end

end

a_old=aa;

ri=fix((l-2)*rand)+1;

rr=rand;

if rr<Pc %halgheye entekhabe cross over

for j=ri:l

a_old(1,j)=aa(2,j);

a_old(2,j)=aa(1,j);

end

ii=i+1;

else

ii=l;

end

for j=1:2 %halgheye mutation

for i=ii:l

zz=rand;

if zz<Pm

if a_old(j,i)==1

a_old(j,i)=0;

else

a_old(j,i)=1;

end

end

end

end

a_new=[a_new;a_old];

a_old=[];

aa=[];

m=0;

end %payane GA

a=a_new;

[tss,tse]=size(a_e);

for i=1:tss % halgheye jaygozinie behtarinhaye nasle ghabl ba nasle bad

if i<4

a(i,:)=a_e(i,:);

else

break

end

end

a_e=[];

a_new=[];

ztr=[];

end

E=[];

for i=1:P % halgheye mohasebeye khorojiha

xpd=Xpd(x,k);

for kk=1:300

ztr=[ztr;sum(xpd(kk,:).*cs(i,:))];

end

ztr_col(:,i)=ztr;

ztr=[];

end

syy=0;

for i=1:P % halgheye mohasebeye khataye khorojiha

for j=1:300

syy=syy+(ztr_col(j,i)-ytr(j,1))^2;

end

E=[E;sqrt((1/n)*(syy))];

syy=0;

end

fd=find(E==min(E));

ztr(:,1)=ztr_col(:,fd(1,1));

E=[];

xu{node}=ztr;

c{node}=cs(fd(1,1),:);

ztr=[];

ztr_col=[];

end

for im=1:3

syy=0;

xdh=xu{im};

for j=1:300

syy=syy+(xdh(j,1)-ytr(j,1))^2;

end

E=[E;sqrt((1/n)*(syy))];

if E<.002

break

end

syy=0;

end

for i=1:3

x(:,i)=xu{i};

c_laye(i,:)=c{i};

end

c_col{laye}=c_laye

end

M-FILE مربوط به تست شبکه عصبی – ژنتیک GBSON در متلب :

clc

clear

load(‘C:\Documents and Settings\PC\Desktop\New Folder\Dte’);

load(‘i:\arshad\Genetic\genetic project\Gbson\tornoment\c_colbitavan62tr8001’);

xte=Dte(:,1:3);yte=Dte(:,4);E=[];

zte=[];Ecol=[];

for ij=1:4

css=c_col{1,ij};

zte_col=[];

for i=1:3 %halgheye be dast avardane khoroji

xpd=Xpd(xte,i);

for kk=1:297

zte=[zte;sum(xpd(kk,:).*css(i,:))];

end

zte_col(:,i)=zte;

zte=[];

end

syy=0;

for i=1:3 %halgheye be dast avardane khata

for j=1:297

syy=syy+(zte_col(j,i)-yte(j,1))^2;

end

E=[E;sqrt((1/297)*(syy))];

syy=0;

end

xte=zte_col;

Ecol=[Ecol E];

E=[];

end

zte1=xte(:,3);

figure(1)

plot(yte)

hold on

plot(zte1,’r’)

s=(yte-zte1);

figure(2)

plot(s)

مراجع:

1.A Design of EA-based Self-Organizing Polynomial Neural Networks using

Evolutionary Algorithm for Nonlinear System Modeling

Dong-Won Kim and Gwi-Tae Park

2. Implementation of Artificial Intelligence in the Time Series Prediction Problem, L. EKONOMOU, S.SP. PAPPAS, September 22-24, 2006

3. Time Series PredictionUsingEvolving Polynomial Neural Networks, Amalia Foka, 1999

تهیه این آموزش متلب با زحمت زیادی صورت گرفته لطفا در فضای مجازی نشر ندهید

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برای امنیت، استفاده از سرویس reCAPTCHA گوگل مورد نیاز است که موضوع گوگل است Privacy Policy and Terms of Use.

اگر با این شرایط موافقید، لطفا here کلیک کنید.