المزيد من مشاريع تعلم الآلة.....تعلم الآلةمشاريع تعلم الآلة

مشروعك الأول للتعلم الآلي في بايثون خطوة بخطوة

اقرأ في هذا المقال
  • كيف تبدأ التعلم الآلي في بايثون؟
  • يحتاج المبتدئون إلى مشروع صغير شامل
  • hello world للتعلم الآلي
  • تعلم الآلة في بايثون: تعليمي خطوة بخطوة
  • 1. تنزيل وتثبيت وبدء Python SciPy
  • 2. تحميل البيانات
  • 3. تلخيص مجموعة البيانات
  • 4. رسم البيانات
  • 5. تقييم بعض الخوارزميات
  • 6. التنبؤات
  • يمكنك تعلم الآلة في بايثون
  • الملخص

هل تريد تعلم الآلة باستخدام بايثون، لكنك تواجه مشكلة في البدء؟

في هذا المنشور، ستكمل مشروعك الأول للتعلم الآلي باستخدام بايثون.

في هذا البرنامج التعليمي خطوة بخطوة سوف:

  1. نقوم بتنزيل Python SciPy وتثبيته واحصل على الحزمة الأكثر فائدة للتعلم الآلي في بايثون.
  2. نقوم بتحميل مجموعة بيانات وافهم هيكلها باستخدام الملخصات الإحصائية ورسم البيانات.
  3. نقوم بإنشاء 6 نماذج للتعلم الآلي، واختيار الأفضل وبناء الثقة في أن الدقة معتمدة.

إذا كنت مبتدئًا في تعلم الآلة وتتطلع إلى البدء أخيرًا في استخدام بايثون، فقد تم تصميم هذا البرنامج التعليمي من أجلك.

كيف تبدأ التعلم الآلي في بايثون؟

أفضل طريقة لتعلم التعلم الآلي هي من خلال تصميم واستكمال المشاريع الصغيرة.

يمكن أن تكون لغة بايثون مخيفة عند البدء.

بايثون هي لغة مفسرة شائعة وقوية. على عكس R، فإن بايثون هي لغة ومنصة كاملة يمكنك استخدامها للبحث والتطوير وتطوير أنظمة الإنتاج.

هناك أيضًا الكثير من الوحدات النمطية والمكتبات للاختيار من بينها، مما يوفر طرقًا متعددة للقيام بكل مهمة. يمكن أن تشعر بالإرهاق.

أفضل طريقة لبدء استخدام بايثون للتعلم الآلي هي إكمال مشروع.

  • سيجبرك على تثبيت وبدء مترجم بايثون (على الأقل).
  • سوف يمنحك نظرة عامة على كيفية تنفيذ مشروع صغير.
  • سيمنحك هذا الثقة، وربما تستمر في مشاريعك الصغيرة.

يحتاج المبتدئون إلى مشروع صغير شامل

الكتب والدورات محبطة. يعطونك الكثير من الوصفات والمقتطفات، لكنك لن ترى أبدًا كيف تتلاءم جميعًا معًا.

عندما تقوم بتطبيق التعلم الآلي على مجموعات البيانات الخاصة بك، فأنت تعمل في مشروع.

قد لا يكون مشروع التعلم الآلي خطيًا، ولكن يحتوي على عدد من الخطوات المعروفة جيدًا:

  • تحديد المشكلة Define Problem.
  • تحضير البيانات Prepare Data.
  • تقييم الخوارزميات Evaluate Algorithms.
  • تحسين النتائج Improve Results.
  • تقديم النتائج Present Results.

أفضل طريقة للتصالح مع نظام أساسي أو أداة جديدة هي العمل من خلال مشروع التعلم الآلي من البداية إلى النهاية وتغطية الخطوات الرئيسية. أي من تحميل البيانات وتلخيص البيانات وتقييم الخوارزميات وعمل بعض التنبؤات.

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

hello world للتعلم الآلي

أفضل مشروع صغير للبدء به على أداة جديدة هو تصنيف زهور iris (مثل  the iris dataset).

