首页 > 解决方案 > ColumnTransformer 管道不返回功能名称

问题描述

我正在尝试返回在管道中创建的功能,以便稍后使用相应的列名绘制功能重要性。但是,我得到“变形金刚日(管道类型)不提供 get_feature_names。” 尽管在下面的类中定义了错误。

class DatesTransformer(BaseEstimator, TransformerMixin):
    """
    Transforms date column to datetime and add features with 
    year, month and day of week. Excludes the date columns in the end.
    """
    drop_col : bool = True

    def fit(self, X, y=None):
        self.dates = pd.to_datetime(X["date_time"])
        return self

    def transform(self, X, y=None):
        X["month"]     = self.dates.dt.month
        if self.drop_col:
            X.drop(["date_time"], axis=1, inplace=True)

        self.columns = columns

        return X

    def get_feature_names(self):
        return X.columns.tolist() 
#Pipeline for dates attributes
date_pipeline = Pipeline([
        ("dates_transformer", DatesTransformer()),
        ("imputer", SimpleImputer(strategy="most_frequent")),
        ("cat_encoder", OneHotEncoder(sparse=False))
    ])
full_pipeline = ColumnTransformer([
        ("day",  date_pipeline,    day_features)])

然后使用以下代码安装管道:

X_train = full_pipeline.fit_transform(train)
print(X_train.shape)
X_valid = full_pipeline.fit_transform(valid)
print(X_valid.shape)

不幸的是,这是我得到错误的地方。

full_pipeline.get_feature_names()

任何帮助,将不胜感激。

标签: pythonclassmachine-learningscikit-learnpipeline

解决方案


推荐阅读