در یادگیری ماشین «Machine Learning» مفاهیمی همچون طبقه بندی، دسته بندی، کلاس بندی وجود دارند که همگی به یک مفهوم یعنی «Classification» اشاره دارند. همانطور که از نام طبقه بندی پیداست، طبقه بندی یا دستهبندی به معنای «دستهبندی کردن اشیا» به زیرمجموعهها «Sub-Categories» است. دستهبندی بخشی از یادگیری ماشین تحت نظارت «Supervised Learning» است که در آن دادههای برچسبدار «Labeled Data» را برای آموزش «Training» استفاده میکنیم. در این مقاله به توضیح و تشریح طبقه بندی در یادگیری ماشین خواهیم پرداخت تا یک راهنمای جامع برای درک و بهکارگیری تکنیکهای دستهبندی به شما عزیزان ارائه شود.
یادگیری ماشین نظارت شده چیست؟
یادگیری ماشین تحت نظارت یا نظارت شده یعنی شما متغیرهای ورودی (X) و یک متغیر خروجی (Y) دارید و از یک الگوریتم برای یادگیری تابع نگاشت از ورودی به خروجی Y=f(X) استفاده میکنید. هدف در یادگیری ماشین نظارت شده این است که تابع نگاشت را بهقدری خوب تقریب بزنید که وقتی دادههای ورودی جدید (X) را که دارید، بتوانید متغیرهای خروجی (Y) را برای آن داده پیشبینی کنید.
مسائل یادگیری تحت نظارت میتوانند به دو دسته رگرسیون و دستهبندی تقسیم شوند:
- رگرسیون «Regression»: الگوریتمهای رگرسیون برای پیشبینی خروجی عددی پیوسته استفاده میشوند. بهعنوانمثال، یک الگوریتم رگرسیون میتواند برای پیشبینی قیمت یک خانه بر اساس اندازه، موقعیت مکانی و سایر ویژگیها استفاده شود.
- طبقه بندی «Classification»: الگوریتمهای دستهبندی برای پیشبینی خروجی دستهای یا طبقهبندیشده استفاده میشوند. بهعنوانمثال، یک الگوریتم دستهبندی میتواند پیشبینی کند که آیا یک ایمیل اسپم است یا خیر.
طبقه بندی در یادگیری ماشین
طبقه بندی فرآیندی است که دادهها یا اشیا را بر اساس ویژگیها یا خصوصیاتشان به کلاسها یا دستههای از پیش تعریفشده «Predefined» دستهبندی میکند. طبقه بندی در یادگیری ماشین نوعی تکنیک یادگیری تحت نظارت است که در آن یک الگوریتم روی یک مجموعه داده برچسبدار آموزش داده میشود تا کلاس یا دسته دادههای جدید و نادیدهگرفتهشده را پیشبینی کند.
هدف اصلی دستهبندی در یادگیری ماشین، ساخت مدلی است که بتواند بهدقت به یک مشاهده جدید بر اساس ویژگیهای آن، یک برچسب یا دسته اختصاص دهد.
برای مثال، یک مدل طبقه بندی ممکن است روی مجموعهای از تصاویر که بهعنوان سگ و گربه برچسبگذاری شدهاند، آموزش داده شود و سپس برای پیشبینی کلاس تصاویر جدید و نادیدهگرفتهشده از سگها یا گربهها بر اساس ویژگیهایی مانند رنگ، بافت و شکل استفاده شود.
انواع طبقه بندی در یادگیری ماشین
در یادگیری ماشین، دو نوع اصلی دستهبندی دودویی Binary Classification و چندکلاسه Multiclass Classification وجود دارد البته منابع مختلف دو دسته دیگر نیز معرفی می کنند که در ادامه به عنوان سایر دسته بندی ها معرفی خواهیم کرد.
۱- دستهبندی دودویی (Binary Classification)
در دستهبندی دودویی، هدف این است که ورودی را به یکی از دو کلاس یا دسته تقسیم کنیم. مثال: بر اساس شرایط سلامتی فرد، باید تعیین کنیم که آیا فرد به یک بیماری خاص مبتلا است یا خیر.
۲- دستهبندی چندکلاسه (Multiclass Classification)
در دستهبندی چندکلاسه، هدف این است که ورودی را به یکی از چندین کلاس یا دسته تقسیم کنیم. مثال: بر اساس دادههای مربوط به گونههای مختلف گلها، باید تعیین کنیم که مشاهده ما به کدام گونه تعلق دارد.
سایر دستهبندی ها
۳- دستهبندی چندبرچسبی (Multi-Label Classification):
در این نوع دستهبندی، هدف پیشبینی این است که یک داده جدید به کدام یک از چندین برچسب تعلق دارد. این با دستهبندی چندکلاسه متفاوت است، هر داده تنها میتواند به یک کلاس تعلق داشته باشد.
مثال: الگوریتم دستهبندی چندبرچسبی میتواند تصاویر حیوانات را به یک یا چند دسته مانند گربه، سگ، پرنده یا ماهی دستهبندی کند.
۴- دستهبندی نامتوازن (Imbalanced Classification):
در این نوع دستهبندی، هدف پیشبینی این است که یک داده جدید به یک کلاس اقلیت تعلق دارد یا خیر، حتی زمانی که نمونههای کلاس اکثریت بسیار بیشتر هستند.
مثال: یک الگوریتم تشخیص پزشکی میتواند پیشبینی کند که آیا بیمار به یک بیماری نادر مبتلا است یا خیر، حتی زمانی که بیماران بیشتری با بیماریهای شایع وجود دارند.
الگوریتمهای طبقه بندی در یادگیری ماشین
الگوریتمهای طبقه بندی در یادگیری ماشین را میتوان به دو دستهبندی خطی «Linear» و غیر خطی «Non-linear» تقسیم بندی کرد.
۱- دستهبندیکنندههای خطی
مدلهای خطی یک مرز تصمیم خطی بین کلاسها ایجاد میکنند. این مدلها ساده و از نظر محاسباتی کارآمد هستند. برخی از مدلهای خطی عبارتند از:
- رگرسیون لجستیک
- ماشین بردار پشتیبان (SVM) با کرنل خطی
- پرسپترون تکلایه
- دستهبندیکننده گرادیان تصادفی (SGD)
۲- دستهبندیکنندههای غیرخطی
مدلهای غیرخطی یک مرز تصمیم غیرخطی بین کلاسها ایجاد میکنند و میتوانند روابط پیچیدهتر بین ویژگیهای ورودی و متغیر هدف را ثبت کنند. برخی از مدلهای غیرخطی عبارتند از:
- نزدیکترین همسایهها (KNN)
- SVM با کرنل
- بیز ساده (Naive Bayes)
- دستهبندی درخت تصمیم (Decision Tree)
- دستهبندیکنندههای یادگیری گروهی (Ensemble):
- جنگل تصادفی (Random Forests)
- آدابوست (AdaBoost)
- دستهبندیکننده Bagging
- دستهبندیکننده Voting
- دستهبندیکننده ExtraTrees
- شبکههای عصبی چندلایه
یادگیرندهها در الگوریتمهای دستهبندی
۱- یادگیرندههای تنبل (Lazy Learners)
این یادگیرندهها مدلی در مرحله آموزش ایجاد نمیکنند، بلکه دادههای آموزشی را ذخیره کرده و هنگام پیشبینی از آن استفاده میکنند. مثال: نزدیکترین همسایهها (KNN)، استدلال مبتنی بر مورد (Case-Based Reasoning).
۲- یادگیرندههای مشتاق (Eager Learners)
این یادگیرندهها مدلی از دادههای آموزشی در مرحله آموزش ایجاد کرده و از آن برای پیشبینی استفاده میکنند. مثال: درخت تصمیم، جنگل تصادفی، ماشین بردار پشتیبان.
ارزیابی مدلهای دستهبندی
ارزیابی مدل دستهبندی یک گام مهم است که عملکرد مدل را در دادههای جدید و نادیدهگرفتهشده ارزیابی میکند.
- دقت دستهبندی (Classification Accuracy): نسبت نمونههای درست دستهبندیشده به کل نمونهها.
- ماتریس اغتشاش یا درهم ریختگی (Confusion Matrix): جدولی که تعداد مثبتهای واقعی، منفیهای واقعی، مثبتهای کاذب و منفیهای کاذب را نشان میدهد.
- دقت و بازخوانی (Precision and Recall)
- دقت: نسبت مثبتهای واقعی به کل مثبتهای پیشبینیشده.
- بازخوانی: نسبت مثبتهای واقعی به کل مثبتهای واقعی.
- امتیاز F1: میانگین هارمونیک دقت و بازخوانی.
- منحنی ROC و AUC: منحنی ROC رابطه بین نرخ مثبتهای واقعی و نرخ مثبتهای کاذب را نشان میدهد. AUC عملکرد کلی مدل را ارزیابی میکند.
- اعتبارسنجی متقابل (Cross-Validation): تکنیکی که دادهها را به چندین بخش تقسیم میکند و مدل را روی هر بخش آموزش و آزمایش میکند.
ویژگیهای دستهبندی
- متغیر هدف دستهای: دستهبندی با پیشبینی متغیرهای هدف دستهای که کلاسهای گسسته را نشان میدهند، سروکار دارد.
- دقت و نرخ خطا: مدلهای دستهبندی بر اساس تواناییشان در دستهبندی صحیح دادهها ارزیابی میشوند.
- پیچیدگی مدل: مدلهای دستهبندی از مدلهای خطی ساده تا مدلهای غیرخطی پیچیده متغیر هستند.
- بیشبرازش و کمبرازش: مدلهای دستهبندی مستعد بیشبرازش (Overfitting) و کمبرازش (Underfitting) هستند.
نحوه عملکرد دستهبندی در یادگیری ماشین
ایده اصلی دستهبندی این است که یک مدل را روی یک مجموعه داده برچسبدار آموزش دهید، جایی که دادههای ورودی با برچسبهای خروجی متناظر هستند، تا الگوها و روابط بین دادههای ورودی و خروجی را یاد بگیرد. پس از آموزش مدل، میتوان از آن برای پیشبینی برچسبهای خروجی دادههای جدید استفاده کرد.
فرآیند دستهبندی معمولاً شامل مراحل زیر است:
۱- درک مسئله
پیش از شروع فرآیند دستهبندی، مهم است که مسئلهای که میخواهید حل کنید را بهخوبی درک کنید. چه برچسبهایی (کلاسها) باید پیشبینی شوند؟ رابطه بین دادههای ورودی و برچسبهای کلاس چیست؟
مثال: فرض کنید باید پیشبینی کنیم که آیا یک بیمار به بیماری خاصی مبتلا است یا خیر، بر اساس ۷ متغیر مستقل (ویژگیها).
- اگر بیمار بیماری دارد، برچسب “True” خواهد بود.
- اگر بیمار بیماری ندارد، برچسب “False” خواهد بود.
این مسئله دستهبندی دودویی (Binary Classification) است.
۲- آمادهسازی دادهها
پس از درک مسئله، مرحله بعدی آمادهسازی دادهها است. این شامل جمعآوری، پیشپردازش و تقسیم دادهها به مجموعههای آموزش، اعتبارسنجی و آزمون است. دادهها باید تمیز شوند، پیشپردازش شوند و به فرمت مناسبی برای استفاده در الگوریتم دستهبندی تبدیل شوند.
- X: ویژگیهای مستقل در قالب یک ماتریس N×M، که N تعداد مشاهدات و M تعداد ویژگیها است.
- y: یک بردار با طول N که برچسبهای پیشبینیشده برای هر مشاهده را نشان میدهد.
۳- استخراج ویژگیها
ویژگیهای مرتبط یا مؤثر از دادهها استخراج میشوند تا تفاوت بین کلاسها بهتر مشخص شود.
مثال: اگر ورودی X شامل ۷ ویژگی مستقل باشد، اما تنها ۵ ویژگی برچسب یا مقدار هدف را تحت تأثیر قرار دهند، فقط همین ۵ ویژگی برای آموزش مدل استفاده میشوند.
۴- انتخاب مدل
مدلهای مختلفی برای دستهبندی وجود دارند، از جمله:
- رگرسیون لجستیک
- درختهای تصمیم
- ماشینهای بردار پشتیبان (SVM)
- شبکههای عصبی
انتخاب مدل مناسب به اندازه و پیچیدگی دادهها و منابع محاسباتی در دسترس بستگی دارد.
۵- آموزش مدل
پس از انتخاب مدل، گام بعدی آموزش آن روی دادههای آموزشی است. در این مرحله، پارامترهای مدل برای کاهش خطا بین برچسبهای پیشبینیشده و واقعی تنظیم میشوند.
۶- ارزیابی مدل
پس از آموزش، عملکرد مدل باید روی مجموعه اعتبارسنجی ارزیابی شود. این ارزیابی نشان میدهد که مدل روی دادههای جدید چگونه عمل میکند. معیارهای کیفیت برای اندازهگیری عملکرد مدل شامل موارد زیر است:
- Log Loss یا Cross-Entropy Loss
- ماتریس اغتشاش یا درهم ریختگی (Confusion Matrix)
- دقت (Precision) و بازخوانی (Recall)
- منحنی AUC-ROC
۷- تنظیم مدل
اگر عملکرد مدل رضایتبخش نبود، میتوانید با تنظیم پارامترها یا امتحان مدل دیگری آن را بهبود دهید.
۸- استقرار مدل
وقتی عملکرد مدل رضایتبخش بود، میتوان آن را برای پیشبینی دادههای جدید در مسائل دنیای واقعی مستقر کرد.
کاربردی دستهبندی در دنیای واقعی
الگوریتمهای دستهبندی در کاربردهای مختلف استفاده میشوند:
- فیلتر کردن ایمیلهای اسپم
- ارزیابی ریسک اعتباری بانکی
- تشخیص بیماری در پزشکی
- دستهبندی تصاویر
- تحلیل احساسات (Sentiment Analysis)
- تشخیص تقلب
- کنترل کیفیت
- سیستمهای پیشنهاددهنده
پیادهسازی مدل دستهبندی در یادگیری ماشین
برای آشنایی با نحوه کار دستهبندی، میتوان به مطالعه دستهبندیکنندههای مختلف و مقایسه عملکرد آنها روی مجموعه دادههای استاندارد مانند مجموعه داده Iris پرداخت. در این پیاده سازی با استفاده از سه الگوریتم Naïve Bayes، Decision Tree و Support Vector Machine (SVM) یک دستهبندی روی مجموعه داده Iris انجام میدهیم و عملکرد هر مدل را مقایسه میکنیم.
۱- وارد کردن کتابخانههای مورد نیاز
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score from sklearn import datasets from sklearn import svm from sklearn.tree import DecisionTreeClassifier from sklearn.naive_bayes import GaussianNB
numpy
وpandas
برای پردازش دادهها استفاده میشوند.train_test_split
برای تقسیم مجموعه داده به بخشهای آموزش و تست.accuracy_score
،precision_score
،recall_score
،f1_score
برای ارزیابی عملکرد مدلها.datasets
برای بارگذاری مجموعه دادههای آماده Iris.svm
،DecisionTreeClassifier
، وGaussianNB
برای ایجاد مدلهای طبقهبندی.
۲- بارگذاری دیتاست Iris
iris = datasets.load_iris() X = iris.data y = iris.target
datasets.load_iris()
دیتاست معروف Iris را بارگذاری میکند که شامل ۴ ویژگی (طول و عرض کاسبرگ و گلبرگ) برای ۳ نوع گل زنبق (Setosa, Versicolor, Virginica) است.X = iris.data
شامل ویژگیها.y = iris.target
شامل برچسبهای کلاس (۰، ۱ و ۲).
۳- تقسیم دادهها به دو مجموعه: آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
train_test_split()
دادهها را به دو مجموعه ۷۰٪ آموزش و ۳۰٪ تست تقسیم میکند.random_state=1
باعث میشود که هر بار اجرا، دادهها به همان شکل تقسیم شوند.
۴- اجرای مدلها و مقایسه نتایج
مدل Naïve Bayes (Gaussian Naïve Bayes)
gnb = GaussianNB() gnb.fit(X_train, y_train) gnb_pred = gnb.predict(X_test)
مدل Naïve Bayes گوسی ساخته و روی دادههای آموزشی آموزش داده میشود. سپس پیشبینیها روی دادههای تست انجام میشود.
print("Accuracy of Gaussian Naive Bayes: ", accuracy_score(y_test, gnb_pred)) print("Precision of Gaussian Naive Bayes: ", precision_score(y_test, gnb_pred, average='weighted')) print("Recall of Gaussian Naive Bayes: ", recall_score(y_test, gnb_pred, average='weighted')) print("F1-Score of Gaussian Naive Bayes: ", f1_score(y_test, gnb_pred, average='weighted'))
- دقت (Accuracy): تعداد پیشبینیهای صحیح به کل دادهها.
- Precision، Recall، F1-Score معیارهای دقیقتری برای ارزیابی عملکرد مدل هستند.
مدل درخت تصمیم (Decision Tree)
dt = DecisionTreeClassifier(random_state=0) dt.fit(X_train, y_train) dt_pred = dt.predict(X_test)
مدل درخت تصمیم ساخته و روی دادههای آموزشی آموزش داده میشود. پیشبینیها روی دادههای تست انجام میشود.
print("Accuracy of Decision Tree Classifier: ", accuracy_score(y_test, dt_pred)) print("Precision of Decision Tree Classifier: ", precision_score(y_test, dt_pred, average='weighted')) print("Recall of Decision Tree Classifier: ", recall_score(y_test, dt_pred, average='weighted')) print("F1-Score of Decision Tree Classifier: ", f1_score(y_test, dt_pred, average='weighted'))
همان معیارهای دقت، دقت مثبت (Precision)، بازخوانی (Recall) و F1-Score برای مدل درخت تصمیم محاسبه میشوند.
مدل ماشین بردار پشتیبان (SVM)
svm_clf = svm.SVC(kernel='linear') svm_clf.fit(X_train, y_train) svm_clf_pred = svm_clf.predict(X_test)
SVM با هسته خطی (linear kernel) ساخته و آموزش داده میشود. پیشبینیها روی دادههای تست انجام میشود.
print("Accuracy of Support Vector Machine: ", accuracy_score(y_test, svm_clf_pred)) print("Precision of Support Vector Machine: ", precision_score(y_test, svm_clf_pred, average='weighted')) print("Recall of Support Vector Machine: ", recall_score(y_test, svm_clf_pred, average='weighted')) print("F1-Score of Support Vector Machine: ", f1_score(y_test, svm_clf_pred, average='weighted'))
مدل SVM نیز با همان معیارها ارزیابی میشود. در نهایت خروجی حاصل از اجرای کدهای بالا بصورت زیر خواهد بود:
Accuracy of Gaussian Naive Bayes: 0.9333333333333333 Precision of Gaussian Naive Bayes: 0.9352007469654529 Recall of Gaussian Naive Bayes: 0.9333333333333333 F1-Score of Gaussian Naive Bayes: 0.933615520282187 Accuracy of Decision Tree Classifier: 0.9555555555555556 Precision of Decision Tree Classifier: 0.9555555555555556 Recall of Decision Tree Classifier: 0.9555555555555556 F1-Score of Decision Tree Classifier: 0.9555555555555556 Accuracy of Support Vector Machine: 1.0 Precision of Support Vector Machine: 1.0 Recall of Support Vector Machine: 1.0 F1-Score of Support Vector Machine: 1.0
نتیجه گیری
دستهبندی یکی از وظایف اساسی در یادگیری ماشین است که به دستهبندی دادهها در کلاسها یا گروههای از پیش تعریفشده بر اساس ویژگیهای آنها میپردازد. در این مقاله از سری مقالات آموزشی مجله پی استور به تشریح طبقه بندی در یادگیری ماشین پرداخته شد و در نهایت نحوه پیاده سازی یک مثال برای دسته بندی در پایتون آموزش داده شد.