هذا مشروع جيد لأنه مفهوم جيدًا.

  • السمات رقمية لذا عليك معرفة كيفية تحميل البيانات ومعالجتها.
  • إنها مشكلة تصنيف، مما يسمح لك بالتدرب على نوع أسهل من خوارزمية التعلم الخاضع للإشراف.
  • إنها مشكلة تصنيف متعددة الفئات (متعددة الأسماء) قد تتطلب بعض المعالجة المتخصصة.
  • يحتوي فقط على 4 سمات و150 صفًا، مما يعني أنه صغير ويسهل وضعه في الذاكرة (وشاشة أو صفحة A4).
  • جميع السمات الرقمية موجودة في نفس الوحدات ونفس المقياس، ولا تتطلب أي تحجيم أو تحويلات خاصة للبدء.

لنبدأ بمشروع hello world للتعلم الآلي في بايثون.

تعلم الآلة في بايثون: تعليمي خطوة بخطوة

في هذا القسم، سنعمل من خلال مشروع صغير للتعلم الآلي من البداية إلى النهاية.

فيما يلي نظرة عامة على ما سنقوم بتغطيته:

  1. تثبيت منصة بايثون وSciPy.
  2. تحميل مجموعة البيانات.
  3. تلخيص مجموعة البيانات.
  4. رسم مجموعة البيانات.
  5. تقييم بعض الخوارزميات.
  6. عمل بعض التوقعات.

خذ وقتك. اعمل من خلال كل خطوة.

حاول كتابة الأوامر بنفسك أو نسخ الأوامر ولصقها لتسريع الأمور.

1. تنزيل وتثبيت وبدء Python SciPy

قم بتثبيت نظامي بايثون وSciPy على نظامك إذا لم يكن مثبتًا بالفعل.

لا أريد أن أغطي هذا بتفصيل كبير، لأن الآخرين فعلوا ذلك بالفعل. هذا بالفعل واضح ومباشر، خاصة إذا كنت مطورًا.

1.1 تثبيت مكتبات SciPy

يفترض هذا البرنامج التعليمي إصدار Python 2.7 أو 3.6+.

هناك 5 مكتبات رئيسية ستحتاج إلى تثبيتها. فيما يلي قائمة بمكتبات Python SciPy المطلوبة لهذا البرنامج التعليمي:

  • scipy
  • numpy
  • matplotlib
  • pandas
  • sklearn

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

توفر صفحة التثبيت scipy إرشادات ممتازة لتثبيت المكتبات المذكورة أعلاه على العديد من الأنظمة الأساسية المختلفة، مثل Linux وmac OS X وWindows. إذا كانت لديك أية شكوك أو أسئلة، ارجع إلى هذا الدليل، فقد اتبعه آلاف الأشخاص.

في نظام التشغيل Mac OS X، يمكنك استخدام macports لتثبيت Python 3.6 وهذه المكتبات. لمزيد من المعلومات حول macports ، انظر الصفحة الرئيسية.

على Linux، يمكنك استخدام مدير الحزم الخاص بك، مثل yum على Fedora لتثبيت RPMs.

إذا كنت تستخدم نظام Windows أو لم تكن واثقًا، فإنني أوصي بتثبيت الإصدار المجاني من Anaconda الذي يتضمن كل ما تحتاجه.

ملاحظة: يفترض هذا البرنامج التعليمي أن لديك الإصدار 0.20 من scikit-Learn مثبتًا أو إصدارًا أعلى.

هل تريد المزيد من المساعدة؟ شاهد أحد هذه الدروس:

2.1 ابدأ بايثون وتحقق من الإصدارات

إنها لفكرة جيدة أن تتأكد من أن بيئة بايثون الخاصة بك قد تم تثبيتها بنجاح وأنها تعمل كما هو متوقع.

سيساعدك السكريبت أدناه على اختبار بيئتك. يقوم باستيراد كل مكتبة مطلوبة في هذا البرنامج التعليمي ويطبع الإصدار.

