مجموعه آموزشی پی استور - https://programstore.ir

آموزش پایتون پیشرفته – راهنمایی عملی خوشه بندی K-Means در پایتون به صورت گام به گام

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

اگر علاقمند به یادگیری نحوه پیاده سازی خوشه بندی k-means در پایتون هستید، در آموزش پایتون پیشرفته با ما همراه شوید تا با مثال کاملی از خوشه بندی k-means با استفاده از پایتون را یاد بگیرید.

خوشه بندی چیست؟

خوشه بندی مجموعه ای از روش ها و تکنیک ها است که برای تقسیم داده ها به چند گروه یا خوشه استفاده می شود. خوشه ها به صورت گروهی از اشیاء داده تعریف می شوند که بیشترین شباهت به اشیاء موجود در خوشه خود را دارند. در عمل، خوشه بندی به شناسایی دو اصل در کیفیت داده کمک می کند:

  1. معنی دار بودن Meaningfulness
  2. مفید بودن Usefulness

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

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

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

نحوه انجام خوشه بندی K-Means در پایتون

در این بخش از آموزش پایتون پیشرفته، گام به گام، الگوریتم k-means را مرور می کنیم. درک جزئیات الگوریتم یک گام اساسی در روند نوشتن خوشه بندی k-means در پایتون است. آنچه در این بخش می آموزید به شما کمک می کند تصمیم بگیرید که آیا k-means انتخاب درستی برای حل مسئله خوشه بندی شما است؟

آشنایی با الگوریتم K-Means

درک الگوریتم K-Means فقط به چند مرحله نیاز دارد. اولین قدم این است که k centroids را به طور تصادفی انتخاب کنید، که در آن k برابر با تعداد خوشه هایی است که انتخاب می کنید و Centroids نقاط داده ای هستند که مرکز یک خوشه را نشان می دهند. خوشبختانه، سایت فرادرس در این لینک (+) [2] مقاله ای را تحت عنوان خوشه بندی k میانگین (k-means Clustering) — به همراه کدهای R را منتشر کرده است که مطالعه آن به شما توصیه می شود.

عنصر اصلی الگوریتم با یک فرآیند دو مرحله ای به نام حداکثر انتظار expectation-maximization انجام می شود. مرحله انتظار یا expectation هر نقطه داده را به نزدیکترین مرکز خود اختصاص می دهد. سپس، مرحله حداکثر سازی میانگین تمام نقاط برای هر خوشه را محاسبه کرده و مرکز جدید یا همان centroid را تنظیم می کند. نسخه اصلی الگوریتم k-means به صورت زیر است:

آموزش پایتون پیشرفته - راهنمایی عملی خوشه بندی K-Means در پایتون

کیفیت تخصیص های خوشه بندی با محاسبه مجموع خطای مربعات (SSE) پس از همگرایی centroids یا مطابقت با تکرار قبلی تعیین می شود. SSE به عنوان مجموع فاصله های اقلیدسی مربعات هر نقطه تا نزدیکترین مرکز آن تعریف می شود. از آنجا که این اندازه گیری خطا است، هدف k-means تلاش برای به حداقل رساندن این مقدار است.

شکل زیر centroids و SSE را که در پنج تکرارT از دو مرحله مختلف الگوریتم k-means در یک مجموعه داده یکسان را نشان می دهد:

آشنایی با الگوریتم K-Means

هدف از این شکل در آموزش پایتون پیشرفته، نشان دادن این مفهوم است که مقداردهی اولیه centroids یک گام اساسی و مهم در الگوریتم k-means است. همچنین استفاده از SSE به عنوان معیاری برای عملکرد خوشه بندی مهم جلوه می دهد. پس انتخاب تعداد خوشه و centroids اولیه، مرحله حداکثر سازی انتظارات را تکرار می کند تا زمانی که موقعیت های مرکزی به همگرایی برسند و بدون تغییر باقی بماند.

