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=True)#
应用转换器到数组或pandas DataFrame的列。
这个估计器允许输入的不同列或列子集分别进行转换,并且每个转换器生成的特征将被连接起来形成一个单一的特征空间。这对于异构或列数据非常有用,可以将多个特征提取机制或转换组合成一个转换器。
更多信息请参阅 用户指南 。
Added in version 0.20.
- Parameters:
- transformers元组列表
指定要应用于数据子集的转换器对象的 (name, transformer, columns) 元组列表。
- namestr
类似于 Pipeline 和 FeatureUnion,这允许使用
set_params
设置转换器及其参数,并在网格搜索中进行搜索。- transformer{‘drop’, ‘passthrough’} 或估计器
估计器必须支持 fit 和 transform 。特殊字符串 ‘drop’ 和 ‘passthrough’ 也可以接受,分别表示删除列或不进行转换直接传递。
- columnsstr, str 的类数组, int, int 的类数组, 类数组的 bool, slice 或 callable
索引数据的第二轴。整数被解释为位置列,而字符串可以按名称引用 DataFrame 列。在
transformer
期望 X 为 1d 类数组(向量)的地方,应使用标量字符串或 int,否则将传递 2d 数组给转换器。可调用对象传递输入数据X
并可以返回上述任何内容。要按名称或 dtype 选择多列,可以使用make_column_selector
。
- remainder{‘drop’, ‘passthrough’} 或估计器, default=’drop’
默认情况下,仅在
transformers
中指定的列被转换并组合到输出中,未指定的列被删除(默认值为'drop'
)。通过指定remainder='passthrough'
,所有在transformers
中未指定但在传递给fit
的数据中存在的列将自动传递。这个列子集与转换器的输出连接在一起。对于数据框,在fit
期间未见到的额外列将在transform
的输出中被排除。通过将remainder
设置为估计器,未指定的列将使用remainder
估计器。估计器必须支持 fit 和 transform 。注意,使用此功能需要 DataFrame 列在 fit 和 transform 输入时的顺序相同。- 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, default=True
如果为 True,
ColumnTransformer.get_feature_names_out
将在所有特征名称前加上生成该特征的转换器名称。如果为 False,ColumnTransformer.get_feature_names_out
将不添加任何特征名称前缀,并且在特征名称不唯一时会报错。Added in version 1.0.
- force_int_remainder_colsbool, default=True
强制
transformers_
的最后一个条目的列始终存储为索引(int)而不是列名(str)。详见transformers_
属性的描述。Note
如果您不访问
transformers_
拟合属性中剩余列的列列表,则不需要设置此参数。Added in version 1.5.
Changed in version 1.7:
force_int_remainder_cols
的默认值将从True
更改为False
在版本 1.7 中。
- Attributes:
- transformers_列表
拟合转换器的集合,作为 (name, fitted_transformer, column) 元组。
fitted_transformer
可以是估计器,或'drop'
;'passthrough'
被替换为等效的FunctionTransformer
。在未选择列的情况下,这将是不拟合的转换器。如果有剩余列,最后一个元素是 (‘remainder’, transformer, remaining_columns) 形式,对应于remainder
参数。如果有剩余列,则len(transformers_)==len(transformers)+1
,否则len(transformers_)==len(transformers)
。Changed in version 1.5: 如果有剩余列且
force_int_remainder_cols
为 True,剩余列始终以其输入X
中的位置索引表示(如旧版本)。如果force_int_remainder_cols
为 False,格式尝试匹配其他转换器的格式:如果所有列都以列名 (str
) 提供,剩余列存储为列名;如果所有列都以掩码数组 (bool
) 提供,剩余列也是如此;在所有其他情况下,剩余列存储为索引 (int
)。named_transformers_
Bunch
访问按名称拟合的转换器。
- sparse_output_bool
布尔标志,指示
transform
的输出是稀疏矩阵还是密集 numpy 数组,这取决于单个转换器的输出和sparse_threshold
关键字。- output_indices_dict
每个转换器名称到切片的字典,切片对应于转换输出的索引。这有助于检查哪个转换器负责哪些转换特征。
Added in version 1.0.
- n_features_in_int
在 fit 期间看到的特征数。仅在底层转换器在拟合时暴露此属性时定义。
Added in version 0.24.
- feature_names_in_ndarray of shape (
n_features_in_
,) 在 fit 期间看到的特征名称。仅当
X
的特征名称均为字符串时定义。Added in version 1.0.
See also
make_column_transformer
方便函数,用于将多个转换器对象应用于原始特征空间列子集的输出组合。
make_column_selector
方便函数,用于基于数据类型或列名与正则表达式模式选择列。
Notes
转换特征矩阵中的列顺序遵循
transformers
列表中列的指定顺序。原始特征矩阵中未指定的列将从结果转换特征矩阵中删除,除非在passthrough
关键字中指定。使用passthrough
指定的列将添加到转换器的输出右侧。Examples
>>> 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
可以通过将列设置为字符串来配置需要 1d 数组的转换器:>>> 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" 是一个字符串,配置 ColumnTransformer 将 documents 列作为 1d 数组传递给 CountVectorizer >>> ct = ColumnTransformer( ... [("text_preprocess", CountVectorizer(), "documents"), ... ("num_preprocess", MinMaxScaler(), ["width"])]) >>> X_trans = ct.fit_transform(X)
有关更详细的示例,请参阅 带有混合类型的列转换器 。
- fit(X, y=None, **params)#
拟合所有转换器使用X。
- Parameters:
- X{array-like, dataframe},形状为 (n_samples, n_features)
输入数据,其中指定的子集用于拟合转换器。
- y形状为 (n_samples,…) 的 array-like,默认=None
监督学习的目标。
- **paramsdict,默认=None
要传递给底层转换器的
fit
和transform
方法的参数。只有在启用元数据路由时才能传递此参数,您可以使用
sklearn.set_config(enable_metadata_routing=True)
启用。Added in version 1.4.
- Returns:
- selfColumnTransformer
此估计器。
- fit_transform(X, y=None, **params)#
拟合所有转换器,转换数据并连接结果。
- Parameters:
- X{array-like, dataframe},形状为 (n_samples, n_features)
输入数据,其中指定的子集用于拟合转换器。
- yarray-like,形状为 (n_samples,),默认=None
监督学习的目标。
- **paramsdict,默认=None
要传递给底层转换器的
fit
和transform
方法的参数。只有在启用元数据路由时才能传递此参数,您可以使用
sklearn.set_config(enable_metadata_routing=True)
启用。Added in version 1.4.
- Returns:
- X_t{array-like, sparse matrix},形状为 (n_samples, sum_n_components)
转换器的水平堆叠结果。sum_n_components 是转换器上 n_components(输出维度)的总和。如果任何结果是稀疏矩阵,则所有结果都将转换为稀疏矩阵。
- get_feature_names_out(input_features=None)#
获取变换后的输出特征名称。
- Parameters:
- input_features字符串的数组或None,默认=None
输入特征。
如果
input_features
是None
,则使用feature_names_in_
作为输入特征名称。如果feature_names_in_
未定义,则生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]
。如果
input_features
是数组,则input_features
必须与feature_names_in_
匹配(如果feature_names_in_
已定义)。
- Returns:
- feature_names_out字符串对象的ndarray
变换后的特征名称。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
Added in version 1.4.
- Returns:
- routingMetadataRouter
MetadataRouter
封装的 路由信息。
- get_params(deep=True)#
获取此估计器的参数。
返回在构造函数中给出的参数以及
ColumnTransformer
的transformers
中包含的估计器的参数。- Parameters:
- deepbool, default=True
如果为True,将返回此估计器及其包含的作为估计器的子对象的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- property named_transformers_#
访问按名称拟合的转换器。
只读属性,用于按给定名称访问任何转换器。 键是转换器名称,值是拟合的转换器对象。
- set_output(*, transform=None)#
设置在调用
"transform"
和"fit_transform"
时的输出容器。调用
set_output
将设置transformers
和transformers_
中所有估计器的输出。- Parameters:
- transform{“default”, “pandas”, “polars”}, default=None
配置
transform
和fit_transform
的输出。"default"
: 转换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 转换配置不变
Added in version 1.4:
"polars"
选项已添加。
- Returns:
- selfestimator instance
估计器实例。
- set_params(**kwargs)#
设置此估计器的参数。
可以使用
get_params()
列出有效的参数键。请注意,您可以直接设置ColumnTransformer
的transformers
中包含的估计器的参数。- Parameters:
- **kwargsdict
估计器参数。
- Returns:
- selfColumnTransformer
此估计器。
- transform(X, **params)#
将X分别通过每个转换器进行转换,并将结果连接起来。
- Parameters:
- X{array-like, dataframe} of shape (n_samples, n_features)
要通过子集转换的数据。
- **paramsdict, default=None
要传递给底层转换器的
transform
方法的参数。只有在启用元数据路由的情况下才能传递此参数,可以使用
sklearn.set_config(enable_metadata_routing=True)
启用。Added in version 1.4.
- Returns:
- X_t{array-like, sparse matrix} of shape (n_samples, sum_n_components)
转换器的水平堆叠结果。sum_n_components是转换器的n_components(输出维度)之和。如果任何结果是稀疏矩阵,则所有内容都将转换为稀疏矩阵。