Python – آموزش/آزمون (Train/Test)

آموزش/آزمون (Train/Test)

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

آموزش/آزمون چیست؟ آموزش/آزمون روشی است برای اندازه‌گیری دقت مدل. این روش به دلیل تقسیم داده‌ها به دو مجموعه: مجموعه آموزشی و مجموعه آزمون، به این نام معروف است.

  • 80% برای آموزش: مدل با استفاده از داده‌های آموزشی ساخته می‌شود.
  • 20% برای آزمون: مدل با استفاده از داده‌های آزمون تست می‌شود.

آموزش مدل به معنای ساخت مدل است، و آزمون مدل به معنای تست دقت مدل است.

شروع با یک داده

با مجموعه داده‌ای که می‌خواهید تست کنید شروع کنید. به عنوان مثال، داده‌ای که رفتار خرید 100 مشتری را در یک فروشگاه نشان می‌دهد.

مثال:

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

plt.scatter(x, y)
plt.show()

نتیجه: محور x نشان‌دهنده تعداد دقیقه‌ها قبل از خرید است و محور y نشان‌دهنده مقدار پول خرج شده در خرید است.

تقسیم به آموزش/آزمون

مجموعه آموزشی باید 80% از داده‌های اصلی را به صورت تصادفی انتخاب کند. مجموعه آزمون باید 20% باقی‌مانده باشد.

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

نمایش مجموعه آموزشی

برای نمایش مجموعه آموزشی، می‌توانید همان نمودار پراکندگی را با مجموعه آموزشی نمایش دهید.

مثال:

plt.scatter(train_x, train_y)
plt.show()

نتیجه: شبیه مجموعه داده اصلی به نظر می‌رسد، بنابراین انتخاب مناسبی به نظر می‌رسد.

نمایش مجموعه آزمون

برای اطمینان از اینکه مجموعه آزمون کاملاً متفاوت نیست، می‌توانیم نگاهی به مجموعه آزمون بیندازیم.

مثال:

plt.scatter(test_x, test_y)
plt.show()

نتیجه: مجموعه آزمون نیز شبیه داده‌های اصلی به نظر می‌رسد.

برازش مجموعه داده

ما می‌خواهیم ببینیم مجموعه داده چگونه به مدل‌های مختلف متناسب است. به عنوان مثال، ممکن است متناسب‌ترین مدل برای داده‌های ما یک رگرسیون چندجمله‌ای باشد.

مثال:

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))

myline = numpy.linspace(0, 6, 100)

plt.scatter(train_x, train_y)
plt.plot(myline, mymodel(myline))
plt.show()

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

معیار R²

معیار R² یا ضریب تعیین، رابطه بین محور x و محور y را اندازه‌گیری می‌کند و مقدار آن از 0 تا 1 متغیر است، که 0 به معنای عدم رابطه و 1 به معنای رابطه کامل است.

ماژول sklearn متدی به نام r2_score() دارد که به ما در یافتن این رابطه کمک می‌کند.

مثال:

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))

r2 = r2_score(train_y, mymodel(train_x))

print(r2)

نتیجه: مقدار 0.799 نشان می‌دهد که رابطه بین داده‌های آموزشی و مدل خوب است.

آزمون با مجموعه آزمون

حالا که مدل ما با داده‌های آموزشی خوب عمل کرده است، می‌خواهیم مدل را با داده‌های آزمون نیز تست کنیم تا ببینیم آیا نتایج مشابهی به دست می‌آید.

مثال:

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))

r2 = r2_score(test_y, mymodel(test_x))

print(r2)

نتیجه: مقدار 0.809 نشان می‌دهد که مدل با مجموعه آزمون نیز خوب تطابق دارد و می‌توانیم از مدل برای پیش‌بینی مقادیر آینده استفاده کنیم.

پیش‌بینی مقادیر

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

مثال:

برای پیش‌بینی مقدار پولی که مشتری با اقامت 5 دقیقه‌ای در فروشگاه خرج می‌کند:

print(mymodel(5))

نتیجه: پیش‌بینی کرده‌ایم که مشتری 22.88 دلار خرج می‌کند، که با نمودار همخوانی دارد.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.