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

Lazypredict: تنفيذ جميع خوارزميات التعلم الآلي باستخدام سطر واحد من التعليمات البرمجية

ما هو Lazypredict

Lazypredict عبارة عن حزمة بايثون تهدف إلى أتمتة عملية نمذجة التعلم الآلي. يعمل على كل من مهام الانحدار regression والتصنيف classification.

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

تثبيت Lazypredict

على جهازك، قم بتشغيل ما يلي:

pip install lazypredict

ومع ذلك، قد تحتاج إلى تثبيت بعض تبعيات lazypredict يدويًا. إذا واجهت مشكلات تقول إنك بحاجة إلى تثبيت scikit-Learn أو xgboost أو lightgbm ، فيمكنك تشغيل تثبيت pip لتثبيت المكتبات الضرورية.

أنا شخصياً حصلت عليه للعمل على python 3.9.13 من خلال وجود requirements.txt التالية:

pandas==1.4.4
numpy==1.21.5
scikit-learn==1.0.2
lazypredict==0.2.12

لقد قمت بتثبيت المكتبات التالية عن طريق تشغيل هذا الأمر على الجهاز:

pip install -r requirements.txt

من الأفضل استخدام بيئة افتراضية virtual environment في هذه الحالة.

استخدام Lazypredict للانحدار

دعنا نتصفح الكود.

سنقوم أولاً باستيراد المكتبات الضرورية.

from lazypredict.Supervised import LazyRegressor
from sklearn import datasets
from sklearn.utils import shuffle
import numpy as np

أولاً، سنستورد مجموعة بيانات مرض السكري Diabetes dataset.

“تم الحصول على عشرة متغيرات أساسية، العمر age، والجنس sex ، ومؤشر كتلة الجسم body mass index ، ومتوسط ضغط الدم average blood pressure ، وستة قياسات مصل الدم لكل من n = 442 مريضًا بالسكري ، بالإضافة إلى الاستجابة ذات الأهمية ، وهي مقياس كمي لتطور المرض بعد عام واحد من خط الأساس “.

# Import the Diabetes Dataset
diabetes = datasets.load_diabetes()

بعد ذلك، نقوم بترتيب مجموعة البيانات عشوائيًا حتى نتمكن من تقسيمها إلى مجموعات التدريب والاختبار train-test sets.

# Shuffle the dataset 
X, y = shuffle(diabetes.data, diabetes.target, random_state=13)

# Cast the numerical values into a numpy float.
X = X.astype(np.float32)

# Split the dataset into 90% and 10%.
offset = int(X.shape[0] * 0.9)

# Split into train and test
X_train, y_train = X[:offset], y[:offset]
X_test, y_test = X[offset:], y[offset:]

بعد ذلك، نقوم بتهيئة كائن LazyRegressor.

# Running the Lazypredict library and fit multiple regression libraries
# for the same dataset
reg = LazyRegressor(verbose=0, 
                    ignore_warnings=False, 
                    custom_metric=None,
                    predictions=False,
                    random_state = 13)

# Parameters
# ----------
# verbose : int, optional (default=0)
#       For the liblinear and lbfgs solvers set verbose to any positive
#       number for verbosity.
# ignore_warnings : bool, optional (default=True)
#       When set to True, the warning related to algorigms that are not able
#       to run are ignored.
# custom_metric : function, optional (default=None)
#       When function is provided, models are evaluated based on the custom 
#       evaluation metric provided.
# prediction : bool, optional (default=False)
#       When set to True, the predictions of all the models models are 
#       returned as dataframe.
# regressors : list, optional (default="all")
#       When function is provided, trains the chosen regressor(s).

الآن، سوف نطبق fit خوارزميات الانحدار المتعددة مع مكتبة lazypredict. استغرقت هذه الخطوة 3 ثوانٍ في المجمل.

