Machine Learning

TargetEncoder بومی: کدگذاری با متغیر هدف، بدون نشت داده

TargetEncoder توی scikit-learn موقع fit_transform از cross-fitting داخلی استفاده می‌کنه: هر سطر با میانگین‌هایی کد میشه که خودِ اون سطر توی محاسبه‌شون نبوده، و همین نشت متغیر هدف رو خنثی می‌کنه.

کاربرد

متغیرهای دسته‌ای با کاردینالیتی خیلی بالا که one-hot براشون اصلاً عملی نیست (هزاران مقدار یکتا).

پیش‌نیازها

scikit-learn 1.3+

Python
from sklearn.preprocessing import TargetEncoder
from sklearn.pipeline import Pipeline
from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.compose import ColumnTransformer

prep = ColumnTransformer([
    ("target_enc", TargetEncoder(cv=5, smooth="auto"), ["ville", "code_naf"]),
], remainder="passthrough")

pipe = Pipeline([
    ("prep", prep),
    ("clf", HistGradientBoostingClassifier(random_state=42)),
])
# fit_transform utilise le cross-fitting ; transform (en test) utilise
# l'encodage appris sur tout le train -> aucune fuite.
pipe.fit(X_train, y_train)

نتیجه

Pipeline(steps=[('prep',
                 ColumnTransformer(remainder='passthrough',
                                   transformers=[('target_enc',
                                                  TargetEncoder(cv=5,
                                                                smooth='auto'),
                                                  ['ville', 'code_naf'])])),
                ('clf', HistGradientBoostingClassifier(random_state=42))])
TargetEncoderFuite de donnéesCardinalitéEncodage

اسنیپت‌های مرتبط

بازگشت به آزمایشگاه داده