كيف تبدأ التعلم الآلي في حوالي 10 دقائق

الصورة من قبل فرانكي شاماكي على Unsplash

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

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

فلماذا بيثون؟ في تجربتي ، بيثون هي واحدة من أسهل لغات البرمجة للتعلم. هناك حاجة لتكرار العملية بسرعة ، ولا يحتاج عالِم البيانات إلى معرفة عميقة باللغة ، حيث يمكنهم تعليقها بسرعة حقيقية.

ما أسهل؟

لأي شيء في القائمة:
    طباعة (أي شيء)

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

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

  1. نمباي

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

2. الباندا

لمعالجة ملفات CSV. بالطبع ، ستحتاج إلى معالجة بعض الجداول ، ومشاهدة الإحصاءات ، وهذه هي الأداة الصحيحة التي تريد استخدامها.

3. Matplotlib

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

4. البحر

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

5. Scikit- تعلم

هذا هو المدير الأخير للتعلم الآلي مع بيثون. هذا ما يسمى آلة التعلم مع بيثون هو هذا الرجل. Scikit وتعلم. كل الأشياء التي تحتاجها من الخوارزميات إلى التحسينات موجودة هنا.

6. Tensorflow و Pytorch

أنا لا أتحدث كثيرا عن هذين. ولكن إذا كنت مهتمًا بالتعلم العميق ، فقم بإلقاء نظرة عليه ، فهذا يستحق وقتك. (سأقدم تعليميًا آخر حول التعلم العميق في المرة القادمة ، ترقبوا!)

تصوير: هايتش تشودري على Unsplash

مشاريع تعلم آلة بايثون

بالطبع ، لن تجلب لك القراءة والدراسة وحدك المكان الذي تحتاج إلى الذهاب إليه. تحتاج الممارسة الفعلية. كما قلت في مدونتي ، فإن تعلم الأدوات لا معنى له إذا لم تقفز إلى البيانات. وهكذا ، أقدمك إلى مكان يمكنك من خلاله العثور على Python Machine Learning Projects بسهولة.

من باب المجاملة Kaggle.com

Kaggle هي عبارة عن منصة حيث يمكنك الغوص مباشرة في البيانات. ستحل المشروعات وتحقق جيدًا في التعلم الآلي. شيء قد يجعلك أكثر اهتمامًا به: قد تقدم مسابقات "التعلم الآلي" جائزة تصل إلى 100،000 دولار. وقد ترغب في تجربة حظك. هاها.

لكن الشيء الأكثر أهمية ليس المال - إنه حقًا مكان يمكنك من خلاله العثور على التعلم الآلي باستخدام Python Projects. هناك الكثير من المشاريع التي يمكنك تجربتها. ولكن إذا كنت مبتدئًا ، وأفترض أنك كذلك ، فستريد الانضمام إلى هذه المسابقة.

إليك مثال على مشروع سنستخدمه في البرنامج التعليمي أدناه:

تايتانيك: تعلم الآلة من الكوارث

نعم ، تيتانيك سيئة السمعة. كارثة مأساوية في عام 1912 ، أودت بحياة 1502 شخصًا من 2224 راكبًا وطاقمها. تمنحك مسابقة Kaggle (أو أستطيع أن أقول تعليمي) البيانات الحقيقية عن الكارثة. ومهمتك هي شرح البيانات بحيث يمكنك التنبؤ بما إذا كان الشخص قد نجا أم لا أثناء الحادث.

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

قبل الدخول في بيانات Titanic ، دعنا نثبت بعض الأدوات التي تحتاجها.

بالطبع بايثون. تحتاج إلى تثبيته أولاً من موقع Python offfical. تحتاج إلى تثبيت الإصدار 3.6+ لمواكبة المكتبات.

بعد ذلك ، تحتاج إلى تثبيت جميع المكتبات عبر Python pip. يجب تثبيت Pip تلقائيًا مع توزيع Python الذي قمت بتنزيله للتو.

ثم تثبيت الأشياء التي تحتاج إليها عبر نقطة. افتح المحطة الطرفية أو سطر الأوامر أو Powershell ، واكتب ما يلي:

نقطة تثبيت شاذ
نقطة تثبيت الباندا
نقطة تثبيت matplotlib
نقطة تثبيت البحار
نقطة تثبيت scikit للتعلم
نقطة تثبيت جوبيتر

