طبقه بندی و انواع آن

طبقه بندی | Classification


 

طبقه بندی (Classification) به فرایندی که در آن ایده ها و اشیا شناسایی، متمایز و درک می شوند، گفته میشود.

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

 

.

طبقه بندی در طبیعت

 

.

موجودات زنده را می توان بر اساس چندین فاکتور مختلف طبقه بندی کرد. بر این اساس، عوامل مختلف شامل ماهیت سلول درگیر می شود. نوع تغذیه ای که در ارگانیسم ها دیده می شود و بر اساس سازمان بدن. موارد زیر بعضی از انواع مختلف طبقه بندی در طبیعت و ارگانیسم موجودات زنده است.

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

ارگانیسم ها را می توان به موجودات تک سلولی و چند سلولی تقسیم کرد. اگر فقط یک سلول وجود داشته باشد، این یک ارگانیسم تک سلولی است. آمیب نمونه ای از ارگانیسم تک سلولی است. ارگانیسم های چند سلولی سلول های زیادی دارند که با هم گروه می شوند و بافت های خاصی را تشکیل می دهند. اینها ارگانیسم واحدی را تشکیل می دهند. هر گروه از سلولهای تخصصی عملکرد ویژه ای دارند. برای مثال؛ کرمها، حشرات و …

بسته به نوع تغذیه، ارگانیسم ها را می توان به اتوتروف و هتروتروف طبقه بندی کرد. اتوتروف ها می توانند با فرآیند فتوسنتز، غذای خود را تهیه کنند. هتروتروف ها نمی توانند غذای خودشان را درست کنند و از نظر غذایی به دیگران وابسته هستند.

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

گیاهان و حیوانات را می توان بر اساس وجود یا عدم وجود دیواره سلولی طبقه بندی کرد. گیاهان دیواره سلولی دارند و حیوانات دیواره سلولی ندارند. مبنای دیگر نحوه تغذیه است.

در یادگیری ماشین، طبقه بندی به یک مسئله مدل سازی پیش بینی کننده اشاره دارد که در آن یک برچسب (Lable) کلاس برای یک نمونه از داده های ورودی پیش بینی می شود.

نمونه هایی از مسائل طبقه بندی عبارتند از:

نمونه ها را، بر اساس هرز (Spam) بودن، طبقه بندی کنید. بر اساس یک نمونه دست نویس، نمونه را به عنوان اثر یکی از شخصیت های شناخته شده طبقه بندی کنید. با توجه به رفتار اخیر کاربر، آیا وی در رده بندی قرار میگیرد یا نه.

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

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

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

طبقه بندی باینری | Binary Classification

شناسایی هرزنامه <strong>(Spam)</strong> از طریق ایمیل (هرزنامه است یا نه) پیش بینی ریزش | <strong>Churn</strong> (ریزش یا یا عدم ریزش) پیش بینی تبدیل (خرید یا نه)

 

به طور معمول، وظایف طبقه بندی باینری شامل یک کلاس که حالت عادی است و یک کلاس دیگر که حالت غیر عادی است، می باشد.

به عنوان مثال “هرزنامه نیست” حالت طبیعی است و “هرزنامه” یک حالت غیر عادی است. مثال دیگر این است که “سرطان تشخیص داده نمی شود”، حالت طبیعی وظیفه ای است که شامل آزمایشی پزشکی می شود و “سرطان شناسایی شده” حالت غیر عادی است.

به کلاس حالت عادی برچسب یا لیبل کلاس ۰ و به کلاس با حالت غیر عادی برچسب یا لیبل کلاس ۱ اختصاص داده می شود.

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

 

برخی از الگوریتم ها به طور خاص برای طبقه بندی باینری طراحی شده اند و غالباً بیش از دو کلاس را پشتیبانی نمی کنند.

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

ما می توانیم از تابع () make_blobs برای تولید یک دیتاست طبقه بندی باینری مصنوعی استفاده کنیم.

مثال زیر یک دیتاست با ۱۰۰۰ نمونه ایجاد می کند که متعلق به یکی از دو کلاس است که هر کدام دارای دو ویژگی ورودی هستند.

 

 

 

