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
估计器必须支持 fit 和 transform。还接受特殊的字符串 ‘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估计器。估计器必须支持 fit 和 transform。请注意,使用此功能要求在 fit 和 transform 时输入的 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_name和feature_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
要传递给底层转换器
fit和transform方法的参数。仅当启用了元数据路由(可以使用
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
要传递给底层转换器
fit和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(输出维度)的总和。如果任何结果是稀疏矩阵,所有内容都将转换为稀疏矩阵。
- get_feature_names_out(input_features=None)[source]#
获取转换的输出特征名称。
- 参数:
- input_featuresarray-like of str or None, default=None
输入特征。
如果
input_features为None,则使用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]#
获取此估计器的参数。
返回构造函数中给定的参数以及
ColumnTransformer的transformers中包含的估计器。- 参数:
- deepbool, default=True
如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- set_output(*, transform=None)[source]#
设置调用
"transform"和"fit_transform"时的输出容器。调用
set_output将设置transformers和transformers_中所有估计器的输出。- 参数:
- transform{“default”, “pandas”, “polars”}, default=None
配置
transform和fit_transform的输出。"default": 转换器的默认输出格式"pandas": DataFrame 输出"polars": Polars 输出None: 转换配置保持不变
1.4 版本新增: 添加了
"polars"选项。
- 返回:
- selfestimator instance
估计器实例。
- set_params(**kwargs)[source]#
设置此估计器的参数。
有效参数键可以通过
get_params()列出。请注意,您可以直接设置ColumnTransformer的transformers中包含的估计器的参数。- 参数:
- **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(输出维度)的总和。如果任何结果是稀疏矩阵,所有内容都将转换为稀疏矩阵。