COVER

پیاده سازی الگوریتم PAM در پایتون؛ آموزش کامل با مثال‌ها و مطالعات موردی واقعی

۱. چکیده

اگرچه درک مفاهیم تئوری و روابط ریاضی افراز حول مدویدها پایه و اساس تحلیل‌های علمی است. اما مهار پتانسیل واقعی این الگوریتم مقاوم به نویز در گرو پیاده‌سازی اصولی آن در خطوط لوله داده (Data Pipelines) جهان واقعی است. این مقاله به عنوان یک راهنمای کاملاً عملیاتی و تجربی، نحوه به کارگیری الگوریتم PAM را در اکوسیستم هوش مصنوعی پایتون کالبدشکافی می‌کند.

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

.

۲. مقدمه

توسعه سیستم‌های داده‌کاوی زمانی به تکامل می‌رسد که فرمول‌های انتزاعی روی کاغذ به مراجع کاربردی و ابزارهای صنعتی در خط فرمان تبدیل شوند. الگوریتم PAM به عنوان مقتدرترین روش تفکیکی مبتنی بر اشیاء واقعی (Actual Objects)، زمانی ارزش عملیاتی خود را نشان می‌دهد که مجموعه‌داده‌های نویزی و مخدوش یک سازمان را اسکن کرده . به جای میانگین‌های فرضی، نمایندگانی عینی و واقعی برای تصمیم‌گیری‌های استراتژیک مدیران ارشد معرفی کند. چالش اصلی مهندسان داده در این فاز، چگونگی آماده‌سازی متغیرها، مقیاس‌دهی صحیح فضا و نوشتن کدهای بهینه‌ای است .که حافظه سرورها را در فرآیند تکرارپذیر جابه‌جایی مدویدها مهار کند.

هدف این مقاله، انتقال کامل مخاطب از تئوری به دنیای کدهای واقعی و توسعه‌یافته پایتون است. نقشه راه ما در این بخش به این صورت طراحی شده است: ابتدا محبوب‌ترین فریم‌ورک‌های توسعه الگوریتم K-Medoids را به همراه کدهای استاندارد آن‌ها معرفی می‌کنیم. در گام بعد، پایپلاین گام‌به‌گام پایتون را بر پایه اصول هویت بصری پیاده‌سازی کرده . در نهایت با کالبدشکافی کامل یک پروژه واقعی بالینی، نحوه غربالگری ساختارهای پنهان پزشکی را پایش خواهیم کرد.

پل ارتباطی با مقاله اصلی

پیش از ورود به بخش کدنویسی و بررسی ابزارها. اگر تمایل دارید با فلسفه محاسباتی تفکیک حول مدویدها، مکانیزم محاسبه کل هزینه جابه‌جایی (TMC) و تفاوت‌های ریاضی این روش با کای-مینز آشنا شوید. حتماً ابتدا مقاله جامع ما را تحت عنوان [الگوریتم PAM در داده‌کاوی: خوشه‌بندی مقاوم با K-Medoids] مطالعه کنید تا با ذهنیتی کاملاً غنی وارد فاز پیاده‌سازی عملی شوید.

.

۳. ابزارها و فریم‌ورک‌های محبوب توسعه

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

.

3.1. کتابخانه تخصصی Scikit-Learn-Extra (بخش Cluster)

کتابخانه اصلی سکیت-لرن به صورت پیش‌فرض الگوریتم  K-Medoids را در دل خود ندارد. به همین دلیل، توسعه‌دهندگان این اکوسیستم، پکیج رسمی و شتاب‌یافته  scikit-learn-extra را روانه بازار کرده‌اند که روش مبنایی  PAM را کاملاً منطبق بر ساختار استاندارد سکیت-لرن و با پشتیبانی از بذرپاشی‌های هوشمند ارائه می‌دهد.

  • کد واقعی پایتون:
# ۱. تنزل رتبه نامپای به نسخه پایدار ۱.x جهت هماهنگی با لایه کامپایل سکیت-لرن-اکسترا
!pip install "numpy<2" scikit-learn-extra biopython

# ۲. ریست کردن هوشمند کرنل برای اعمال تغییرات در حافظه سرور
import os
os.kill(os.getpid(), 9)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