افتح سطر أوامر وابدأ تشغيل مترجم Python:

python

أوصي بالعمل مباشرة في المترجم الفوري أو كتابة السكريبتات الخاصة بك وتشغيلها في سطر الأوامر بدلاً من المحررين الكبار وIDEs. اجعل الأمور بسيطة وركز على التعلم الآلي وليس سلسلة الأدوات.

اكتب أو انسخ وألصق السكريبت التالي:

</p>
# Check the versions of libraries
 # Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__)(

<p>

 هذا هو الناتج الذي أحصل عليه على التيرميتال لـ OS X الخاصة بي:

</p>
Python: 3.6.11 (default, Jun 29 2020, 13:22:26) 
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)]
scipy: 1.5.2
numpy: 1.19.1
matplotlib: 3.3.0
pandas: 1.1.0
sklearn: 0.23.2

<p>

قارن الناتج أعلاه بإصداراتك.

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

إذا تلقيت خطأ، توقف. حان الوقت لإصلاحه.

إذا لم تتمكن من تشغيل السكريبت أعلاه بشكل نظيف، فلن تتمكن من إكمال هذا البرنامج التعليمي.

أفضل نصيحتي هي البحث في Google عن رسالة الخطأ أو نشر سؤال على Stack Exchange.

2. تحميل البيانات

سنستخدم مجموعة بيانات زهور iris. مجموعة البيانات هذه مشهورة لأنها تُستخدم كمجموعة بيانات “hello world” في التعلم الآلي والإحصاءات من قِبل الجميع تقريبًا.

تحتوي مجموعة البيانات على 150 ملاحظة لزهور iris. هناك أربعة أعمدة لقياسات الزهور بالسنتيمتر. العمود الخامس هو نوع الزهرة التي تمت ملاحظتها. تنتمي جميع الزهور التي تمت ملاحظتها إلى واحد من ثلاثة أنواع.

يمكنك معرفة المزيد حول مجموعة البيانات هذه على ويكيبيديا.

في هذه الخطوة، سنقوم بتحميل بيانات iris من عنوان URL لملف CSV.

1.2 استيراد المكتبات

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

</p>
# Load libraries
from pandas import read_csv
from pandas.plotting import scatter_matrix
from matplotlib import pyplot
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
...

<p>

يجب أن يتم تحميل كل شيء بدون أخطاء. إذا كان لديك خطأ، توقف. أنت بحاجة إلى بيئة عمل SciPy قبل المتابعة. راجع النصيحة أعلاه حول إعداد بيئتك.

2.2 تحميل مجموعة البيانات

يمكننا تحميل البيانات مباشرة من مستودع UCI Machine Learning.

نحن نستخدم pandas لتحميل البيانات. سنستخدم أيضًا pandas بعد ذلك لاستكشاف البيانات مع كل من الإحصاءات الوصفية ورسم البيانات.

لاحظ أننا نحدد أسماء كل عمود عند تحميل البيانات. سيساعد هذا لاحقًا عندما نستكشف البيانات.

