تعلّم في fit وطبّق في transform
المحوِّل مقدِّر له مهمة ثانية. تتعلم fit(X) أعدادًا من البيانات (متوسطًا أو كمّية أو مفردات) وتخزنها في خصائص تنتهي بشرطة سفلية وتعيد self. ثم تطبق transform(X) تلك الأعداد المخزنة على أي بيانات جديدة أو قديمة دون أن تنظر إليها لتقرر شيئًا. هذا الفصل هو لبّ الأمر: تُتعلَّم الأعداد مرة واحدة على صفوف التدريب وتُحوَّل صفوف الاختبار فقط. والمقصّ الإحصائي (winsorizer) مثال أول جيد. تتعلم fit كمّية دنيا وعليا لكل عمود وتقصّ transform بـ np.clip بينهما. ولو أعادت transform حساب الكمّيات على ما يصلها لقُصّت كل مجموعة إلى مداها هي ولم تصل معلومات التدريب إلى الاختبار أبدًا. ورث من TransformerMixin وBaseEstimator فتحصل أيضًا على fit_transform وآلية المعاملات مجانًا.
الجداول الحقيقية تخلط الأعداد والفئات فتقدّم scikit-learn ColumnTransformer([(الاسم، المحوِّل، الأعمدة), ...]): يعالج كل فرع أعمدته وتُلصق المخرجات جنبًا إلى جنب. هنا الفرع العددي make_pipeline(Winsorizer(0.02, 0.98), StandardScaler()) والفرع الفئوي OneHotEncoder(handle_unknown='ignore') الذي يحوّل الفئة غير المعروفة إلى صف أصفار بدل خطأ. وتفرض sparse_threshold=0 مصفوفة كثيفة. ولتسمية أعمدة المخرجات يجب أن تجيب كل خطوة عن get_feature_names_out ولهذا يجب أن ينفذها مقصّك: يعيد الأسماء التي تلقاها. القاعدة الذهبية استدعاء fit_transform على صفوف التدريب وtransform فقط على صفوف الاختبار. في لوحة الأسهم (26 رمزًا و10,296 صفًا) يترك الفصل في 1 يناير 2023 نحو 5,564 صف تدريب و4,732 صف اختبار، ونحو 2.2% من قيم الزخم في الاختبار تقع خارج مدى 2%–98% للتدريب وتُقصّ إلى حدود التدريب.
- تعلّم مرة وطبّق في كل مكان: تخزن
fitأعدادًا من صفوف التدريب وتكتفيtransformبتطبيقها. - معالج مسبق بفرعين: يرسل
ColumnTransformerالأعداد والفئات إلى خطواتها الخاصة؛ وhandle_unknown="ignore"يصمد أمام الفئات الجديدة. - نفّذ العقد كاملًا: محوِّل لا يستطيع تسمية أعمدة مخرجاته يكسر
get_feature_names_outلخط المعالجة كله.
المختبر: ما الذي يُقيَّم
- المُنشئ5 نقطة
- fit وtransform20 نقطة
- أسماء الميزات وخطوط المعالجة10 نقطة
- المعالج المسبق بفرعين15 نقطة
- التقسيم بالتاريخ10 نقطة
- الملاءمة على الماضي فقط10 نقطة
- دراسة اللوحة30 نقطة