در حوزه یادگیری ماشین «Machine Learning»، داده از مهمترین عناصر برای آموزش «Train» مدلها هستند. گاهی اوقات، به جای استفاده از دادههای واقعی، نیاز به ایجاد مجموعه دادههای «Dataset» مصنوعی داریم که با ویژگیهای خاصی طراحی شدهاند. کتابخانه Sklearn یکی از ابزارهای قدرتمند در پایتون است که امکانات متنوعی برای تولید دادههای مصنوعی فراهم میکند. در این مقاله به بررسی روشهای ایجاد مجموعه داده آزمایشی با Sklearn در پایتون میپردازیم.
دلایل استفاده از دیتاست مصنوعی
- آزمایش مدلها در شرایط کنترلشده: مجموعه دادههای مصنوعی به شما اجازه میدهند مدلهای خود را در شرایط خاصی تست کنید.
- تست الگوریتمها روی دادههای سادهتر: برخی از الگوریتمها نیاز به دادههای ساده برای ارزیابی اولیه دارند.
- ایجاد دادههای با ویژگیهای خاص: شما میتوانید دادههایی با توزیعهای مشخص، تعداد کلاسها یا تعداد ویژگیهای خاص ایجاد کنید.
- پایداری در آموزش و تست: دادههای مصنوعی میتوانند به طور مکرر بازتولید شوند و این امکان مقایسه بهتر عملکرد الگوریتمها را فراهم میکند.
کتابخانه Sklearn پایتون یک تولید کننده دیتاست آزمایشی است که به شما کمک میکند تا مجموعه داده سفارشی خود را ایجاد کنید. استفاده از این کتابخانه قدرتمند سریع و بسیار آسان است. در ادامه انواع نمونههای ومثال های متنوعی از ایجاد مجموعه داده آزمایشی با Sklearn در پایتون آورده میشود. (برای همه روشها، باید sklearn.datasets.samples_generator را امپورت کنید.)
وارد کردن کتابخانهها دیتاست آماده
ابتدا، کتابخانههای موردنیاز را وارد میکنیم:
# importing libraries from sklearn.datasets import make_blobs # matplotlib for plotting from matplotlib import pyplot as plt from matplotlib import style
نمونه دیتاست های آماده کتابخانه Sklearn
در ادامه ایجاد مجموعه داده آزمایشی با Sklearn در پایتون با چند نمونه مهم و کاربردی از دیتاست های آماده پرکاربرد در Sklearn آشنا می شویم و نحوه پیاده سازی و کدنویسی آن ها تشریح میکنیم.
۱- دیتاست sklearn.datasets.make_blobs
# Creating Test DataSets using sklearn.datasets.make_blobs from sklearn.datasets import make_blobs from matplotlib import pyplot as plt from matplotlib import style style.use("fivethirtyeight") X, y = make_blobs(n_samples = 100, centers = 3, cluster_std = 1, n_features = 2) plt.scatter(X[:, 0], X[:, 1], s = 40, color = 'g') plt.xlabel("X") plt.ylabel("Y") plt.show() plt.clf()
خروجی:
۲- دیتاست sklearn.datasets.make_moon
# Creating Test DataSets using sklearn.datasets.make_moon from sklearn.datasets import make_moons from matplotlib import pyplot as plt from matplotlib import style X, y = make_moons(n_samples = 1000, noise = 0.1) plt.scatter(X[:, 0], X[:, 1], s = 40, color ='g') plt.xlabel("X") plt.ylabel("Y") plt.show() plt.clf()
خروجی:
۳- دیتاست sklearn.datasets.make_circle
# Creating Test DataSets using sklearn.datasets.make_circles from sklearn.datasets import make_circles from matplotlib import pyplot as plt from matplotlib import style style.use("fivethirtyeight") X, y = make_circles(n_samples = 100, noise = 0.02) plt.scatter(X[:, 0], X[:, 1], s = 40, color ='g') plt.xlabel("X") plt.ylabel("Y") plt.show() plt.clf()
خروجی:
Scikit-learn یک کتابخانه محبوب یادگیری ماشین برای زبان پایتون است که امکانات گستردهای از جمله تولید دادهها را فراهم میکند. برای ایجاد مجموعه دادههای تستی با استفاده از Sklearn، میتوانید از کد ههای ارائه شده استفاده کنید.
مثال کامل از ایجاد دیتاست تستی با Sklearn
در این مثال، مجموعه دادهای مصنوعی برای مسئله دستهبندی ایجاد خواهیم کرد. این مجموعه داده دارای دو ویژگی و سه کلاس است که به ما امکان میدهد دادهها را به صورت گرافیکی نمایش دهیم و رفتار الگوریتمهای یادگیری ماشین را روی آن بررسی کنیم.
وارد کردن کتابخانههای موردنیاز
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split
- NumPy: برای کار با آرایهها.
- Matplotlib: برای نمایش گرافیکی دادهها.
- make_classification: برای تولید دادههای مصنوعی دستهبندی.
- train_test_split: برای تقسیم دادهها به مجموعههای آموزش و آزمایش.
ایجاد دادهها با استفاده از make_classification
اکنون مجموعه داده مصنوعی را با پارامترهای زیر تولید میکنیم:
- تعداد نمونهها: ۱۰۰۰
- تعداد ویژگیها: ۲
- تعداد کلاسها: ۳
- نسبت نویز: ۰.۱
X, y = make_classification( n_samples=1000, # تعداد نمونهها n_features=2, # تعداد ویژگیها n_informative=2, # تعداد ویژگیهای مفید n_redundant=0, # ویژگیهای زائد n_classes=3, # تعداد کلاسها n_clusters_per_class=1, # تعداد خوشهها برای هر کلاس flip_y=0.1, # احتمال نویز class_sep=1.5, # جداپذیری کلاسها random_state=42 # ثابت نگه داشتن تصادفی بودن )
n_informative
: مشخص میکند چند ویژگی در تعیین کلاسها مؤثر هستند.flip_y
: نویز تصادفی که کلاس برخی نمونهها را تغییر میدهد.class_sep
: تعیین میکند که کلاسها چقدر از یکدیگر جدا باشند.
تقسیم دادهها به مجموعه آموزش و تست
دادهها را به دو بخش ۸۰% برای آموزش و ۲۰% برای آزمایش تقسیم میکنیم:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
test_size
: درصد دادههایی که به مجموعه آزمایش تعلق میگیرند.random_state
: برای ثابت نگهداشتن تقسیم دادهها.
نمایش دادهها
برای مشاهده دادههای تولید شده، میتوان از نمودار پراکندگی استفاده کرد:
plt.figure(figsize=(8, 6)) plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='viridis', edgecolor='k', s=50) plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('Synthetic Classification Data (Training Set)') plt.colorbar(label='Class') plt.show()
- خروجی تابع
make_classification
:X
: آرایهای با ابعاد n*m که شامل ویژگیهای نمونههاست.y
: آرایهای یکبعدی که کلاس هر نمونه را مشخص میکند.
- تجسم دادهها: استفاده از دو ویژگی در این مثال به ما کمک میکند دادهها را به صورت دوبعدی نمایش دهیم. برای مجموعه دادههایی با بیش از دو ویژگی، میتوان از تکنیکهای کاهش ابعاد مانند PCA استفاده کرد.
مزایای ایجاد مجموعه دادههای آزمایشی با Sklearn
- صرفهجویی در زمان: Sklearn به سرعت و به راحتی امکان تولید مجموعه دادههای آزمایشی را برای وظایف یادگیری ماشین فراهم میکند که نسبت به ایجاد دستی دادهها زمان کمتری میبرد.
- پایداری: مجموعه دادههای تولید شده توسط Sklearn پایدار و بازتولیدپذیر هستند که این امر به تضمین سازگاری در آزمایشها و نتایج کمک میکند.
- انعطافپذیری: Sklearn توابع متنوعی برای تولید مجموعه دادهها ارائه میدهد، از جمله توابعی برای طبقهبندی، رگرسیون، خوشهبندی و موارد دیگر، که این کتابخانه را به ابزاری منعطف برای تولید دادههای آزمایشی برای انواع وظایف یادگیری ماشین تبدیل میکند.
- کنترل پارامترهای داده: Sklearn به شما امکان میدهد تولید مجموعه دادهها را با تعیین پارامترهایی مانند تعداد نمونهها، تعداد ویژگیها و سطح نویز سفارشیسازی کنید که این موضوع کنترل بیشتری بر مجموعه دادههای آزمایشی ایجاد شده به شما میدهد.
معایب ایجاد مجموعه دادههای آزمایشی با Sklearn
- پیچیدگی محدود مجموعه داده: مجموعه دادههای تولید شده توسط Sklearn معمولاً ساده هستند و ممکن است پیچیدگی دادههای دنیای واقعی را بازتاب ندهند. بنابراین، ممکن است برای آزمایش عملکرد الگوریتمهای یادگیری ماشین روی دادههای پیچیده مناسب نباشند.
- کمبود تنوع: مجموعه دادههای Sklearn ممکن است تنوع دادههای دنیای واقعی را بازتاب ندهند که این امر میتواند قابلیت تعمیم مدلهای یادگیری ماشین شما را محدود کند.
- خطر بیشبرازش: اگر مجموعه دادههای آزمایشی بیش از حد شبیه مجموعه دادههای آموزشی تولید شوند، خطر بیشبرازش مدلهای یادگیری ماشین وجود دارد که میتواند به عملکرد ضعیف در دادههای جدید و دیدهنشده منجر شود.
نتیجه گیری
به طور کلی، Sklearn ابزاری مفید برای تولید سریع و کارآمد مجموعه دادههای آزمایشی ارائه میدهد، اما توجه به محدودیتها و معایب احتمالی استفاده از مجموعه دادههای مصنوعی برای آزمایش یادگیری ماشین مهم است. توصیه میشود تا حد امکان از مجموعه دادههای دنیای واقعی استفاده کنید تا بازنمایی دقیقتری از مسئلهای که در حال حل آن هستید داشته باشید.