try:
    from sklearn_extra.cluster import KMedoids
    
    # داده‌های عددی فرضی دو بعدی کاملاً متمایز هندسی
    X = np.array([[1.0, 2.0], [1.0, 4.0], [1.0, 0.0], [10.0, 2.0], [10.0, 4.0], [10.0, 0.0]])

    # مقداردهی مدل بر پایه متد استاندارد pam و بذرپاشی توزیع‌شده
    kmedoids = KMedoids(n_clusters=2, method='pam', init='k-medoids++', random_state=42)
    labels = kmedoids.fit_predict(X)

    # استخراج شاخص سطرها و مختصات عینی مدویدها از خود دیتابیس
    medoid_indices = kmedoids.medoid_indices_
    actual_medoids = X[medoid_indices]

    # طراحی نمودار منطبق بر پالت بصری تخصصی سایت شما
    fig, ax = plt.subplots(figsize=(9, 5.5), facecolor='#F8F9FA') # خاکستری خیلی روشن برای پس‌زمینه
    ax.set_facecolor('#FFFFFF') # سفید خالص برای بوم اصلی
    
    # رسم کلاستر اول با رنگ آبی روشن هوش مصنوعی
    ax.scatter(X[labels == 0, 0], X[labels == 0, 1], c='#4A90E2', s=150, alpha=0.8, edgecolors='w', label='Cluster 0')
    # رسم کلاستر دوم با رنگ نقره‌ای متالیک
    ax.scatter(X[labels == 1, 0], X[labels == 1, 1], c='#A0A0A0', s=150, alpha=0.8, edgecolors='w', label='Cluster 1')
    # مشخص کردن مدویدهای عینی با ستاره طلایی زنده و مرز زرشکی
    ax.scatter(actual_medoids[:, 0], actual_medoids[:, 1], c='#F5A623', marker='*', s=350, 
               linewidths=2, edgecolors='#D0021B', label='Actual Medoids')
    
    # تنظیمات نهایی سئو با لیبل‌های انگلیسی
    ax.set_title('PAM (K-Medoids) Quantitative Verification', fontsize=12, fontweight='bold', pad=15)
    ax.set_xlabel('Feature Space X1', fontsize=10)
    ax.set_ylabel('Feature Space X2', fontsize=10)
    ax.legend(loc='upper right', facecolor='#FFFFFF')
    ax.grid(True, linestyle=':', alpha=0.6)
    
    plt.tight_layout()
    plt.show()

    print("\n--- خروجی قطعی و استاندارد سیستم ---")
    print("Assigned Labels:", list(labels))
    print("Row Indices of Medoids:", list(medoid_indices))
    print("Actual Medoids From Dataset:\n", actual_medoids)

except ImportError:
    print("❌ ارور: تداخل نسخه‌ها هنوز در حافظه فعال است. لطفاً سلول قبل را مجدداً ران کنید.")

خروجی:

3.2.کتابخانه محاسباتی تخصصی BioPython

در پروژه‌های بیوانفورماتیک، ژنتیک و پزشکی که پاتوق اصلی الگوریتم  PAM به شمار می‌رود، کتابخانه  Bio.Cluster یکی از مقتدرترین ابزارهاست. این فریم‌ورک بخش اصلی محاسبات فواصل ماتریس عدم‌شباهت را به زبان C اجرا می‌کند تا سرعت پردازش زنجیره‌های DNA و داده‌های نویزی سلولی به شدت بالا برود.

  • کد واقعی پایتون:
!pip install biopython scipy
import numpy as np
from Bio import Cluster
from scipy.spatial.distance import pdist, squareform

# تولید داده‌های عددی همگن در قالب آرایه نامپای
data = np.array([[1.0, 2.0], [1.0, 4.0], [10.0, 2.0], [10.0, 4.0]])

# محاسبه ماتریس فاصله اقلیدسی
distance_matrix = squareform(pdist(data, 'euclidean'))

# اجرای مستقیم الگوریتم k-medoids (بخش kmedoids در بیوپایتون)
# nclusters: تعداد خوشه‌ها | dist: متریک فاصله (e: اقلیدسی، c: همبستگی)
clusterid, error, nfound = Cluster.kmedoids(distance_matrix, nclusters=2, npass=10)

print("Cluster IDs for each row:", clusterid)
print("Total Distance Error:", error)

خروجی:

3.3. شتاب‌دهنده سخت‌افزاری NVIDIA RAPIDS (کتابخانه cuML)

الگوریتم  PAM به دلیل تکرارهای مکرر برای بررسی تمام جابه‌جایی‌های ممکن اشیاء، در داده‌های بزرگ فوق‌العاده کند و سنگین می‌شود. شرکت انویدیا برای حل این چالش، کدهای  K-Medoids را کاملاً موازی کرده و در کتابخانه  cuML قرار داده است تا پردازش ماتریس فواصل مستقیماً روی هسته‌های کارت گرافیک (GPU) انجام شود.

  • کد واقعی پایتون:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn_extra.cluster import KMedoids

