cover

الگوریتم خوشه‌بندی K-Meansچیست؟

1.مقدمه

با رشد روزافزون حجم داده‌ها، استخراج الگوها و ساختارهای پنهان از داده‌های بدون برچسب به یکی از مهم‌ترین چالش‌های علم داده و یادگیری ماشین تبدیل شده است. در بسیاری از مسائل واقعی، اطلاعاتی درباره دسته‌بندی نمونه‌ها در اختیار نداریم و باید با استفاده از روش‌های یادگیری بدون نظارت (Unsupervised Learning)، شباهت‌ها و تفاوت‌های موجود میان داده‌ها را شناسایی کنیم. یکی از شناخته‌شده‌ترین و پرکاربردترین الگوریتم‌ها در این حوزه، الگوریتم K-Means است.

K-Means یک روش خوشه‌بندی مبتنی بر مرکز (Centroid-Based Clustering) است که با تقسیم داده‌ها به K خوشه، تلاش می‌کند نمونه‌های مشابه را در یک گروه قرار دهد و فاصله میان نمونه‌های هر خوشه را تا حد امکان کاهش دهد. سادگی پیاده‌سازی، سرعت بالا، مقیاس‌پذیری مناسب و عملکرد قابل قبول در بسیاری از مسائل عملی باعث شده است این الگوریتم به یکی از ابزارهای استاندارد در داده‌کاوی، تحلیل مشتریان، پردازش تصاویر، سیستم‌های توصیه‌گر، تشخیص ناهنجاری و تحلیل بازار تبدیل شود.

با وجود سادگی ظاهری، عملکرد K-Means به عواملی مانند انتخاب تعداد خوشه‌ها، نحوه مقداردهی اولیه مراکز خوشه، مقیاس‌بندی داده‌ها و ساختار توزیع داده‌ها وابسته است. به همین دلیل، درک دقیق مکانیزم عملکرد، مزایا، محدودیت‌ها و روش‌های بهبود این الگوریتم برای استفاده مؤثر از آن ضروری است.

در این مقاله، الگوریتم K-Means را از جنبه‌های مفهومی، ریاضی و عملی بررسی می‌کنیم و با معرفی معیارهای ارزیابی، روش‌های انتخاب تعداد خوشه‌ها و نسخه‌های توسعه‌یافته این الگوریتم، تصویری جامع از یکی از مهم‌ترین روش‌های خوشه‌بندی در یادگیری ماشین ارائه خواهیم کرد.

2.تعریف

الگوریتم K-Means یک روش خوشه‌بندی انحصاری یا صلب (Exclusive or “Hard” Clustering) و مرکزثقل‌محور (Centroid-based) در یادگیری بدون نظارت است. وظیفه بنیادین این الگوریتم، افراز و تقسیم یک مجموعه داده فاقد برچسب (Unlabeled Data) به تعداد مشخصی از گروه‌های مجزا، همگن و غیرهم‌سپوشان (Non-overlapping Subgroups) به نام خوشه (Cluster) است. در این متدولوژی، تعداد خوشه‌ها پیش از شروع فرآیند محاسباتی، توسط متخصص داده با پارامتر K تعیین می‌شود.

3. دلایل اهمیت، ضرورت و چرخه استفاده از الگوریتم K-Means

در اکوسیستم کلان‌داده و یادگیری ماشین، الگوریتم K-Means Clustering صرفاً یک ابزار محاسباتی ساده نیست؛ بلکه یک ضرورت استراتژیک برای بقای کسب‌وکارهای مدرن و پروژه‌های پیچیده یادگیری عمیق به شمار می‌رود. نقطه تمایز این بخش با «مزایای فنی» الگوریتم، در فلسفه وجودی و نقش حیاتی آن در حل بن‌بست‌های عملیاتی لوله داده (Data Pipeline) نهفته است.

در ادامه، دلایل کلیدی اهمیت و ضرورت به‌کارگیری K-Means پدید آمده است:

  • نجات از فلج تحلیلی و «نفرین ابعاد» در داده‌های تاریک

بزرگ‌ترین چالش سازمان‌ها، مواجهه با حجم انبوهی از داده‌های ساختارنیافته و فاقد برچسب (Unlabeled Data) است که به آن‌ها داده‌های تاریک می‌گویند. تحلیل دستی یا بررسی نقطه‌ای این دارایی‌ها منجر به فلج تحلیلی می‌شود. ضرورت استفاده از K-Means در این است که به عنوان اولین خط دفاعی، ساختار پنهان و الگوهای اولیه این توده داده کور را بدون نیاز به سوپروايزر یا برچسب‌گذاری انسانی، استخراج و مرزبندی می‌کند.

  • فشرده‌سازی اطلاعات و کاهش بار محاسباتی شبکه‌های عصبی

در خط لوله‌های پیشرفته مگادیتابیس‌ها و پردازش تصویر، پردازش تک‌تک جزئیات بار پردازشی فوق‌العاده سنگینی به همراه دارد. K-Means فرآیند فشرده‌سازی داده‌ها (Data Compression) را از طریق تبدیل میلیون‌ها نقطه پراکنده به چند مرکز ثقل ریاضی (Centroid) نماینده، ممکن می‌سازد. این مهندسی ویژگی‌ها، سرعت آموزش مدل‌های یادگیری عمیق بعدی را چند برابر می‌کند.

  • نیاز مبرم به بخش‌بندی آنی و تصمیم‌گیری چابک تجاری

در دنیای رقابتی تجارت الکترونیک، زمان طلاست. کسب‌وکارها برای اجرای کمپین‌های بازاریابی بخش‌بندی‌شده (Micro-Segmentation)، نمی‌توانند منتظر الگوریتم‌های پیچیده و زمان‌بر سلسله‌مراتبی بمانند. سرعت و چابکی K-Means یک ضرورت تجاری است تا رفتار خرید، نرخ وفاداری و ترجیحات میلیون‌ها کاربر را در کسری از ثانیه کلاستر کرده و خروجی ملموس و قابل اجرا به اتاق فکر مدیران تحویل دهد.

4.الگوریتم K-Meansچگونه کار میکند؟

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

  • گام اول:مقداردهی اولیه (Initialization)
  • گام دوم:تخصیص صلب نقاط (Assignment Step)
  • گام سوم:محاسبات هندسی و به‌روزرسانی مراکز (Update Step)
  • گام چهارم:ارزیابی شرط توقف و تست همگرایی (Convergence Test)

