آموزش / تست

از ویکی‌کد، دانشنامهٔ برنامه‌نویسی
پرش به ناوبری پرش به جستجو
Main Page Tutorial
Python-menu.png
موارد آموزشی
مدیریت فایل
یادگیری ماشین
۱شروع کار
۲میانگین، میانه، مُد
۳انحراف استاندارد
۴صدک
۵توزیع داده
۶توزیع داده نرمال
۷نمودار پراکندگی
۸رگرسیون خطی
۹رگرسیون چند جمله‌ای
۱۰رگرسیون چندگانه
۱۱مقیاس
۱۲آموزش / تست
۱۳درخت تصمیم
MySQL در پایتون
MongoDB در پایتون
مرجع پایتون
مرجع ماژول
چگونه در پایتون؟
مثال‌های پایتون

ارزیابی مدل خود

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

برای اندازه‌گیری اینکه مدل به اندازه کافی خوب است می‌توانیم از روشی به نام Train/Test استفاده کنیم.

Train/Test چیست؟

Train/Test متدی برای اندازه‌گیری دقت مدل است.

این روش Train/Test نامیده می‌شود زیرا شما داده‌های مجموعه را به دو بخش تقسیم می‌کنید: مجموعه آموزشی (به انگلیسی: training) و مجموعه تست.

۸۰٪ برای آموزش و ۲۰٪ برای تست.

با استفاده از داده‌های مجموعه training مدل را آموزش می‌دهید.

با استفاده از داده‌های مجموعه test مدل را تست می‌دهید

آموزش مدل یعنی ایجاد یک مدل.

تست مدل یعنی سنجش میزان دقت مدل.

شروع با یک مجموعه داده (به انگلیسی: Data Set)

با مجموعه داده‌ای که می‌خواهید تست کنید شروع کنید.

مجموعه داده‌های ما ۱۰۰ مشتری در یک فروشگاه و عادات خرید آنها را نشان می‌دهد.

مثال

1 import numpy
2 import matplotlib.pyplot as plt
3 numpy.random.seed(2)
4 
5 x = numpy.random.normal(3, 1, 100)
6 y = numpy.random.normal(150, 40, 100) / x
7 
8 plt.scatter(x, y)
9 plt.show()

نتیجه


مشاهدهٔ نتیجه


محور x تعداد دقایق قبل از خرید کردن را نشان می‌دهد.

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

تقسیم به Train/Test

مجموعه آموزشی باید انتخاب تصادفی ۸۰٪ از داده‌های اصلی باشد.

مجموعه آزمایش باید ۲۰٪ باقی مانده باشد.

1 train_x = x[:80]
2 train_y = y[:80]
3 
4 test_x = x[80:]
5 test_y = y[80:]

نمایش مجموعه آموزشی (به انگلیسی: Training Set)

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

مثال

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

نتیجه


مشاهدهٔ نتیجه


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

نمایش مجموعه آزمایشی (به انگلیسی: Test Set)

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

مثال

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

نتیجه

مجموعه تست مشابه مجموعه داده اصلی است:


مشاهدهٔ نتیجه


سازگاری با مجموعه داده

مجموعه داده چگونه به نظر می‌رسد؟ به نظر من بهترین راه حل یک رگرسیون چند جمله ای است، بنابراین اجازه دهید ما یک خط رگرسیون چند جمله ای ترسیم کنیم.

برای ترسیم خط در بین نقاط داده، ما از متد plot() در ماژول matplotlib استفاده می‌کنیم:

مثال

یک خط رگرسیون چندجمله‌ای در بین نقاط داده رسم می‌کند:

 1 import numpy
 2 import matplotlib.pyplot as plt
 3 numpy.random.seed(2)
 4 
 5 x = numpy.random.normal(3, 1, 100)
 6 y = numpy.random.normal(150, 40, 100) / x
 7 
 8 train_x = x[:80]
 9 train_y = y[:80]
10 
11 test_x = x[80:]
12 test_y = y[80:]
13 
14 mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
15 
16 myline = numpy.linspace(0, 6, 100)
17 
18 plt.scatter(train_x, train_y)
19 plt.plot(myline, mymodel(myline))
20 plt.show()

نتیجه


مشاهدهٔ نتیجه


نتیجه می‌تواند از پیشنهاد من از مجموعه داده‌های متناسب با رگرسیون چند جمله ای را طرفداری کند، اگرچه اگر سعی کنیم مقادیر خارج از مجموعه داده‌ها را پیش بینی کنیم، نتایج عجیبی به ما می‌دهد. به عنوان مثال: خط نشان می‌دهد که مشتری با گذراندن ۶ دقیقه در مغازه می‌تواند خریدی به ارزش ۲۰۰ دلار داشته باشد. این احتمالاً نشانه‌ای از Overfitting آن است.

اما درمورد امتیاز R-squared چطور؟ امتیاز R-squared نشانگر خوبی از چگونگی سازگاری مجموعه داده‌های من در مدل است.

R2

R2 را به یاد دارید، به آن R-squared نیز گفته می‌شود؟

R2 رابطه بین محور x و محور y را اندازه گیری می‌کند، و مقدار از ۰ تا ۱ متغیر است، که در آن ۰ به معنای عدم رابطه است و ۱ به معنای کاملاً مرتبط است.

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

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

مثال

داده‌های آموزشی من چقدر خوب با یک رگرسیون چند جمله ای سازگار است؟

 1 import numpy
 2 from sklearn.metrics import r2_score
 3 numpy.random.seed(2)
 4 
 5 x = numpy.random.normal(3, 1, 100)
 6 y = numpy.random.normal(150, 40, 100) / x
 7 
 8 train_x = x[:80]
 9 train_y = y[:80]
10 
11 test_x = x[80:]
12 test_y = y[80:]
13 
14 mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
15 
16 r2 = r2_score(train_y, mymodel(train_x))
17 
18 print(r2)


مشاهدهٔ نتیجه


توجه: نتیجه ۰٫۷۹۹ نشان می‌دهد که یک رابطه OK وجود دارد.

وارد کردن مجموعه تست

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

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

مثال

می‌خواهیم امتیاز R2 را هنگام استفاده از داده‌های تست بیابیم:

 1 import numpy
 2 from sklearn.metrics import r2_score
 3 numpy.random.seed(2)
 4 
 5 x = numpy.random.normal(3, 1, 100)
 6 y = numpy.random.normal(150, 40, 100) / x
 7 
 8 train_x = x[:80]
 9 train_y = y[:80]
10 
11 test_x = x[80:]
12 test_y = y[80:]
13 
14 mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
15 
16 r2 = r2_score(test_y, mymodel(test_x))
17 
18 print(r2)


مشاهدهٔ نتیجه


توجه: نتیجه ۰٫۸۰۹ نشان می‌دهد که مدل با مجموعه تست هم سازگار است، و ما اطمینان داریم که می‌توانیم از مدل برای پیش بینی مقادیر آینده استفاده کنیم.

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

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

مثال

اگر مشتری خریدار، ۵ دقیقه در فروشگاه بماند، چقدر پول خرج خواهد کرد؟

print(mymodel(5))


مشاهدهٔ نتیجه


این مثال پیش بینی کرد که مشتری ۲۲٫۸۸ دلار خرج کند، همانطور که به نظر می‌رسد با نمودار مطابقت دارد:


منابع آموزشی