مرحله راه اندازی تصادفی باعث می شود که الگوریتم k-means غیر تعیین کننده نباشد، بدین معنا که اگر یک الگوریتم یکسان را دو بار روی یک مجموعه داده یکسان اجرا کند، تخصیص خوشه ها متفاوت خواهد بود. در عمل محققان معمولاً چندین مقداردهی اولیه از کل الگوریتم k-means را اجرا می کنند و تخصیص خوشه را از مقداردهی اولیه با کمترین SSE انتخاب می کنند.

پیاده سازی کد خوشه بندی k-means در پایتون

خوشبختانه، پیاده سازی خوشه بندی k-means در پایتون در بسته محبوب یادگیری ماشین scikit-learn وجود دارد. در آموزش پایتون پیشرفته با نحوه نوشتن و پیاده سازی عملی الگوریتم k-means با استفاده از کتابخانه scikit-learn آشنا خواهید شد.

کدهای موجود در این آموزش به برخی از بسته های خارجی پایتون نیاز دارد و فرض می شود که شما پایتون با Anaconda را نصب کرده اید. برای کسب اطلاعات بیشتر در مورد تنظیم محیط پایتون برای یادگیری ماشین در ویندوز، راه اندازی پایتون برای یادگیری ماشین در Windows [3] را مطالعه کنید.

در غیر این صورت، می توانید با نصب بسته های مورد نیاز شروع کنید:

(base) $ conda install matplotlib numpy pandas seaborn scikit-learn ipython
(base) $ conda install -c conda-forge kneed

در این مرحله ماژول های مورد نیاز برای کد های این بخش import می شوند. در یادگیری پایتون پیشرفته به نحوه صحیح import کردن توابع یادگیری ماشین دقت کنید:

import matplotlib.pyplot as plt
from kneed import KneeLocator
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.preprocessing import StandardScaler

شما می توانید داده ها را از GIF فوق با استفاده از ()make_blobs تولید کنید، یک تابع راحت در scikit-learning که برای ایجاد خوشه های مصنوعی استفاده می شود. ()make_blobs از پارامترهای زیر استفاده می کند:

()make_blobs تابعی است که دو مقدار را برمی گرداند:

ایجاد داده ها و برچسب های مصنوعی:

features, true_labels = make_blobs(
    n_samples=200,
    centers=3,
    cluster_std=2.75,
    random_state=42
)

بازتولید الگوریتم های غیرقطعی یادگیری ماشین مانند k-means دشوار است. پارامتر random_state روی یک عدد صحیح تنظیم شده است تا بتوانید داده های ارائه شده در آموزش را دنبال کنید. در عمل ، بهتر است random_state را به عنوان مقدار پیش فرض، None بگذارید.

در این بخش از آموزش پایتون پیشرفته نگاهی به پنج عنصر اول برای هر یک از متغیرهای return شده توسط تابع ()make_blobs می اندازیم:

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])

مجموعه داده ها معمولاً حاوی ویژگی های عددی هستند که در واحدهای مختلف اندازه گیری شده اند، مانند قد (اینچ) و وزن (پوند). یک الگوریتم یادگیری ماشین وزن را مهمتر از قد می داند زیرا مقادیر وزن بزرگتر هستند و تنوع بالاتری از فرد به فرد دیگر دارند.

الگوریتم های یادگیری ماشین باید همه ویژگی ها را در یک زمین بازی یکنواخت در نظر بگیرند. این بدان معناست که مقادیر همه ویژگی ها باید به مقیاس یکسان تبدیل شوند. برای دسترسی به آموزش الگوریتم های یادگیری ماشین، به لینک زیر از وبسایت فرادرس مراجعه نمایید.

فرآیند تبدیل ویژگی های عددی برای استفاده از مقیاس یکسان، مقیاس بندی ویژگی نامیده می شود. این عمل، یک مرحله پیش پردازش مهم داده برای اکثر الگوریتم های یادگیری ماشین است زیرا می تواند تأثیر قابل توجهی بر عملکرد الگوریتم شما داشته باشد.