گام اول: مقداردهی اولیه(Initialization)

 در نقطه آغازین محاسبات، تعداد خوشه‌های مورد نظر (K) به عنوان یک هایپرپارامتر کلیدی توسط متخصص داده به مدل دیکته می‌شود. سپس الگوریتم مأمور می‌شود تا K نقطه متمایز را به عنوان مراکز ثقل اولیه (Initial Centroids) در فضای ویژگی‌ها مستقر کند. در پیاده‌سازی سنتی، ابتدا دیتابیس شافل (Shuffle) شده و سپس K نقطه متمایز بدون جایگذاری (Without Replacement) از میان خود نقاط داده انتخاب می‌شوند. این نقاط، بذرهای اولیه کلاسترینگ هستند. انتخاب هوشمندانه یا تصادفی این نقاط در همین گام اول، تاثیر مستقیم و سرنوشت‌سازی بر سرعت همگرایی و کیفیت نهایی مدل خواهد داشت.

گام دوم: تخصیص صلب نقاط (Assignment Step)

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

گام سوم: محاسبات هندسی و به‌روزرسانی مراکز (Update Step)

با شکل‌گیری خوشه‌های اولیه، غرفه‌ها و مراکز قبلی کارایی خود را از دست می‌دهند؛ زیرا نقاط جدیدی به قلمرو آن‌ها اضافه یا از آن کم شده است. در این گام، الگوریتم مختصات تک‌تک مراکز ثقل را مجدداً ارزیابی و اصلاح می‌کند. برای این کار، میانگین حسابی (Arithmetic Mean) مختصات برداری تمامی نقاطی که در گام قبل درون یک خوشه قرار گرفته بودند، محاسبه می‌شود. این مختصات جدید، مرکز ثقل واقعی و ثقل هندسی کلاستر است. در نتیجه این محاسبات، مراکز ثقل به صورت فیزیکی جابه‌جا شده و به سمت هسته مرکزی و متراکم تجمع داده‌های هم‌رفتار حرکت می‌کنند.

گام چهارم: ارزیابی شرط توقف و تست همگرایی (Convergence Test)

یک چرخه کامل (شامل محاسبات فواصل، انتساب مجدد داده‌ها به نزدیک‌ترین مراکزِ جابه‌جاشده و محاسبه دوباره مختصات مراکز) یک تکرار یا Iteration نامیده می‌شود. الگوریتم K-Means گام‌های دوم و سوم را در یک لوله محاسباتی بسته آن‌قدر تکرار می‌کند تا سیستم به همگرایی (Convergence) یا ثبات توپولوژیک برسد. این وضعیت پایدار زمانی محقق می‌شود که یکی از شروط زیر برقرار گردد:

  • ۱. در تکرار جدید، انتساب هیچ نقطه داده‌ای به خوشه‌ها تغییر نکند و واریانس درون‌خوشه‌ای کاملاً ثابت بماند.
  • ۲. میزان جابه‌جایی هندسی مراکز ثقل بین دو تکرار متوالی به صفر یا پائین‌تر از حد آستانه تلورانس (Tolerance) برسد.
  • ۳. تعداد چرخه‌های الگوریتم به سقف تعیین‌شده در پارامتر حداکثر تکرار مجاز (Max Iterations) اصابت کند. با ارضای هر یک از این شروط، مدل فرآیند یادگیری را متوقف کرده و مرزهای نهایی کلاسترها را تثبیت می‌کند.

.

5.مبانی ریاضی و تئوری بهینه‌سازی در K-Means

از منظر نظریه یادگیری ماشین، الگوریتم K-Means یک مدل اکتشافی ساده نیست، بلکه یک مسئله بهینه‌سازی ریاضی مقید و پیوسته-گسسته (Mixed-Integer Optimization) است. هدف بنیادی این ساختار، کمینه‌سازی هندسی مجموع مجذور فواصل درون‌خوشه‌ای است که در فیزیک داده و آمار محاسباتی به آن اینرسی درون‌گروهی (Inertia)، اعوجاج توپولوژیک (Distortion) یا واریانس درون‌خوشه‌ای (Within-Cluster Sum of Squares – WCSS) می‌گویند. کم بودن این شاخص نشان‌دهنده همگنی، غلظت و تراکم بالای خوشه‌هاست.

۱. کالبدشکافی تئوریک تابع هدف الگوریتم (Objective Function)

۲. رویکرد بهینه‌سازی متناوب (Expectation-Maximization)

۳. فرمولاسیون ریاضی شرط همگرایی (Convergence Criteria)

کالبدشکافی تئوریک تابع هدف الگوریتم (Objective Function)

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

معرفی متغیرها:

  • J: مقدار کل تابع هدف. (Inertia)این شاخص، انرژی یا خطای کل سیستم را نشان می‌دهد و فرآیند یادگیری بدون نظارت به دنبال یافتن چینشی از لایه‌هاست که این مقدار را مینیماایز کند.
  • n: تعداد کل نمونه‌ها یا بردار‌های داده مستقل موجود در مجموعه داده.
  • K: تعداد کل خوشه‌های هدف (هایپرپارامتر ثابت که پیش از فاز محاسباتی تعیین می‌شود).
  • xi: بردار ویژگی‌های مربوط به نقطه داده iام در فضای خطی چندبعدی. R^d هر نقطه شامل d مؤلفه عددی متمایز است.
  • μj: بردار مختصات مرکز ثقل (Centroid) خوشه jام در همان فضای  . R^d این بردار، نماینده یا قطب اصلی کلاستر jام محسوب می‌شود.
  • wij: تابع نشانگر باینری (Indicator Variable) که نقش تخصیص و برچسب‌دهی صلب را بازی می‌کند. این متغیر عضویت صلب به این صورت تعریف می‌شود:

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

  برای تمام iها.

  • مجذور نرم دوم (L2 Norm) یا همان مجذور فاصله مستقیم اقلیدسی بین موقعیت مکانی نقطه داده  xi و مرکز ثقل. μj به صورت بسط‌یافته در فضای dبعدی:

رویکرد بهینه‌سازی متناوب (Expectation-Maximization)

اگر به ساختار ریاضی تابع هدف J دقت کنیم، متوجه یک بن‌بست محاسباتی بزرگ می‌شویم: این تابع به طور هم‌زمان شامل دو دسته متغیر مجهول است؛ یکی متغیرهای باینری و گسسته تخصیص (wij) و دیگری متغیرهای پیوسته هندسی. (μj) وجود هم‌زمان این دو لایه باعث می‌شود که نتوان از تابع هدف نسبت به هر دو متغیر به صورت هم‌زمان مشتق ساده گرفت.

الگوریتم K-Means این چالش پیچیده (که از نوع NP-hard است) را با به کارگیری یک راهبرد بهینه‌سازی متناوب (Coordinate Descent) که شباهت ساختاری بالایی با الگوریتم EM (انتظار-بیشینه‌سازی) دارد، دور می‌زند. فرآیند به این صورت است که در هر فاز، یک متغیر ثابت نگه داشته شده و تابع نسبت به دیگری بهینه می‌شود:

  • فاز انتظار
  • فاز بیشینه‌سازی