try:
    # ۱. بارگذاری دیتابیس واقعی پاتولوژی سلولی
    cancer = load_breast_cancer()
    X = cancer.data[:, :2] # استخراج دو ویژگی اول: ضخامت توده و بافت هسته
    df = pd.DataFrame(X, columns=['Clump_Thickness', 'Uniformity_Cell_Size'])

    # ۲. فاز پیش‌پردازش و استانداردسازی (Z-score Normalization)
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(df)

    # ۳. پیکربندی و اجرای الگوریتم صلب PAM بر پایه مدویدهای واقعی
    kmedoids = KMedoids(n_clusters=2, method='pam', init='k-medoids++', random_state=42)
    labels = kmedoids.fit_predict(X_scaled)

    # استخراج شاخص سطرها و مختصات عینی مدویدها از دل خود داده‌ها
    medoid_indices = kmedoids.medoid_indices_
    medoids = X_scaled[medoid_indices]

    # ۴. فاز تصویرسازی پیشرفته با پالت اختصاصی برند شما
    fig, ax = plt.subplots(figsize=(10, 6), facecolor='#F8F9FA') # خاکستری خیلی روشن برای پس‌زمینه
    ax.set_facecolor('#FFFFFF') # سفید خالص برای بوم اصلی نمودار

    # رسم نقاط داده‌های کلاستر اول با رنگ آبی روشن هوش مصنوعی
    ax.scatter(X_scaled[labels == 0, 0], X_scaled[labels == 0, 1], 
               c='#4A90E2', s=80, alpha=0.7, edgecolors='w', label='Cluster A: Benign Cells')

    # رسم نقاط داده‌های کلاستر دوم با رنگ نقره‌ای متالیک
    ax.scatter(X_scaled[labels == 1, 0], X_scaled[labels == 1, 1], 
               c='#A0A0A0', s=80, alpha=0.7, edgecolors='w', label='Cluster B: Malignant Cells')

    # متمایز کردن مدویدهای واقعی با ستاره طلایی زنده و مرز زرشکی مقتدر
    ax.scatter(medoids[:, 0], medoids[:, 1], 
               c='#F5A623', marker='*', s=350, linewidths=2, edgecolors='#D0021B', label='Actual Medoids')

    # تنظیمات سئو و اعمال صلب لیبل‌های انگلیسی
    ax.set_title('PAM (K-Medoids) Clustering - Biomedical Structure Analysis', fontsize=14, fontweight='bold', pad=15)
    ax.set_xlabel('Standardized Clump Thickness Feature', fontsize=12)
    ax.set_ylabel('Standardized Cell Size Uniformity Feature', fontsize=12)
    ax.legend(loc='upper right', facecolor='#FFFFFF', framealpha=0.9)
    ax.grid(True, linestyle='--', alpha=0.5, color='#E0E0E0')

    plt.tight_layout()
    plt.show()

    # ۵. چاپ خروجی گزارش فنی سیستم
    print("\n--- خروجی نهایی خط لوله الگوریتم PAM ---")
    print("Identified Medoid Row Indices in Dataset:", list(medoid_indices))
    print("Calculated Medoids Vector:\n", medoids)
    print(f"Total Sum of Dissimilarities (Inertia): {kmedoids.inertia_:.4f}")

خروجی:

4. پیاده‌سازی گام‌به‌گام در پایتون

الف) تبیین مسئله پیاده‌سازی و اهداف خط لوله

در پایپلاین‌های مهندسی داده، یکی از چالش‌های اساسی خوشه‌بندی، مواجهه با داده‌های نویزی و پرت (Outliers) است که استفاده از کای-مینز را به دلیل جابه‌جایی شدید مراکز بر پایه میانگین‌ها مخدوش می‌کند. مسئله اصلی در این بخش، پیاده‌سازی صلب و بدون باگ الگوریتم  K-Medoids بر پایه روش PAM (افراز حول مدویدها) در یک فریم‌ورک استاندارد پایتون است.

هدف عملیاتی ما، آماده‌سازی کدهای محاسباتی پایدار به کمک کتابخانه  scikit-learn-extra است تا با استفاده از «اشیاء واقعی دیتابیس» به عنوان مدوید به جای نقاط میانگینی فرضی، پایداری مدل را در برابر نویزها تضمین کرده و یک خروجی کاملاً واقعی، قابل ممیزی و تفسیرپذیر برای اهداف تجاری یا بالینی استخراج کنیم.

ب) آماده‌سازی داده‌ها و کد کامل پایتون

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler
from sklearn_extra.cluster import KMedoids

# ۱. فاز تولید و آماده‌سازی دیتابیس (تزریق داده‌های نویزی متمایز هندسی)
np.random.seed(42)
X_raw, _ = make_blobs(n_samples=100, centers=2, cluster_std=0.5, center_box=(-4.0, 4.0), random_state=42)

# تزریق عمدی داده‌های پرت شدید جهت سنجش پایداری روش PAM
outliers = np.array([[8.0, -8.0], [-8.0, 8.0], [9.0, 9.0]])
X_combined = np.vstack([X_raw, outliers])

# ۲. فاز پیش‌پردازش و استانداردسازی ویژگی‌ها (Z-score Normalization)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_combined)

# ۳. پیکربندی، ساخت و اجرای الگوریتم صلب PAM (K-Medoids)
# استفاده از بذرپاشی هوشمند k-medoids++ جهت تضمین هم‌گرایی قطعی
kmedoids = KMedoids(n_clusters=2, method='pam', init='k-medoids++', random_state=42)
labels = kmedoids.fit_predict(X_scaled)

# استخراج شاخص سطرها و مختصات عینی مدویدهای واقعی دیتابیس
medoid_indices = kmedoids.medoid_indices_
medoids = X_scaled[medoid_indices]

# ۴. فاز تصویرسازی مهندسی خروجی با رعایت دقیق پالت رنگی اختصاصی شما
fig, ax = plt.subplots(figsize=(10, 6), facecolor='#F8F9FA') # خاکستری خیلی روشن برای پس‌زمینه
ax.set_facecolor('#FFFFFF') # سفید خالص برای بوم اصلی نمودار

# رسم نقاط خوشه‌ها بر پایه پالت رنگی اختصاصی سایت شما
colors = ['#4A90E2', '#A0A0A0']
cluster_names = ['Cluster A: Regular Vectors', 'Cluster B: Target Vectors']

for i in range(2):
    ax.scatter(X_scaled[labels == i, 0], X_scaled[labels == i, 1],
               c=colors[i], s=90, alpha=0.75, edgecolors='#F8F9FA', label=cluster_names[i])

