دلایل عدم تعادل دادهها
عدم تعادل در دادهها به معنای عدم توزیع یکنواخت نمونهها در دستههای مختلف است. این مسئله معمولا در مواردی رخ میدهد که یک دسته دارای تعداد نمونههای بسیار بیشتری نسبت به دستههای دیگر است. دلایل مختلفی میتواند منجر به عدم تعادل دادهها شود:
- نوع فرآیند جمعآوری داده: در بسیاری از موارد، فرآیند جمعآوری دادهها نمونهگیری تصادفی نیست و به طور طبیعی بر روی یک دسته خاص تمرکز دارد. به عنوان مثال، در مسائل پزشکی، برخی از بیماریها نادرتر از سایر بیماریها هستند و بنابراین تعداد نمونههایی که به آنها تعلق دارند کمتر است.
- تعاملات اجتماعی: در بعضی موارد، تعادل دادهها ممکن است به دلیل تعاملات اجتماعی و رفتارهای انسانی تخریب شود. به عنوان مثال، در حوزه تقلب در مالی، تعداد نمونههای تقلب کمتر از نمونههای غیرتقلب است، زیرا تقلبها برخلاف رفتار عادی میباشند و نسبت به کل تعداد تراکنشها کمتر هستند.
- هزینهها و زمان مورد نیاز برای جمعآوری دادهها: جمعآوری دادهها اغلب هزینه زیادی را به همراه دارد و طول زمان زیادی را میطلبد. بنابراین، ممکن است منابع محدودی برای جمعآوری نمونهها در همه دستهها وجود داشته باشد و در نتیجه تعداد نمونههای هر دسته متفاوت باشد.
- خطای برچسبدهی: در بعضی موارد، وقوع خطای برچسبدهی میتواند منجر به تعداد نمونههای نامتعادل در دستهها شود. به عنوان مثال، اگر برچسبها توسط انسانها بر اساس تشخیص خود از دادهها برچسبگذاری شوند، ممکن است در تشخیص دستههای کمتر دقت کمتری داشته باشند و نتیجه تعداد نمونههای نامتعادل در دستهها باشد.
- روشهای نمونهبرداری: در فرآیند جمعآوری داده، استفاده از روشهای نمونهبرداری خاص ممکن است منجر به عدم تعادل دادهها شود. به طور معمول، در روش نمونهبرداری غیرتصادفی، تعداد نمونههای هر دسته ممکن است متفاوت باشد و باعث ایجاد عدم تعادل در دادهها شود.
عدم تعادل دادهها میتواند تأثیر مستقیمی بر عملکرد مدلهای یادگیری ماشین داشته باشد. در صورتی که دادهها غیر متعادل باشند، مدل ممکن است دسته کمنمونهای را بهطور اشتباه تشخیص دهد و عملکرد آن کاهش پیدا کند. برای مقابله با این مشکل، استفاده از روشهایی مانند وزندهی کلاس میتواند کمک کند تا مدل بهطور مناسب با دستههای نامتعادل برخورد کند.
1. افزایش نمونهها (Oversampling)
Oversampling یک روش متعادلسازی دادهها است که در آن تعداد نمونههای دسته کمتر را افزایش میدهیم تا تعادل در توزیع دادهها برقرار شود. این روش به خصوص در مواجهه با مسائل دستهبندی دادههای غیر متعادل مفید است، زمانی که نمونههای یکی از دستهها به طور قابل توجهی کمتر از دستههای دیگر باشد. روشهای مختلفی برای افزایش نمونهها وجود دارد، اما یکی از روشهای معروف و مؤثر برای این منظور SMOTE سرنام (Synthetic Minority Over-sampling Technique) است. در SMOTE، نمونههای تصادفی در نزدیکی همسایگان هر نمونه کمتر تولید میشوند تا نمونههای مصنوعی جدیدی را ایجاد کنند. مراحل اصلی اجرای روش SMOTE به شرح زیر است:
- انتخاب یک نمونه از دسته به عنوان نمونه مبدا.
- پیدا کردن همسایههای نزدیک این نمونه مبدا از دسته کمتر. برای این کار، معمولا از الگوریتم k-NN سرنام (k-Nearest Neighbors) استفاده میشود.
- انتخاب یکی از همسایهها به صورت تصادفی و محاسبه میانگین برداری بین نمونه مبدأ و همسایه انتخاب شده.
- ایجاد نمونه مصنوعی جدید با استفاده از میانگین برداری محاسبه شده. این نمونه جدید به دسته کمتر اضافه میشود.
- این مراحل برای تعداد نمونههای مورد نظر تکرار میشوند تا تعداد نمونههای کمتر به مقدار مطلوبی افزایش یابد.
با استفاده از Oversampling با استفاده از SMOTE یا روشهای دیگر، تعادل در توزیع دادهها ایجاد میشود و تمرکز بیشتری بر روی دستهها به وجود میآید. این روش میتواند بهبود عملکرد مدلهای دستهبندی را در مواجهه با دادههای غیر متعادل ارائه دهد.
2. کم نمونهگیری (Undersampling)
کم نمونهگیری یا undersampling یک روش دیگر متعادل سازی دادهها است که در آن تعداد نمونههای دسته بیشتر را کاهش میدهیم تا تعادل در توزیع دادهها ایجاد شود. این روش نیز در مواجهه با مسائل دستهبندی دادههای غیر متعادل کاربرد دارد، زمانی که نمونههای یکی از دستهها به طور چشمگیری بیشتر از دستههای دیگر باشد. برخلاف Oversampling که تعداد نمونهها را افزایش میدهد، در undersampling ما تعداد نمونههای دسته بیشتر را کاهش میدهیم تا به تعادل بین دستهها برسیم. این کاهش میتواند به صورت تصادفی انجام شود یا با استفاده از الگوریتمهایی که نمونههای را بر اساس معیارهایی مانند فاصله یا شباهت انتخاب میکنند. مراحل اصلی اجرای روش undersampling به شرح زیر است:
- انتخاب یک نمونه تصادفی از دسته بیشتر به عنوان نمونه مبدأ.
- پیدا کردن نمونههایی از دسته کمتر که به نمونه مبدأ نزدیک هستند. برای انتخاب این نمونهها، میتوان از روشهایی مانند الگوریتم k-NN استفاده کرد.
- حذف نمونههای دسته بیشتر انتخاب شده و فقط نمونههای دسته کمتر باقی میمانند.
- این مراحل برای تعداد نمونههای مورد نظر تکرار میشوند تا تعداد نمونههای بیشتر به مقدار مطلوبی کاهش یابد.
با استفاده از کم نمونهگیری، تعادل در توزیع دادهها ایجاد میشود و تمرکز بیشتری بر روی دسته کمتر وجود دارد. این روش میتواند بهبود عملکرد مدلهای دستهبندی را در مواجهه با دادههای نامتعادل ارائه دهد، اما ممکن است باعث از دست دادن اطلاعات مهم از دسته بیشتر شود. بنابراین، انتخاب مناسب روش متعادل سازی داده بسته به مسئله و ویژگیهای دادهها بسیار مهم است.
3. روشهای ترکیبی (Hybrid Approaches)
روشهای ترکیبی یا Hybrid Approaches در متعادل سازی دادهها در دستهبندی دادههای نامتعادل استفاده میشوند. این روشها تلاش میکنند با ترکیب و یا توامان استفاده از روشهای oversampling و undersampling، تعادل در توزیع دادهها را ایجاد کنند. روشهای ترکیبی میتوانند به صورت زیر عمل کنند:
- Oversampling و undersampling ترکیب شده: در این روش، هم آموزش روش oversampling و هم آموزش روش undersampling انجام میشود. ابتدا با استفاده از روشهای oversampling تعداد نمونههای دسته کمتر را افزایش میدهیم و سپس با استفاده از روشهای undersampling تعداد نمونههای دسته بیشتر را کاهش میدهیم. این روش تلاش میکند تا از مزایای هر دو روش بهره ببرد و به تعادل در توزیع دادهها برسد.
- ترکیب روشهای oversampling و undersampling با استفاده از الگوریتمهای یادگیری مبتنی بر نمونه: در این روش، از الگوریتمهای یادگیری مبتنی بر نمونه مانند SMOTEBoost، ADASYNBoost و RUSBoost استفاده میشود. این الگوریتمها در هر مرحله از آموزش مدل، از ترکیب روشهای oversampling و undersampling برای ایجاد تعادل در توزیع دادهها استفاده میکنند.
روشهای ترکیبی از مزایای روشهای oversampling و undersampling بهره میبرند و سعی میکنند تعادل مناسبی در توزیع دادهها ایجاد کنند. اما برای استفاده از این روشها، نیاز به تنظیم پارامترها و ترتیب اجرای روشها وجود دارد تا بهترین نتایج را در مسائل خاصی که با آنها سرو کار داریم، بدست آوریم.
4. وزندهی کلاس (Class Weighting)
وزندهی کلاس یک روش در دستهبندی دادههای نامتعادل است که با تخصیص وزنهای متفاوت به دستههای مختلف، تعادل در توزیع دادهها را ایجاد میکند. در دستهبندی دادههای نامتعادل، دستهای که تعداد نمونههای کمتری دارد، ممکن است توسط مدل به طور ناخواسته نادیده گرفته شود و عملکرد مدل در تشخیص این دسته کمتر شود. با استفاده از وزندهی کلاس، میتوان این تاثیر را کاهش داد و دستههای کمتر را بهطور متناسب با اهمیتشان در آموزش مدل مورد توجه قرار داد. روشهای مختلفی برای وزندهی کلاس وجود دارد. دو روش معمول برای وزندهی کلاس عبارتند از:
1. معکوس تعداد نمونهها (Inverse Class Frequency): در این روش، برای هر کلاس، وزن برابر با معکوس تعداد نمونههای آن کلاس قرار میگیرد. به عبارتی، کلاسهای کمتر نمونهدار، وزن بیشتری دریافت میکنند و کلاسهای بیشتر نمونهدار، وزن کمتری دارند. این روش از تعداد نمونهها به عنوان معیاری برای تعیین اهمیت هر کلاس استفاده میکند.
2. دستهبندی تراز (Class Proportional): در این روش، وزن هر کلاس برابر با نسبت تعداد نمونههای کلاس از کل تعداد نمونهها قرار میگیرد. به این ترتیب، کلاسهای با تعداد نمونه بیشتر، وزن کمتری دارند و کلاسهای با تعداد نمونه کمتر، وزن بیشتری دارند. این روش به نسبت توزیع دادهها بین دستهها توجه میکند.
با استفاده از وزندهی کلاس، میتوان تعادل در توزیع دادهها را ایجاد کرده و تأثیر دستههای کمتر را در آموزش مدل بیشتر کرد. این روش معمولاً بهبود قابل توجهی در عملکرد مدل در مسائل دستهبندی دادههای نامتعادل ایجاد میکند.
در پایتون، بستههای مختلفی برای متعادل سازی داده وجود دارد. برخی از معروفترین بستهها عبارتند از imbalanced-learn، scikit-learn و SMOTE. با استفاده از این بستهها قادر خواهید بود روشهای مختلف متعادل سازی داده را پیادهسازی کنید. برای مثال، در بسته imbalanced-learn، متدهایی مانند RandomOverSampler و RandomUnderSampler برای افزایش و کاهش نمونهها به ترتیب استفاده میشوند. در ادامه یک مثال ساده از افزایش نمونهها با استفاده از بسته imbalanced-learn را نشان میدهم:
from imblearn.over_sampling import SMOTE
from sklearn.datasets import make_classification
# ایجاد دادههای تست
X, y = make_classification(n_samples=1000, n_features=10, weights=[0.95], random_state=42)
# نمونههای افزایشی با استفاده از SMOTE
smote = SMOTE()
X_resampled, y_resampled = smote.fit_resample(X, y)
# تعداد نمونههای قبل و بعد از افزایش
print("تعداد نمونههای قبل از افزایش:", len(X))
print("تعداد نمونههای بعد از افزایش:", len(X_resampled))
در این مثال، ابتدا از تابع make_classification در بسته scikit-learn برای ایجاد یک مجموعه داده تست استفاده میکنیم. سپس با استفاده از SMOTE از بسته imbalanced-learn، تعداد نمونههای دسته کمتر را افزایش میدهیم. در نهایت، تعداد نمونههای قبل و بعد از افزایش را چاپ میکنیم. با استفاده از روشهای متعادل سازی داده، میتوانید تعادلی در توزیع دادهها ایجاد کنید و از آنها برای آموزش مدلهای دستهبندی استفاده کنید.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