.

فاز انتظار (E-Step / Expectation): ثابت فرض کردن مراکز و بهینه‌سازی انتساب‌ها

در این گام، مختصات تمامی مراکز ثقل (μj) در فضا کاملاً صلب و بدون تغییر در نظر گرفته می‌شوند. حالا که مراکز ثابت هستند، تابع هدف J به یک معادله ساده تبدیل می‌شود که مأموریت آن تنها تعیین بهترین مقادیر برای  wij است. برای کمینه کردن خطای کل، منطق ریاضی حکم می‌کند که هر نقطه داده  xi به کلاستری تخصیص یابد که کمترین فاصله اقلیدسی را تا مرکز آن دارد:

در پایان این فاز، هندسه فضا به بخش‌های متمایزی به نام سلول‌های ورونوی (Voronoi Cells) تقسیم می‌شود که مرزهای متمایز کلاسترها را پدید می‌آورند.

فاز بیشینه‌سازی (M-Step / Maximization): ثابت فرض کردن انتساب‌ها و به‌روزرسانی مراکز

در این گام، برعکس فاز قبل، ساختار انتساب‌ها و مرزهای خوشه‌ها (wij) که در گام E تثبیت شده بودند، کاملاً ثابت و بدون تغییر فرض می‌شوند. اکنون مأموریت الگوریتم، تغییر مکان مکانیکی مراکز ثقل (μj) برای به حداقل رساندن اعوجاج درون کلاسترهاست.

برای به دست آوردن فرمول بهینه‌سازی، از تابع هدف  J نسبت به پارامتر پیوسته μj مشتق جزئی (گرادیان) می‌گیریم و حاصل را برابر با بردار صفر قرار می‌دهیم:

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

از آنجا که μj به اندیس مجموع اول (i) وابستگی مستقیمی در مقدار ندارد، می‌توان آن را از زیر سیگما خارج کرد:

با بازآرایی رابطه فوق، فرمول قطعی و بهینه به‌روزرسانی مراکز ثقل استخراج می‌شود:

تعبیر مفهومی فرمول: مخرج کسر دقیقاً بیانگر تعداد کل نقاط داده‌ای است که به خوشه jام تخصیص یافته‌اند. صورت کسر نیز مجموع برداری مختصات آن نقاط را نشان می‌دهد. تقسیم این دو عبارت بر یکدیگر، دقیقاً تعریف هندسی میانگین حسابی (Arithmetic Mean) یا مرکز جرم نقاط درون آن کلاستر است.

فرمولاسیون ریاضی شرط همگرایی (Convergence Criteria)

از آنجا که فازهای E-step و M-step به صورت مداوم مقدار تابع هدف J را کاهش می‌دهند و مقدار اینرسی نیز به دلیل ماهیت مربعی فواصل هرگز نمی‌تواند منفی شود، این تابع از پایین به وسیله صفر محدود شده است. (J ≥ 0) بر اساس قضیه همگرایی یکنوا، الگوریتم قطعاً پس از طی تعدادی تکرار محدود به ثبات ساختاری می‌رسد.

برای سنجش این پایداری و صدور فرمان توقف محاسبات، میزان جابه‌جایی برداری مراکز ثقل بین دو تکرار متوالی ارزیابی می‌شود. الگوریتم زمانی به پایان می‌رسد که مجموع تغییرات پوزیشن هندسی تمامی مراکز، از یک حد آستانه بسیار کوچک و بهینه‌سازی شده به نام اپسیلون (ε) کمتر شود:

معرفی و تبیین متغیرهای شرط همگرایی:

  • μj ^(t): بردار مختصات کلاستر jام در تکرار محاسباتی فعلی (t).
  • μj ^(t-1): بردار مختصات کلاستر jام در تکرار محاسباتی قبلی (t-1).
  • μj^(t)-μj^(t-1)|^2|: مجذور فاصله جابه‌جایی مرکز ثقل بین دو تکرار متوالی.
  • ε (اپسیلون): حد آستانه تلورانس ریاضی. (Tolerance) این پارامتر یک عدد مثبت بسیار کوچک است. عبور تغییرات از این مرز به پایین، نشان‌دهنده استقرار کامل، قطعی و بدون نوسان مراکز ثقل در نقاط بهینه محلی (Local Minima) فضا است.

.

6.مثال عددی

.

مثال اول: (آموزشی تک‌بعدی)

  • موضوع: بخش‌بندی نمرات دانش‌آموزان برای تخصیص منابع آموزشی
  • مسئله: مجموعه داده تک‌بعدی شامل نمرات ۵ دانش‌آموز است: X = {2, 4, 10, 12, 13}. می‌خواهیم این داده‌ها را با استفاده از الگوریتم  K-Means به  K=2 خوشه تقسیم کنیم.
  • مقداردهی اولیه: فرض کنید به صورت تصادفی دو نقطه زیر به عنوان مراکز ثقل اولیه انتخاب شده‌اند:

گام اول: فاز انتظار  – (E-Step)محاسبه فواصل و تخصیص نقاط

با توجه به تک‌بعدی بودن داده‌ها، فاصله اقلیدسی ساده همان قدر مطلق تفاضل است:

تک‌تک نقاط را بررسی و به نزدیک‌ترین مرکز نسبت می‌دهیم:

  • نقطه x1 = 2
  • نقطه x2 = 4
  • نقطه x3 = 10
  • نقطه x4 = 12
  • نقطه x5 = 13

پیکربندی اولیه کلاسترها:

گام دوم: فاز بیشینه‌سازی  -(M-Step) به‌روزرسانی مراکز ثقل

مراکز جدید را با استفاده از فرمول میانگین حسابی نقاط هر خوشه بازنویسی می‌کنیم:

گام سوم: بررسی شرط همگرایی (Convergence Test)

بررسی می‌کنیم که آیا انتساب نقاط در تکرار بعدی تغییر می‌کند یا خیر. اگر نقاط X را با مراکز جدید (μ1=3 وμ2=11.67 ) مجدداً ارزیابی کنیم، متوجه می‌شویم مرزبندی‌ها کاملاً ثابت می‌مانند و هیچ نقطه‌ای جابه‌جا نمی‌شود. الگوریتم به همگرایی کامل رسیده است.

مثال دوم: (کاربردی دوبعدی تجاری)

  • موضوع: بخش‌بندی مشتریان (Customer Segmentation) بر اساس دو ویژگی «تعداد خرید» و «مبلغ هزینه شده»
  • مسئله: داده‌های ۳ مشتری به صورت نقاط دوبعدی در فضای  R^2  به شرح زیر است:

قصد داریم این داده‌ها را به K=2 خوشه تقسیم کنیم.

  • مقداردهی اولیه: نقاط  A1 و  A2 به عنوان مراکز اولیه فرض می‌شوند:

تکرار اول – گام اول (E-Step): محاسبات ماتریس فواصل اقلیدسی

فرمول فاصله اقلیدسی در فضای دو بعدی:

  • برای نقطه A1(1, 1)
  • برای نقطه A2(2, 1)
  • برای نقطه A3(4, 3)

وضعیت کلاسترها در تکرار اول:

تکرار اول – گام دوم (M-Step): به‌روزرسانی برداری مراکز

مختصات هندسی جدید مراکز را محاسبه می‌کنیم:

تکرار دوم – گام اول (E-Step): انتساب مجدد با مراکز بهینه‌شده

مراکز جدید ما  μ1 = (1, 1) و  μ2 = (3, 2) هستند. فواصل را دوباره می‌سنجیم:

  • نقطه A1(1, 1): مشخصاً به  μ1 نزدیک‌تر است .
  • نقطه A2(2, 1)
  • نقطه A3(4, 3)

وضعیت جدید کلاسترها:

تکرار دوم – گام دوم (M-Step): به‌روزرسانی نهایی مراکز

اگر چرخه را یک بار دیگر ادامه دهید، خواهید دید که انتساب نقاط تثبیت شده و تغییر نمی‌کند ؛ در نتیجه مدل در این نقطه متوقف می‌شود.

مثال سوم: (محاسبه و تحلیل ماتریس خطای تابع هدف)

  • موضوع: سنجش اعوجاج و میزان کاهش اینرسی کل سیستم محاسباتی
  • مسئله: با فرض نتایج نهایی به دست آمده در مثال دوم، مقدار کل تابع هدف الگوریتم یا همان شاخص Inertia  (J) را محاسبه کنید تا همگنی خوشه‌ها به صورت تئوریک اثبات شود.

راه حل گام‌به‌گام با فرمولاسیون ریاضی:

فرمول اصلی تابع هدف یادگیری بدون نظارت K-Means عبارت است از:

با توجه به بخش‌بندی صلب نهایی در مثال دوم، مقادیر متغیرهای باینری نشانگر به این صورت است:

  • برای خوشه ۱ :
  • برای خوشه ۲ :

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

اول: محاسبه واریانس درون‌خوشه‌ای برای کلاستر ۱

  • مجذور فاصله A1(1, 1) تا مرکز μ1(1.5, 1)
  • مجذور فاصله A2(2, 1) تا مرکز μ1 (1.5, 1)

دوم: محاسبه واریانس درون‌خوشه‌ای برای کلاستر ۲

  • مجذور فاصله A3(4, 3) تا مرکز μ2 (4, 3)

سوم: محاسبه اینرسی کل خطای سیستم (J)

تحلیل تئوریک خروجی: مقدار J = 0.50  نشان‌دهنده یک بهینه محلی بسیار مستحکم و با اعوجاج حداقلی برای این توزیع داده است. صفر شدن اینرسی در خوشه دوم به این دلیل است که خوشه تنها شامل یک عضو (تک‌نقطه) بوده و مرکز ثقل دقیقاً روی خود داده منطبق شده است.

7.ابزار ها و فریم ورک های محبوب

کتابخانه Scikit-Learn

محبوب‌ترین و استانداردترین فریم‌ورک یادگیری ماشین در پایتون است که الگوریتم  K-Means را به صورت بهینه‌شده و با پشتیبانی از   K-Means++ ارائه می‌دهد. این ابزار برای دیتابیس‌های کوچک تا متوسط ساختاریافته فوق‌العاده چابک است.

کد پایتون:

import numpy as np
from sklearn.cluster import KMeans

# تولید داده‌های فرضی دو بعدی
X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])

# مقداردهی اولیه مدل با ۲ خوشه و بذرپاشی پیشرفته
kmeans = KMeans(n_clusters=2, init='k-means++', random_state=42)

# آموزش مدل و استخراج برچسب کلاسترها
labels = kmeans.fit_predict(X)
centroids = kmeans.cluster_centers_

print("Labels:", labels)
print("Centroids:\n", centroids)

خروجی:

فریم‌ورک Apache Spark (کتابخانه MLlib)

صنعتی‌ترین ابزار برای پردازش توزیع‌شده و کلاسترینگ مگادیتابیس‌ها و کلان‌داده‌ها (Big Data) در فریم‌ورک‌های ابری است. این ابزار داده‌ها را به صورت موازی روی چندین گره (Node) پردازش می‌کند.

from pyspark.sql import SparkSession
from pyspark.ml.clustering import KMeans
from pyspark.ml.feature import VectorAssembler

# راه‌اندازی جلسه اسپارک
spark = SparkSession.builder.appName("KMeansExample").getOrCreate()
data = spark.createDataFrame([(1.0, 2.0), (1.0, 4.0), (10.0, 2.0)], ["f1", "f2"])

# تبدیل ویژگی‌ها به بردار متراکم اسپارک
assembler = VectorAssembler(inputCols=["f1", "f2"], outputCol="features")
training_df = assembler.transform(data)

# ساخت و آموزش مدل کا-میانگین توزیع‌شده
kmeans = KMeans(k=2, seed=1).setFeaturesCol("features")
model = kmeans.fit(training_df)

# استخراج مختصات مراکز ثقل
centers = model.clusterCenters()
print("Cluster Centers: ", centers)

خروجی:

8.پیاده سازی گام به گام

چرخه محاسباتی و مکانیکی الگوریتم برای افراز صلب داده‌ها از یک فرآیند تکرارشونده ۴ مرحله‌ای پیروی می‌کند:

  • گام اول: مقداردهی اولیه (Initialization) در این مرحله پارامتر هایپرکوانتوم K (تعداد خوشه‌ها) دریافت شده و به همان تعداد، نقاط متمایزی به عنوان مراکز ثقل اولیه (μj) در فضای ویژگی‌ها مستقر می‌شوند. در روش سنتی، این نقاط با شافل کردن دیتابیس و به صورت تصادفی انتخاب می‌شوند.
  • گام دوم: تخصیص صلب نقاط (Assignment Step) ماتریس فواصل اقلیدسی میان تک‌تک نقاط داده (xi) تا تمام K مرکز ثقل محاسبه می‌شود. هر نقطه بر اساس قید کمینه‌سازی فاصله، به صلب‌ترین شکل ممکن به نزدیک‌ترین مرکز متصل شده و متغیر باینری نشانگر آن (wij = 1) مقداردهی می‌شود.
  • گام سوم: محاسبات هندسی و به‌روزرسانی مراکز (Update Step) با توجه به تغییر قلمرو خوشه‌ها، مختصات مراکز ثقل قبلی کارایی خود را از دست می‌دهند. الگوریتم با محاسبه میانگین حسابی مختصات برداری تمام نقاط تخصیص‌یافته به هر خوشه، مرکز هندسی یا مرکز جرم جدید کلاستر را بازنویسی می‌کند.
  • گام چهارم: ارزیابی شرط توقف و تست همگرایی (Convergence Test) این چرخه محاسباتی (E-Step و M-Step) آن‌قدر تکرار می‌شود تا سیستم به ثبات توپولوژیک برسد. همگرایی زمانی رخ می‌دهد که جابه‌جایی مراکز به صفر یا زیر آستانه اپسیلون برسد یا سقف حداکثر تکرار مجاز (Max Iterations) لمس شود.

کد پایتون:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# تنظیمات استایل و پالت رنگی اختصاصی سایت
# Active Gold, Crimson, AI Soft Blue, Metal Silver, Ultra Light Gray, Pure White
COLOR_PALETTE = {
    "bg_light": "#F8F9FA",       # Ultra Light Gray
    "text_dark": "#212529",      # Dark Charcoal for typography
    "cluster_1": "#4A90E2",     # AI Soft Blue
    "cluster_2": "#D0021B",     # Crimson
    "centroid_color": "#F5A623",# Active Gold
    "grid_color": "#E0E0E0"      # Metal Silver/Light Gray
}

plt.rcParams['figure.facecolor'] = COLOR_PALETTE['bg_light']
plt.rcParams['axes.facecolor'] = COLOR_PALETTE['bg_light']

# ۱. تولید داده‌های مصنوعی ساختاریافته دو بعدی
# دیتابیس شامل ۳۰۰ نمونه با ۲ ویژگی متمایز هندسی است
X, y_true = make_blobs(n_samples=300, centers=2, cluster_std=0.60, random_state=42)

# ۲. مقداردهی اولیه و آموزش مدل K-Means با هایپرپارامتر K=2
# استفاده از استراتژی بذرپاشی پیشرفته k-means++ جهت فرار از کمینه‌های محلی
kmeans = KMeans(n_clusters=2, init='k-means++', max_iter=300, tol=1e-4, random_state=42)

# ۳. فاز بهینه‌سازی متناوب و استخراج انتساب‌های صلب
labels = kmeans.fit_predict(X)
centroids = kmeans.cluster_centers_

# ۴. تصویرسازی و رسم نمودار کلاسترینگ متناسب با اصول هویت بصری سایت
fig, ax = plt.subplots(figsize=(10, 7))

# رسم نقاط مربوط به خوشه اول با رنگ آبی ملایم هوش مصنوعی
ax.scatter(X[labels == 0, 0], X[labels == 0, 1], 
           c=COLOR_PALETTE['cluster_1'], label='Cluster 1 (AI Soft Blue)', 
           alpha=0.7, edgecolors='w', s=50)

# رسم نقاط مربوط به خوشه دوم با رنگ زرشکی مقتدر
ax.scatter(X[labels == 1, 0], X[labels == 1, 1], 
           c=COLOR_PALETTE['cluster_2'], label='Cluster 2 (Crimson)', 
           alpha=0.7, edgecolors='w', s=50)

# رسم موقعیت نهایی مراکز ثقل جابه‌جاشده با رنگ طلایی فعال به همراه مارکر ستاره بزرگ
ax.scatter(centroids[:, 0], centroids[:, 1], 
           c=COLOR_PALETTE['centroid_color'], marker='*', s=300, 
           edgecolors='#212529', linewidths=2, label='Centroids (Active Gold)')

# تنظیمات لایه‌ها، شبکه‌بندی و فونت برچسب‌ها به زبان انگلیسی
ax.set_title('K-Means Clustering and Structural Convergence', 
             fontsize=14, fontweight='bold', color=COLOR_PALETTE['text_dark'], pad=15)
ax.set_xlabel('Feature Space Coordinate X1', fontsize=11, color=COLOR_PALETTE['text_dark'])
ax.set_ylabel('Feature Space Coordinate X2', fontsize=11, color=COLOR_PALETTE['text_dark'])

# بهینه‌سازی خوانایی با استفاده از المان‌های شبکه خطوط (Metal Silver)
ax.grid(True, linestyle='--', alpha=0.5, color=COLOR_PALETTE['grid_color'])
ax.legend(loc='upper right', framealpha=0.9, facecolor='#FFFFFF', edgecolor=COLOR_PALETTE['grid_color'])

# حذف حاشیه‌های اضافی نمودار برای انطباق کامل با وب‌سایت
plt.tight_layout()

# نمایش خروجی بصری مدل
plt.show()

# چاپ عددی اینرسی نهایی تابع هدف (Inertia) جهت ارزیابی واریانس درون‌خوشه‌ای
print(f"Final Objective Function Value (Inertia/WCSS): {kmeans.inertia_:.4f}")
print("Final Optimized Centroids Location:\n", centroids)

خروجی:

9.کاربرد

الگوریتم K-Means Clustering یک ابزار همه‌فن‌حریف تجاری و مهندسی است که با کشف ساختارهای پنهان در داده‌های بدون برچسب، تحولی بزرگ در هوشمندی سیستم‌ها ایجاد می‌کند.

کاربردهای کلیدی و استراتژیک K-Means در صنایع مختلف عبارتند از:

  • بخش‌بندی هوشمند مشتریان (Customer Segmentation): دسته‌بندی خودکار کاربران یک پلتفرم بر اساس رفتارهای خرید، میزان درآمد و نرخ تعامل. این فرآیند به تیم‌های مارکتینگ اجازه می‌دهد تا کمپین‌های تبلیغاتی شخصی‌سازی‌شده و هدفمند (Micro-Marketing) طراحی کنند.
  • فشرده‌سازی و پردازش تصویر (Image Compression): فشرده‌سازی لایه‌های دیجیتال تصاویر از طریق کاهش تعداد رنگ‌های به کار رفته در پیکسل‌ها. K-Means پیکسل‌های هم‌رنگ را در کلاسترهای یکسان قرار می‌دهد و حجم فایل را بدون افت کیفیت محسوس، به شدت کاهش می‌دهد.
  • تحلیل معنایی و خوشه‌بندی اسناد (Document Clustering): دسته‌بندی خودکار حجم انبوهی از مقالات، ایمیل‌ها و اخبار در گروه‌های موضوعی مجزا (مانند ورزشی، اقتصادی و فناوری). این کاربرد در موتورهای جستجو و سیستم‌های مدیریت محتوا نقشی حیاتی دارد.
  • کشف ناهنجاری و تقلب (Anomaly Detection): شناسایی الگوهای رفتاری غیرعادی در تراکنش‌های بانکی یا شبکه‌های کامپیوتری. هر نقطه داده‌ای که فاصله بسیار زیادی از مراکز ثقل خوشه‌های امن داشته باشد، به عنوان یک تهدید یا تراکنش مشکوک ردیابی می‌شود.
  • مکان‌یابی استراتژیک و تسهیلات شهری (Facility Location): تعیین بهینه‌ترین موقعیت جغرافیایی برای احداث زیرساخت‌های جدید مانند انبارهای توزیع دیجی‌کالا، ایستگاه‌های آتش‌نشانی یا شعب بانک، دقیقاً در مرکز ثقل تراکم جمعیت مشتریان.