# متمایز کردن مدویدهای واقعی با ستاره‌های طلایی زنده بزرگ و مرز زرشکی مقتدر
ax.scatter(medoids[:, 0], medoids[:, 1],
           c='#F5A623', marker='*', s=450, linewidths=2.5, edgecolors='#D0021B', label='Actual Medoids')

# تنظیمات پیشرفته خوانایی سئو و اعمال صلب لیبل‌های انگلیسی طبق دستور
ax.set_title('PAM (K-Medoids) Robust Clustering - Pipeline Verification', fontsize=13, fontweight='bold', pad=15)
ax.set_xlabel('Standardized Dimension Axis X1', fontsize=11)
ax.set_ylabel('Standardized Dimension Axis X2', fontsize=11)
ax.legend(loc='upper right', facecolor='#FFFFFF', framealpha=0.9)
ax.grid(True, linestyle=':', alpha=0.6, color='#A0A0A0')

plt.tight_layout()
plt.show()

# ۵. چاپ خروجی قطعی محاسباتی در ترمینال سیستم
print("\n--- خروجی نهایی خط لوله الگوریتم PAM ---")
print("Identified Medoid Row Indices in Dataset:", list(medoid_indices))
print("Calculated Medoids Vector:\n", medoids)
print(f"Total Sum of Dissimilarities (Inertia): {kmedoids.inertia_:.4f}")

خروجی:

5. مطالعات موردی تجربی و پروژه‌های واقعی

.

مطالعه موردی اول: بخش‌بندی مشتریان استراتژیک بر پایه داده‌های نویزی (Outlier-Robust Customer Segmentation)

مسئله و چالش

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

هدف عملیاتی

اجرای کلاسترینگ صلب  K-Medoids با متد  PAM بر پایه متریک فاصله مانهاتان برای مهار نویزها و تفکیک کاربران به K=3 دسته وفادار، در آستانه ریزش و معمولی.

بردار ویژگی و دیتاست

  • دیتاست: دیتابیس شبیه‌سازی‌شده تراکنش‌های خرید سالانه به همراه نویزهای شدید مالی.
  • بردار ویژگی: متغیرهای استاندارد شده میزان ماندگاری و ارزش مالی خرید.

کد کامل پایتون

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn_extra.cluster import KMedoids

# ۱. تولید داده‌های رفتاری مشتریان به همراه تزریق نویزهای شدید (Outliers)
np.random.seed(42)
cluster_1 = np.random.normal(loc=[1, 2], scale=[0.3, 0.3], size=(60, 2))
cluster_2 = np.random.normal(loc=[5, 5], scale=[0.4, 0.4], size=(60, 2))
# تزریق عمدی داده‌های پرت شدید که کای-مینز را به زانو در می‌آورند
outliers = np.array([[12.0, 15.0], [14.0, 1.0], [-5.0, 10.0]])

X_raw = np.vstack([cluster_1, cluster_2, outliers])

# ۲. فاز پیش‌پردازش و مقیاس‌دهی استاندارد ویژگی‌ها
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_raw)

# ۳. پیکربندی و اجرای الگوریتم PAM با متریک مانهاتان جهت مهار نویزها
# استفاده از metric='manhattan' پایداری مدل را در برابر داده‌های پرت تضمین می‌کند
kmedoids_customer = KMedoids(n_clusters=3, method='pam', metric='manhattan', init='k-medoids++', random_state=42)
labels = kmedoids_customer.fit_predict(X_scaled)
medoids = X_scaled[kmedoids_customer.medoid_indices_]

# ۴. تصویرسازی مهندسی با پالت بصری اختصاصی سایت شما
fig, ax = plt.subplots(figsize=(10, 6), facecolor='#F8F9FA') # خاکستری خیلی روشن
ax.set_facecolor('#FFFFFF') # سفید خالص

# اعمال پالت: آبی روشن هوش مصنوعی، نقره‌ای متالیک و زرشکی برای خوشه‌ها
colors = ['#4A90E2', '#A0A0A0', '#D0021B']
for i in range(3):
    ax.scatter(X_scaled[labels == i, 0], X_scaled[labels == i, 1], 
               c=colors[i], s=80, alpha=0.7, edgecolors='w', label=f'Customer Cohort {i+1}')

# نمایش مدویدهای واقعی (مشتریان شاخص مرجع) با ستاره طلایی زنده
ax.scatter(medoids[:, 0], medoids[:, 1], 
           c='#F5A623', marker='*', s=300, linewidths=1.5, edgecolors='#212529', label='Actual Medoids')

# تنظیمات سئو و لیبل‌های انگلیسی طبق قواعد صلب
ax.set_title('Robust Customer Segmentation via PAM (Manhattan Distance)', fontsize=13, fontweight='bold', pad=15)
ax.set_xlabel('Standardized Purchase Frequency', fontsize=11)
ax.set_ylabel('Standardized Monetary Value', fontsize=11)
ax.legend(loc='upper right', facecolor='#FFFFFF')
ax.grid(True, linestyle=':', alpha=0.5, color='#A0A0A0')

plt.tight_layout()
plt.show()

print(f"✅ مدویدهای واقعی خریداران استخراج شدند: {list(kmedoids_customer.medoid_indices_)}")

خروجی:

تفسیر نتیجه:

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

.

مطالعه موردی دوم: دسته‌بندی و تحلیل شباهت الگوهای دارویی (Biomedical Compound Clustering)

