Sklearn管道保持ID列不变

问题描述 投票:0回答:1

我正在尝试使用功能联合将我的差异管道全部部署在一起,除了一个问题之外,其他所有东西都可以正常工作。

在我的DataFrame中,我有一个列ID,我希望在所有管道中保持不变。我必须将其提供给管道,因为我应用了一种热编码和其他内容,我不能只将其合并回最后。

    scaler_pipeline = Pipeline([
    ('selector', DataFrameSelector(col_scalar)),
    ('imputer', SimpleImputer(strategy="median")),
    ('std_scaler', StandardScaler())
])
one_hot_pipeline = Pipeline([
    ('selector', DataFrameSelector(col_one_hot)),
    ('imputer', SimpleImputer(strategy="most_frequent")),
    ('one_hot', OneHotEncoder())
])

  full_pipeline = FeatureUnion(transformer_list=[
    ("DataFrameSelector", DataFrameSelector(immutable_col)),
    ("scaler_pipeline", scaler_pipeline),
    ("one_hot_pipeline", one_hot_pipeline),
])

我的DataFrameSelector就是这样:

class DataFrameSelector(BaseEstimator, TransformerMixin):
def __init__(self, attribute_names):
    self.attribute_names = attribute_names

def fit(self, X, y=None):
    return self

def transform(self, X):
    return X[self.attribute_names]

[“ full_pipeline”的开头,我想选择一些列(此处的ID),并保留它而不触动它。

现在我收到此错误

TypeError:不支持类型转换:(dtype('O'),dtype('float64'),dtype('float64'))

谢谢。

scikit-learn pipeline
1个回答
0
投票

您可以将ColumnTransformerremainder='passthrough'结合使用,以使变压器适合所选的列,而其他列保持不变。

© www.soinside.com 2019 - 2024. All rights reserved.