.

10.مطالعه موردی

.

مطالعه موردی اول : فشرده‌سازی لایه‌های تصویر و کوانتیزاسیون رنگ (Image Color Quantization)

مسئله و چالش

در سیستم‌های پردازش تصویر در لبه (Edge Computing) و اینترنت اشیاء، پهنای باند شبکه و فضای ذخیره‌سازی ابری پاشنه آشیل سیستم هستند. یک تصویر رنگی استاندارد ۲۴ بیتی می‌تواند شامل بیش از ۱۶ میلیون رنگ منحصربه‌فرد باشد. چالش اصلی، کاهش حجم این تصاویر از طریق محدود کردن تعداد رنگ‌ها به یک پالت بهینه (مثلاً ۱۶ رنگ) بدون آسیب به ساختار هندسی و معنایی کانتورهای تصویر است.

هدف عملیاتی

کاهش ابعاد رنگی پیکسل‌ها از طریق کلاسترینگ صلب  K-Means به طوری که پیکسل‌های هم‌رنگ در سلول‌های ورونوی یکسانی قرار گرفته و فرآیند کوانتیزاسیون با کمترین میزان اینرسی یا افت کیفیت بصری انجام شود.

  • بردار ویژگی: کانال‌های رنگی هر پیکسل شامل سه مؤلفه [R, G, B] به عنوان یک نقطه در فضای سه‌بعدی.

.

کد پایتون

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_sample_image

# ۱. بارگذاری تصویر واقعی استاندارد (تصویر پیش‌فرض در سایکیت-لرن)
china_img = load_sample_image("china.jpg")

# تبدیل مقادیر پیکسل‌ها به بازه 0 تا 1 جهت نرمال‌سازی هندسی فواصل
china_img = np.array(china_img, dtype=np.float64) / 255

# استخراج ابعاد تصویر (عرض، ارتفاع و ۳ کانال رنگی R, G, B)
w, h, d = original_shape = tuple(china_img.shape)
# تبدیل تصویر ماتریسی به یک آرایه دوبعدی از پیکسل‌ها (بردار ویژگی سه‌بعدی برای هر پیکسل)
image_array = np.reshape(china_img, (w * h, d))

# ۲. پیکربندی مدل K-Means برای استخراج پالت ۱۶ رنگ بهینه
# استفاده از پالت رنگی مقتدر زرشکی و طلایی در منطق کلاسترها
K_colors = 16
kmeans = KMeans(n_clusters=K_colors, init='k-means++', random_state=42)
kmeans.fit(image_array)

# استخراج برچسب کلاستر برای هر پیکسل و مختصات نهایی مراکز ثقل رنگی
labels = kmeans.predict(image_array)
centroids = kmeans.cluster_centers_

# ۳. بازسازی تصویر فشرده‌شده با جایگذاری مراکز ثقل رنگی جدید
quantized_image = np.reshape(centroids[labels], (w, h, d))

# ۴. تصویرسازی مقایسه‌ای متناسب با پالت بصری Ultra Light Gray و Pure White
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 7), facecolor='#F8F9FA')

ax1.imshow(china_img)
ax1.set_title('Original Image (16 Million+ Colors)', fontsize=12, fontweight='bold', color='#212529')
ax1.axis('off')

ax2.imshow(quantized_image)
ax2.set_title(f'Quantized Image (K={K_colors} Optimized Colors)', fontsize=12, fontweight='bold', color='#212529')
ax2.axis('off')

plt.tight_layout()
plt.show()

print(f"Image compression successful. Embedded color centers:\n {centroids}")

خروجی:

مطالعه موردی دوم : تحلیل معنایی و دسته‌بندی متن در پردازش زبان طبیعی (NLP Document Clustering)

مسئله و چالش

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

هدف عملیاتی

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

  • بردار ویژگی: ماتریس فرکانس کلمات استخراج‌شده با متد وزن‌دهی عددی TF-IDF.

.

کد پایتون

import matplotlib.pyplot as plt
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.decomposition import TruncatedSVD

# ۱. بارگذاری دیتابیس واقعی اخبار متنی (محدود به ۴ دسته برای بهینه‌سازی بار محاسباتی)
categories = ['alt.atheism', 'talk.religion.misc', 'comp.graphics', 'sci.space']
dataset = fetch_20newsgroups(subset='all', categories=categories, shuffle=True, random_state=42)

# ۲. تبدیل متون به بردار ویژگی با متریک وزن‌دهی عددی TF-IDF
vectorizer = TfidfVectorizer(max_df=0.5, min_df=2, stop_words='english')
X_tfidf = vectorizer.fit_transform(dataset.data)

# ۳. اعمال الگوریتم K-Means با هایپرپارامتر K=4
kmeans = KMeans(n_clusters=4, init='k-means++', max_iter=100, random_state=42)
labels = kmeans.fit_predict(X_tfidf)

# ۴. کاهش ابعاد برای تصویرسازی دو بعدی با استفاده از متد SVD (LSA)
svd = TruncatedSVD(n_components=2, random_state=42)
X_dense = svd.fit_transform(X_tfidf)

# ۵. رسم نمودار کلاسترینگ متون منطبق بر رنگ‌های تخصصی سایت شما
fig, ax = plt.subplots(figsize=(10, 7), facecolor='#F8F9FA')
ax.set_facecolor('#F8F9FA')

# اعمال پالت: AI Soft Blue, Crimson, Metal Silver, Active Gold
colors = ['#4A90E2', '#D0021B', '#A0A0A0', '#F5A623']
for i in range(4):
    ax.scatter(X_dense[labels == i, 0], X_dense[labels == i, 1], 
               c=colors[i], label=f'Topic Cluster {i+1}', alpha=0.6, edgecolors='w')

ax.set_title('NLP Document Clustering via TF-IDF and K-Means', fontsize=14, fontweight='bold', color='#212529')
ax.set_xlabel('Latent Semantic Component 1', fontsize=11)
ax.set_ylabel('Latent Semantic Component 2', fontsize=11)
ax.grid(True, linestyle='--', color='#E0E0E0', alpha=0.5)
ax.legend(framealpha=0.9, facecolor='#FFFFFF')

plt.tight_layout()
plt.show()

خروجی:

مطالعه موردی سوم : غربالگری پزشکی و تشخیص تومورهای بالینی (Biomedical Data Clustering)

مسئله و چالش

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

هدف عملیاتی

خوشه‌بندی صلب داده‌های پزشکی به  K=2 گروه و ارزیابی کیفیت جداسازی کلاسترها با معیار اینرسی.

دیتاست

  • دیتاست: دیتابیس پاتولوژی معتبر Breast Cancer Wisconsin.

.

کد پایتون

import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA

# ۱. بارگذاری دیتابیس بالینی واقعی سرطان سینه ویسکانسین
data = load_breast_cancer()
X = data.data
y_true = data.target

# ۲. نرمال‌سازی اجباری و استانداردسازی ویژگی‌ها (Z-score Normalization)
# این گام برای غلبه بر وابستگی شدید فاصله اقلیدسی به مقیاس داده‌ها الزامی است
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# ۳. آموزش مدل کا-میانگین صلب برای تفکیک دو کلاستر اصلی بالینی
kmeans = KMeans(n_clusters=2, init='k-means++', random_state=42)
labels = kmeans.fit_predict(X_scaled)

# ۴. کاهش ابعاد به فضای دوبعدی با الگوریتم PCA جهت تصویرسازی مرزها
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
centroids_pca = pca.transform(kmeans.cluster_centers_)

# ۵. تصویرسازی با تضاد رنگی شدید بین آبی ملایم هوش مصنوعی و زرشکی مقتدر
fig, ax = plt.subplots(figsize=(10, 7), facecolor='#F8F9FA')

ax.scatter(X_pca[labels == 0, 0], X_pca[labels == 0, 1], 
           c='#4A90E2', label='Sub-type Cluster A (AI Soft Blue)', alpha=0.7, edgecolors='w', s=60)
ax.scatter(X_pca[labels == 1, 0], X_pca[labels == 1, 1], 
           c='#D0021B', label='Sub-type Cluster B (Crimson)', alpha=0.7, edgecolors='w', s=60)

# نمایش مراکز ثقل با رنگ طلایی فعال منحصربه‌فرد برند شما
ax.scatter(centroids_pca[:, 0], centroids_pca[:, 1], 
           c='#F5A623', marker='*', s=350, edgecolors='#212529', linewidths=2, label='Centroids (Active Gold)')

ax.set_title('Biomedical Structure Analysis via Scaled K-Means', fontsize=14, fontweight='bold', color='#212529')
ax.set_xlabel('Principal Component 1', fontsize=11)
ax.set_ylabel('Principal Component 2', fontsize=11)
ax.grid(True, linestyle='--', color='#E0E0E0', alpha=0.5)
ax.legend(loc='upper right', facecolor='#FFFFFF')

plt.tight_layout()
plt.show()

print(f"Medical Clustering WCSS Inertia: {kmeans.inertia_:.4f}")

خروجی:

مطالعه موردی چهارم : کشف الگوهای ناهنجاری در داده‌های مصرف شبکه انرژی (Anomaly Detection)

مسئله و چالش

نیروگاه‌ها و شبکه‌های توزیع الکتریسیته با چالش مصرف غیرمجاز، قطعی‌های پنهان یا نوسانات شدید تجهیزات روبه‌رو هستند. این موارد به عنوان داده‌های پرت (Outliers) در سیستم ثبت می‌شوند. مأموریت اصلی، کشف خودکار رفتارهای غیرعادی مصرف بدون الگوهای از پیش تعیین‌شده است.

هدف عملیاتی

خوشه‌بندی الگوهای منظم مصرف بار و شناسایی نقاطی که به دلیل فاصله بسیار زیاد از مراکز ثقل، کاندیدای ناهنجاری (Anomaly) شبکه هستند.

کد پایتون :

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# ۱. تولید داده‌های شبیه‌سازی شده واقعی بر اساس رفتارهای شبکه برق
np.random.seed(42)
normal_consumption = np.random.randn(200, 2) * 1.5 + [5, 5] # مصارف منظم روزانه
anomalies = np.random.uniform(low=-2, high=15, size=(15, 2))  # ناهنجاری‌ها و انحرافات شبکه

X = np.vstack([normal_consumption, anomalies])

# ۲. اعمال استانداردسازی بر روی متغیرهای توان و ولتاژ
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# ۳. مدل‌سازی فرآیند با فرض ۳ پترن استاندارد توزیع بار
kmeans = KMeans(n_clusters=3, init='k-means++', random_state=42)
labels = kmeans.fit_predict(X_scaled)
centroids = kmeans.cluster_centers_

# ۴. محاسبه فاصله اقلیدسی هر نقطه تا مرکز ثقل خود برای کشف داده‌های ناهنجار پرت
distances = np.min(np.square(X_scaled - centroids[labels]), axis=1)
# تعیین آستانه مرزی ورونوی برای تفکیک داده‌های پرت (۵ درصد فواصل بحرانی)
threshold = np.percentile(distances, 95)
anomaly_indices = np.where(distances > threshold)[0]

# ۵. تصویرسازی مهندسی شبکه با رنگ‌های متالیک، زرشکی و طلایی فعال
fig, ax = plt.subplots(figsize=(11, 7), facecolor='#F8F9FA')

# رسم نقاط منظم توزیع بار با رنگ نقره‌ای متالیک
ax.scatter(X_scaled[:, 0], X_scaled[:, 1], c='#A0A0A0', alpha=0.5, label='Normal Power Load')

# مشخص کردن نقاط بحرانی و ناهنجار شناسایی‌شده با رنگ زرشکی مقتدر
ax.scatter(X_scaled[anomaly_indices, 0], X_scaled[anomaly_indices, 1], 
           c='#D0021B', marker='x', s=100, linewidths=2, label='Detected Grid Anomalies')

# رسم موقعیت مراکز با رنگ طلایی فعال برند شما
ax.scatter(centroids[:, 0], centroids[:, 1], 
           c='#F5A623', marker='o', s=200, edgecolors='#212529', label='Optimized Hub Centroids')

ax.set_title('Power Grid Anomaly Detection via Outlier Distance Analysis', fontsize=14, fontweight='bold', color='#212529')
ax.set_xlabel('Normalized Active Power Vector', fontsize=11)
ax.set_ylabel('Normalized Voltage Intensity Vector', fontsize=11)
ax.grid(True, linestyle='--', color='#E0E0E0', alpha=0.5)
ax.legend(loc='lower right', facecolor='#FFFFFF')

plt.tight_layout()
plt.show()

print(f"Analysis completed. Identified {len(anomaly_indices)} critical network nodes.")

خروجی:

