بناء وتنقيح خطوط أنابيب تعلم الآلة الذكية باستخدام TPOT: أتمتة وتحسين الأداء

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

إعداد بيئة العمل وتجهيز البيانات

  1. تثبيت المكتبات: نبدأ بتثبيت المكتبات الضرورية باستخدام الأمر التالي في Google Colab:

    pip -q install tpot==0.12.2 xgboost==2.0.3 scikit-learn==1.4.2 graphviz==0.20.3
  2. استيراد المكتبات: بعد التثبيت، نقوم باستيراد المكتبات اللازمة لمعالجة البيانات، وبناء النماذج، وتحسين خطوط الأنابيب:

    import os, json, math, time, random, numpy as np, pandas as pd
    from sklearn.datasets import load_breast_cancer
    from sklearn.model_selection import train_test_split, StratifiedKFold
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import make_scorer, f1_score, classification_report, confusion_matrix
    from sklearn.pipeline import Pipeline
    from tpot import TPOTClassifier
    from sklearn.linear_model import LogisticRegression
    from sklearn.naive_bayes import GaussianNB
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import RandomForestClassifier, ExtraTreesClassifier, GradientBoostingClassifier
    from xgboost import XGBClassifier
    
    SEED = 7
    random.seed(SEED); np.random.seed(SEED); os.environ["PYTHONHASHSEED"]=str(SEED)

    نحدد هنا SEED لضمان تكرار النتائج في كل مرة نقوم بتشغيل الكود.

  3. تحميل وتجهيز البيانات: سنستخدم مجموعة بيانات سرطان الثدي من مكتبة scikit-learn:

    X, y = load_breast_cancer(return_X_y=True, as_frame=True)
    X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, stratify=y, random_state=SEED)
    scaler = StandardScaler().fit(X_tr)
    X_tr_s, X_te_s = scaler.transform(X_tr), scaler.transform(X_te)
    
    def f1_cost_sensitive(y_true, y_pred):
        return f1_score(y_true, y_pred, average='binary', pos_label=1)
    cost_f1 = make_scorer(f1_cost_sensitive, greater_is_better=True)

    نقوم بتقسيم البيانات إلى مجموعات تدريب واختبار، مع الحفاظ على التوازن بين الفئات، ونقوم بتطبيع البيانات باستخدام StandardScaler. كما نعرّف دالة تقييم مخصصة تعتمد على مقياس F1.

تعريف تكوين TPOT وبدء عملية البحث

تحديد مساحة البحث

نحدد تكوين TPOT الذي يحدد النماذج وخياراتها:

tpot_config = {
    'sklearn.linear_model.LogisticRegression': {
        'C': [0.01, 0.1, 1.0, 10.0], 'penalty': ['l2'], 'solver': ['lbfgs'], 'max_iter': [200]
    },
    'sklearn.naive_bayes.GaussianNB': {},
    'sklearn.tree.DecisionTreeClassifier': {
        'criterion': ['gini','entropy'], 'max_depth': [3,5,8,None], 'min_samples_split':[2,5,10], 'min_samples_leaf':[1,2,4]
    },
    # ... (باقي النماذج) ...
}

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

استراتيجية التحقق المتصالب

نستخدم التحقق المتصالب الطبقي (StratifiedKFold) لضمان توزيع متوازن للفئات في كل مجموعة من مجموعات التدريب:

cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=SEED)

تشغيل TPOT

نبدأ عملية البحث التطوري باستخدام TPOT:

t0 = time.time()
tpot = TPOTClassifier(
    generations=5, population_size=40, offspring_size=40, scoring=cost_f1, cv=cv, subsample=0.8,
    n_jobs=-1, config_dict=tpot_config, verbosity=2, random_state=SEED, max_time_mins=10,
    early_stop=3, periodic_checkpoint_folder="tpot_ckpt", warm_start=False
)
tpot.fit(X_tr_s, y_tr)
print(f"n First search took {time.time()-t0:.1f}s")

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

تحليل النتائج واختيار أفضل نموذج

بعد انتهاء عملية البحث، نقوم بتحليل جبهة باريتو (Pareto front) لاختيار أفضل خطوط الأنابيب:

# ... (دالة pareto_table و eval_pipeline) ...

نقوم بتقييم أفضل خطوط الأنابيب على مجموعة الاختبار باستخدام دالة eval_pipeline، والتي تُظهر تقريرًا كاملاً للأداء.

تحسين النتائج باستخدام “البدء الدافئ” (Warm Start)

يمكننا تحسين النتائج باستخدام “البدء الدافئ”:

# ... (كود warm start) ...

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

تصدير النموذج وتقييمه

نقوم بتصدير أفضل خط أنابيب تم العثور عليه:

# ... (كود التصدير) ...

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

بطاقة النموذج (Model Card)

ننشئ بطاقة نموذج موجز تحتوي على معلومات حول مجموعة البيانات، وإعدادات البحث، وأفضل خط أنابيب:

# ... (كود بطاقة النموذج) ...

هذا يساعد على ضمان قابلية إعادة إنتاج النتائج.

الخلاصة

يُظهر هذا المقال كيف يمكن استخدام TPOT لأتمتة عملية بناء وتنقيح خطوط أنابيب تعلم الآلة. إن استخدام TPOT يسمح بتوفير الوقت والجهد، ويُحسّن دقة النماذج، ويُسهّل عملية نشرها. كما أنه يوفر قابلية للتفسير والشفافية في عملية البحث عن أفضل نموذج.

المصدر: MarkTechPost