</p>
...
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names(

<p>

يجب تحميل مجموعة البيانات دون وقوع حوادث.

إذا كانت لديك مشكلات في الشبكة، فيمكنك تنزيل ملف iris.csv إلى دليل العمل الخاص بك وتحميله باستخدام نفس الطريقة، وتغيير عنوان URL إلى اسم الملف المحلي.

3. تلخيص مجموعة البيانات

حان الوقت الآن لإلقاء نظرة على البيانات.

في هذه الخطوة، سنلقي نظرة على البيانات بعدة طرق مختلفة:

  1. أبعاد مجموعة البيانات.
  2. ألق نظرة خاطفة على البيانات نفسها.
  3. ملخص إحصائي لجميع الميزات.
  4. تفصيل البيانات حسب متغير الفئة.

لا تقلق، فكل نظرة على البيانات هي أمر واحد. هذه أوامر مفيدة يمكنك استخدامها مرارًا وتكرارًا في المشاريع المستقبلية.

1.3 أبعاد مجموعة البيانات

يمكننا الحصول على فكرة سريعة عن عدد الحالات (الصفوف) وعدد السمات (الأعمدة) التي تحتوي عليها البيانات مع خاصية الشكل.

</p>
...
# shape
print(dataset.shape(

<p>

يجب أن تشاهد 150 حالة و5 سمات:

</p>
(150, 5)
<p>

2.3 نظرة خاطفة على البيانات

إنها أيضًا فكرة جيدة دائمًا أن تراقب بياناتك.

</p>
...
# head
print(dataset.head(20)(

<p>

يجب أن تشاهد أول 20 صفاً من البيانات:

3.3 ملخص إحصائي

يمكننا الآن إلقاء نظرة على ملخص لكل سمة.

يتضمن هذا العدد والمتوسط والقيم الدنيا والحد الأقصى بالإضافة إلى بعض النسب المئوية.

</p>
...
# descriptions
print(dataset.describe()(

<p>

4.3 توزيعات الفئات

دعنا الآن نلقي نظرة على عدد الأمثلة (الصفوف) التي تنتمي إلى كل فئة. يمكننا اعتبار هذا عددًا مطلقًا.

</p>
...
# class distribution
print(dataset.groupby('class').size()(

<p>

يمكننا أن نرى أن كل فئة لديها نفس العدد من المثيلات (50 أو 33٪ من مجموعة البيانات).

</p>
class
Iris-setosa        50
Iris-versicolor    50
Iris-virginica     50

<p>

5.3 مثال كامل

كمرجع، يمكننا ربط جميع العناصر السابقة معًا في نص واحد.

المثال الكامل مدرج أدناه:

</p>
# summarize the data
from pandas import read_csv
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# shape
print(dataset.shape)
# head
print(dataset.head(20))
# descriptions
print(dataset.describe())
# class distribution
print(dataset.groupby('class').size()(

<p>

4. رسم البيانات

لدينا الآن فكرة أساسية عن البيانات. نحن بحاجة إلى توسيع ذلك ببعض التمثيل المرئي.

سنلقي نظرة على نوعين من التمثيل المرئي:

  1. المخططات أحادية المتغير Univariate plots لفهم كل سمة بشكل أفضل.
  2. المخططات متعددة المتغيرات Multivariate plots لفهم العلاقات بين السمات بشكل أفضل.

1.4 المخططات أحادية المتغير

نبدأ ببعض المخططات أحادية المتغير، أي قطع كل متغير فردي.

نظرًا لأن متغيرات الإدخال رقمية، يمكننا إنشاء مخططات صندوقية لكل منها.

</p>
...
# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
pyplot.show((

<p>

يعطينا هذا فكرة أوضح عن توزيع السمات المدخلة:

يمكننا أيضًا إنشاء هيستوكرام لكل متغير إدخال للحصول على فكرة عن التوزيع.

</p>
...
# histograms
dataset.hist()
pyplot.show()

<p>

يبدو أن اثنين من متغيرات الإدخال لهما توزيع غاوسي. من المفيد ملاحظة ذلك حيث يمكننا استخدام الخوارزميات التي يمكنها استغلال هذا الافتراض.

2.4 المخططات متعددة المتغيرات

الآن يمكننا النظر إلى التفاعلات بين المتغيرات.

أولاً، دعنا نلقي نظرة على المخططات المبعثرة scatterplots لجميع أزواج السمات. يمكن أن يكون هذا مفيدًا في تحديد العلاقات المنظمة بين متغيرات الإدخال.

</p>
...
# scatter plot matrix
scatter_matrix(dataset)
pyplot.show()

<p>

لاحظ التجميع القطري لبعض أزواج السمات. هذا يشير إلى وجود ارتباط كبير وعلاقة يمكن التنبؤ بها.

3.4 مثال كامل

كمرجع، يمكننا ربط جميع العناصر السابقة معًا في نص واحد.

المثال الكامل مدرج أدناه:

</p>
# visualize the data
from pandas import read_csv
from pandas.plotting import scatter_matrix
from matplotlib import pyplot
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
pyplot.show()
# histograms
dataset.hist()
pyplot.show()
# scatter plot matrix
scatter_matrix(dataset)
pyplot.show((

<p>

5. تقييم بعض الخوارزميات

حان الوقت الآن لإنشاء بعض نماذج البيانات وتقدير دقتها على البيانات غير المرئية.

إليك ما سنقوم بتغطيته في هذه الخطوة:

  1. افصل مجموعة بيانات التحقق.
  2. قم بإعداد اختبار تسخير test harness لاستخدام التحقق المتقاطع بمقدار 10 أضعاف 10-fold cross validation.
  3. بناء نماذج مختلفة متعددة للتنبؤ بالأنواع من قياسات الزهور.
  4. حدد أفضل موديل.

1.5 إنشاء مجموعة بيانات التحقق من الصحة

نحتاج أن نعرف أن النموذج الذي أنشأناه جيد.

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

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

سنقسم مجموعة البيانات المحملة إلى مجموعتين، 80٪ منها سنستخدمها للتدريب والتقييم والاختيار من بين نماذجنا، و20٪ سنحجمها كمجموعة بيانات للتحقق.

</p>
...
# Split-out validation dataset
array = dataset.values
X = array[:,0:4]
y = array[:,4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1)

<p>

لديك الآن بيانات تدريب في X_train وY_train لإعداد النماذج ومجموعات X_validation و Y_validation يمكننا استخدامها لاحقًا.

لاحظ أننا استخدمنا شريحة بايثون لتحديد الأعمدة في مصفوفة NumPy. إذا كان هذا جديدًا بالنسبة لك، فقد ترغب في التحقق من هذا المنشور:

2.5 اختبار تسخير Test Harness

سنستخدم 10-fold cross validation لتقدير دقة النموذج.

سيؤدي هذا إلى تقسيم مجموعة البيانات الخاصة بنا إلى 10 أجزاء، والتدريب على 9 واختبار على 1 والتكرار لجميع مجموعات تقسيمات التدريب-الاختبار.

يعني الطبقي أن كل طية أو تقسيم لمجموعة البيانات ستهدف إلى الحصول على نفس توزيع المثال حسب الفئة كما هو موجود في مجموعة بيانات التدريب بأكملها.

لمزيد من المعلومات حول تقنية k-fold cross-validation، راجع البرنامج التعليمي:

قمنا بتعيين البذرة العشوائية عبر وسيطة random_state على رقم ثابت لضمان تقييم كل خوارزمية على نفس الانقسامات لمجموعة بيانات التدريب.

لا يهم البذور العشوائية المحددة، تعرف على المزيد حول مولدات الأرقام العشوائية الزائفة هنا:

نحن نستخدم مقياس “الدقة accuracy ” لتقييم النماذج.

هذه نسبة من عدد الحالات التي تم التنبؤ بها بشكل صحيح مقسومًا على العدد الإجمالي للمثيلات في مجموعة البيانات مضروبًا في 100 لإعطاء نسبة مئوية (على سبيل المثال دقة 95٪). سنستخدم متغير scoring عند تشغيل بناء وتقييم كل نموذج بعد ذلك.

3.5 بناء النماذج

لا نعرف أي الخوارزميات ستكون جيدة في هذه المشكلة أو ما هي التكوينات التي يجب استخدامها.

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

دعونا نختبر 6 خوارزميات مختلفة:

  • Logistic Regression (LR)
  • Linear Discriminant Analysis (LDA)
  • K-Nearest Neighbors (KNN).
  • Classification and Regression Trees (CART).
  • Gaussian Naive Bayes (NB).
  • Support Vector Machines (SVM).

هذا مزيج جيد من الخوارزميات الخطية البسيطة (LR وLDA) وغير الخطية (KNN وCART وNB وSVM).

دعونا نبني نماذجنا ونقيمها:

</p>
...
# Spot Check Algorithms
models = []
models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))
# evaluate each model in turn
results = []
names = []
for name, model in models:
	kfold = StratifiedKFold(n_splits=10, random_state=1, shuffle=True)
	cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')
	results.append(cv_results)
	names.append(name)
	print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))

<p>

4.5 تحديد أفضل نموذج

لدينا الآن 6 نماذج وتقديرات دقة لكل منها. نحتاج إلى مقارنة النماذج مع بعضها البعض واختيار الأكثر دقة.

بتشغيل المثال أعلاه، نحصل على النتائج الأولية التالية:

</p>
LR: 0.960897 (0.052113)
LDA: 0.973974 (0.040110)
KNN: 0.957191 (0.043263)
CART: 0.957191 (0.043263)
NB: 0.948858 (0.056322)
SVM: 0.983974 (0.032083)

<p>

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

ما هي النتائج التي حصلت عليها؟

في هذه الحالة، يمكننا أن نرى أنه يبدو أن Support Vector Machines (SVM) لديها أكبر درجة دقة مقدرة بحوالي 0.98 أو 98٪.

يمكننا أيضًا إنشاء مخطط لنتائج تقييم النموذج ومقارنة الانتشار ومتوسط الدقة لكل نموذج. هناك مجموعة من مقاييس الدقة لكل خوارزمية لأنه تم تقييم كل خوارزمية 10 مرات (عن طريق 10-fold cross validation).

تتمثل إحدى الطرق المفيدة لمقارنة عينات النتائج لكل خوارزمية في إنشاء مخطط صندوقي لكل توزيع ومقارنة التوزيعات.

5.5 مثال كامل

كمرجع، يمكننا ربط جميع العناصر السابقة معًا في نص واحد.

المثال الكامل مدرج أدناه:

</p>
# compare algorithms
from pandas import read_csv
from matplotlib import pyplot
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import StratifiedKFold
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# Split-out validation dataset
array = dataset.values
X = array[:,0:4]
y = array[:,4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1, shuffle=True)
# Spot Check Algorithms
models = []
models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))
# evaluate each model in turn
results = []
names = []
for name, model in models:
	kfold = StratifiedKFold(n_splits=10, random_state=1, shuffle=True)
	cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')
	results.append(cv_results)
	names.append(name)
	print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))
# Compare Algorithms
pyplot.boxplot(results, labels=names)
pyplot.title('Algorithm Comparison')
pyplot.show()

<p>

6. التنبؤات

يجب أن نختار خوارزمية لاستخدامها لعمل تنبؤات.

تشير النتائج في القسم السابق إلى أن SVM ربما كان النموذج الأكثر دقة. سوف نستخدم هذا النموذج كنموذج نهائي لدينا.

نريد الآن الحصول على فكرة عن دقة النموذج في مجموعة التحقق الخاصة بنا.

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

6.1 عمل التنبؤات

يمكننا ملاءمة النموذج على مجموعة بيانات التدريب بأكملها وإجراء تنبؤات على مجموعة بيانات التحقق.

</p>
...
# Make predictions on validation dataset
model = SVC(gamma='auto')
model.fit(X_train, Y_train)
predictions = model.predict(X_validation)

<p>

قد ترغب أيضًا في عمل تنبؤات لصفوف فردية من البيانات. للحصول على أمثلة حول كيفية القيام بذلك، راجع البرنامج التعليمي:

قد ترغب أيضًا في حفظ النموذج في ملف وتحميله لاحقًا لعمل تنبؤات بشأن البيانات الجديدة. للحصول على أمثلة حول كيفية القيام بذلك، راجع البرنامج التعليمي:

2.6 تقييم التنبؤات

يمكننا تقييم التنبؤات من خلال مقارنتها بالنتائج المتوقعة في مجموعة التحقق، ثم حساب دقة التصنيف، بالإضافة إلى مصفوفة الارتباك confusion matrix وتقرير التصنيف classification report.

</p>
....
# Evaluate predictions
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))

<p>

يمكننا أن نرى أن الدقة تبلغ 0.966 أو حوالي 96٪ في مجموعة البيانات المعلقة.

توفر مصفوفة الارتباك إشارة إلى الأخطاء التي تم ارتكابها.

أخيرًا، يوفر تقرير التصنيف تفصيلًا لكل فئة من خلال precision وrecall و f1-score وsupport الذي يُظهر نتائج ممتازة (تم منح مجموعة بيانات التحقق من الصحة صغيرة).

3.6 مثال كامل

كمرجع، يمكننا ربط جميع العناصر السابقة معًا في نص واحد.

المثال الكامل مدرج أدناه:

</p>
# make predictions
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# Split-out validation dataset
array = dataset.values
X = array[:,0:4]
y = array[:,4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1)
# Make predictions on validation dataset
model = SVC(gamma='auto')
model.fit(X_train, Y_train)
predictions = model.predict(X_validation)
# Evaluate predictions
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))

<p>

يمكنك تعلم الآلة في بايثون

العمل من خلال البرنامج التعليمي أعلاه. سيستغرق الأمر من 5 إلى 10 دقائق كحد أقصى!

أنت لا تحتاج إلى فهم كل شيء. (على الأقل ليس الآن) هدفك هو تشغيل البرنامج التعليمي من البداية إلى النهاية والحصول على نتيجة. لا تحتاج إلى فهم كل شيء في المسار الأول. ضع قائمة بأسئلتك كما تذهب. استفد بشدة من المساعدة (“FunctionName”) التي تساعد في بناء الجملة في Python للتعرف على جميع الدوال التي تستخدمها.

لا تحتاج إلى معرفة كيفية عمل الخوارزميات. من المهم معرفة القيود وكيفية تكوين خوارزميات التعلم الآلي. لكن التعرف على الخوارزميات يمكن أن يأتي لاحقًا. تحتاج إلى بناء معرفة الخوارزمية هذه ببطء على مدى فترة طويلة من الزمن. اليوم، ابدأ بالراحة مع المنصة.

لست بحاجة إلى أن تكون مبرمجًا في بايثون. يمكن أن يكون بناء جملة لغة Python بديهيًا إذا كنت جديدًا عليها. تمامًا مثل اللغات الأخرى، ركز على استدعاءات الوظائف (مثل الوظيفة ()) والمهام (مثل a = “b”). هذا سوف يوصلك إلى أقصى حد. أنت مطور، تعرف كيف تلتقط أساسيات اللغة بسرعة حقيقية. فقط ابدأ وتعمق في التفاصيل لاحقًا.

لست بحاجة إلى أن تكون خبيرًا في التعلم الآلي. يمكنك التعرف على مزايا وقيود الخوارزميات المختلفة لاحقًا، وهناك الكثير من المنشورات التي يمكنك قراءتها لاحقًا لصقل خطوات مشروع التعلم الآلي وأهمية تقييم الدقة باستخدام التحقق المتقاطع.

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

الملخص

في هذا المنشور، اكتشفت كيفية إكمال مشروعك الأول للتعلم الآلي في Python خطوة بخطوة.

لقد اكتشفت أن إكمال مشروع صغير من البداية إلى النهاية بدءًا من تحميل البيانات وحتى إجراء التنبؤات هو أفضل طريقة للتعرف على نظام أساسي جديد.

خطوتك التالية

هل تعمل من خلال البرنامج التعليمي؟

  1. العمل من خلال البرنامج التعليمي أعلاه.
  2. ضع قائمة بأي أسئلة لديك.
  3. ابحث عن الإجابات أو ابحث عنها.
  4. تذكر أنه يمكنك استخدام المساعدة (“FunctionName”) في Python للحصول على مساعدة في أي دالة.

بواسطة
machinelearningmastery
المصدر
Your First Machine Learning Project in Python Step-By-Step

د. علاء طعيمة

كلية علوم الحاسوب وتكنولوجيا المعلومات / جامعة القادسية / العراق

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى