شرح أكثر خوارزميات التعلم الالي إستخداما (مع أمثلة Python & R)

2٬813

إذا كنت من مستخدمي تعلم الآلة بشكل كافٍ، فستعلم أن هناك مبدأ “لا غداء مجاني” – أي لا توجد خوارزمية  تساعدك على حل كل المشاكل ومعالجة كل بيانات.

على سبيل المثال، ليس من المقبول قول إن Neural Network أفضل من Decision Trees أو العكس. لأن هناك العديد من العوامل باختلافها تتشكل الأفضلية، مثل حجم مجموعة البيانات وبنيتها.

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

بشكل عام، هناك 3 أنواع من خوارزميات التعلم الآلي.

Supervised Learning (التعلم تحت الإشراف):

التعلم تحت الإشراف هو المكان حيث توجد فيه بيانات المدخلات (x) وبيانات المخرجات (Y) من البداية وفي نفس الوقت، تستخدم الخوارزمية كل هذه البيانات لتتعلم كيفية إيجاد الرابط لتحويل أو تعيين المدخلات هذه إلى المخرجات، في محاولة لاقتراب قدر الإمكان من دالة عندما يكون لديها بيانات إدخال جديدة (x) يمكنها التنبؤ ببيانات المخرجات (Y) لتلك البيانات (Y = f (X.

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

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

تتمحور مشاكل التعلم تحت الإشراف بشكل أكبر حول Regression(الانحدار) و Classification (التصنيف).

Unsupervised Learning (التعلم دون إشراف):

التعلم دون إشراف هو المكان الذي توجد فيه بيانات المدخلات (X) ولا توجد بيانات المخرجات في المقابل، حيث تهدف الى العثور على الأنماط في البيانات.

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

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

تتمحور مشاكل التعلم دون الإشراف بشكل أكبر حول Clustering(التجميع).

 

Reinforcement Learning (التعلم التعزيزي):

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

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

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

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

والآن لنستعرض أشهر خوارزميات التعلم الآلي.

Linear Regression

ربما يكون Linear Regression – الانحدار الخطي أكثر الخوارزميات شهرة في عالم الإحصاء.

Y= a *X + b

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

تصف معادلة الانحدار الخطي العلاقة بين متغيرات المدخلات (x) ومتغيرات المخرجات (y)، عن طريق إيجاد قيمة للمتغيرات (a, b).

يهدف التغير في قيمة كلا من a وb الى تقليل مجموع فارق المربّع بين نقاط البيانات و خط الانحدار.

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

بالنظر إلى المثال التالي. فقد حددنا أفضل خط في معادلة خطية y = 0.2811x + 13.9 بناء على البيانات المتوفرة لدينا “المعروضة في المخطط البياني أدناه”. الآن باستخدام هذه المعادلة، يمكننا العثور على الوزن، بمعرفة طول الشخص.

Python code

#Import Library
#Import other necessary libraries like pandas, numpy...
from sklearn import linear_model
#Load Train and Test datasets
#Identify feature and response variable(s) and values must be numeric and numpy arrays
x_train=input_variables_values_training_datasets
y_train=target_variables_values_training_datasets
x_test=input_variables_values_test_datasets
# Create linear regression object
linear = linear_model.LinearRegression()
# Train the model using the training sets and check score
linear.fit(x_train, y_train)
linear.score(x_train, y_train)
#Equation coefficient and Intercept
print('Coefficient: \n', linear.coef_)
print('Intercept: \n', linear.intercept_)
#Predict Output
predicted= linear.predict(x_test)

R code

#Load Train and Test datasets
#Identify feature and response variable(s) and values must be numeric and numpy arrays
x_train <- input_variables_values_training_datasets
y_train <- target_variables_values_training_datasets
x_test <- input_variables_values_test_datasets
x <- cbind(x_train,y_train)
# Train the model using the training sets and check score
linear <- lm(y_train ~ ., data = x)
summary(linear)
#Predict Output
predicted= predict(linear,x_test) 

 

Logistic Regression

لا تنخدع بالاسم، فهذه الخوارزمية للتصنيف وليست للانحدار، يتم استخدامها لتقدير القيم المنفصلة (القيم الثنائية مثل 0/1، نعم / لا، صواب / خطأ) بالاعتماد على مجموعة من المتغيرات المستقلة.

تقوم الخوارزمية التنبؤ باحتمالية وقوع الحدث من خلال ملائمه البيانات على وظيفة لوجيستية، لذلك يُعرف أيضًا باسم الانحدار اللوجستي. وبما أنه يتنبأ بالاحتمالات، فمدي قيم الناتجة يقع بين 0 و1 (كما هو متوقع).

لنحاول وفهم هذا من خلال مثال بسيط.

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

Python code

#Import Library
from sklearn.linear_model import LogisticRegression
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create logistic regression object
model = LogisticRegression()
# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)
#Equation coefficient and Intercept
print('Coefficient: \n', model.coef_)
print('Intercept: \n', model.intercept_)
#Predict Output
predicted= model.predict(x_test)

R code

x <- cbind(x_train,y_train)
# Train the model using the training sets and check score
logistic <- glm(y_train ~ ., data = x,family='binomial')
summary(logistic)
#Predict Output
predicted= predict(logistic,x_test)

 

Decision Tree

تعد Decision Tree – شجرة القرار واحدة من أكثر الخوارزميات شيوعًا بين مستخدمي التعلم الآلي. تعمل عقولنا في بعض الأحيان مثل شجرة القرار حينما نسأل أنفسنا سؤال قبل اتخاذ أي القرار. فعلى سبيل المثال: هل هو الجو غائم في الخارج؟ إذا كانت الإجابة بنعم، سأحضر مظلة.

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

يتخذ نموذج شجرة القرار شكل الشجرة الثنائية، وتمثل كل عقدة في هذه الشجرة متغير إدخال واحد (x) ونقطة انقسام معتمدة على هذا المتغير.

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

Python code

#Import Library
#Import other necessary libraries like pandas, numpy...
from sklearn import tree
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create tree object 
model = tree.DecisionTreeClassifier(criterion='gini') # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini  
# model = tree.DecisionTreeRegressor() for regression
# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)
#Predict Output
predicted= model.predict(x_test)

R code

library(rpart)
x <- cbind(x_train,y_train)
# grow tree 
fit <- rpart(y_train ~ ., data = x,method="class")
summary(fit)
#Predict Output 
predicted= predict(fit,x_test)

 

Support Vector Machine

تعد SVM واحدة من أكثر الخوارزميات شهرة على الاطلاق. تهدف خوارزمية SVM الى إيجاد نطاق في مساحة N- الأبعاد (N – عدد الصفات) لتصنيف نقاط البيانات بوضوح.

عن طريق إنشاء نطاق فاصل “يتوسطه خط” يقسم بين البيانات حسب فئتها، كمثال، إما الفئة 0 أو الفئة 1.

تسمى المسافة بين النطاق وأقرب نقاط البيانات بالهامش. ودائما حصول النطاق على هامش أكبر يجعل منه نطاقاً أفضل. تعرف النقاط التي يتم الاعتماد عليها في تعريف هذا النطاق الفاصل وبناء المصنف بال Support Vectors – متجهات الدعم.

لنحاول وفهم هذا من خلال مثال بسيط.

لدينا بيانات صفتين من صفات الإنسان :الطول الشعر وطول الجسد.

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

الآن، لنحاول انشاء نطاق فاصل بمساعدة متجهات الدعم.

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

Python code

#Import Library
from sklearn import svm
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create SVM classification object 
model = svm.svc() # there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.
# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)
#Predict Output
predicted= model.predict(x_test)

R code

library(e1071)
x <- cbind(x_train,y_train)
# Fitting model
fit <-svm(y_train ~ ., data = x)
summary(fit)
#Predict Output 
predicted= predict(fit,x_test)

 

k- Nearest Neighbors

KNN هي خوارزمية بسيطة تخزن جميع الحالات المتاحة لديها من بيانات التدريب و تصنف الحالات الجديدة حسب أغلبية جيرانها، وذلك عن طريق وظيفة حسابية لقياس المسافة بينهم. هذه الوظائف يمكن أن تكون المسافة Euclidean – الإقليدية، Manhattan – مانهاتن، Minkowski – مينكوفسكي و Hamming – هامينغ.

إذا كانت K = 1، فسيتم تعيين الحالة ببساطة إلى أقرب فئة مجاورة لها.

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

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

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

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

Python code

#Import Library
from sklearn.neighbors import KNeighborsClassifier
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create KNeighbors classifier object model 
KNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)

R code

library(knn)
x <- cbind(x_train,y_train)
# Fitting model
fit <-knn(y_train ~ ., data = x,k=5)
summary(fit)
#Predict Output 
predicted= predict(fit,x_test)

 

K-Means

K-Means هي الخوارزمية غير الخاضعة للإشراف لحل مشكلة التجميع. من خلال طريقة بسيطة يتم توزيع وتصنيف بيانات المدخلات على عدد معين من مجموعات البيانات (تفترض العدد k). تتميز نقاط البيانات داخل المجموعة الواحدة بالتجانس مع بعضها البعض والاختلاف من مجموعات البيانات الأخرى.

كيف يعمل K-Means:

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

كيفية تحديد قيمة K:

هناك طريقة شهيرة تُعرف باسم elbow method تُستخدم لتحديد القيمة المثلى لـ K. الفكرة الأساسية وراء هذه الطريقة هي رسم القيم المختلفة للتكلفة مع تغيير k, معرفة المزيد من هنا.

Python code

#Import Library
from sklearn.cluster import KMeans
#Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset
# Create KNeighbors classifier object model 
k_means = KMeans(n_clusters=3, random_state=0)
# Train the model using the training sets and check score
model.fit(X)
#Predict Output
predicted= model.predict(x_test)

R code

library(cluster)
fit <- kmeans(X, 3) # 5 cluster solution

 

Naive Bayes  

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

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

توفر نظرية Bayes طريقة لحساب الاحتمال (P (c | x من (P (c و(P (x و(P (x | c، يعثبر المتغير c عن هدف التنبؤ و المتغير x عن الصفة التي سيتم التنبؤ بناء عليها.

لنحاول وفهم هذا من خلال مثال بسيط.

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

  1. تحويل مجموعة البيانات إلى جدول التردد
  2. إنشاء جدول الاحتمالات مثل الاحتمال اللعب في الطقس الغائم = 0.29 واحتمال اللعب في العموم = 0.64.
  3. استخدم معادلة Bayes لحساب الاحتمالات لكل فئة. الفئة صاحبة الاحتمال الأعلى تعتبر هي نتيجة التنبؤ.
  4. هل سيلعب الأطفال إذا كان الطقس مشمسًا؟يمكننا الإجابة على هذا السؤال باستخدام الطريقة المذكورة أعلاه، لذلكP (نعم | مشمس) = P (مشمس | نعم) * P (نعم) / P (مشمس)

    P (مشمس | نعم) = 3/9 = 0.33 ، P (مشمس) = 5/14 = 0.36 ، P (نعم) = 9/14 = 0.64

    P (نعم | مشمس) = 0.33 * 0.64 / 0.36 = 0.60 ، والتي لديها الاحتمال الأكبر.

Python code

#Import Library
from sklearn.naive_bayes import GaussianNB
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)

R code

library(e1071)
x <- cbind(x_train,y_train)
# Fitting model
fit <-naiveBayes(y_train ~ ., data = x)
summary(fit)
#Predict Output 
predicted= predict(fit,x_test)

المصدر:

Essentials of Machine Learning Algorithms with Python and R Codes

A Tour of The Top 10 Algorithms for Machine Learning Newbies

 

 

 

تعليقات