小编Laz*_*val的帖子

在 sklearn 管道中对分类变量实施 KNN 插补

我正在使用 sklearn 的管道转换器实现预处理管道。我的管道包括 sklearn 的 KNNImputer 估计器,我想用它来估算数据集中的分类特征。(我的问题类似于这个线程,但它不包含我的问题的答案:How to implement KNN to impute categorical features in a sklearn pipeline

我知道分类特征必须在插补之前编码,这就是我遇到麻烦的地方。使用标准标签/序数/onehot 编码器,当尝试使用缺失值 (np.nan) 对分类特征进行编码时,您会收到以下错误:

ValueError: Input contains NaN
Run Code Online (Sandbox Code Playgroud)

我设法通过创建一个自定义编码器来“绕过”它,我将 np.nan 替换为“Missing”:

class CustomEncoder(BaseEstimator, TransformerMixin):
    def __init__(self):
        self.encoder = None

    def fit(self, X, y=None):
        self.encoder = OrdinalEncoder()
        return self.encoder.fit(X.fillna('Missing'))

    def transform(self, X, y=None):
        return self.encoder.transform(X.fillna('Missing'))

    def fit_transform(self, X, y=None, **fit_params):
        self.encoder = OrdinalEncoder()
        return self.encoder.fit_transform(X.fillna('Missing'))

preprocessor = ColumnTransformer([
    ('categoricals', CustomEncoder(), cat_features),
    ('numericals', StandardScaler(), num_features)],
    remainder='passthrough'
)

pipeline = Pipeline([
    ('preprocessing', preprocessor), …
Run Code Online (Sandbox Code Playgroud)

python encoding pipeline scikit-learn imputation

4
推荐指数
1
解决办法
2838
查看次数

标签 统计

encoding ×1

imputation ×1

pipeline ×1

python ×1

scikit-learn ×1