خوشه بندی در متلب

خوشه‌بندی با الگوریتم کامینز در محیط متلب

اینجا می‌خوام تیر خلاص را بزنم و به طور کلی بگم چی به چیه،

خوب اول باید بدانیم می‌خواهیم چی کار کنیم یعنی مسئله ما چیه:

مسئله: من تعدادی داده دارم و می‌خواهم سعی کنیم با الگوریتم کا-مینز آنها را خوشه‌بندی کنیم. برای انجام این کار باید چی کار کنم؟

راه‌حل:

جعبه‌ابزار آماری متلب تعدادی توابع یاب برای اجرا و تفسیر تحلیل خوشه کا-مینز دارد. با این حال، قبل از استفاده از آن باید بدانیم خوشه‌بندی کا-مینز چی  است، چی کار می‌کند و چه کارهایی را نمی‌تواند انجام بدهد.

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

کا-مینز یک الگوریتم خوشه‌بندی است. الگوریتم‌های خوشه‌بندی تکنیک‌های غیر نظارتی است برای تقسیم یک دیتاست بزرگتر به گروه‌های کوچکتر هستند. عبارت «غیر نظارتی» بیانگر این است که داده از گروه‌های تعریف شده واضح منشا نگرفته که بتوان آنها را با یک اولویت بندی برچسپ گذاری کرد. برای مثال، به شما گفته می‌شود که ۳۰۰ مرغ را در یک مرغداری بررسی کرده و دسته‌ای از پارامترها مربوط به هر مرغ اندازه بگیرید. این پارامترها قد، وزن، اندازه تخم، رنگ تخم، زمان کُرُک شدنشان، و … است. مبتنی بر این پارامترها، تو می‌خواهی بدانی آیا این مرغ‌ها به دسته‌های مجزا تقسیم می‌شوند یا همگی از یک نوع هستند. توجه کنید که این سوال دو ویژگی دارد: ۱) در ابتدا نمی‌دانید چند گروه وجود دارد و بنابراین ۲) تو روشی نداری که بتوانی مرغ‌ها را به یک گروه معین اختصاص بدهی. برای چنین مسائلی می‌توانید از خوشه‌یندی کا-مینز استفاده کنید و مرغ‌ها را به دسته‌های خاص اختصاص بدهید. با استفاده از تکنیک‌های بیشتر (که در زیر شرح داده شده) تو می‌توانی هدفت را بیازمایی که آیا ارزیابیت درست بوده یا غلط.

همانطور که می‌اندیشی، اگر تکنیک‌های «غیر نظارتی» وجود داشته باشد پس باید تکنیک‌‌های «نظارتی» هم وجود داشته باشد. تکنیک‌ها یا روش‌های غیر نظارتی اغلب روش‌های »رده‌بندی» صدا زده می‌شوند که روی مجموعه داده‌ها یا دیتاست‌هایی به کار می‌رود که هویت‌ گروه‌های آنها قبلا شناخته شده است. در اینجا کاری با این روش‌ها نداریم، اما ان‌شاء‌الله در آینده‌ای نزدیک این‌ها را هم بررسی می‌کنم.

کاویدن عمیقتر کا-مینز

من سعی می‌کنم بعدها این قضیه را عمیق‌تر بررسی کنم. اما فعلا برای آشنا شدن حداقل سردستی همینجا توضیحاتی می‌دهم. اینجا یک سری مثال‌ها و یک سری نکات مهم در این رابطه را می‌آورم.

پس قبل از هر کاری با یک مثال شروع می‌کنیم: قبل از هر کار نیاز به تعریف یک سری مجموعه از داده داریم. بنابراین در اینجا دو تا گروه داده ایکس و وای تعریف می‌کنیم. برای درک این‌ها شما باید یک اصول پایه‌ای از متلب را بلد باشید. یا خودتان می‌توانید با ذهن‌تان و اطلاعات قبلی‌تان استدلال کنید که این‌ها چی هستند.

%Let’s make some fake data with two groups
n=75; %sample size
x=[randn(n,1)+2;randn(n,1)+4.75];
y=[randn(n,1)+2;randn(n,1)+4.75];

%the true group identity
groups=[ones(n,1);ones(n,1)+1];

%plot the data
scatter(x,y,50,groups,’filled’)

الگوریتم خوشه‌بندی کا-مینز در متلب
ما دو تا گروه داده ساختیم که در بعضی از نقاط همپوشانی دارند. در این مورد، چون یک مثال بچه‌گانه است، منشا‌های نقطه داده هر گروه را می‌دانیم. به خاطر داشته باشید که در کاربردهای جهان واقعی شما چنین اطلاعاتی ندارید، اما در اینجا ما می‌خواهیم با استفاده از این مثال کارایی کا-مینز را نشان دهیم. بنابراین  ما هویت‌های گروه را می‌دانیم، بیایید ببینیم آیا کا-مینز هم می‌تواند بداند که هر داده متعلق به کدام گروه است. الگوریتم کا-مینز باید با این دو گروه پشتیبانی شود: یکی که همین داده‌های خام و دیگری هم اینکه ما باید به این الگوریتم بگوییم که داده به چند گروه افراز شود. این مهم است: یعنی اینکه کار شما این است که بگویید به الگوریتم چه تعداد گروه‌ها وجود دارند.
صرفا برای کوبیدن اخطارها با چکش: معمولا  زمانی که هویت گروه‌ها را می‌شناسید، می‌خواهید از یک روش دسته‌بندی نظارت شده (مثل تجزیه و تحلیل) استفاده کنید. به این دلیل است که روش نظارت شده از هویت گروه‌ها برای جستجوی کرانه‌ها که بهترین افراز از گروه‌ها را فراهم می‌آورد استفاده می‌کند؛ یک روش غیر نظارتی، مانند کا-مینز، هویت‌های گروه را نادیده می‌گرید و به سادگی می‌پرسد که آیا داده به شکل طبیعی افراز شده است. با چنین پیشفرضی در ذهن‌، اجازه بدهید ببینیم کا-مینز چطوری داده‌ها را تقسیم می‌کند.
data=[x,y];
IDX=kmeans(data,2); %Run k-means, asking for two groups

متغیر IDX  می‌گوید که شما گروهی از داده دارید که می‌خواهید با استفاده از کا-مینز آن را خوشه بندی کنید. ما می‌توانیم تعداد دفعاتی که برای انجام گروه‌بندی درست انجام می‌شود را با انجام این عمل انجام دهیم: (groups==IDX). این مقدار ۱۴۷ را بر می‌گرداند، بنابراین برای ۱۴۷ تا داده از ۱۵۰ کا-مین اشیا را به درستی خوشه‌بندی کرده است. ما می‌توانیم این باز انجام را با استفاده از بازانجام طرح اسکاتر تایید کنیم، این دفعه رنگ‌ها از نتایج کا-مینز مشتق شده است.

خوشه بندی در متلب

حاشیه: من هنوز نتوانستتم این کد را در متلب اجرا کنم!

خوب، آیا این کار به درستی انجام شد؟ آیا نقاطی وجود دارد که اشتباهی گروه بندی شده است< در مومرد ما می‌دانیم دو گروه وجود دارد، به خاطر بیاورید، کا-مینز داده به تعدادی از گروه‌ها همان طور که ما خواستیم تقسیم می‌کند. اگر ما یک توزیع یک نمایی (فقط یک گروه) داشته باشیم هنوز می‌توانیم کا-مین را اجرا کنیم:

 

%Let's make some fake data with two groups
n=150; %sample size
x=[randn(n,1)+3;randn(n,1)+3];
y=[randn(n,1)+3;randn(n,1)+3];

%plot the data
subplot(1,2,1)
plot(x,y,'ok','MarkerFaceColor','k')

%now divide into two using k-means and plot the results
data2=[x,y];
IDX=kmeans(data2,2);

%plot the k-means results
subplot(1,2,2)
scatter(x,y,50,IDX,'filled')

خوشه بندی کا-مینز

می‌توانی ببینی که کا-مینز این توزیع را به دو قسمت مساوی تقسیم می‌کنید اگر چه تنها یک گروه وجود دارد. چشم بسته اجرا شدن کا-مینز کافی نیست: تو همچنین باید آن را تایید کنی. تو باید نشان دهی که تقسیم این داده به کا گروه منطقی انجام شده است. متلب با اجازه داده محاسبه‌ای که مقدار سیلیوت صدا زده می‌شود این مشکل را پشت سر می‌گذارد. مقدار سیلیوت می‌تواند روی هر داده‌ای که به گروه‌های وای یک الگوریتم خوشه‌بندی دسته‌بندی شده است محاسبه گردد. مقدار سیلیوت به شما می‌گوید که یک نقطه داده چه اندازه محکم مرتبط با یک خوشه معین است و چقدر با دیگر خوشه‌ها متفاوت است. هر نقطه داده یک مقدار سیلیوت دارد که مقدار سیلیوت همه نقاط به طور خلاصه به معنای کیفیت خوشه‌بندی کلی است.

تایید خوشه‌بندی

بنابراین چطور از کا-مینز و مقدار سیلیوت برای تعیین اینکه آیا خوشه‌بندی به طور معقولی صورت گرفته است یا خیر استفاده می‌کنیم؟ این رهیافت بدین صورت است: ابتدا چند بار الگوریتم کا-مینز اجرا می‌شود، هر بار با یک کا-متفاوت، و مقدار سیلیوت برای هر کا محاسبه می‌گردد. اگر داده شما به دو گروه تقسیم شود، سپس شما باید یک قله در مقدار سیلیوت ببنید که کا=۲ است. بیایید این کار برای دو مورد نشان داده شده در بالا انجام بدهیم و ببینیم چطور کار می‌کند.

%Run k-means for a range of k
for k=2:6
    IDX=kmeans(data,k);  %The data with two groups
    [S,H] = silhouette(data, IDX);
    silA(k)=mean(S); %The mean silhoette value for two groups

    IDX=kmeans(data2,k); %The data with one group
    [S,H] = silhouette(data2, IDX);
    silB(k)=mean(S); %The mean silhoette value for one group
end

%Plot the results
clf %clear the figure window
hold on
plot(1:6, silA,'ok-','MarkerFaceColor','k') %۲ groups
plot(1:6, silB,'or-','MarkerFaceColor','r') %۱ group
set(gca,'XTick',۱:۶)
xlabel('k')
ylabel('mean silhouette value')
hold off

k-means

خط سیاه در شکل به بالا به معنای مقدار سیلیوت برای داده‌‌ای با دو گره است. خط قرمز نشان  دهنده مقدار سیلیوت برای داده‌ای با یک گروه است. خط سیاه در کا=۲ یک قله دارد، که نشان می‌دهد که توزیع ممکن برای افراز این دو گروه درست باشد. خط قرمز قله‌ای ندارد، که نشان می‌دهد که توزیع اصولی کیفی است. مثل همیشه، دیو سپید در جزئیات است.  شما احتمالا می‌خواهید یک آنالیز را با تکرار ةن چندین دفعه روی زیر نمونه‌های انتخابی تصادفی از این داده برای تولید نمودارهای خطا برای هر نقطه تکرار کنید. شما همچنین می‌خواهید بعضی از روش‌ها را برای ارزیابی اینکه چقددر خوشه‌بندی برای این مقادری در قله‌ای که می‌بینید خوب است انجام دهید.

نتیجه گیری

آنچه که ما در اینجا پوشش دادیم روشی برای انجام خوشه‌بندی کا-مینز است. دقت داشته باشید که من فقط روی گزینه‌های پیشفرض کار کردم. متلب اجازه می‌دهد شما الگوریتم خوشه‌بندی کا-مینز به شیوه‌ها مختلف اجرا کنند؛ برای مثال تو چندین انتخاب برای چگونگی انتخاب‌ها‌ی نقاط شروع آن و آنچه که با آن فاصله را اندازه می‌گیرد داری. این فراتر از مقیاس‌های انی مقاله است، اگر شما دلیل خوبی برای فکر کردن به زینه‌ فاصله سایت‌بلاک دارید. تو ممکن است همچنین بخواهی چک کنی صفحه مقدماتتی خوشه‌بندی و رده‌بندی.

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

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