تقوم طريقة الملاءمة بما يلي:

  1. قسّم جميع الميزات إلى ثلاث فئات: عددية numerical (ميزات عبارة عن أرقام) أو فئوية categorical (ميزات نصية).
  2. مزيد من تقسيم الميزات الفئوية إلى قسمين: الميزات الفئوية “High” (التي تحتوي على قيم فريدة أكثر من العدد الإجمالي للميزات) والميزات الفئوية “low” (التي تحتوي على قيم فريدة أقل من إجمالي عدد الميزات)
  3. ثم تتم معالجة كل ميزة مسبقًا بهذه الطريقة:
  4. الميزات العددية: معالجة القيم المفقودة missing values بمتوسط mean، ثم قم بتوحيد standardize العنصر (إزالة المتوسط والقسمة على التباين)
  5. الميزات الفئوية “High”: اذكر القيم المفقودة بالقيمة “missing”، ثم نفذ ترميزا واحدًا ساخنًا one-hot encoding.
  6. الميزات الفئوية “Low”: احسب القيم المفقودة بالقيمة “missing”، ثم نفذ ترميزًا ترتيبيًا ordinal encoding (قم بتحويل كل قيمة سلسلة فريدة إلى عدد صحيح. في مثال عمود الجنس – تم ترميز “ذكر” على أنه 0 و “أنثى” 1.)
  7. قم بملاءمة Fit مجموعة بيانات التدريب في كل خوارزمية.
  8. اختبر كل خوارزمية على مجموعة الاختبار. بشكل افتراضي، يتم تعديل المقاييس R-squared و R-squared و root-mean-squared error والوقت المستغرق.
models, predictions = reg.fit(X_train, X_test, y_train, y_test)
model_dictionary = reg.provide_models(X_train, X_test, y_train, y_test)
models

ها هي النتيجة.

| Model                         |   Adjusted R-Squared |   R-Squared |   RMSE |   Time Taken |
|:------------------------------|---------------------:|------------:|-------:|-------------:|
| ExtraTreesRegressor           |                 0.38 |        0.52 |  54.22 |         0.17 |
| OrthogonalMatchingPursuitCV   |                 0.37 |        0.52 |  54.39 |         0.01 |
| Lasso                         |                 0.37 |        0.52 |  54.46 |         0.01 |
| LassoLars                     |                 0.37 |        0.52 |  54.46 |         0.01 |
| LarsCV                        |                 0.37 |        0.51 |  54.54 |         0.02 |
| LassoCV                       |                 0.37 |        0.51 |  54.59 |         0.07 |
| PassiveAggressiveRegressor    |                 0.37 |        0.51 |  54.74 |         0.01 |
| LassoLarsIC                   |                 0.36 |        0.51 |  54.83 |         0.01 |
| SGDRegressor                  |                 0.36 |        0.51 |  54.85 |         0.01 |
| RidgeCV                       |                 0.36 |        0.51 |  54.91 |         0.01 |
| Ridge                         |                 0.36 |        0.51 |  54.91 |         0.01 |
| BayesianRidge                 |                 0.36 |        0.51 |  54.94 |         0.01 |
| LassoLarsCV                   |                 0.36 |        0.51 |  54.96 |         0.02 |
| LinearRegression              |                 0.36 |        0.51 |  54.96 |         0.01 |
| TransformedTargetRegressor    |                 0.36 |        0.51 |  54.96 |         0.01 |
| Lars                          |                 0.36 |        0.50 |  55.09 |         0.01 |
| ElasticNetCV                  |                 0.36 |        0.50 |  55.20 |         0.06 |
| HuberRegressor                |                 0.36 |        0.50 |  55.24 |         0.02 |
| RandomForestRegressor         |                 0.35 |        0.50 |  55.48 |         0.25 |
| AdaBoostRegressor             |                 0.34 |        0.49 |  55.88 |         0.08 |
| LGBMRegressor                 |                 0.34 |        0.49 |  55.93 |         0.05 |
| HistGradientBoostingRegressor |                 0.34 |        0.49 |  56.08 |         0.20 |
| PoissonRegressor              |                 0.32 |        0.48 |  56.61 |         0.01 |
| ElasticNet                    |                 0.30 |        0.46 |  57.49 |         0.01 |
| KNeighborsRegressor           |                 0.30 |        0.46 |  57.57 |         0.01 |
| OrthogonalMatchingPursuit     |                 0.29 |        0.45 |  57.87 |         0.01 |
| BaggingRegressor              |                 0.29 |        0.45 |  57.92 |         0.04 |
| XGBRegressor                  |                 0.28 |        0.45 |  58.18 |         0.11 |
| GradientBoostingRegressor     |                 0.25 |        0.42 |  59.70 |         0.12 |
| TweedieRegressor              |                 0.24 |        0.42 |  59.81 |         0.01 |
| GammaRegressor                |                 0.22 |        0.40 |  60.61 |         0.01 |
| RANSACRegressor               |                 0.20 |        0.38 |  61.40 |         0.12 |
| LinearSVR                     |                 0.12 |        0.32 |  64.66 |         0.01 |
| ExtraTreeRegressor            |                 0.00 |        0.23 |  68.73 |         0.01 |
| NuSVR                         |                -0.07 |        0.18 |  71.06 |         0.01 |
| SVR                           |                -0.10 |        0.15 |  72.04 |         0.02 |
| DummyRegressor                |                -0.30 |       -0.00 |  78.37 |         0.01 |
| QuantileRegressor             |                -0.35 |       -0.04 |  79.84 |         1.42 |
| DecisionTreeRegressor         |                -0.47 |       -0.14 |  83.42 |         0.01 |
| GaussianProcessRegressor      |                -0.77 |       -0.37 |  91.51 |         0.02 |
| MLPRegressor                  |                -1.87 |       -1.22 | 116.51 |         0.21 |
| KernelRidge                   |                -5.04 |       -3.67 | 169.06 |         0.01 |

 

