【问题标题】:How to use the `ColumnTransformer`?如何使用`ColumnTransformer`?
【发布时间】:2021-07-29 06:53:03
【问题描述】:

我正在尝试使用 scikitlearn 的 ColumnTransformer
这是我所拥有的:

median_imputer = SimpleImputer(strategy = 'median')
mean_imputer = SimpleImputer(strategy = 'mean')

ct = ColumnTransformer([("LotFrontage", median_imputer, X_train.LotFrontage), ("MasVnrArea", median_imputer, X_train.MasVnrArea), ("GarageYrBlt", median_imputer, X_train.GarageYrBlt)])

imputed_X_train = pd.DataFrame(ct.fit_transform(X_train))

但这似乎不起作用,我收到以下关于 fit_transform 函数的 ValueError:
“没有有效的列规范。只允许使用所有整数或所有字符串的标量、列表或切片,或布尔掩码”
我做错了什么?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    您正在为每个三元组的第三个元素(X_train.LotFrontage 等)传递实际的列数据。您应该改为传递列的 name [还有其他选项,请参阅文档],例如

    ct = ColumnTransformer([
        ("med_imp", median_imputer, ["LotFrontage", "MasVnrArea"]),
        ("mean_imp", mean_imputer, ["GarageYrBlt"])
    ])
    

    (由于 imputers 对 2D 输入进行操作,您需要提供一个 list 列。我将两个组合在一起并使用您的 mean_imputer 只是为了使示例更复杂一些。 )

    【讨论】:

    • 这个名字有什么用?例如“med_imp”在哪里发挥作用?
    • 来自文档:“就像在 Pipeline 和 FeatureUnion 中一样,这允许使用 set_params 设置转换器及其参数并在网格搜索中进行搜索。”您还可以在named_transformers_ 中获得合适的变压器,这是字典式的,这些名称作为键。最后,get_feature_names 在转换后的列名前加上转换器名称。
    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 2017-07-15
    • 2022-08-12
    • 2022-09-23
    • 1970-01-01
    • 2022-09-25
    • 2020-04-21
    相关资源
    最近更新 更多