روش های مختلفی برای پیاده سازی مقیاس ویژگی وجود دارد. در این مثال، از کلاس StandardScaler استفاده خواهید کرد. این کلاس نوعی مقیاس بندی ویژگی ها را به نام استانداردسازی پیاده سازی می کند. مقیاس های استاندارد یا تغییر مقادیر برای هر ویژگی عددی در مجموعه داده شما به طوری که ویژگی ها دارای میانگین 0 و انحراف استاندارد 1 هستند:

scaler = StandardScaler()
scaled_features = scaler.fit_transform(features)

نگاهی به نحوه مقیاس بندی مقادیر در scaled_features بیندازید:

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])

اکنون داده ها آماده خوشه بندی هستند. کلاس برآوردگر KMeans در scikit-learning جایی است که شما پارامترهای الگوریتم را قبل از برآوردگر به داده ها وصل می کنید. اجرای scikit-learn انعطاف پذیر است و چندین پارامتر قابل تنظیم را ارائه می دهد.

در اینجا پارامترهای مورد استفاده در این مثال آمده است:

کلاس KMeans را با آرگومان های زیر در نظر داشته باشید:

kmeans = KMeans(
    init="random",
    n_clusters=3,
    n_init=10,
    max_iter=300,
    random_state=42
)

نام پارامترها با زبانی که برای توصیف الگوریتم k-means در اوایل آموزش پایتون پیشرفته استفاده شد مطابقت دارد. اکنون که کلاس k-means آماده است، گام بعدی این است که آن را در داده های scaled_features متناسب کنید. با این کار ده بار الگوریتم k-means روی داده های شما با حداکثر 300 تکرار در هر اجرا، اجرا می شود:

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)

آمار مربوط به مقداردهی اولیه با کمترین SSE به عنوان ویژگی kmeans پس از فراخوانی ()fit. در دسترس است:

# The lowest SSE value
kmeans.inertia_


# Final locations of the centroid
kmeans.cluster_centers_





# The number of iterations required to converge
kmeans.n_iter_

در نهایت، تخصیص خوشه به عنوان یک آرایه NumPy تک بعدی در kmeans.labels_ ذخیره می شود. در اینجا نگاهی به پنج برچسب پیش بینی شده اول می اندازیم:

In [12]: kmeans.labels_[:5]
Out[12]: array([0, 1, 2, 2, 2], dtype=int32)

توجه داشته باشید که ترتیب برچسب های خوشه برای دو شیء اول داده، flip شده است. این ترتیب در true_labels [1 ، 0] در kmeans.labels_ [0 ، 1] بود، اگرچه این اشیاء داده هنوز در خوشه های اصلی خود در kmeans.lables_ عضو هستند. این رفتار طبیعی است، زیرا ترتیب برچسب های خوشه بندی به مقداردهی اولیه بستگی دارد. خوشه 0 از اولین اجرا می تواند در مرحله دوم خوشه 1 و برعکس برچسب گذاری شود. این کار بر معیارهای ارزیابی خوشه بندی تأثیر نمی گذارد.

انتخاب تعداد مناسب خوشه ها

در این بخش از آموزش پایتون پیشرفته، شما دو روش را که معمولاً برای ارزیابی تعداد مناسب خوشه ها استفاده می شود، مشاهده می کنید:

این روش ها اغلب به عنوان تکنیک های ارزیابی مکمل استفاده می شوند تا اینکه یکی بر دیگری ترجیح داده شود. برای انجام روش elbow، چندین k-means را اجرا کنید، با هر تکرار k را افزایش دهید و SSE را ثبت کنید:

kmeans_kwargs = {
    "init": "random",
    "n_init": 10,
    "max_iter": 300,
    "random_state": 42,
}

# A list holds the SSE values for each k
sse = []
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, **kmeans_kwargs)
    kmeans.fit(scaled_features)
    sse.append(kmeans.inertia_)

