In addition, please observe a diet and daily ships vozduhe.Chtoby fresh grease clogged veschestvamiMioma uterus occurs in reproductive age, usually after 27 years, but no symptoms, no pronounced symptoms and is detected only in this case the prevention osmotrah.Sahar inorganic industrial sugar - toxic products. The sugar is harmful to the whole body and, in particular disease, vascular. Sugar burns calcium in the body, resulting in defective blood composition in the destruction of bone and teeth. Football is a must for hematopoiesis! For sugar treatment this lasix that you have plenty of B vitamins - which means that the door to the process, the result is a lack of vitamin, leading to a worsening of diseases of the blood and nerves. The body enough sugar in fruits and plants, the other sugar is not only good for him, but only vreden.Vitaminy only raw, uncooked foods - fruits and vegetables. In addition to receiving these materials and no damage to the body, you need bread, whole wheat flour, natural food, without chemical additives.
خانه / مقالات / داده کاوی و هوش مصنوعی / K-Means Clustering در Matlab ، Weka و RapidMiner

K-Means Clustering در Matlab ، Weka و RapidMiner

در مقاله های قبلی با مفهوم خوشه بندی و طرز کار الگوریتم خوشه بندی K-Means بر روی مجموعه های دلخواه داده در نرم افزار متلب آشنا شدید. در این مقاله هدف این است که با استفاده از نرم افزارهای Weka، RapidMiner و متلب، این الگوریتم را بر روی دیتاست معروف FisherIris اجرا کرده و نحوه کار این الگوریتم را بر روی داده های این دیتاست مشاهده نماییم.
همان طور که در مقاله مربوط به کلاسیفایر SVM و اجرای آن بر روی دیتاست Iris گفته شد این دیتاست حاوی ۱۵۰ نمونه (سطر) و ۴ مشخصه (ستون) و یک کلاس برای گونه های گل زنبق است. یعنی ۳ کلاس (setosa, versicolor,virginica)  که هر یک حاوی ۵۰ نمونه هستند و هر کلاس به نوعی گیاه زنبق یا Iris اشاره می کند. یک کلاس از دو کلاس دیگر بصورت خطی جدایی پذیر است؛ دو کلاس دیگر بصوررت خطی جدایی پذیر نیستند.
از آنجایی که همان طور که گفته شد در مورد این دیتاست در مقاله مربوط به اجرای SVM بر روی دیتاست Iris به طور کامل توضیح داده شده است لذا از بیان توضیحات بیشتر در این مقاله خودداری می شود.

الگوریتم K-Means در ابتدای کار یک Solution را به صورت بردارهایی از میانگین ها تعریف می کند که این راهکار بصورت رندوم تعریف می شود m(t=0)=[m1,m2,…,mk]T و t=0 به معنی اولین تکرار است (یعنی از اولین mean تا kامین mean) به همین دلیل به این روش kmeans می گویند. در دومین مرحله این الگوریتم، از راهکارهایی که ایجاد شده اند برای  دسته بندی همه دیتاهای ورودی و با توجه به این solution ها استفاده می کند. زمانی که همه دیتاهای ورودی را دسته بندی کردیم داده های ورودی زیادی داریم که هر یک به یکی از k  کلاسی که تعریف کردیم مرتبط هستند. در مرحله بعد از این دسته بندی هایی که در مرحله قبل ایجاد کردیم برای محاسبه مجدد بردار mean  ها استفاده می شود. یعنی در دومین تکرار (t+1) می توانیم m را مجددا محاسبه کنیم ( (t+1)m ). سپس time step را به روز رسانی می کنیم یعنی t=t+1. سپس تا زمانی که به همگرایی برسیم ادامه می دهیم. به این صورت که اختلاف بین بردارهای mean جدید را با بردار های mean مرحله قبل محاسبه کرده در صورتی که این مقدار از آستانه همگرایی کوچکتر بود یعنی به همگرایی رسیده ایم پس می توان از آن m(t) یا بردار mean به عنوان  solution استفاده کرد در غیر اینصورت مرحله دوم به بعد را مجددا تکرار می نماییم.
در اینجا داده ها را با استفاده از الگوریتم خوشه بندی kmeans کلاستر کرده سپس مناطق کلاستر شده را پلات می کنیم.
ابتدا دیتا ست Fisheriris را لود می کنیم. از طول و عرض گلبرگ ها به عنوان پیش بینی کننده استفاده می نماییم.
load fisheriris
X = meas(:,3:4);

figure;
plot(X(:,1),X(:,2),›k*›,›MarkerSize›,۵);
title ‹Fisher››s Iris Data›;
xlabel ‹Petal Lengths (cm)›;
ylabel ‹Petal Widths (cm)›;
k = 3 ;

rng(1); % For reproducibility
[idx,C] = kmeans(X,3);

