ColumnTransformer#

class sklearn.compose.ColumnTransformer(transformers, *, remainder='drop', sparse_threshold=0.3, n_jobs=None, transformer_weights=None, verbose=False, verbose_feature_names_out=True, force_int_remainder_cols='deprecated')[source]#

将转换器应用于数组或 pandas DataFrame 的列。

此估计器允许对输入的**不同列或列子集**进行分别转换,然后将每个转换器生成的特征**连接**起来形成单个特征空间。这对于异构或列式数据非常有用,可以将多种特征提取机制或转换组合成一个转换器。

用户指南中阅读更多内容。

0.20 版本新增。

参数:
transformerstuple 列表

指定应用于数据子集的转换器对象的 (name, transformer, columns) 元组列表。

namestr

与 Pipeline 和 FeatureUnion 中一样,这允许使用 set_params 设置转换器及其参数,并在网格搜索中进行搜索。

transformer{‘drop’, ‘passthrough’} or estimator

估计器必须支持 fittransform。还接受特殊的字符串 ‘drop’ 和 ‘passthrough’,分别表示删除列或按原样传递列而不进行转换。

columnsstr, array-like of str, int, array-like of int, array-like of bool, slice or callable

按其第二个轴对数据进行索引。整数被解释为位置列,而字符串可以按名称引用 DataFrame 列。当 transformer 期望 X 为一维 array-like (向量) 时,应使用标量字符串或整数,否则将向转换器传递二维数组。可调用对象将传入输入数据 X 并返回上述任何一种类型。要按名称或 dtype 选择多列,可以使用 make_column_selector

remainder{‘drop’, ‘passthrough’} or estimator, default=’drop’

默认情况下,只转换并组合 transformers 中指定的列,而未指定的列将被删除。(默认值为 'drop')。通过指定 remainder='passthrough',所有未在 transformers 中指定但在传递给 fit 的数据中存在的剩余列将自动按原样传递。此列子集将与转换器的输出连接。对于数据框,在 fit 期间未见到的额外列将从 transform 的输出中排除。通过将 remainder 设置为估计器,剩余的未指定列将使用 remainder 估计器。估计器必须支持 fittransform。请注意,使用此功能要求在 fittransform 时输入的 DataFrame 列具有相同的顺序。

sparse_thresholdfloat, default=0.3

如果不同转换器的输出包含稀疏矩阵,则当总体密度低于此值时,它们将堆叠为稀疏矩阵。使用 sparse_threshold=0 将始终返回密集矩阵。当转换后的输出全部由密集数据组成时,堆叠结果将是密集的,并且此关键字将被忽略。

n_jobsint, default=None

并行运行的作业数。None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。有关更多详细信息,请参阅 Glossary

transformer_weightsdict, default=None

每个转换器的特征乘法权重。转换器的输出乘以这些权重。键是转换器名称,值是权重。

verbosebool, default=False

如果为 True,则在完成每个转换器拟合时打印耗时。

verbose_feature_names_outbool, str or Callable[[str, str], str], default=True
  • 如果为 True,ColumnTransformer.get_feature_names_out 将使用生成该特征的转换器的名称作为所有特征名称的前缀。这等同于设置 verbose_feature_names_out="{transformer_name}__{feature_name}"

  • 如果为 False,ColumnTransformer.get_feature_names_out 将不为任何特征名称添加前缀,如果特征名称不唯一,则会报错。

  • 如果为 Callable[[str, str], str]ColumnTransformer.get_feature_names_out 将使用转换器的名称重命名所有特征。可调用对象的第一个参数是转换器名称,第二个参数是特征名称。返回的字符串将是新的特征名称。

  • 如果为 str,它必须是准备好格式化的字符串。给定的字符串将使用两个字段名进行格式化:transformer_namefeature_name。例如 "{feature_name}__{transformer_name}"。有关更多信息,请参阅标准库中的 str.format 方法。

1.0 版本新增。

1.6 版本更改: verbose_feature_names_out 可以是可调用对象或要格式化的字符串。

force_int_remainder_colsbool, default=False

此参数无效。

注意

如果您不需要访问 transformers_ 拟合属性中的剩余列列表,则无需设置此参数。

1.5 版本新增。

1.7 版本更改: force_int_remainder_cols 的默认值将在 1.7 版本中从 True 更改为 False

1.7 版本已弃用: force_int_remainder_cols 已弃用,并将在 1.9 版本中移除。

属性:
transformers_list

拟合的转换器集合,格式为 (name, fitted_transformer, column) 元组。fitted_transformer 可以是估计器,也可以是 'drop''passthrough' 被替换为等效的 FunctionTransformer。如果未选择任何列,则这将是未拟合的转换器。如果存在剩余列,则最后一个元素是形式为 (‘remainder’, transformer, remaining_columns) 的元组,对应于 remainder 参数。如果存在剩余列,则 len(transformers_)==len(transformers)+1,否则 len(transformers_)==len(transformers)

1.7 版本新增: 剩余列的格式现在尝试与其它转换器匹配:如果所有列都作为列名 (str) 提供,则剩余列将作为列名存储;如果所有列都作为掩码数组 (bool) 提供,则剩余列也是如此;在所有其他情况下,剩余列将作为索引 (int) 存储。

named_transformers_Bunch

按名称访问拟合的转换器。

sparse_output_bool

布尔标志,指示 transform 的输出是稀疏矩阵还是密集 numpy 数组,这取决于各个转换器的输出和 sparse_threshold 关键字。

output_indices_dict

一个字典,将每个转换器名称映射到切片,其中切片对应于转换后输出中的索引。这对于检查哪个转换器负责哪些转换后的特征非常有用。

1.0 版本新增。

n_features_in_int

fit 期间看到的特征数量。仅当底层转换器在拟合时公开此类属性时才定义。

0.24 版本新增。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

fit 期间看到的特征名称。仅当 X 具有全部为字符串的特征名称时才定义。

1.0 版本新增。

另请参阅

make_column_transformer

用于组合应用于原始特征空间列子集的多个转换器对象的输出的便捷函数。

make_column_selector

用于根据数据类型或带有正则表达式模式的列名选择列的便捷函数。

注意事项

转换后的特征矩阵中的列顺序遵循 transformers 列表中指定列的顺序。未指定的原始特征矩阵中的列将从生成的转换后特征矩阵中删除,除非在 passthrough 关键字中指定。使用 passthrough 指定的列将添加到转换器输出的右侧。

示例

>>> import numpy as np
>>> from sklearn.compose import ColumnTransformer
>>> from sklearn.preprocessing import Normalizer
>>> ct = ColumnTransformer(
...     [("norm1", Normalizer(norm='l1'), [0, 1]),
...      ("norm2", Normalizer(norm='l1'), slice(2, 4))])
>>> X = np.array([[0., 1., 2., 2.],
...               [1., 1., 0., 1.]])
>>> # Normalizer scales each row of X to unit norm. A separate scaling
>>> # is applied for the two first and two last elements of each
>>> # row independently.
>>> ct.fit_transform(X)
array([[0. , 1. , 0.5, 0.5],
       [0.5, 0.5, 0. , 1. ]])

ColumnTransformer 可以通过将列设置为字符串来配置需要一维数组的转换器

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> from sklearn.preprocessing import MinMaxScaler
>>> import pandas as pd
>>> X = pd.DataFrame({
...     "documents": ["First item", "second one here", "Is this the last?"],
...     "width": [3, 4, 5],
... })
>>> # "documents" is a string which configures ColumnTransformer to
>>> # pass the documents column as a 1d array to the CountVectorizer
>>> ct = ColumnTransformer(
...     [("text_preprocess", CountVectorizer(), "documents"),
...      ("num_preprocess", MinMaxScaler(), ["width"])])
>>> X_trans = ct.fit_transform(X)

有关更详细的用法示例,请参阅 包含混合类型的列转换器 (Column Transformer with Mixed Types)

fit(X, y=None, **params)[source]#

使用 X 拟合所有转换器。

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, dataframe}

输入数据,其中指定的子集用于拟合转换器。

yshape 为 (n_samples,…), default=None 的 array-like

用于监督学习的目标。

**paramsdict, default=None

要传递给底层转换器 fittransform 方法的参数。

仅当启用了元数据路由(可以使用 sklearn.set_config(enable_metadata_routing=True) 启用)时才能传递此参数。

1.4 版本新增。

返回:
selfColumnTransformer

此估计器。

fit_transform(X, y=None, **params)[source]#

拟合所有转换器,转换数据并连接结果。

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, dataframe}

输入数据,其中指定的子集用于拟合转换器。

yshape 为 (n_samples,), default=None 的 array-like

用于监督学习的目标。

**paramsdict, default=None

要传递给底层转换器 fittransform 方法的参数。

仅当启用了元数据路由(可以使用 sklearn.set_config(enable_metadata_routing=True) 启用)时才能传递此参数。

1.4 版本新增。

返回:
X_tshape 为 (n_samples, sum_n_components) 的 {array-like, sparse matrix}

转换器结果的水平堆叠。sum_n_components 是所有转换器 n_components(输出维度)的总和。如果任何结果是稀疏矩阵,所有内容都将转换为稀疏矩阵。

get_feature_names_out(input_features=None)[source]#

获取转换的输出特征名称。

参数:
input_featuresarray-like of str or None, default=None

输入特征。

  • 如果 input_featuresNone,则使用 feature_names_in_ 作为输入特征名称。如果 feature_names_in_ 未定义,则生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]

  • 如果 input_features 是 array-like,则如果定义了 feature_names_in_input_features 必须与 feature_names_in_ 匹配。

返回:
feature_names_outstr 对象的 ndarray

转换后的特征名称。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查阅 用户指南,了解路由机制如何工作。

1.4 版本新增。

返回:
routingMetadataRouter

封装路由信息的 MetadataRouter

get_params(deep=True)[source]#

获取此估计器的参数。

返回构造函数中给定的参数以及 ColumnTransformertransformers 中包含的估计器。

参数:
deepbool, default=True

如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。

返回:
paramsdict

参数名称映射到其值。

set_output(*, transform=None)[source]#

设置调用 "transform""fit_transform" 时的输出容器。

调用 set_output 将设置 transformerstransformers_ 中所有估计器的输出。

参数:
transform{“default”, “pandas”, “polars”}, default=None

配置 transformfit_transform 的输出。

  • "default": 转换器的默认输出格式

  • "pandas": DataFrame 输出

  • "polars": Polars 输出

  • None: 转换配置保持不变

1.4 版本新增: 添加了 "polars" 选项。

返回:
selfestimator instance

估计器实例。

set_params(**kwargs)[source]#

设置此估计器的参数。

有效参数键可以通过 get_params() 列出。请注意,您可以直接设置 ColumnTransformertransformers 中包含的估计器的参数。

参数:
**kwargsdict

估计器参数。

返回:
selfColumnTransformer

此估计器。

transform(X, **params)[source]#

通过每个转换器分别转换 X,并连接结果。

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, dataframe}

要按子集转换的数据。

**paramsdict, default=None

要传递给底层转换器 transform 方法的参数。

仅当启用了元数据路由(可以使用 sklearn.set_config(enable_metadata_routing=True) 启用)时才能传递此参数。

1.4 版本新增。

返回:
X_tshape 为 (n_samples, sum_n_components) 的 {array-like, sparse matrix}

转换器结果的水平堆叠。sum_n_components 是所有转换器 n_components(输出维度)的总和。如果任何结果是稀疏矩阵,所有内容都将转换为稀疏矩阵。