مسئله و چالش

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

هدف عملیاتی

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

بردار ویژگی و دیتاست

  • دیتاست: دیتابیس بیومدیکال فرضی غنی‌شده از دوزهای موثر سلولی.
  • بردار ویژگی: مؤلفه‌های فشرده‌شده دوز دارو و نرخ بقای سلولی.

کد کامل پایتون

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn_extra.cluster import KMedoids

# ۱. شبیه‌سازی دیتابیس بیومدیکال دوزهای دارویی
np.random.seed(84)
compounds_type_a = np.random.normal(loc=[2.0, 8.0], scale=[0.4, 0.5], size=(50, 2))
compounds_type_b = np.random.normal(loc=[7.0, 3.0], scale=[0.5, 0.4], size=(50, 2))

X_bio = np.vstack([compounds_type_a, compounds_type_b])

# ۲. فاز استانداردسازی داده‌های آزمایشگاهی جهت مهار تغییرات مقیاس ویژگی‌ها
scaler_bio = StandardScaler()
X_bio_scaled = scaler_bio.fit_transform(X_bio)

# ۳. اعمال الگوریتم PAM برای تفکیک قطعی دو پترن دارویی
kmedoids_bio = KMedoids(n_clusters=2, method='pam', metric='euclidean', init='heuristic', random_state=42)
labels_bio = kmedoids_bio.fit_predict(X_bio_scaled)
medoids_bio = X_bio_scaled[kmedoids_bio.medoid_indices_]

# ۴. تصویرسازی تخصصی با هویت بصری نقره‌ای متالیک و آبی روشن هوش مصنوعی
fig, ax = plt.subplots(figsize=(10, 6), facecolor='#F8F9FA')
ax.set_facecolor('#FFFFFF')

ax.scatter(X_bio_scaled[labels_bio == 0, 0], X_bio_scaled[labels_bio == 0, 1], 
           c='#4A90E2', s=80, alpha=0.7, edgecolors='w', label='Compound Strain A')
ax.scatter(X_bio_scaled[labels_bio == 1, 0], X_bio_scaled[labels_bio == 1, 1], 
           c='#A0A0A0', s=80, alpha=0.7, edgecolors='w', label='Compound Strain B')

# نمایش ساختارهای مرجع واقعی با رنگ طلایی فعال برند شما
ax.scatter(medoids_bio[:, 0], medoids_bio[:, 1], 
           c='#F5A623', marker='o', s=200, edgecolors='#D0021B', linewidths=2, label='Target Compound Medoids')

# تنظیمات خوانایی و سئو با لیبل‌های انگلیسی
ax.set_title('Biomedical Structure Analysis via PAM Partitioning', fontsize=13, fontweight='bold', color='#212529')
ax.set_xlabel('Normalized Feature 1: Effective Dose', fontsize=11)
ax.set_ylabel('Normalized Feature 2: Cell Survival Rate', fontsize=11)
ax.legend(loc='upper right', facecolor='#FFFFFF')
ax.grid(True, linestyle='--', color='#E0E0E0', alpha=0.5)

plt.tight_layout()
plt.show()

print(f"📊 شاخص عدم‌شباهت کل دیتابیس دارویی: {kmedoids_bio.inertia_:.4f}")

خروجی:

تفسیر نتیجه:

میزان کمینه شاخص اینرسی (84.6125) گویای هم‌گرایی بسیار بالای ذرات در داخل سلول‌های ورونوی مربوط به خود است. تفکیک کامل دو دسته آبی روشن هوش مصنوعی و نقره‌ای متالیک نشان می‌دهد که الگوریتم PAM بدون ناظر انسانی تفاوت رفتاری دو ترکیب را کشف کرده است. نکته استراتژیک این خروجی برای پزشکان، نقطه دایره‌ای طلایی زنده است؛ این دو فرمول استخراج‌شده، ترکیباتی کاملاً واقعی و عینی از دلِ آزمایش‌ها هستند که پژوهشگران می‌توانند مستقیماً ساختار مولکولی آن‌ها را به عنوان پایه تولید داروهای بعدی قرار دهند.

.

مطالعه موردی سوم: مدیریت ریسک و ارزیابی تأمین‌کنندگان در زنجیره تأمین (Outlier-Robust Supply Chain Risk Analysis)

مسئله و چالش

در مدیریت زنجیره تأمین (Supply Chain)، ارزیابی عملکرد تأمین‌کنندگان بر اساس دو شاخص نرخ تأخیر در تحویل (Delivery Delay) و نرخ قطعات معیوب (Defect Rate) انجام می‌شود. وجود برخی تأمین‌کنندگان خاص با نوسانات بسیار شدید و غیرعادی (نقاط پرت)، در صورت استفاده از کای-مینز باعث انحراف مراکز خوشه‌ها می‌شود. چالش اصلی، گروه‌بندی پایدار تأمین‌کنندگان به منظور شناسایی شرکای استراتژیک بدون تأثیرپذیری از نویزهای شدید سیستم است.

هدف عملیاتی

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

بردار ویژگی و دیتاست

  • دیتاست: دیتابیس شبیه‌سازی‌شده عملکرد ۱۲۰ تأمین‌کننده قطعات صنعتی به همراه نویزهای شدید.
  • بردار ویژگی: آرایه دو بعدی شامل داده‌های استاندارد شده [Delay_Rate, Defect_Rate].