x1 = min(X(:,1)):0.01:max(X(:,1));
x2 = min(X(:,2)):0.01:max(X(:,2));
[x1G,x2G] = meshgrid(x1,x2);
XGrid = [x1G(:),x2G(:)]; % Defines a fine grid on the plot

idx2Region = kmeans(XGrid,3,›MaxIter›,۱,›Start›,C);…
% Assigns each node in the grid to the closest centroid

figure;
gscatter(XGrid(:,1),XGrid(:,2),idx2Region,…
[۰,۰٫۷۵,۰٫۷۵;۰٫۷۵,۰,۰٫۷۵;۰٫۷۵,۰٫۷۵,۰],›..›);
hold on;
plot(X(:,1),X(:,2),›k*›,›MarkerSize›,۵);
title ‹Fisher››s Iris Data›;
xlabel ‹Petal Lengths (cm)›;
ylabel ‹Petal Widths (cm)›;
legend(‹Region 1›,›Region 2›,›Region 3›,›Data›,›Location›,›Best›);
hold off;
با اجرای بخش اول کد یعنی
load fisheriris
X = meas(:,3:4);

figure;
plot(X(:,1),X(:,2),›k*›,›MarkerSize›,۵);
title ‹Fisher››s Iris Data›;
xlabel ‹Petal Lengths (cm)›;
ylabel ‹Petal Widths (cm)›;

شکل زیر به دست می آید. به نظر می رسد کلاستر کوچک تر به یک منطقه با واریانس کم تر و یک منطقه با واریانس بیشتر تقسیم شود. این به بدین معنی است که کلاستر بزرگ تر دو کلاستر همپوشان است. برای کلاستر کردن داده در اینجا k را مساوی با ۳ در نظر میگیریم.
rng(1); % For reproducibility
[idx,C] = kmeans(X,3);
در این مثال هم از طول و عرض گلبرگ به عنوان ویژگی استفاده شده است.
Kmeans از الگوریتم kmeans برای مقدار دهی اولیه مرکز (پیدا کردن یک مرکز تصادفی) و مربع فاصله اقلیدسی بصورت پیش فرض استفاده می کند. برای پیدا کردن مینیمای محلی (local minima) کمتر بد نیست که Replicates تنظیم شود.
idx برداری از کلاسترهای پیش بینی شده متناظر با مشاهدات x است. c یک ماتریس ۳ در ۲ است که دربردارنده مکان مرکز نهایی است.
از kmeans برای محاسبه فاصله هر مرکز به نقاط روی یک گرید استفاده می شود. برای انجام این کار مرکز c و نقاط روی گرید را به kmeans می دهیم و یک تکرار از الگوریتم را می سازیم.
x1 = min(X(:,1)):0.01:max(X(:,1));
x2 = min(X(:,2)):0.01:max(X(:,2));
[x1G,x2G] = meshgrid(x1,x2);
XGrid = [x1G(:),x2G(:)]; % Defines a fine grid on the plot

idx2Region = kmeans(XGrid,3,›MaxIter›,۱,›Start›,C);…
% Assigns each node in the grid to the closest centroid
در ادامه مناطق خوشه بندی را پلات می کنیم.
figure;
gscatter(XGrid(:,1),XGrid(:,2),idx2Region,…
[۰,۰٫۷۵,۰٫۷۵;۰٫۷۵,۰,۰٫۷۵;۰٫۷۵,۰٫۷۵,۰],›..›);
hold on;
plot(X(:,1),X(:,2),›k*›,›MarkerSize›,۵);
title ‹Fisher››s Iris Data›;
xlabel ‹Petal Lengths (cm)›;
ylabel ‹Petal Widths (cm)›;
legend(‹Region 1›,›Region 2›,›Region 3›,›Data›,›Location›,›Best›);
hold off;
همان طور که در شکل بالا می توان مشاهده نمود سه کلاس داده ای که داشتیم به سه منطقه تقسیم شده است که با ۳ رنگ مختلف نمایش داده شده اند. یکی از این دسته ها هیچ هم پوشانی با دو خوشه دیگر ندارد و  به طور جداگانه خوشه بندی شده است. این ناحیه مربوط به کلاس Setosa می باشد.

الگوریتم kmeans زمانی که داده wellseperated و به خوبی تفکیک پذیر هستند بهترین نتیجه را می دهد و یکی از ساده ترین و سریع ترین و معروف ترین الگوریتم های partitional است و از روش یادگیری unsupervised برای انجام خوشه بندی استفاده می کند و با دیتاست های بزرگ هم به خوبی کار میکند یعنی اگر داده های زیادی داشتیم بهتر است از روش های سلسله مراتبی استفاده نکنیم. با این وجود یکسری معایب دارد. مثلا به شدت نسبت به outlier یا داده های پرت و نویز حساس است و در ضمن از قبل باید تعداد کلاسترها را تعیین کرد.  یکی از بهترین مزیت های kmeans این است که سرعت اجرای بالایی دارد و خطی است و حافظه کمی مصرف می کند.