إليك الكود الكامل للانحدار في مجموعة بيانات داء السكري.

from lazypredict.Supervised import LazyRegressor
from sklearn import datasets
from sklearn.utils import shuffle
import numpy as np

# Import the Diabetes Dataset
diabetes = datasets.load_diabetes()

# Shuffle the dataset 
X, y = shuffle(diabetes.data, diabetes.target, random_state=13)

# Cast the numerical values
X = X.astype(np.float32)
offset = int(X.shape[0] * 0.9)

# Split into train and test
X_train, y_train = X[:offset], y[:offset]
X_test, y_test = X[offset:], y[offset:]

# Running the Lazypredict library and fit multiple regression libraries
# for the same dataset
reg = LazyRegressor(verbose=0, ignore_warnings=False, custom_metric=None)
models, predictions = reg.fit(X_train, X_test, y_train, y_test)
model_dictionary = reg.provide_models(X_train, X_test, y_train, y_test)
models

استخدام Lazypredict للتصنيف

دعنا نستخدم Lazypredict للتصنيف.

أولاً، قم باستيراد المكتبات اللازمة.

from lazypredict.Supervised import LazyClassifier
 from sklearn.datasets import load_iris
 from sklearn.model_selection import train_test_split

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

تتكون مجموعة البيانات من 50 عينة من كل نوع من ثلاثة أنواع من Iris (Iris setosa و Iris virginica و Iris versicolor). تم قياس أربع ميزات من كل عينة: طول وعرض الكؤوس والبتلات ، بالسنتيمتر.

data = load_iris()
 X = data.data
 y= data.target
 X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=.5,random_state =123)

بعد ذلك، نقوم بتهيئة كائن LazyClassifier.

# Running the Lazypredict library and fit multiple regression libraries
# for the same dataset
clf = LazyClassifier(verbose=0,ignore_warnings=True, custom_metric=None)

"""
    Parameters
    ----------
    verbose : int, optional (default=0)
        For the liblinear and lbfgs solvers set verbose to any positive
        number for verbosity.
    ignore_warnings : bool, optional (default=True)
        When set to True, the warning related to algorigms that are not able to run are ignored.
    custom_metric : function, optional (default=None)
        When function is provided, models are evaluated based on the custom evaluation metric provided.
    prediction : bool, optional (default=False)
        When set to True, the predictions of all the models models are returned as dataframe.
    classifiers : list, optional (default="all")
        When function is provided, trains the chosen classifier(s).
"""

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

