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')[源]#
将转换器应用于数组或 pandas DataFrame 的列。
此估计器允许对输入数据的不同列或列子集进行单独转换,每个转换器生成的特征将被连接起来形成一个单一的特征空间。这对于异构或列式数据非常有用,可以将多种特征提取机制或转换组合到一个单一的转换器中。
欲了解更多信息,请参阅用户指南。
0.20 版本新增。
- 参数:
- transformers元组列表
(名称,转换器,列)元组的列表,指定要应用于数据子集的转换器对象。
- name字符串
与 Pipeline 和 FeatureUnion 类似,这允许使用
set_params
设置转换器及其参数,并在网格搜索中进行搜索。- transformer{'drop', 'passthrough'} 或 估计器
估计器必须支持拟合(fit)和转换(transform)。也接受特殊处理的字符串 ‘drop’ 和 ‘passthrough’,分别表示丢弃列或将其直接传递而不进行转换。
- columns字符串,字符串类数组,整数,整数类数组,布尔类数组,切片或可调用对象
在数据的第二个轴上进行索引。整数被解释为位置列,而字符串可以通过名称引用 DataFrame 列。当
transformer
期望 X 为一维类数组(向量)时,应使用标量字符串或整数,否则将把二维数组传递给转换器。可调用对象会接收输入数据X
并可以返回上述任何一种类型。要按名称或 dtype 选择多个列,可以使用make_column_selector
。
- remainder{'drop', 'passthrough'} 或 估计器, 默认值='drop'
默认情况下,只有
transformers
中指定的列会被转换并组合到输出中,未指定的列将被丢弃(默认值为'drop'
)。通过指定remainder='passthrough'
,所有未在transformers
中指定但存在于传递给fit
的数据中的剩余列将自动直接通过。这个列子集会与转换器的输出连接起来。对于数据帧,在fit
期间未见的额外列将从transform
的输出中排除。通过将remainder
设置为估计器,剩余未指定的列将使用remainder
估计器。该估计器必须支持拟合(fit)和转换(transform)。请注意,使用此功能要求在拟合(fit)和转换(transform)时输入的 DataFrame 列具有相同的顺序。- sparse_threshold浮点数, 默认值=0.3
如果不同转换器的输出包含稀疏矩阵,则当整体密度低于此值时,它们将作为稀疏矩阵堆叠。使用
sparse_threshold=0
将始终返回稠密矩阵。当转换后的输出全部由稠密数据组成时,堆叠结果将是稠密的,并且此关键字将被忽略。- n_jobs整数, 默认值=None
并行运行的作业数。
None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关更多详细信息,请参阅术语表。- transformer_weights字典, 默认值=None
每个转换器特征的乘法权重。转换器的输出将乘以这些权重。键是转换器名称,值是权重。
- verbose布尔值, 默认值=False
如果为 True,则在每个转换器拟合完成后,将打印所用的时间。
- verbose_feature_names_out布尔值, 字符串 或 Callable[[str, str], str], 默认值=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_name
和feature_name
。例如"{feature_name}__{transformer_name}"
。有关更多信息,请参阅标准库中的str.format
方法。
1.0 版本新增。
1.6 版本修改:
verbose_feature_names_out
可以是可调用对象或待格式化的字符串。- force_int_remainder_cols布尔值, 默认值=False
此参数无效。
注意
如果您不访问
transformers_
拟合属性中剩余列的列列表,则无需设置此参数。1.5 版本新增。
1.7 版本修改:
force_int_remainder_cols
的默认值将在 1.7 版本中从True
更改为False
。自 1.7 版本起已弃用:
force_int_remainder_cols
已弃用,并将在 1.9 版本中移除。
- 属性:
- transformers_列表
已拟合转换器的集合,以(名称,已拟合转换器,列)元组形式表示。
fitted_transformer
可以是估计器,也可以是'drop'
;'passthrough'
被替换为等效的FunctionTransformer
。如果没有选择任何列,这将是未拟合的转换器。如果存在剩余列,则最后一个元素是形式为:(‘remainder’,转换器,剩余列)的元组,对应于remainder
参数。如果存在剩余列,则len(transformers_)==len(transformers)+1
,否则len(transformers_)==len(transformers)
。1.7 版本新增: 剩余列的格式现在尝试与其它转换器的格式匹配:如果所有列都作为列名 (
str
) 提供,则剩余列也存储为列名;如果所有列都作为掩码数组 (bool
) 提供,则剩余列也存储为掩码数组;在所有其他情况下,剩余列都存储为索引 (int
)。named_transformers_
Bunch
按名称访问已拟合的转换器。
- sparse_output_布尔值
布尔标志,指示
transform
的输出是稀疏矩阵还是稠密 numpy 数组,这取决于各个转换器的输出和sparse_threshold
关键字。- output_indices_字典
一个字典,将每个转换器名称映射到一个切片,该切片对应于转换后输出中的索引。这对于检查哪个转换器负责哪个转换后的特征很有用。
1.0 版本新增。
- n_features_in_整数
在拟合(fit)期间看到的特征数量。仅当底层转换器在拟合时暴露此属性时才定义。
0.24 版本新增。
- feature_names_in_形状为 (
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。
- fit(X, y=None, **params)[源]#
使用 X 拟合所有转换器。
- 参数:
- X{类数组, 数据帧}, 形状为 (n_samples, n_features)
输入数据,其指定子集用于拟合转换器。
- y类数组, 形状为 (n_samples,…), 默认值=None
监督学习的目标。
- **params字典, 默认值=None
要传递给底层转换器的
fit
和transform
方法的参数。仅当元数据路由(metadata routing)启用时才能传递此参数,您可以使用
sklearn.set_config(enable_metadata_routing=True)
启用它。1.4 版本新增。
- 返回:
- selfColumnTransformer 对象
此估计器。
- fit_transform(X, y=None, **params)[源]#
拟合所有转换器,转换数据并连接结果。
- 参数:
- X{类数组, 数据帧}, 形状为 (n_samples, n_features)
输入数据,其指定子集用于拟合转换器。
- y类数组, 形状为 (n_samples,), 默认值=None
监督学习的目标。
- **params字典, 默认值=None
要传递给底层转换器的
fit
和transform
方法的参数。仅当元数据路由(metadata routing)启用时才能传递此参数,您可以使用
sklearn.set_config(enable_metadata_routing=True)
启用它。1.4 版本新增。
- 返回:
- X_t{类数组, 稀疏矩阵}, 形状为 (n_samples, sum_n_components)
转换器水平堆叠的结果。sum_n_components 是转换器中 n_components(输出维度)的总和。如果任何结果是稀疏矩阵,所有内容都将转换为稀疏矩阵。
- get_feature_names_out(input_features=None)[源]#
获取转换的输出特征名称。
- 参数:
- input_features字符串类数组或 None, 默认值=None
输入特征。
如果
input_features
为None
,则使用feature_names_in_
作为输入特征名称。如果未定义feature_names_in_
,则生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]
。如果
input_features
是类数组,则如果定义了feature_names_in_
,则input_features
必须与feature_names_in_
匹配。
- 返回:
- feature_names_out字符串对象 ndarray
转换后的特征名称。
- get_metadata_routing()[源]#
获取此对象的元数据路由。
请查看用户指南,了解路由机制的工作原理。
1.4 版本新增。
- 返回:
- routingMetadataRouter 对象
封装路由信息的
MetadataRouter
对象。
- get_params(deep=True)[源]#
获取此估计器的参数。
返回构造函数中给定的参数以及
ColumnTransformer
的transformers
中包含的估计器。- 参数:
- deep布尔值, 默认值=True
如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。
- 返回:
- params字典
参数名称映射到其值。
- set_output(*, transform=None)[源]#
设置调用
"transform"
和"fit_transform"
时的输出容器。调用
set_output
将设置transformers
和transformers_
中所有估计器的输出。- 参数:
- transform{"default", "pandas", "polars"}, 默认值=None
配置
transform
和fit_transform
的输出。"default"
: 转换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 转换配置不变
1.4 版本新增: 添加了
"polars"
选项。
- 返回:
- self估计器实例
估计器实例。
- set_params(**kwargs)[源]#
设置此估计器的参数。
有效的参数键可以通过
get_params()
列出。请注意,您可以直接设置ColumnTransformer
的transformers
中包含的估计器的参数。- 参数:
- **kwargs字典
估计器参数。
- 返回:
- selfColumnTransformer 对象
此估计器。
- transform(X, **params)[源]#
通过每个转换器分别转换 X,并连接结果。
- 参数:
- X{类数组, 数据帧}, 形状为 (n_samples, n_features)
需要按子集转换的数据。
- **params字典, 默认值=None
要传递给底层转换器的
transform
方法的参数。仅当元数据路由(metadata routing)启用时才能传递此参数,您可以使用
sklearn.set_config(enable_metadata_routing=True)
启用它。1.4 版本新增。
- 返回:
- X_t{类数组, 稀疏矩阵}, 形状为 (n_samples, sum_n_components)
转换器水平堆叠的结果。sum_n_components 是转换器中 n_components(输出维度)的总和。如果任何结果是稀疏矩阵,所有内容都将转换为稀疏矩阵。