وقتی SSE را به عنوان تابعی از تعداد خوشه ها ترسیم می کنید، توجه داشته باشید که با افزایش k ، SSE همچنان در حال کاهش است. با افزودن centroids بیشتر، فاصله هر نقطه تا نزدیکترین مرکز آن کاهش می یابد. یک نقطه همگرایی وجود دارد که در آن منحنی SSE شروع به خم شدن می کند و به آن نقطه آرنج یا elbow می گویند. تصور می شود که مقدار x این نقطه یک معامله منطقی بین خطا و تعداد خوشه ها است. در این مثال ، elbow در x = 3 قرار دارد:

plt.style.use("fivethirtyeight")
plt.plot(range(1, 11), sse)
plt.xticks(range(1, 11))
plt.xlabel("Number of Clusters")
plt.ylabel("SSE")
plt.show()

آموزش پایتون پیشرفته - راهنمایی عملی خوشه بندی K-Means در پایتون

تعیین نقطه elbow در منحنی SSE همیشه ساده نیست. اگر در انتخاب نقطه elbow منحنی مشکل دارید، می توانید از بسته پایتون، kneed، برای تعیین نقطه elbow به صورت زیر استفاده کنید:

kl = KneeLocator(
    range(1, 11), sse, curve="convex", direction="decreasing"
)

kl.elbow

ضریب silhouette انسجام و جداسازی خوشه است. بر اساس دو عامل، میزان مناسب بودن یک نقطه داده در خوشه اختصاص داده شده را تعیین می کند:

  1. نقطه داده چقدر به سایر نقاط خوشه نزدیک است.
  2. فاصله داده ها از نقاط موجود در خوشه های دیگر چقدر است.

مقادیر ضریب Silhouette بین -1 تا 1 متغیر است. اعداد بزرگتر نشان می دهد که نمونه ها به خوشه های خود نزدیکتر از سایر خوشه ها هستند. در اجرای یادگیری ضریب Silhouette، میانگین ضریب Silhouette همه نمونه ها در یک مقدار خلاصه می شود.

دوباره مقادیر k را حلقه کنید. این بار، به جای محاسبه SSE ، ضریب Silhouette را محاسبه کنید:

# A list holds the silhouette coefficients for each k
silhouette_coefficients = []

# Notice you start at 2 clusters for silhouette coefficient
for k in range(2, 11):
    kmeans = KMeans(n_clusters=k, **kmeans_kwargs)
    kmeans.fit(scaled_features)
    score = silhouette_score(scaled_features, kmeans.labels_)
    silhouette_coefficients.append(score)

ترسیم میانگین امتیاز Silhouette برای هر k نشان می دهد که بهترین گزینه برای k=3 است زیرا حداکثر امتیاز را دارد:

plt.style.use("fivethirtyeight")
plt.plot(range(2, 11), silhouette_coefficients)
plt.xticks(range(2, 11))
plt.xlabel("Number of Clusters")
plt.ylabel("Silhouette Coefficient")
plt.show()

کد بالا نمودار زیر را تولید می کند:

آموزش پایتون پیشرفته - راهنمایی عملی خوشه بندی K-Means در پایتون

در نهایت، تصمیم شما در مورد تعداد خوشه ها برای استفاده باید ترکیبی از دانش حوزه و معیارهای ارزیابی خوشه بندی باشد. در این پست آموزش پایتون پیشرفته – راهنمایی عملی خوشه بندی K-Means در پایتون توضیح داده شد و منابع مهم آموزشی برای یادگیری شما عزیزان قید شد. پیشنهاد می کنیم فرصت های شغلی برنامه نویسی پایتون – معرفی 10 شغل مهم و پردرآمد برنامه نویسی پایتون [6] را نیز مطالعه کنید تا بیشتر به مزایای زبان برنامه نویسی پایتون علاقه مند شوید. منتظر نظرات و پیشنهادات شما هستیم. موفق و پیروز باشید.

پاورپوینت بازار کار برنامه نویسی پایتون [7]

پاورپوینت بازار کار برنامه نویسی پایتون

در این بخش پاورپوینت بازار کار برنامه نویسی پایتون قرار داده شده است. این پاورپوینت آماده در 21 اسلاید در قالب ppt. یا pptx. با قابلیت ویرایش برای ارائه درسی آماده دانلود می‌باشد.