models,predictions = clf.fit(X_train, X_test, y_train, y_test)

أخيرًا، يمكننا أن نرى كيف يعمل كل نموذج باستخدام provide_models. هذا يُبلغ عن الدقة accuracy والدقة المتوازنة balanced accuracy و ROC AUC و F1 في مجموعة الاختبار.

# Calculate performance of all models on test dataset
 model_dictionary = clf.provide_models(X_train,X_test,y_train,y_test)
 models

ها هي النتيجة الكاملة.

| Model                         |   Accuracy |   Balanced Accuracy | ROC AUC   |   F1 Score |   Time Taken |
|:------------------------------|-----------:|--------------------:|:----------|-----------:|-------------:|
| LinearDiscriminantAnalysis    |       0.99 |                0.99 |           |       0.99 |         0.01 |
| AdaBoostClassifier            |       0.97 |                0.98 |           |       0.97 |         0.13 |
| PassiveAggressiveClassifier   |       0.97 |                0.98 |           |       0.97 |         0.01 |
| LogisticRegression            |       0.97 |                0.98 |           |       0.97 |         0.01 |
| GaussianNB                    |       0.97 |                0.98 |           |       0.97 |         0.01 |
| SGDClassifier                 |       0.96 |                0.96 |           |       0.96 |         0.01 |
| RandomForestClassifier        |       0.96 |                0.96 |           |       0.96 |         0.19 |
| QuadraticDiscriminantAnalysis |       0.96 |                0.96 |           |       0.96 |         0.01 |
| Perceptron                    |       0.96 |                0.96 |           |       0.96 |         0.01 |
| LGBMClassifier                |       0.96 |                0.96 |           |       0.96 |         0.30 |
| ExtraTreeClassifier           |       0.96 |                0.96 |           |       0.96 |         0.01 |
| BaggingClassifier             |       0.95 |                0.95 |           |       0.95 |         0.03 |
| ExtraTreesClassifier          |       0.95 |                0.95 |           |       0.95 |         0.13 |
| XGBClassifier                 |       0.95 |                0.95 |           |       0.95 |         0.19 |
| DecisionTreeClassifier        |       0.95 |                0.95 |           |       0.95 |         0.01 |
| LinearSVC                     |       0.95 |                0.95 |           |       0.95 |         0.01 |
| CalibratedClassifierCV        |       0.95 |                0.95 |           |       0.95 |         0.04 |
| KNeighborsClassifier          |       0.93 |                0.94 |           |       0.93 |         0.01 |
| NuSVC                         |       0.93 |                0.94 |           |       0.93 |         0.01 |
| SVC                           |       0.93 |                0.94 |           |       0.93 |         0.01 |
| RidgeClassifierCV             |       0.91 |                0.91 |           |       0.91 |         0.01 |
| NearestCentroid               |       0.89 |                0.90 |           |       0.89 |         0.01 |
| LabelPropagation              |       0.89 |                0.90 |           |       0.90 |         0.01 |
| LabelSpreading                |       0.89 |                0.90 |           |       0.90 |         0.01 |
| RidgeClassifier               |       0.88 |                0.89 |           |       0.88 |         0.01 |
| BernoulliNB                   |       0.79 |                0.75 |           |       0.77 |         0.01 |
| DummyClassifier               |       0.27 |                0.33 |           |       0.11 |         0.01 |

هنا الكود الكامل للتصنيف.

from lazypredict.Supervised import LazyClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

# Load dataset
data = load_breast_cancer()
X = data.data
y= data.target

# Split data into train and test with a 90:10 ratio
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=.1,random_state =123)

# Initialize the Lazypredict library
clf = LazyClassifier(verbose=0,ignore_warnings=True, custom_metric=None)

# Fit all classification algorithms on training dataset
models,predictions = clf.fit(X_train, X_test, y_train, y_test)

# Calculate performance of all models on test dataset
model_dictionary = clf.provide_models(X_train,X_test,y_train,y_test)
models

بواسطة
Travis Tang
المصدر
Medium

د. علاء طعيمة

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

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

اترك تعليقاً

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

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