مرحلهی دوم در تشخیص نظیر به نظیر بودن خوشهها، انتخاب یکی از خوشهبندیهای اولیه به عنوان خوشهبندی مرجع است. مسئلهی تشخیص نظیر به نظیر بودن خوشهها در حقیقت تشخیص این مسئله است که هر یک از خوشههای یک خوشهبندی مشخص، متناسب با کدام خوشه در خوشهبندی مرجع میباشند. هر کدام از خوشهبندیها را میتوان به عنوان خوشهبندی مرجع در نظر گرفت. اما در شرایطی که تعداد خوشهها در خوشهبندیها متفاوت است، خوشهبندیای به عنوان خوشهبندی مرجع در نظر گرفته میشود که دارای بیشترین تعداد خوشهها باشد.
مرحلهی سوم در تشخیص نظیر به نظیر بودن خوشهها، محاسبه فاصلهی بین خوشههای خوشهبندی مرجع و دیگر خوشهبندیها میباشد. با در اختیار داشتن الگوی بیتی هر خوشه میتوان از فاصلهی همینگ جهت محاسبه فاصلهی دو خوشه استفاده نمود. فاصلهی همینگ دو خوشه، تعداد بیتهای متفاوت در الگوهای بیتی مربوط به آنها تعریف میگردد. بنابراین فاصلهی بین هر دو خوشه را میتوان از رابطه ۳-۳ محاسبه نمود.
(۳-۳) |
پس از محاسبهی فاصله تمام خوشهها در یک خوشهبندی مشخص با خوشههای خوشهبندی مرجع، در مرحلهی چهارم، خوشههایی با کمترین فاصله به عنوان خوشههای متناسب در نظر گرفته خواهند شد. از اینرو، الگوریتم تشخیص نظیر به نظیر بودن خوشهها شامل دو گام اصلی میشود. در گام اول، فاصلهی بین خوشههای یک خوشهبندی مشخص با خوشههای خوشهبندی مرجع محاسبه میگردد. در گام دوم نیز، خوشههایی با کمترین فاصله به عنوان خوشههای متناسب در نظر گرفته میشوند. این گامها برای هر کدام از خوشهبندیهای اولیه اجرا میشوند. شبه کد تشخیص خوشههای نظیر به نظیر در الگوریتم ۳-۲ آورده شده است. این الگوریتم در حالتی که تعداد خوشههای خوشهبندیها متفاوت باشد نیز میتواند خوشههای نظیر به نظیر را تشخیص دهد. البته همانطور که پیشتر نیز ذکر شد در این حالت باید خوشهبندی مرجع دارای بیشترین تعداد خوشهها باشد.
در الگوریتم ۳-۲، BitPat یک ماتریس M×K است که M تعداد خوشهبندیها، K مقدار بیشینهی تعداد خوشهها در خوشهبندیها و هر Bity[i, j] بیت به ازاء خوشهی j-ام در خوشهبندی شمارهی i میباشد. bc عددی است که شمارهی خوشهبندی مرجع را مشخص میکند. خروجی این الگوریتم،Correspondence ، نیز مانند Bity یک ماتریس M×K است که هر عنصر آن، Correspondence[i, j]، مشخص میکند که خوشهی j-ام از خوشهبندی شمارهی i متناسب با کدامیک از خوشههای خوشهبندی مرجع میباشد.
الگوریتم ۳-۲ تشخیص خوشههای نظیر به نظیر |
Input: Bity [۱٫٫M, 1..K] as bitArray bc as number Output: Correspondence[1..M, 1..K] as number Method: (۱) declare SortedDist as sortedList(Distance, CIdxbc, CIdxm) (۲) declare Selectedbc as intList (۳) declare Selectedm as intList (۴) declare Count as number set to ۰ (۵) for m = ۱ to M, m≠bc (۶) for i = ۱ to Kbc (۷) for j = ۱ to Km (۸) SortedDist.Add(HammingDistance(BitPat[bc, i], BitPat[m, j], i, j) (۹) end for (۱۰) end for (۱۱) repeat (۱۲) e=SelectNext(SortedDist) (۱۳) if(e.CIdxbc Selectedbc) (۱۴) if(e.CIdxm Selectedm) (۱۵) if(Count == Kbc-Km) (۱۶) continue (۱۷) else (۱۸) Count++ (۱۹) end if (۲۰) end if (۲۱) Selectedbc.Add(e.CIdxbc) (۲۲) Selectedm.Add(e.CIdxm) (۲۳) Correspondence[m, e.CIdxm] = e.CIdxbc (۲۴) end if (۲۵) until |Selectedbc|=Kbc (۲۶) Count = ۰ (۲۷) Clear SortedList, Selectedbc, Selectedm |