اجرای الگوریتم خوشه بندی k-means بر روی داده های گل زنبق در RapidMiner
ابتدا یک new process ایجاد کرده و سپس با روش drag and drop از قسمت Repositories  و دایرکتوری data، دیتاست Iris و از قسمت operatores اپراتور کلاسترینگ kmeans را انتخاب کرده و بر روی صفحه main process قرار می دهیم. سپس مانند شکل ورودی ها و خروجی ها را به هم متصل می کنیم و از سمت راست صفحه میزان k یا تعداد خوشه ها را تعیین می کنیم. در اینجا مقدار ۳ را انتخاب کردیم. سپس روی  دکمه play از بالای صفحه کلیک می کنیم. در شکل زیر نشان داده می شود که سه کلاستر ساخته شده و در هر کلاستر چه تعداد نمونه قرار گرفته است.
اجرای این اپراتور منجر به ایجاد فولدرهایی برای هر خوشه می شود که دیتاهای هریک از خوشه ها در پوشه مربوط به خود قرار می گیرند و با کلیک بر روی پوشه می توان محتویات آن را مشاهده نمود. مانند شکل زیر:
در قسمت Graph نیز می توان گراف مربوط به خوشه های ایجاد شده را مشاهده کرد که با کلیک بر روی هر یک از اعداد ۰، ۱ یا ۲ محتویات مربوط به آن خوشه نمایش داده می شود.
در قسمت plot پلات، پلات مربوط به هر گونه از سه کلاس گل زنبق با توجه به attribute های طول و عرض گلبرگ ها و کاسبرگ ها که در محور افقی قرار گرفته نمایش داده شده است.

Kmeans(fast)
در RapidMiner الگوریتم دیگری نیز علاوه بر K-means وجود دارد که نام آن Kmeans(fast) است.
بر خلاف kmeans استاندارد، این پیاده سازی از بسیاری جهات سریع تر می باشد. به خصوص برای دیتاست هایی که attribute های زیادی دارند و k value آنها نیز بزرگ است. ولی این الگوریتم به حافظه اضافی بیشتری نیاز دارد.
استفاده از این الگوریتم نیز مانند kmeans معمولی است. همان طور که در شکل زیر مشاهده می شود در این الگوریتم داده های گونه Setosa در خوشه ۲ قرار گرفته اند و در خوشه بندی داده های دو گروه دیگر نیز نسبت به حالت kmeans استاندارد کمی تفاوت دیده می شود. درحالت قبلی تقسیم بندی ۶۱ در مقابل ۳۹ نمونه بود ولی در اینجا ۶۲ در مقابل ۳۸ نمونه.
در شکل فوق می توان مشاهده کرد که داده های خوشه ۰ از id-51 یعنی از ۵۱ امین دیتا شروع می شود و ۵۰ دیتای اول که مربوط به گونه setosa می باشد در این حالت در خوشه سوم قرار داده شده است.
اجرای الگوریتم خوشه بندی k-means بر روی داده های گل زنبق در نرم افزار Weka
ابتدا از سربرگ cluster وارد قسمت مربوط به خوشه بندی می شویم سپس با استفاده از دکمه choose، simple kmeans را انتخاب می کنیم. پس از ورود به قسمت properties مانند شکل بالا تعداد خوشه ها را به ۳ تغییر می دهیم.
برای خوشه بندی در مرحله اول از attribute های طول و عرض کاسبرگ استفاده شده است. مانند شکل زیر:
پس از اجرا نتایج بصورت شکل زیر به دست می آید:
همان طور که می توان مشاهده کرد در هر یک از خوشه ها ۵۰ نمونه قرار داده شده است. در شکل زیر خوشه بندی مربوطه visualize شده است:
همان طور که مشاهده می شود در محور عمودی از اطلاعات مربوط به طول کاسبرگ نمونه ها استفاده شده است.
در این قسمت همان طور که در شکل بالا مشاهده می شود برای خوشه بندی از کلیه ویژگی ها استفاده شده است:
مانند مرحله قبل این بار هم به هر سه خوشه ۵۰ نمونه نسبت داده شد. در شکل زیر شمای گرافیکی این خوشه بندی قابل مشاهده است:
محور افقی طول گلبرگ ها و محور عمودی عرض آنها را در هر یک از گونه ها با رنگ های مختلف نمایش می دهد.
در ادامه همه مراحل فوق برای دو ویژگی طول و عرض گلبرگ و بدون در نظر گرفتن طول و عرض کاسبرگ در نمونه ها نیز انجام شده و مشاهده می شود که نتیجه به دست آمده با مراحل قبلی یکسان است. در نهایت در شکل آخر این خوشه بندی نیز visualize شده است.

——————

هدی ابیضی

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

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

x

شاید بپسندید

آیا در کارها حضور بشر لازم است؟

رشد تکنولوژی، نیاز به نیروی کار را انسانی را در بسیاری از ...