11.مزایای الگوریتم K-Means

  • سرعت محاسباتی بی‌نظیر (High Efficiency): از نظر پیچیدگی زمانی، K-Means به صورت خطی با تعداد داده‌ها عمل می‌کند؛ این یعنی در مقایسه با روش‌های سلسله‌مراتبی، به شدت چابک‌تر است و دیتابیس‌های غول‌آسا را به سرعت پردازش می‌کند.
  • سادگی در درک و پیاده‌سازی (Simplicity): پایه و اساس این الگوریتم بر معیارهای فاصله ساده (مانند اقلیدسی) بنا شده است؛ این امر فرمول‌نویسی، اشکال‌زدایی (Debugging) و توسعه آن را در محیط‌های برنامه‌نویسی بسیار آسان می‌کند.
  • تضمین همگرایی ریاضی (Guaranteed Convergence): به دلیل اتکا به تابع هدف کمینه‌سازی مجذور فواصل (Inertia)، الگوریتم همیشه پس از چند تکرار متوالی به یک نقطه ثبات و پایدار هندسی می‌رسد و دچار خطای چرخه بی‌نهایت نمی‌شود.
  • خروجی‌های صلب و تفکیک‌شده (Hard Clustering): با تخصیص قطعی هر نقطه داده به فقط و فقط یک کلاستر مشخص، تفسیر نتایج برای تیم‌های بازاریابی و تصمیم‌گیرندگان بسیار شفاف، بدون ابهام و قابل درک خواهد بود.

.

12.معایب الگوریتم K-Means

  • نیاز اجباری به تعیین پیش‌فرض K: این الگوریتم هوشمندی لازم برای کشف خودکار تعداد خوشه‌ها را ندارد. شما باید از قبل عدد K را به آن دیکته کنید که در دیتابیس‌های بزرگ و ناشناخته، کاری بسیار چالش‌برانگیز است.
  • حساسیت شدید به مقداردهی اولیه (Initialization Trap): اگر مراکز ثقل اولیه به صورت تصادفی در نقاط نامناسبی از فضا قرار بگیرند، الگوریتم به دام کمینه‌های محلی (Local Minima) می‌افتد و نتایج ضعیفی تولید می‌کند.
  • آسیب‌پذیری بالا در برابر نویز و داده‌های پرت (Outliers): از آنجا که K-Means از میانگین ریاضی برای جابجایی مراکز استفاده می‌کند، وجود حتی چند داده پرت شدید می‌تواند مراکز ثقل را به شدت به سمت خود بکشد و مرزبندی‌ها را مخدوش کند.
  • ناتوانی در کشف اشکال هندسی پیچیده و غیرکروی: کا-مینز فرض را بر این می‌گذارد که خوشه‌ها همیشه کروی و هم‌اندازه هستند. بنابراین، در مواجهه با داده‌هایی با ساختارهای حلقوی، اِلِپتیکال یا اشکال مارپیچ کاملاً شکست می‌خورد.
  • ضعف در مدیریت کلاسترهایی با چگالی متغیر: اگر تراکم داده‌ها در یک بخش از فضا بسیار فشرده و در بخش دیگر بسیار پراکنده باشد، K-Means نمی‌تواند این تفاوت ساختاری را درک کند و کلاسترها را به طور متوازن تفکیک نخواهد کرد.
  • وابستگی شدید به مقیاس ویژگی‌ها: اگر ویژگی‌های ورودی پیش از مدل‌سازی استانداردسازی نشوند، ویژگی‌هایی که اعداد بزرگ‌تری دارند (مانند قیمت در برابر سن) به طور ناعادلانه‌ای بر محاسبات فاصله اقلیدسی مسلط می‌شوند.

.

13.نوآوری و آینده الگوریتم K-Means

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

  • ادغام با یادگیری عمیق (Deep Clustering): یکی از هیجان‌انگیزترین نوآوری‌ها، ترکیب K-Means با شبکه‌های عصبی خودرمزگذار (Autoencoders) است؛ در این رویکرد، ابتدا داده‌های پیچیده و ابعاد بالا فشرده شده و سپس K-Means خوشه‌بندی معنایی بسیار دقیق‌تری را روی ویژگی‌های عمیق استخراج‌شده انجام می‌دهد.
  • خوشه‌بندی در لبه (Edge Computing Clustering): با گسترش اینترنت اشیاء (IoT)، نیاز مبرمی به اجرای الگوریتم‌ها روی سخت‌افزارهای ضعیف و گجت‌های هوشمند وجود دارد؛ نسخه‌های فوق‌سبک K-Means اکنون قادرند بدون نیاز به سرورهای ابری، عملیات کلاسترینگ آنی را مستقیماً روی تراشه‌های لبه انجام دهند.
  • توسعه الگوریتم‌های کوانتومی (Quantum K-Means): با ورود به عصر محاسبات کوانتومی، الگوریتم Q-Means در حال توسعه است؛ این نوآوری با بهره‌گیری از محاسبات موازی کوانتومی، پدیده «نفرین ابعاد» را به طور کامل مهار کرده و میلیاردها داده چندبعدی را در چند میلی‌ثانیه خوشه‌بندی می‌کند.
  • مقاوم‌سازی در برابر نویز و داده‌های پرت: متدهای نوین با جایگزینی توابع فاصله هوشمندتر بجای فاصله اقلیدسی ساده، هسته K-Means را در برابر داده‌های کثیف و نویزهای محیطی مقاوم کرده‌اند تا مرزهای صلب کلاسترها دچار انحراف محاسباتی نشوند.

.

جمع بندی

الگوریتم K-Means یکی از مهم‌ترین و پرکاربردترین روش‌های خوشه‌بندی در یادگیری بدون نظارت است که با استفاده از مراکز خوشه و کمینه‌سازی فاصله درون‌خوشه‌ای، داده‌های مشابه را در گروه‌های مجزا سازمان‌دهی می‌کند. سادگی مفهومی، سرعت پردازش بالا و قابلیت استفاده در مجموعه‌داده‌های بزرگ، این الگوریتم را به یکی از ابزارهای اصلی تحلیل داده در پروژه‌های یادگیری ماشین تبدیل کرده است.

در این مطلب مشاهده کردیم که عملکرد K-Means به انتخاب مناسب تعداد خوشه‌ها، مقداردهی اولیه مراکز خوشه، مقیاس‌بندی داده‌ها و ویژگی‌های ساختاری داده‌ها وابسته است. همچنین دیدیم که روش‌هایی مانند Elbow Method و Silhouette Score می‌توانند در ارزیابی کیفیت خوشه‌بندی و تعیین تعداد خوشه‌های مناسب نقش مهمی ایفا کنند.

با وجود مزایای متعدد، K-Means محدودیت‌هایی نیز دارد؛ از جمله حساسیت به نقاط پرت، وابستگی به مقدار اولیه مراکز خوشه و عملکرد ضعیف در داده‌هایی با ساختارهای پیچیده یا خوشه‌های غیرکروی. به همین دلیل، در بسیاری از کاربردهای پیشرفته از روش‌های تکمیلی یا الگوریتم‌های جایگزین مانند DBSCAN، HDBSCAN و Gaussian Mixture Models استفاده می‌شود.

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

آنچه می خوانید