کد کامل پایتون

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn_extra.cluster import KMedoids

# ۱. تولید داده‌های زنجیره تأمین به همراه تزریق نویزهای شدید عملکردی
np.random.seed(10)
reliable_vendors = np.random.normal(loc=[1.5, 1.5], scale=[0.3, 0.3], size=(80, 2))
risky_vendors = np.random.normal(loc=[6.0, 6.0], scale=[0.5, 0.5], size=(35, 2))
extreme_outliers = np.array([[15.0, 0.5], [0.2, 14.0], [16.0, 16.0]]) # نویزهای شدید

X_supply = np.vstack([reliable_vendors, risky_vendors, extreme_outliers])

# ۲. فاز پیش‌پردازش و استانداردسازی ویژگی‌ها
scaler = StandardScaler()
X_supply_scaled = scaler.fit_transform(X_supply)

# ۳. اجرای الگوریتم PAM با متریک مانهاتان جهت بی‌اثر کردن نویزهای شدید
kmedoids_supply = KMedoids(n_clusters=2, method='pam', metric='manhattan', init='k-medoids++', random_state=42)
labels_supply = kmedoids_supply.fit_predict(X_supply_scaled)
medoids_supply = X_supply_scaled[kmedoids_supply.medoid_indices_]

# ۴. تصویرسازی مهندسی با پالت اختصاصی سایت شما
fig, ax = plt.subplots(figsize=(10, 6), facecolor='#F8F9FA')
ax.set_facecolor('#FFFFFF')

# اعمال پالت: آبی روشن هوش مصنوعی و نقره‌ای متالیک برای خوشه‌ها
colors = ['#4A90E2', '#A0A0A0']
cluster_titles = ['Strategic Secure Vendors', 'High-Risk Vendors']

for i in range(2):
    ax.scatter(X_supply_scaled[labels_supply == i, 0], X_supply_scaled[labels_supply == i, 1], 
               c=colors[i], s=85, alpha=0.7, edgecolors='w', label=cluster_titles[i])

# متمایز کردن شرکت‌های مرجع واقعی (مدویدها) با ستاره طلایی زنده و مرز زرشکی
ax.scatter(medoids_supply[:, 0], medoids_supply[:, 1], 
           c='#F5A623', marker='*', s=350, linewidths=2, edgecolors='#D0021B', label='Vendor Medoids')

# تنظیمات سئو و اعمال صلب لیبل‌های انگلیسی
ax.set_title('Supply Chain Risk Segmentation via Robust PAM', fontsize=13, fontweight='bold', pad=15)
ax.set_xlabel('Standardized Delivery Delay Rate', fontsize=11)
ax.set_ylabel('Standardized Component Defect Rate', fontsize=11)
ax.legend(loc='upper right', facecolor='#FFFFFF')
ax.grid(True, linestyle=':', alpha=0.5, color='#A0A0A0')

plt.tight_layout()
plt.show()

print(f"✅ شاخص سطر تأمین‌کنندگان مرجع استخراج‌شده: {list(kmedoids_supply.medoid_indices_)}")

خروجی:

تفسیر نتیجه

خروجی عددی نشان می‌دهد که سطر ۳۵ و ۱۰۲ مستقیماً به عنوان نمایندگان عینی خوشه‌ها انتخاب شده‌اند. با وجود نویزهای شدید (نقاط منزوی گوشه‌های نمودار)، مرز خوشه‌ها به هیچ وجه مخدوش نشده است. تأمین‌کننده سطر ۳۵ در کلاستر آبی روشن هوش مصنوعی به عنوان استانداردترین و بهینه‌ترین شرکت تأمین‌کننده سازمان شناخته می‌شود که بیزینس می‌تواند سطح دسترسی و قراردادهای خود را با این نقطه مرجع توسعه دهد.

.

مطالعه موردی چهارم: مکان‌یابی استراتژیک شعب بانکی و خودپردازها (Geospatial Facility Location)

مسئله و چالش

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

هدف عملیاتی

اجرای متد PAM روی مختصات جغرافیایی طول و عرض جغرافیایی مشتریان برای یافتن K=3 مکان بهینه و کاملاً واقعی جهت احداث شعب مرکزی.

بردار ویژگی و دیتاست

  • دیتاست: دیتابیس شبیه‌سازی‌شده تراکم جغرافیایی مشتریان یک شهر بزرگ.
  • بردار ویژگی: مختصات دو بعدی شامل [Latitude, Longitude].

کد کامل پایتون

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn_extra.cluster import KMedoids

# ۱. تولید داده‌های جغرافیایی تراکم مشتریان در ۳ مرکز اصلی شهر
np.random.seed(50)
zone_north = np.random.normal(loc=[35.7, 51.4], scale=[0.05, 0.05], size=(100, 2))
zone_south = np.random.normal(loc=[35.6, 51.3], scale=[0.04, 0.04], size=(80, 2))
zone_east = np.random.normal(loc=[35.65, 51.5], scale=[0.06, 0.03], size=(90, 2))

X_geo = np.vstack([zone_north, zone_south, zone_east])

# ۲. پیکربندی مستقیم PAM (در داده‌های جغرافیایی خالص نیازی به StandardScaler نیست تا تغییر مقیاس رخ ندهد)
kmedoids_geo = KMedoids(n_clusters=3, method='pam', metric='euclidean', init='k-medoids++', random_state=42)
labels_geo = kmedoids_geo.fit_predict(X_geo)
medoids_geo = X_geo[kmedoids_geo.medoid_indices_]

# ۳. تصویرسازی نقشه توسعه شعب با پالت زرشکی، نقره‌ای متالیک و آبی هوش مصنوعی
fig, ax = plt.subplots(figsize=(10, 6), facecolor='#F8F9FA')
ax.set_facecolor('#FFFFFF')

colors_geo = ['#D0021B', '#A0A0A0', '#4A90E2']
for i in range(3):
    ax.scatter(X_geo[labels_geo == i, 0], X_geo[labels_geo == i, 1], 
               c=colors_geo[i], s=60, alpha=0.6, edgecolors='w', label=f'Customer Density Zone {i+1}')

# نمایش مکان‌های قطعی احداث شعب با دایره‌های طلایی زنده و بزرگ
ax.scatter(medoids_geo[:, 0], medoids_geo[:, 1], 
           c='#F5A623', marker='o', s=250, edgecolors='#212529', linewidths=2.5, label='Optimal Branch Locations')

# تنظیمات تخصصی خوانایی سئو با لیبل‌های انگلیسی
ax.set_title('Financial Facility Location via K-Medoids (PAM)', fontsize=13, fontweight='bold', pad=15)
ax.set_xlabel('Geographical Latitude Coordinate', fontsize=11)
ax.set_ylabel('Geographical Longitude Coordinate', fontsize=11)
ax.legend(loc='lower left', facecolor='#FFFFFF')
ax.grid(True, linestyle='--', color='#E0E0E0', alpha=0.5)

plt.tight_layout()
plt.show()

print("🎯 مختصات جغرافیایی قطعی برای احداث ۳ شعبه جدید:\n", medoids_geo)

خروجی:

تفسیر نتیجه: برتری مطلق PAM در این سناریو به تصویر کشیده شده است. ماتریس خروجی ۳ نقطه قطعی طول و عرض جغرافیایی را به ما می‌دهد که دقیقاً متعلق به محل سکونت یکی از مشتریان است. این یعنی مکان‌های پیشنهادی (نقاط طلایی زنده) کاملاً قابل ساخت و دسترسی هستند و برخلاف نقاط فرضی میانگین، چالش‌های تملک اراضی یا بن‌بست‌های شهری را برای بانک به همراه نخواهند داشت.

.

مطالعه موردی پنجم: گروه بندی ساختارهای ژنتیکی و بیوانفورماتیک (Genomic Sequence Expression Clustering)

مسئله و چالش

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

هدف عملیاتی

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

بردار ویژگی و دیتاست

  • دیتاست: ماتریس شبیه‌سازی‌شده از میزان بیان ۱۵۰ رشته ژنتیکی.
  • بردار ویژگی: مؤلفه‌های رفتاری زنجیره‌های سلولی نرمال‌سازی شده.

کد کامل پایتون

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.decomposition import PCA
from sklearn_extra.cluster import KMedoids

# ۱. شبیه‌سازی داده‌های فرضی بیان ژنوم در ۴ کلاس بیولوژیکی
np.random.seed(99)
gene_class_1 = np.random.normal(loc=[0.2, 0.8], scale=[0.05, 0.05], size=(40, 2))
gene_class_2 = np.random.normal(loc=[0.7, 0.2], scale=[0.06, 0.04], size=(45, 2))
gene_class_3 = np.random.normal(loc=[0.8, 0.8], scale=[0.04, 0.06], size=(35, 2))
gene_class_4 = np.random.normal(loc=[0.1, 0.2], scale=[0.05, 0.05], size=(30, 2))

X_gene = np.vstack([gene_class_1, gene_class_2, gene_class_3, gene_class_4])

# ۲. فاز فشرده‌سازی و انتقال ویژگی‌ها به بازه صفر تا یک
scaler_gene = MinMaxScaler()
X_gene_scaled = scaler_gene.fit_transform(X_gene)

# ۳. اعمال الگوریتم PAM برای تفکیک ۴ پترن ژنتیکی همگن
kmedoids_gene = KMedoids(n_clusters=4, method='pam', metric='euclidean', init='heuristic', random_state=42)
labels_gene = kmedoids_gene.fit_predict(X_gene_scaled)
medoids_gene = X_gene_scaled[kmedoids_gene.medoid_indices_]

# ۴. تصویرسازی تخصصی با پالت رنگی پنج‌گانه اختصاصی شما
fig, ax = plt.subplots(figsize=(10, 6), facecolor='#F8F9FA')
ax.set_facecolor('#FFFFFF')

# استفاده از پالت: آبی روشن، نقره‌ای، زرشکی، و خاکستری تیره برای ۴ خوشه ژنی
colors_gene = ['#4A90E2', '#A0A0A0', '#D0021B', '#333333']
for i in range(4):
    ax.scatter(X_gene_scaled[labels_gene == i, 0], X_gene_scaled[labels_gene == i, 1], 
               c=colors_gene[i], s=70, alpha=0.7, edgecolors='w', label=f'Genomic Strain {i+1}')

# نمایش ژن‌های مرجع شاخص با ستاره‌های طلایی زنده برند شما
ax.scatter(medoids_gene[:, 0], medoids_gene[:, 1], 
           c='#F5A623', marker='*', s=350, edgecolors='#212529', linewidths=1.5, label='Target Gene Medoids')

# تنظیمات سئو و اعمال قواعد صلب لیبل انگلیسی
ax.set_title('Genomic Structure Analysis via K-Medoids Partitioning', fontsize=13, fontweight='bold', color='#212529')
ax.set_xlabel('Normalized Gene Expression Profile 1', fontsize=11)
ax.set_ylabel('Normalized Gene Expression Profile 2', fontsize=11)
ax.legend(loc='center', bbox_to_anchor=(0.5, -0.15), ncol=3, facecolor='#FFFFFF')
ax.grid(True, linestyle=':', color='#E0E0E0', alpha=0.6)

plt.tight_layout()
plt.show()

print(f"📊 مجموع کل هزینه‌های جابه‌جایی و عدم شباهت ژنتیکی: {kmedoids_gene.inertia_:.4f}")

خروجی:

تفسیر نتیجه

مقدار بسیار پایین اعوجاج و اینرسی فضا (3.4128) نشان‌دهنده مرزبندی کاملاً دقیق سلول‌های ورونوی حول ژن‌های مرجع است. تفکیک کامل ۴ کلاستر روی نمودار ثابت می‌کند که متد PAM توانسته است بدون داشتن ناظر انسانی، جهش‌های نویزی سلولی را مهار کرده و ساختارهای پایدار ژنتیکی را خوشه‌بندی کند. ۴ نقطه طلایی زنده به عنوان کدهای ژنتیکی شاخص هر گروه شناخته می‌شوند که دانشمندان علوم زیستی می‌توانند مستقیماً آزمایش‌های دارویی خود را روی ساختار واقعی این ۴ زنجیره متمرکز کنند.

.

جمع‌بندی و نتیجه‌گیری عملیاتی

در این مقاله، زنجیره انتقال الگوریتم  PAM (K-Medoids) از محاسبات انتزاعی نظری به پایپلاین‌های مهندسی پایتون را به طور کامل پیاده‌سازی و ارزیابی کردیم. مشاهده شد که اکوسیستم هوش مصنوعی پایتون با مجهز شدن به فریم‌ورک محاسباتی Scikit-Learn-Extra مبنای استاندارد این روش را در خطوط پیش‌پردازش فراهم می‌سازد ، در حالی که فریم‌ورک‌های تخصصی‌تری نظیر  BioPython سرعت لایه C را در پردازش‌های بیوانفورماتیک تضمین می‌کنند.

خروجی‌های عددی و ماتریسی خطوط لوله در ۵ مطالعه موردی کلیدی نشان داد که این الگوریتم تفکیکی به واسطه اتکا به متریک مانهاتان و فواصل غیراقلیدسی، پایداری مافوق تصوری در برابر نویزهای شدید مالی، اعوجاج‌های شبکه زنجیره تأمین و جهش‌های ناگهانی داده‌های ژنتیکی دارد. برتری استراتژیک روش PAM در این پایپلاین‌ها، معرفی «میدویدها» به عنوان نمایندگان عینی، واقعی و موجود در خود دیتابیس است ؛ مزیتی حیاتی که مسائل کدر و مبهم هوش مصنوعی را به پاسخ‌هایی کاملاً قابل ممیزی، عیب‌یابی و قابل تفسیر برای پزشکان بالینی، جغرافیدانان مالی و مدیران ارشد سازمان‌ها تبدیل می‌کند. با این حال، غلبه بر پیچیدگی زمانی مرحله Swap در کلان‌داده‌ها نیازمند توجه به تکنیک‌های پیشرفته کاهش بعد و استفاده از متدهای شتاب‌یافته نظیر  FastPAM است.

دکتر محمدرضا عاطفی

عضو هیئت علمی دانشگاه
رئیس هیئت مدیره گروه ناب
هم بنیان گذار شرکت دانش بنیان
مشاور شرکت ها و سازمان های بزرگ کشور

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

هوش مصنوعی

پیاده‌سازی الگوریتم K-Modes در پایتون | آموزش کامل و مطالعه موردی کاربردی

۱. چکیده اگرچه درک پایه‌های تئوری و روابط فرکانسی افراز حول مُدها زیربنای تحلیل‌های علمی است، اما مهار پتانسیل واقعی این الگوریتم تخصصی در گرو پیاده‌سازی اصولی آن در خطوط لوله داده (Data Pipelines) جهان واقعی است. این مقاله به عنوان یک مرجع کاملاً کاربردی و تجربی، نحوه به کارگیری

توضیحات بیشتر »
هوش مصنوعی

پیاده سازی الگوریتم PAM در پایتون؛ آموزش کامل با مثال‌ها و مطالعات موردی واقعی

۱. چکیده اگرچه درک مفاهیم تئوری و روابط ریاضی افراز حول مدویدها پایه و اساس تحلیل‌های علمی است. اما مهار پتانسیل واقعی این الگوریتم مقاوم به نویز در گرو پیاده‌سازی اصولی آن در خطوط لوله داده (Data Pipelines) جهان واقعی است. این مقاله به عنوان یک راهنمای کاملاً عملیاتی و

توضیحات بیشتر »
هوش مصنوعی

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

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

توضیحات بیشتر »