# example of binary classification task
from numpy import where
from collections import Counter
from sklearn.datasets import make_blobs
from matplotlib import pyplot
# define dataset
X, y = make_blobs(n_samples=1000, centers=2, random_state=1)
# summarize dataset shape
print(X.shape, y.shape)
# summarize observations by class label
counter = Counter(y)
print(counter)
# summarize first few examples
for i in range(10):
    print(X[i], y[i])
# plot the dataset and color the by class label
for label, _ in counter.items():
    row_ix = where(y == label)[0]
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1], label=str(label))
pyplot.legend()
pyplot.show()

 

 

با اجرای این مثال، ابتدا دیتاست ایجاد شده را خلاصه شده که ۱۰۰۰ نمونه را به عناصر ورودی (X) و خروجی (y) تقسیم می کند.

سپس توزیع لیبل های کلاس به طور خلاصه نشان داده می شود که نمونه ها به کلاس ۰ یا کلاس ۱ تعلق دارند و ۵۰۰ نمونه در هر کلاس وجود دارد.

بعد، ۱۰ نمونه اول در دیتاست خلاصه می شوند، که نشان می دهد، مقادیر ورودی عددی هستند و مقادیر هدف، اعداد صحیحی هستند که عضویت کلاس را نشان می دهند.

 

(۱۰۰۰, ۲) (۱۰۰۰,)
 
Counter({0: 500, 1: 500})
 
[-۳٫۰۵۸۳۷۲۷۲  ۴٫۴۸۸۲۵۷۶۹] ۰
[-۸٫۶۰۹۷۳۸۶۹ -۳٫۷۲۷۱۴۸۷۹] ۱
[۱٫۳۷۱۲۹۷۲۱ ۵٫۲۳۱۰۷۴۴۹] ۰
[-۹٫۳۳۹۱۷۵۶۳ -۲٫۹۵۴۴۴۶۹ ] ۱
[-۱۱٫۵۷۱۷۸۵۹۳  -۳٫۸۵۲۷۵۵۱۳] ۱
[-۱۱٫۴۲۲۵۷۳۴۱  -۴٫۸۵۶۷۹۱۲۷] ۱
[-۱۰٫۴۴۵۱۸۵۷۸  -۳٫۷۶۴۷۶۵۶۳] ۱
[-۱۰٫۴۴۶۰۳۵۶۱  -۳٫۲۶۰۶۵۹۶۴] ۱
[-۰٫۶۱۹۴۷۰۷۵  ۳٫۴۸۸۰۴۹۸۳] ۰
[-۱۰٫۹۱۱۱۵۵۹۱  -۴٫۵۷۷۲۵۳۷ ] ۱

 

 

سرانجام، یک نمودار پراکندگی برای متغیرهای ورودی در دیتاست ایجاد میشود و نقاط بر اساس مقدار کلاس آنها رنگی می شوند.

ما می توانیم دو خوشه متمایز را ببینیم که ممکن است انتظار داشته باشیم تفکیک آنها آسان باشد.

 

.

طبقه بندی باینری

.

 

طبقه بندی چند طبقه | Multi-Class Classification

طبقه بندی چند طبقه، به آن دسته از طبقه بندی گفته می شود که بیش از دو لیبل کلاس دارند.

 

برخلاف طبقه بندی باینری، طبقه بندی چند طبقه مفهوم نتایج عادی و غیر عادی را ندارد. در عوض، نمونه ها به عنوان بخشی از طیفی وسیع از کلاسهای شناخته شده طبقه بندی می شوند.

تعداد برچسب های کلاس ممکن است در مورد برخی مسائل بسیار زیاد باشد. به عنوان مثال، یک مدل ممکن است یک عکس را متعلق به یکی از هزاران یا ده ها هزار چهره در سیستم تشخیص چهره پیش بینی کند.

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

معمول است که یک طبقه بندی چند کلاسه با مدلی ارائه می شود که توزیع احتمال Multinoulli را برای هر نمونه پیش بینی می کند.

توزیع Multinoulli یک توزیع احتمال گسسته است که موردی را پوشش می دهد که یک رویداد نتیجه ای طبقه بندی شده داشته باشد. به عنوان مثال، K در {۱ ، ۲ ، ۳ ، … ، K}. برای طبقه بندی، این بدان معنی است که مدل، احتمال نمونه متعلق به هر برچسب کلاس را پیش بینی می کند.

