فازی کردن (Fuzzification)
فازی کردن عبارت است از ارایه ی یک تابع عضویت برای مجموعه ای از داده ها که قرار است در استنتاج فازی مورد استفاده قرار گیرند. نوع تابع عضویت غالبا بستگی به کاربرد مساله و ماهیت داده ها دارد. از جمله راهکار های عمومی برای فازی کردن داده ها، استفاده از خوشه بندی فازی (Fuzzy Clustering) است. یکی از معروف ترین الگوریتم های خوشه بندی فازی Fuzzy c-Means Clustering یا به اختصار FCM نام دارد. FCM با ایده گرفتن از الگوریتم k-means می تواند داده ها را در فضای تعمیم یافته در تعداد خوشه ی دلخواه قرار دهد به طوری که برخلاف k-means هر داده می تواند در چندین خوشه عضو باشد. بدیهی است که میزان عضویت داده ها در هر خوشه می تواند متفاوت باشد. در نرم افزار MATLAB می توان با فرمان fcm به شکل زیر داده ها را خوشه بندی نمود:
که در آن:کد:[center,U] = fcm(data,cluster_n)
- data ماتریس داده هایی است که قرار است خوشه بندی شوند.
- cluster_n تعداد خوشه ها است.
- center مرکز خوشه ها در فضای تعمیم یافته است.
- U ماتریس عضویت هر داده در هر خوشه خواهد بود.
مثال:
غیر فازی کردن (Defuzzification)کد:data = rand(100, 2); [center,U,obj_fcn] = fcm(data, 2); plot(data(:,1), data(:,2),'o'); maxU = max(U); index1 = find(U(1,:) == maxU); index2 = find(U(2, :) == maxU); line(data(index1,1),data(index1, 2),'linestyle','none','marker','*','color','g'); line(data(index2,1),data(index2, 2),'linestyle','none','marker', '*','color','r'); hold on plot(center(1,1),center(1,2),'sg') plot(center(2,1),center(2,2),'sr')
غیر فازی کردن عبارت است از استخراج یک مقدار غیر فازی از یک تابع عضویت. این عمل در نرم افزار MATLAB با فرمان defuzz به شکل زیر صورت می گیرد:
که در آن:کد:out = defuzz(x,mf,type)
- x ماتریس متغیر خروجی است.
- mf تابع عضویت مربوطه است.
- type تعیین کننده ی روش غیر فازی کردن است. تعیین نوع این روش بستگی به کاربرد دارد که در اینجا از روش مرکز ثقل (centroid) استفاده می شود.
- out مقدار غیر فازی خروجی خواهد بود.
مثال:
کد:x = -10:0.1:10; mf = trapmf(x,[-10 -8 -4 7]); out = defuzz(x,mf,'centroid'); plot(x,mf,'LineWidth',2); line([out out],[-0.2 1.2],'Color','k');






پاسخ با نقل قول
Bookmarks