حسنا ، كل شيء يبدو جيدا. لكن مهلا ، ما هو كوكب المشتري؟ Jupyter لتقف على جوليا ، بيثون ، وصاد ، وبالتالي Jupytr. لكن هذا مزيج من الكلمات الغريبة ، لذلك غيروها إلى Jupyter فقط. إنه دفتر مشهور حيث يمكنك كتابة كود Python بشكل تفاعلي.

فقط اكتب دفتر jupyter في جهازك وسيتم فتح صفحة متصفح مثل هذا:

دفتر Jupyter

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

الآن قمت بتثبيت جميع الأدوات. هيا بنا نذهب!

استكشاف البيانات

الخطوة الأولى هي استكشاف البيانات. تحتاج إلى تنزيل البيانات من صفحة Titanic في Kaggle. ثم ضع البيانات المستخرجة داخل مجلد حيث يمكنك بدء تشغيل دفتر Jupyter الخاص بك.

ثم قم باستيراد المكتبات اللازمة:

استيراد numpy كـ np
استيراد الباندا كما PD
استيراد matplotlib.pyplot كما PLT
استيراد بحرا كما SNS
تحذيرات الاستيراد
warnings.filterwarnings ( 'تجاهل')
٪ matplotlib مضمنة

ثم قم بتحميل البيانات:

train_df = pd.read_csv ( "train.csv")
train_df.head ()

سترى شيء مثل هذا:

هذه هي بياناتنا. يحتوي على الأعمدة التالية:

  1. PassengerId ، معرف الراكب
  2. نجا ، سواء نجا أم لا
  3. Pclass ، فئة الخدمة ، وربما 1 هو الاقتصاد ، 2 الأعمال ، و 3 هي الدرجة الأولى
  4. الاسم ، اسم الراكب
  5. جنس
  6. عمر
  7. الأشقاء ، أو الأشقاء والأزواج ، عدد الأشقاء والأزواج على متن الطائرة
  8. الرق ، أو الآباء والأمهات والأطفال ، وعدد منهم على متن الطائرة
  9. تذكرة وتفاصيل التذاكر
  10. المقصورة ، المقصورة الخاصة بهم. NaN يعني غير معروف
  11. شرعت ، أصل المغادرة ، S لـ Southampton ، Q لـ Queenstown ، C لـ Cherbourg

أثناء استكشاف البيانات ، نجد غالبًا البيانات المفقودة. دعنا نراهم:

def مفقود البيانات (البيانات):
    الإجمالي = data.isnull (). sum (). sort_values ​​(تصاعدي = خطأ)
    في المئة = (data.isnull (). sum () / data.isnull (). count () * 100) .sort_values ​​(تصاعدي = خطأ)
    ms = pd.concat ([الإجمالي ، النسبة المئوية] ، المحور = 1 ، المفاتيح = ['الإجمالي' ، 'النسبة المئوية'])
    ms = ms [ms ["Percent"]> 0]
    f ، الفأس = plt.subplots (figsize = (8،6))
    plt.xticks (دوران = '90 ')
    fig = sns.barplot (ms.index ، ms ["Percent"] ، colour = "green" ، alpha = 0.8)
    plt.xlabel ("الميزات" ، حجم الخطوط = 15)
    plt.ylabel ('النسبة المئوية للقيم المفقودة' ، fontsize = 15)
    plt.title ("النسبة المئوية للبيانات المفقودة حسب الميزة" ، fontsize = 15)
    العودة مللي
missingdata (train_df)

سنرى نتيجة مثل هذه:

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

تنظيف البيانات

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

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

لذلك دعونا ملء بيانات المغادرة مع الوضع وبيانات العمر بمتوسط.

train_df ['شرعت']. fillna (train_df ['شرعت']. mode () [0] ، inplace = True)
train_df ['Age']. fillna (train_df ['Age']. median ()، inplace = True)

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

drop_column = ['Cabin']
train_df.drop (drop_column ، المحور = 1 ، inplace = True)

الآن يمكننا التحقق من البيانات التي قمنا بتنظيفها.

طباعة ("التحقق من قيمة nan في بيانات القطار")
طباعة (train_df.isnull (). مبلغ ())

في احسن الاحوال! لا توجد بيانات مفقودة. يعني تم تنظيف البيانات.

الصورة روبرت باي على Unsplash

ميزة الهندسة

الآن قمنا بتنظيف البيانات. الشيء التالي الذي يمكننا القيام به هو ميزة الهندسة.

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

دعنا نلقي نظرة على البيانات التي تم نشرها: يتم ملؤها بـ Q أو S أو C. ولن تتمكن مكتبة Python من معالجة هذا ، لأنها قادرة على معالجة الأرقام فقط. لذلك تحتاج إلى القيام بشيء ما يسمى One Hot Vectorization ، وتغيير العمود إلى ثلاثة أعمدة. دعنا نقول Embarked_Q و Embarked_S و Embarked_C المملوءة ب 0 أو 1 سواء كان الشخص الذي غادر من هذا الميناء أم لا.

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

لذا فأنت تريد إنشاء عمود آخر يسمى حجم الأسرة ، والذي يتكون من sibsp + parch + 1 (الراكب نفسه).

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

لهذا السبب نقوم بإنشاء أعمدة بن. ربما بالنسبة للعمر ، سنقوم بإنشاء 4 صناديق. الأطفال (0-14 سنة) ، المراهق (14-20) ، البالغون (20-40) ، والشيوخ (40+)

دعنا نذكرهم:

مجموعة البيانات = train_df
مجموعة البيانات ['FamilySize'] = مجموعة البيانات ['SibSp'] + مجموعة البيانات ['Parch'] + 1
استيراد إعادة
# تحديد وظيفة لاستخراج العناوين من أسماء الركاب
def get_title (الاسم):
    title_search = re.search ('([A-Za-z] +) \.' ، الاسم)
    # إذا كان العنوان موجودًا ، فقم باستخراجه وإعادته.
    إذا title_search:
        إرجاع title_search.group (1)
    إرجاع ""
# إنشاء عنوان ميزة جديدة ، تحتوي على عناوين أسماء الركاب
مجموعة البيانات ['Title'] = مجموعة البيانات ['Name']. Apply (get_title)
# تجميع جميع العناوين غير الشائعة في مجموعة واحدة "نادر"
مجموعة البيانات ['Title'] = مجموعة البيانات ['Title']. استبدال (['Lady' ، 'Countess' ، 'Capt' ، 'Col' ، 'Don' ، 'Dr' ، 'Major' ، 'Rev' ، ' سيدي "،" جونكير "،" دونا "] ،" نادر ")
مجموعة البيانات ['Title'] = مجموعة البيانات ['Title']. replace ('Mlle'، 'Miss')
مجموعة البيانات ['Title'] = مجموعة البيانات ['Title']. replace ('Ms'، 'Miss')
مجموعة البيانات ['Title'] = مجموعة البيانات ['Title']. replace ('Mme'، 'Mrs')
مجموعة البيانات ['Age_bin'] = pd.cut (مجموعة البيانات ['Age'] ، bins = [0،14،20،40،120] ، تسميات = ['الأطفال' ، 'Teenage' ، 'Adult' ، 'Elder'])
مجموعة البيانات ['Fare_bin'] = pd.cut (مجموعة البيانات ['Fare'] ، bins = [0،7.91،14.45،31،120] ، التسميات = ['Low_fare' ، 'median_fare' ، 'Average_fare' ، 'high_fare']))
                                                                               
traindf = train_df
drop_column = ['العمر' ، 'الأجرة' ، 'الاسم' ، 'التذكرة']
train_df.drop (drop_column ، المحور = 1 ، inplace = True)
drop_column = ['PassengerId']
traindf.drop (drop_column ، المحور = 1 ، inplace = True)
traindf = pd.get_dummies (traindf، columns = ["Sex"، "Title"، "Age_bin"، "Embarked"، "Fare_bin"]،
                             بادئة = [ "الجنس"، "العنوان"، "Age_type"، "Em_type"، "Fare_type"])

الآن ، لقد انتهيت من جميع الميزات. دعنا نلقي نظرة على العلاقة لكل ميزة:

sns.heatmap (traindf.corr () ، annot = True ، cmap = 'RdYlGn' ، linewidths = 0.2) # data.corr () -> مصفوفة الارتباط
التين = plt.gcf ()
fig.set_size_inches (20،12)
plt.show ()

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

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

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

الآن وصلنا إلى قمة البرنامج التعليمي: نمذجة التعلم الآلي.

من sklearn.model_selection استيراد train_test_split # لتقسيم البيانات
من sklearn.metrics ، قم باستيراد precision_score #for precision_score
من sklearn.model_selection ، يمكنك استيراد KFold #for K-fold validation
من sklearn.model_selection ، قم باستيراد التقييم cross_val_score #score
من sklearn.model_selection ، قم باستيراد cross_val_predict #prediction
من sklearn.metrics استيراد confusion_matrix # لمصفوفة الارتباك
all_features = traindf.drop ("نجا" ، المحور = 1)
Targeted_feature = traindf ["Survived"]
X_train ، X_test ، y_train ، y_test = train_test_split (all_features ، Targeted_feature ، test_size = 0.3 ، random_state = 42)
X_train.shape، X_test.shape، y_train.shape، y_test.shape

يمكنك اختيار العديد من الخوارزميات المضمنة داخل مكتبة scikit-Learn.

  1. الانحدار اللوجستي
  2. غابة عشوائية
  3. SVM
  4. ك أقرب جار
  5. السذاجة بايز
  6. أشجار القرار
  7. AdaBoost
  8. LDA
  9. تعزيز التدرج

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

دعنا نجربها باستخدام خواصتي المفضلة: Random Forest Algorithm

من sklearn.ensemble استيراد RandomForestClassifier
نموذج = RandomForestClassifier (المعيار = 'gini' ، n_estimators = 700 ،
                             min_samples_split = 10، min_samples_leaf = 1،
                             max_features = "السيارات"، oob_score = صحيح،
                             random_state = 1، n_jobs = -1)
model.fit (X_train، y_train)
prediction_rm = model.predict (X_test)
print ('-------------- دقة النموذج ---------------------------- ')
print ('دقة Random Forest Classifier هي' ، تقريبًا (precision_score (prediction_rm ، y_test) * 100،2))
kfold = KFold (n_splits = 10 ، random_state = 22) # k = 10 ، قسّم البيانات إلى 10 أجزاء متساوية
result_rm = cross_val_score (نموذج، all_features، Targeted_feature، السيرة الذاتية = 10، وسجل "دقة" =)
print ('النتيجة التي تم التحقق من صحتها لمصطلح Random Forest Classifier هي:'، round (result_rm.mean () * 100،2))
y_pred = cross_val_predict (نموذج ، all_features ، Targeted_feature ، cv = 10)
sns.heatmap (confusion_matrix (Targeted_feature، y_pred)، ANNOT = صحيح، معاهدة المواد الانشطارية = '3.0f، CMAP = "الصيف")
plt.title ('Confusion_matrix' ، y = 1.05 ، الحجم = 15)

نجاح باهر! انه يعطينا 83 ٪ من الدقة. هذا جيد بما فيه الكفاية لأول مرة.

النتيجة التي تم التحقق من صحتها تعني طريقة التحقق من الصحة K Fold. إذا كانت K = 10 ، فهذا يعني أنك تقوم بتقسيم البيانات إلى 10 أشكال مختلفة وحساب متوسط ​​كل الدرجات كنقاط نهائية.

الكون المثالى

لقد انتهيت الآن من خطوات التعلم الآلي مع Python. ولكن هناك خطوة أخرى يمكن أن تجلب لك نتائج أفضل: الضبط الدقيق. الضبط الدقيق يعني إيجاد أفضل معلمة لخوارزميات تعلم الآلة. إذا كنت ترى رمز الغابة العشوائية أعلاه:

نموذج = RandomForestClassifier (المعيار = 'gini' ، n_estimators = 700 ،
                             min_samples_split = 10، min_samples_leaf = 1،
                             max_features = "السيارات"، oob_score = صحيح،
                             random_state = 1، n_jobs = -1)

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

لا تقلق - فهناك أداة تسمى Grid Search ، والتي تعثر على المعلمات المثالية تلقائيًا. تبدو رائعة ، أليس كذلك؟

من sklearn.model_selection استيراد GridSearchCV
# عشوائية الغابات المصنف المعلمات tunning
نموذج = RandomForestClassifier ()
n_estim = النطاق (100،1000،100)
## شبكة البحث عن المعلمات الأمثل
param_grid = {"n_estimators": n_estim}
model_rf = GridSearchCV (نموذج ، param_grid = param_grid ، cv = 5 ، تسجيل = "دقة" ، n_jobs = 4 ، مطوّل = 1)
model_rf.fit (X_train، y_train)
# أفضل نتيجة
طباعة (model_rf.best_score_)
# أفضل مقدر
model_rf.best_estimator_

حسنًا ، يمكنك تجربتها بنفسك. واستمتع مع آلة التعلم.

خاتمة

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

تم إصدار هذه القطعة في الأصل على مدونتي على thedatamage.com