بسیاری از الگوریتم های مورد استفاده برای طبقه بندی باینری را می توان برای طبقه بندی چند طبقه هم استفاده کرد.

الگوریتم های مشهوری که می توانند برای طبقه بندی چند طبقه استفاده شوند عبارتند از:

 

الگوریتم هایی که برای طبقه بندی باینری طراحی شده اند، می توانند برای استفاده در مسائل چند طبقه سازگار شوند.

این شامل استفاده از یک استراتژی متناسب کردن چندین مدل طبقه بندی باینری برای هر کلاس در مقابل همه کلاسهای دیگر (به نام یک در مقابل همه – one-vs-rest) یا یک مدل برای هر جفت کلاس (به نام یک در مقابل یک – one-vs-one) است.

One-vs-Rest: یک مدل طبقه بندی باینری را برای هر کلاس در مقابل تمام کلاسهای دیگر.

One-vs-One: برای هر جفت کلاس یک مدل طبقه بندی باینری.

الگوریتم های طبقه بندی باینری که می توانند از این استراتژی ها برای طبقه بندی چند طبقه استفاده کنند عبارتند از:

رگرسیون لجستیک SVM

 

در مرحله بعدی، نگاهی دقیق به یک دیتاست میاندازیم تا شهودی برای مشکلات طبقه بندی چند کلاسه ایجاد کنیم.

ما می توانیم از تابع () make_blobs برای ایجاد یک مجموعه داده طبقه بندی چند کلاسه مصنوعی استفاده کنیم.

مثال زیر یک دیتاست با ۱۰۰۰ نمونه ایجاد می کند که متعلق به یکی از سه کلاس است که هر کدام دارای دو ویژگی ورودی هستند.

 

 

# example of multi-class classification task
from numpy import where
from collections import Counter
from sklearn.datasets import make_blobs
from matplotlib import pyplot
# define dataset
X, y = make_blobs(n_samples=1000, centers=3, random_state=1)
# summarize dataset shape
print(X.shape, y.shape)
# summarize observations by class label
counter = Counter(y)
print(counter)
# summarize first few examples
for i in range(10):
    print(X[i], y[i])
# plot the dataset and color the by class label
for label, _ in counter.items():
    row_ix = where(y == label)[0]
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1], label=str(label))
pyplot.legend()
pyplot.show()

 

 

با اجرای مثال، ابتدا دیتاست ایجاد شده خلاصه شده که ۱۰۰۰ نمونه را به عناصر ورودی (X) و خروجی (y) تقسیم می کند.

سپس توزیع برچسب های کلاس خلاصه شده و نشان می دهد که نمونه ها به کلاس ۰، کلاس ۱ یا کلاس ۲ تعلق دارند و تقریباً ۳۳۳ مثال در هر کلاس وجود دارد.

بعد، ۱۰ نمونه اول در دیتاست نشان داده می شود که مقادیر ورودی عددی و مقادیر هدف، اعداد صحیحی هستند که عضویت کلاس را نشان می دهند.

 

(۱۰۰۰, ۲) (۱۰۰۰,)
 
Counter({0: 334, 1: 333, 2: 333})
 
[-۳٫۰۵۸۳۷۲۷۲  ۴٫۴۸۸۲۵۷۶۹] ۰
[-۸٫۶۰۹۷۳۸۶۹ -۳٫۷۲۷۱۴۸۷۹] ۱
[۱٫۳۷۱۲۹۷۲۱ ۵٫۲۳۱۰۷۴۴۹] ۰
[-۹٫۳۳۹۱۷۵۶۳ -۲٫۹۵۴۴۴۶۹ ] ۱
[-۸٫۶۳۸۹۵۵۶۱ -۸٫۰۵۲۶۳۴۶۹] ۲
[-۸٫۴۸۹۷۴۳۰۹ -۹٫۰۵۶۶۷۰۸۳] ۲
[-۷٫۵۱۲۳۵۵۴۶ -۷٫۹۶۴۶۴۵۱۹] ۲
[-۷٫۵۱۳۲۰۵۲۹ -۷٫۴۶۰۵۳۹۱۹] ۲
[-۰٫۶۱۹۴۷۰۷۵  ۳٫۴۸۸۰۴۹۸۳] ۰
[-۱۰٫۹۱۱۱۵۵۹۱  -۴٫۵۷۷۲۵۳۷ ] ۱

 

 

سرانجام، یک نمودار پراکندگی برای متغیرهای ورودی در دیتاست ایجاد می شود و نقاط بر اساس مقدار کلاس آنها رنگی می شوند.

ما می توانیم سه خوشه مجزا را ببینیم که ممکن است انتظار داشته باشیم تفکیک آنها آسان باشد.

طبقه بندی چند کلاسه

 

طبقه بندی چند برچسب | Multi-Label Classification

طبقه بندی چند برچسب به آن دسته از طبقه بندی گفته می شود که دارای دو یا چند برچسب کلاس هستند. ممکن است برای هر نمونه یک یا چند برچسب کلاس پیش بینی شود.

برای مثال طبقه بندی عکس را در نظر بگیرید. جایی که یک عکس معین ممکن است چندین شئ در خود داشته باشد و یک مدل وجود چندین شئ شناخته شده در عکس، مانند “دوچرخه”، “سیب”، “شخص” و … را پیش بینی کند.

این طبقه بندی برخلاف طبقه بندی باینری و طبقه بندی چند طبقه است، که برای هر نمونه یک برچسب کلاس واحد پیش بینی شده است.

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

الگوریتم های طبقه بندی مورد استفاده برای طبقه بندی باینری یا چند طبقه را نمیتوان مستقیماً برای طبقه بندی چند برچسب استفاده کرد. از نسخه های خاص الگوریتم های طبقه بندی استاندارد می توان استفاده کرد. به اصطلاح نسخه های چند برچسب الگوریتم ها، از جمله؛

 

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

در مرحله بعدی، نگاهی دقیق به یک دیتاست میاندازیم تا شهودی برای مشکلات طبقه بندی چند برچسب ایجاد کنیم.

ما می توانیم از تابع () make_multilabel_classification برای ایجاد دیتاست طبقه بندی چند برچسب مصنوعی استفاده کنیم.

مثال زیر یک دیتاست با ۱۰۰۰ نمونه ایجاد می کند که هر کدام دارای دو ویژگی ورودی هستند. سه کلاس وجود دارد که هر کدام ممکن است یکی از دو برچسب (۰ یا ۱) را به خود اختصاص دهند.

 

 

# example of a multi-label classification task
from sklearn.datasets import make_multilabel_classification
# define dataset
X, y = make_multilabel_classification(n_samples=1000, n_features=2, n_classes=3, n_labels=2, random_state=1)
# summarize dataset shape
print(X.shape, y.shape)
# summarize first few examples
for i in range(10):
    print(X[i], y[i])

 

 

با اجرای مثال، ابتدا دیتاست ایجاد شده را خلاصه کرده که ۱۰۰۰ نمونه را به عناصر ورودی (X) و خروجی (y) تقسیم می کند.

بعد، ۱۰ نمونه اول در دیتاست نشان داده می شود که مقادیر ورودی، عددی و مقادیر هدف، اعداد صحیحی هستند که نشان دهنده عضویت برچسب کلاس هستند.

 

طبقه بندی نامتوازن | Imbalanced Classification

طبقه بندی نامتوازن به طبقه بندی اشاره دارد که تعداد نمونه ها در هر کلاس به طور نابرابر توزیع شده است.

به طور معمول، وظایف طبقه بندی نامتوازن وظایف طبقه بندی باینری است که در آنها اکثر نمونه ها در مجموعه داده های آموزشی به کلاس عادی و اقلیت نمونه ها به کلاس غیر عادی تعلق دارند.

 

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

برای تغییر ترکیب نمونه ها در دیتاست های آموزشی می توان با نمونه برداری از کلاس اکثریت یا نمونه برداری از کلاس اقلیت از تکنیک های خاصی استفاده کرد.

 

ممکن است از الگوریتم های مدلسازی تخصّصی استفاده شود که هنگام قرار دادن مدل در دیتاست های آموزشی، مانند الگوریتم های یادگیری ماشین حساس به بها (Cost)، به کلاس اقلیت توجه بیشتری نشان می دهند.

 

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

 

در مرحله بعدی، نگاهی دقیق به یک دیتاست میاندازیم تا شهودی برای مسائل طبقه بندی نامتوازن ایجاد کنیم.

ما می توانیم از تابع () make_classification برای ایجاد یک دیتاست طبقه بندی باینری نامتوازن مصنوعی استفاده کنیم.

مثال زیر یک دیتاست با ۱۰۰۰ نمونه ایجاد می کند که متعلق به یکی از دو کلاس است که هر کدام دارای دو ویژگی ورودی هستند.

 

 

# example of an imbalanced binary classification task
from numpy import where
from collections import Counter
from sklearn.datasets import make_classification
from matplotlib import pyplot
# define dataset
X, y = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_classes=2, n_clusters_per_class=1, weights=[0.99,0.01], random_state=1)
# summarize dataset shape
print(X.shape, y.shape)
# summarize observations by class label
counter = Counter(y)
print(counter)
# summarize first few examples
for i in range(10):
    print(X[i], y[i])
# plot the dataset and color the by class label
for label, _ in counter.items():
    row_ix = where(y == label)[0]
    pyplot.scatter(X[row_ix, 0], X[row_ix, 1], label=str(label))
pyplot.legend()
pyplot.show()

 

 

با اجرای مثال، ابتدا دیتاست ایجاد شده را خلاصه کرده که ۱۰۰۰ نمونه را به عناصر ورودی (X) و خروجی (y) تقسیم می کند.

سپس توزیع برچسب های کلاس خلاصه می شود و عدم تعادل شدید کلاس را با حدود ۹۸۰ نمونه متعلق به کلاس ۰ و حدود ۲۰ نمونه متعلق به کلاس ۱ نشان می دهد.

بعد، ۱۰ نمونه اول در دیتاست نشان داده می شود که مقادیر ورودی، عددی و مقادیر هدف، اعداد صحیحی هستند که عضویت کلاس را نشان می دهند. در این حالت، همانطور که انتظار داریم می بینیم که بیشتر نمونه ها به کلاس ۰ تعلق دارند.

 

 

(۱۰۰۰, ۲) (۱۰۰۰,)

Counter({0: 983, 1: 17})

[۰٫۸۶۹۲۴۷۴۵ ۱٫۱۸۶۱۳۶۱۲] ۰
[۱٫۵۵۱۱۰۸۳۹ ۱٫۸۱۰۳۲۹۰۵] ۰
[۱٫۲۹۳۶۱۹۳۶ ۱٫۰۱۰۹۴۶۰۷] ۰
[۱٫۱۱۹۸۸۹۴۷ ۱٫۶۳۲۵۱۷۸۶] ۰
[۱٫۰۴۲۳۵۵۶۸ ۱٫۱۲۱۵۲۹۲۹] ۰
[۱٫۱۸۱۱۴۸۵۸ ۰٫۹۲۳۹۷۶۰۷] ۰
[۱٫۱۳۶۵۵۶۲  ۱٫۱۷۶۵۲۵۵۶] ۰
[۰٫۴۶۲۹۱۷۲۹ ۰٫۷۲۹۲۴۹۹۸] ۰
[۰٫۱۸۳۱۵۸۲۶ ۱٫۰۷۱۴۱۷۶۶] ۰
[۰٫۳۲۴۱۱۶۴۸ ۰٫۵۳۵۱۵۳۷۶] ۰

 

 

سرانجام، یک نمودار پراکندگی برای متغیرهای ورودی در دیتاست ایجاد می شود و نقاط بر اساس مقدار کلاس آنها رنگی می شوند.

ما می توانیم یک خوشه اصلی را برای نمونه هایی که مربوط به کلاس ۰ است و چند نمونه پراکنده که مربوط به کلاس ۱ می باشند، ببینیم. دیتاست های دارای این ویژگی از برچسب های کلاس نامتوازن برای مدل سازی چالش بیشتری دارند.

 

 

.

طبقه بندی نامتوازن

.

 

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

شما یاد گرفتید؛

مدل سازی پیش بینی طبقه بندی شامل اختصاص یک برچسب کلاس به نمونه های ورودی است. طبقه بندی باینری به پیش بینی یکی از دو کلاس و طبقه بندی چند طبقه شامل پیش بینی یکی از دو کلاس به بالاست. طبقه بندی چند برچسب شامل پیش بینی یک یا چند کلاس برای هر نمونه است و طبقه بندی نامتوازن به وظایف طبقه بندی اشاره دارد که توزیع نمونه ها در بین کلاس ها برابر نیست.

 

 


 

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *