برنامج تعليمي لمصنف الغابات العشوائية: كيفية استخدام الخوارزميات المستندة إلى الشجرة للتعلم الآلي

تعد الخوارزميات المستندة إلى الشجرة من طرق التعلم الآلي الشائعة المستخدمة لحل مشكلات التعلم تحت الإشراف. هذه الخوارزميات مرنة ويمكنها حل أي نوع من المشاكل المطروحة (التصنيف أو الانحدار).

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

أمثلة على الخوارزميات المستندة إلى الشجرة

هناك خوارزميات مختلفة تعتمد على الشجرة يمكنك استخدامها ، مثل

  • أشجار القرار
  • غابة عشوائية
  • تعزيز التدرج
  • التعبئة (تجميع التمهيد)

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

في هذه المقالة ، سوف تتعلم المزيد عن خوارزمية Random Forest. بعد الانتهاء من هذه المقالة ، يجب أن تكون بارعًا في استخدام خوارزمية الغابة العشوائية لحل وبناء نماذج تنبؤية لمشاكل التصنيف باستخدام scikit-Learn.

ما هي Random Forest؟

تعد Random Forest واحدة من أكثر خوارزميات التعلم الخاضعة للإشراف القائمة على الأشجار. كما أنه الأكثر مرونة وسهولة في الاستخدام.

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

يتم إجراء التنبؤات النهائية للغابة العشوائية عن طريق حساب متوسط ​​تنبؤات كل شجرة على حدة.

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

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

تم استخدام Random Forest في مجموعة متنوعة من التطبيقات ، على سبيل المثال لتقديم توصيات بمنتجات مختلفة للعملاء في التجارة الإلكترونية.

في الطب ، يمكن استخدام خوارزمية الغابة العشوائية لتحديد مرض المريض من خلال تحليل السجل الطبي للمريض.

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

كيف تعمل خوارزمية Random Forest؟

تعمل خوارزمية الغابة العشوائية من خلال استكمال الخطوات التالية:

الخطوة 1 : تختار الخوارزمية عينات عشوائية من مجموعة البيانات المقدمة.

الخطوة 2: ستنشئ الخوارزمية شجرة قرار لكل عينة يتم اختيارها. ثم ستحصل على نتيجة تنبؤ من كل شجرة قرار تم إنشاؤها.

الخطوة 3: بعد ذلك يتم إجراء التصويت V لكل نتيجة متوقعة. بالنسبة لمشكلة التصنيف ، ستستخدم الوضع ، وبالنسبة لمشكلة الانحدار ، ستستخدم الوسيط .

الخطوة 4 : وأخيرًا ، ستختار الخوارزمية نتيجة التنبؤ الأكثر تصويتًا باعتبارها التنبؤ النهائي.

الغابة العشوائية في الممارسة

الآن بعد أن عرفت خصوصيات وعموميات خوارزمية الغابة العشوائية ، فلنقم ببناء مصنف غابة عشوائي.

سنقوم ببناء مصنف عشوائي للغابات باستخدام مجموعة بيانات Pima Indians Diabetes. تتضمن مجموعة بيانات Pima Indians Diabetes توقع ظهور مرض السكري في غضون 5 سنوات بناءً على التفاصيل الطبية المقدمة. هذه مشكلة تصنيف ثنائي.

مهمتنا هي تحليل وإنشاء نموذج على مجموعة بيانات Pima Indian Diabetes للتنبؤ بما إذا كان مريض معين معرضًا لخطر الإصابة بمرض السكري ، نظرًا لعوامل مستقلة أخرى.

سنبدأ باستيراد الحزم المهمة التي سنستخدمها لتحميل مجموعة البيانات وإنشاء مصنف غابة عشوائي. سنستخدم مكتبة scikit-Learn لتحميل واستخدام خوارزمية الغابة العشوائية.

# import important packages import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score from sklearn.preprocessing import StandardScaler, MinMaxScaler import pandas_profiling from matplotlib import rcParams import warnings warnings.filterwarnings("ignore") # figure size in inches rcParams["figure.figsize"] = 10, 6 np.random.seed(42)

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

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

# Load dataset data = pd.read_csv("../data/pima_indians_diabetes.csv")

يمكننا الآن ملاحظة عينة مجموعة البيانات.

 # show sample of the dataset data.sample(5)

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

دعونا نفهم قائمة الميزات التي لدينا في مجموعة البيانات هذه.

# show columns data.columns

في مجموعة البيانات هذه ، هناك 8 ميزات إدخال وميزة إخراج / هدف واحدة. يُعتقد أن القيم المفقودة يتم ترميزها بقيم صفرية. معنى أسماء المتغيرات كالتالي (من الأول إلى الأخير):

  • عدد مرات الحمل.
  • تركيز الجلوكوز في البلازما لمدة ساعتين في اختبار تحمل الجلوكوز الفموي.
  • ضغط الدم الانبساطي (ملم زئبق).
  • سمك ثنية الجلد ثلاثية الرؤوس (مم).
  • الأنسولين في الدم لمدة ساعتين (مو يو / مل).
  • مؤشر كتلة الجسم (الوزن بالكيلو جرام / (الطول بالمتر) ^ 2).
  • وظيفة نسب مرض السكري.
  • العمر (سنوات).
  • متغير الفئة (0 أو 1).

ثم قمنا بتقسيم مجموعة البيانات إلى ميزات مستقلة وميزة مستهدفة. تسمى الميزة المستهدفة لمجموعة البيانات هذه الفئة.

# split data into input and taget variable(s) X = data.drop("class", axis=1) y = data["class"]

المعالجة المسبقة لمجموعة البيانات

Before we create a model we need to standardize our independent features by using the standardScaler method from scikit-learn.

# standardize the dataset scaler = StandardScaler() X_scaled = scaler.fit_transform(X)

You can learn more on how and why to standardize your data from this article by clicking here.

Splitting the dataset into Training and Test data

We now split our processed dataset into training and test data. The test data will be 10% of the entire processed dataset.

# split into train and test set X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, stratify=y, test_size=0.10, random_state=42 )

Building the Random Forest Classifier

Now is time to create our random forest classifier and then train it on the train set. We will also pass the number of trees (100) in the forest we want to use through theparameter called n_estimators.

# create the classifier classifier = RandomForestClassifier(n_estimators=100) # Train the model using the training sets classifier.fit(X_train, y_train)

The above output shows different parameter values of the random forest classifier used during the training process on the train data.

After training we can perform prediction on the test data.

# predictin on the test set y_pred = classifier.predict(X_test)

Then we check the accuracy using actual and predicted values from the test data.

# Calculate Model Accuracy print("Accuracy:", accuracy_score(y_test, y_pred))

Accuracy: 0.8051948051948052

Our accuracy is around 80.5% which is good. But we can always make it better.

Identify Important Features

As I said before, we can also check the important features by using the feature_importances_ variable from the random forest algorithm in scikit-learn.

# check Important features feature_importances_df = pd.DataFrame( {"feature": list(X.columns), "importance": classifier.feature_importances_} ).sort_values("importance", ascending=False) # Display feature_importances_df

The figure above shows the relative importance of features and their contribution to the model. We can also visualize these features and their  scores using the seaborn and matplotlib libraries.

# visualize important featuers # Creating a bar plot sns.barplot(x=feature_importances_df.feature, y=feature_importances_df.importance) # Add labels to your plt.xlabel("Feature Importance Score") plt.ylabel("Features") plt.title("Visualizing Important Features") plt.xticks( rotation=45, horizontalalignment="right", fontweight="light", fontsize="x-large" ) plt.show()

From the figure above, you can see the triceps_skinfold_thickness feature has low importance and does not contribute much to the prediction.

This means that we can remove this feature and train our random forest classifier again and then see if it can improve its performance on the test data.

# load data with selected features X = data.drop(["class", "triceps_skinfold_thickness"], axis=1) y = data["class"] # standardize the dataset scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # split into train and test set X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, stratify=y, test_size=0.10, random_state=42 )

We will train the random forest algorithm with the selected processed features from our dataset, perform predictions, and then find the accuracy of the model.

# Create a Random Classifier clf = RandomForestClassifier(n_estimators=100) # Train the model using the training sets clf.fit(X_train, y_train) # prediction on test set y_pred = clf.predict(X_test) # Calculate Model Accuracy, print("Accuracy:", accuracy_score(y_test, y_pred))

Accuracy: 0.8181818181818182

Now the model accuracy has increased from 80.5% to 81.8% after we removed the least important feature called triceps_skinfold_thickness.

This suggests that it is very important to check important features and see if you can remove the least important features to increase your model's performance.

Wrapping up

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

أوصيك أيضًا بتجربة أنواع أخرى من الخوارزميات المستندة إلى الأشجار مثل خوارزمية Extra-tree.

يمكنك تنزيل مجموعة البيانات والمفكرة المستخدمة في هذه المقالة هنا: //github.com/Davisy/Random-Forest-classification-Tutorial

تهانينا ، لقد وصلت إلى نهاية هذا المقال!

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