التعلم والاختبار في التعلم الآلي

تقييم النموذج

في علم الوعاء، نحن ننشئ نماذجًا لتنبؤ نتائج بعض الحوادث، مثل في الفصل السابق عندما عرفنا وزن السيارة ومقدار توربو، تنبأت بالكمية المحددة من ثاني أكسيد الكربون التي يطلقها السيارة.

للمعرفة ما إذا كان النموذج جيدًا بشكل كافٍ، يمكننا استخدام طريقة تُدعى تدريب/اختبار.

ما هو تدريب/اختبار

تدريب/اختبار هو طريقة لقياس دقة النموذج.

السبب في تسميتها بـ تدريب/اختبار هو أننا نقسم مجموعة البيانات إلى مجموعتين: مجموعة تدريب ومجموعة اختبار.

80٪ للتدريب و20٪ للاختبار.

يمكنك استخدام مجموعة التدريب لتدريب النموذج.

يمكنك استخدام مجموعة الاختبار لتقييم النموذج.

تدريب النموذج يعني إنشاء النموذج.

اختبار النموذج يعني اختبار دقة النموذج.

من بيانات التدريب.

من بيانات التدريب التي سيتم اختبارها.

مجموعة بياناتنا تظهر 100 عميل في المتجر وكيفية شرائهم.

مثال

من مكتبة numpy import
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()

النتيجة:

يبدو مجموعة الاختبار مثل البيانات الأصلية:


تشغيل المثال

ترجيح البيانات

كيف تبدو بيانات التجميع؟ أعتقد أن الترجيح البوليني هو الأنسب للترجيح، لذا دعونا رسم خط الترجيح البوليني.

لرسم خط عبر نقاط البيانات، نستخدم مكتبة matplotlib: plott() الطريقة:

مثال

رسم خط الترجيح البوليني عبر نقاط البيانات:

من مكتبة numpy import
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()

النتيجة:


تشغيل المثال

يمكن أن يدعم هذا النتيجة التي نقدمها لفيتناس بيانات التجميع باستخدام الترجيح البوليني، حتى لو حاولنا التنبؤ بالقيم خارج بيانات التجميع قد يسبب لنا بعض النتائج الغريبة. على سبيل المثال: يظهر هذا السطر أن عميلًا يقضي 6 دقيقة في المتجر سيكمل عملية شراء بقيمة 200. قد يكون هذا علامة على التدريب الزائد.

لكن ماذا عن score R-squared؟ R-squared score يشير بشكل جيد إلى مدى توافق بيانات مجموعتي البيانات مع النموذج.

R2

هل تتذكر R2، المعروفة أيضًا برقم مربع R (R-squared)؟

يقيّم علاقة المحور x والمحور y، ويتراوح بين 0 و1، حيث يمثل 0 عدم العلاقة، بينما يمثل 1 العلاقة الكاملة.

يحتوي مكتبة sklearn على اسم rs_score() الطريقة، التي ستساعدنا في العثور على هذه العلاقة.

في هذا المكان، سنقيس وقت وجود العملاء في المتجر مع المبلغ الذي ينفقونه.

مثال

كيف يبدو توافق بيانات التدريب في الترجيح البوليني؟

من مكتبة numpy import
من مكتبة 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 تظهر علاقة جيدة.

إدخال مجموعة الاختبار

الآن، على الأقل في بيانات التدريب، لقد قمنا بإنشاء نموذج جيد.

ثم، يجب علينا استخدام بيانات الاختبار لاختبار النموذج لتحديد ما إذا كانت تقدم نفس النتائج.

مثال

دعونا نحدد معدل R2 عند استخدام بيانات الاختبار:}

من مكتبة numpy import
من مكتبة 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 دولارًا، مما يبدو متناسبًا مع الرسم البياني: