مكتبة scikit-learn – لمحة سريعة عن مكتبة البايثون لتعليم الآلة

1 5٬546

مكتبة scikit-learn من أشهر مكتبات البايثون المختصة بعلم البيانات وتعليم الآلة. أهلا بكم في المقال الخامس من سلسلة مقالات “مكتبات علم البيانات بالبايثون” والذي سنتناول فيه مكتبة تعليم الألة المشهورة scikit-learn بشكل موجز.

للإطلاع على المقالات السابقة:

مكتبات علم البيانات وتعليم الألة في البايثون – 5 مكتبات مشهورة

مكتبة Numpy – الخطوة الأولى في علم البيانات بلغة البايثون

مكتبة Pandas – الخطوة الثانية في علم البيانات بلغة البايثون – الجزء الأول

مكتبة Pandas – الخطوة الثانية في علم البيانات بلغة البايثون – الجزء الثاني

مكتبة Matplotlib – الخطوة الثالثة في علم البيانات بالبايثون

مكتبة scikit-learn من مكتبات تعليم الالة بلغة البايثون، وتحتوي على العديد من الخوارزميات والطرق المستخدمة في مجال تعليم الالة مثل التصنيف Classification، العنقدة Clustering والانحدار Regression بالإضافة لاستخدامها في مرحلة تجهيز البيانات وتقييم النماذج، وتم بناؤها بالاعتماد على مكتبات Scipy، Numpy و Matplotlib والعديد من المكتبات الأخرى.

انطلقت مكتبة scikit-learn في عام 2007 خلال برنامج Google Summer of Code على يد مجموعة من المتطوعين، وتأتي في الترتيب الثاني في موقع github الشهير في قائمة مكتبات تعليم الالة، وتُعتبر مدخلاً سهلاً لكل من يرغب في تعلم وتطبيق تعليم الالة وعلم البيانات.

تُركز مكتبة scikit-learn على نمذجة البيانات ولا تركز على طريق تحميل البيانات والتعامل معها وتلخيصها والذي هو دور مكتبتي Pandas  و Numpy بشكل رئيسي.

سنشرح في هذا المقال كيفية تثبيت المكتبة وبناء نموذج Linear Regression بسيط، وسنركز على كيفية كتابة الشيفرة واستخدام المكتبة ولن نتطرق للجانب النظري لهذا النموذج، وبذلك فأنا أفترض وجود خلفية مسبقة عن نماذج وخوارزميات تعليم الالة.

تثبيت مكتبة scikit-learn

كما ذكرت في المقدمة، فإن مكتبة scikit-learn تعتمد بشكل أساسي على مكتبتي Numpy و Scipy لذلك لابد من تثبيت هاتين المكتبتين:

pip install numpy

pip install scipy

pip install scikit-learn

للتأكد من تثبيت المكتبة، نقوم بتشغيل البايثون من الطرفية ونستورد المكتبة ونتأكد من رقم الإصدار الخاص بها كالتالي:

>> import sklearn

>> sklearn.__version__

'0.19.1'

تطبيق عملي

لشرح كيفيك استخدام مكتبة scikit-learn يجب علينا العمل على حل مشكلة باستخدام إحدى الطرق الموجودة في تعليم الالة، وسنختار لذلك أبسط هذه الطرق وأوضحها وهي الانحدار الخطي Linear Regression والذي يهتم بإيجاد قيمة مستمرة Continuous لمتغير بناءً على قيم متغير واحد أو مجموعة من المتغيرات التي تُمثل تُسمى Features .

لنفترض جدلا أننا نريد بناء نموذج يتوقع ثمن سيارات مستخدمة، وأنه يوجد لدينا البيانات التالية:

[spbtbl_sc id=3]

من جانب تعليم الألة، تُعتبر البيانات السابقة بيانات تدريب Training Data ويتم استخدامها في بناء النموذج Model الذي سيقوم بعملية التنبؤ Prediction، وكلما زاد عدد سجلات بيانات التدريب، كلما زادت دقة النموذج.

لنقوم في البداية برسم البيانات السابقة في شكل بياني باستخدام مكتبة Matplotlib:

import numpy as np

import matplotlib.pyplot as plt

x = np.array([[1980],[1983],[1984],[1990],[1994]])

y = np.array([[1500],[1580],[1850],[3520],[4000]])

plt.scatter(x ,y)

plt.title("Used Cars Prices", fontsize=24)

plt.xlabel("X axes", fontsize=14)

plt.ylabel("Y axes", fontsize=14)

plt.grid(True)

plt.show()

download

من خلال الشكل السابق يتضح لنا وجود علاقة بين ثمن السيارة وسنة التصنيع، حيث كلما كانت السيارة أحدث كلما زاد ثمنها.

بناء النموذج

يمكننا الان استخدام مكتبة scikit-learn في بناء نموذج انحدار خطي بالطريقة التالية:

from sklearn.linear_model import LinearRegression

model = LinearRegression()

model.fit(x,y)

في البداية نقوم باستيراد الفئة LineraRegression من وحدة linear_model من مكتبة sklearn ومن ثم نقوم بتعريف متغير باسم model من نفس الفئة والذي سيمثل نموذج انحدار خطي.

أغلب الخوارزميات في مكتبة scikit-learn تحتوي على تطبيق Implementation للوظيفتين fit و predict، حيث أن الوظيفة fit تقوم ببناء النموذج عبر تعليمه باستخدام بيانات التدريب، والوظيفة predict تقوم بتقدير estimate قيمة الهدف Target الخاص بسجل بيانات جديد، فمثلاً لو أردنا معرفة ثمن سيارة موديل 1987 نستخدم الوظيفة predict بالشكل التالي:

model.predict([1987])

وستكون النتيجة مقاربة للقيمة 2652.4، وهذا يعني أن سعر السيارة المُصنعة عام 1987 تساوي تقريبا 2652.4 دولار وفق بيانات التدريب التي تعلم من النموذج.

بعد أن قمنا ببناء النموذج من خلال بيانات وسجلات سابقة، لابد من التفكير بمدى صحة ودقة هذا النموذج، وهذا الأمر يندرج تحت عنوان عام في تعليم الالة يُسمى تقييم النموذج Model Evaluation.

تُقدم مكتبة scikit-learn ثلاثة طرق لتقييم النماذج بشكل عام وهي:

  • استخدام الوظيفة score التابعة للنموذج.
  • استخدام Cross Validation عبر استخدام وظائف مثل cross_val_score.
  • استخدام Metric functions عبر الوحدة المسماة metrics.

سنتحدث عن وظيفة score، وبحكم أن المثال الموجود في هذا المقال بسيط، فلن نستطيع تجربة النوعين الباقيين وسنتركهم لمقالات متقدمة في المستقبل ان شاء الله.

وظيفة score في مكتبة scikit-learn

تُعيد وظيفة score في حالة Linear Regression قيمة r-squared والتي تُعبر عن مدى ملائمة النموذج في تقدير وتنبؤ قيمة الهدف، وتعيد الوظيفة قيمة أقصاها 1 والتي تعني أن النموذج دقيق ويتنبأ جميع القيم بشكل صحيح، وكلما قلت قيمة الوظيفة تقل دقة النموذج.

من الخطأ ان نقوم باختبار دقة النموذج باستخدام نفس بيانات التدريب المستخدمة في بناءه، لذلك، لاستخدام الوظيفة score، نحتاج أن يكون لدينا مجموعة من البيانات الاختبارية (Test Data) والتي هي عبارة عن بيانات وسجلات من نفس سياق المشكلة التي نعمل على حلها وتحتوي على قيمة الهدف لكل سجل ولم تُستخدم في تعليم النموذج.

الشيفرة التالية توضح كيفية استخدام الوظيفة مع النموذج model في مثالنا مع بيانات اختبارية:

x_test = np.array([[1975],[1985],[1988],[2001],[1993]])

y_test = np.array([[1200],[1630],[1750],[5520],[3500]])

model.score(x_test,y_test)

والنتيجة مقاربة للقيمة 0.7898 وهذه هي قيمة r-squared للنموذج.

في التجارب العملية الواقعية، سيكون لديك بيانات أكثر بكثير مما هو موجود في مثالنا البسيط، ومن المتعارف عليه في علم البيانات وتعليم الالة، أنه يتم تقسيم البيانات لجزأين بنسة 70% كبيانات تدريب، و 30% كبيانات تقييم واختبار. تقدم لك مكتبة scikit-learn وظيفة train_test_split والتي تقوم بتقسيم البيانات بشكل عشوائي الى بيانات تدريب وبيانات تقييم واختبار وفق النسبة التي تُحددها.

يمكننا من خلال مكتبة scikit-learn أيضًا بناء نماذج أخرى مثل Decision Tree، k-nearst، SVM والعديد من النماذج الأخرى وسنتحدث عنها في مقالات قادمة إن شاء الله.

مما سبق، يتضح لنا أن الموضوع الأساسي لمكتبة scikit-learn هو بناء نماذج تعليم الألة وتقييمها بالإضافة الى العديد من المهام الأخرى المتعلقة. خلال هذا المقال وضحنا أهمية مكتبة scikit-learn وكيفية تثبيتها وما هي المكتبات المهمة التي تعتمد عليها، كما وتحدثنا عن وظيفة fit ووظيفة predict وما هي الطرق الرئيسية لاختبار دقة النموذج وما دور وظيفة score الخاصة بالنموذج.

 

1 Comment
  1. محمود فتحى says

    ممتع

اترك ردًا

Your email address will not be published.