列变换器#

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)[source]#

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

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

用户指南中了解更多信息。

在 0.20 版本中添加。

参数:
transformers元组列表

指定要应用于数据子集的转换器对象的 (名称、转换器、列) 元组列表。

namestr

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

transformer{'drop', 'passthrough'} 或估计器

估计器必须支持拟合转换。特殊情况的字符串 'drop' 和 'passthrough' 也被接受,分别表示丢弃列或不经转换地传递列。

columnsstr,str 的数组,int,int 的数组,bool 的数组,切片或可调用对象

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

remainder{'drop', 'passthrough'} 或估计器,默认为 'drop'

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

sparse_threshold浮点数,默认为 0.3

如果不同转换器的输出包含稀疏矩阵,则如果整体密度低于此值,则这些矩阵将作为稀疏矩阵堆叠。使用sparse_threshold=0始终返回密集矩阵。当转换后的输出包含所有密集数据时,堆叠的结果将是密集的,并且此关键字将被忽略。

n_jobsint,默认为 None

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

transformer_weightsdict,默认为 None

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

verbosebool,默认为 False

如果为 True,则将在每个转换器拟合完成后打印拟合所花费的时间。

verbose_feature_names_outbool,str 或 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_namefeature_name。例如:"{feature_name}__{transformer_name}"。更多信息请参见标准库中的str.format 方法。

版本 1.0 中新增。

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

force_int_remainder_colsbool,默认值=True

强制将transformers_的最后一个条目的列(对应于“remainder”转换器)始终存储为索引(int),而不是列名(str)。有关详细信息,请参见transformers_属性的描述。

注意

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

版本 1.5 中新增。

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

属性:
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.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

从每个转换器名称到切片的字典,其中切片对应于转换输出中的索引。这有助于检查哪个转换器负责哪些转换后的特征。

版本 1.0 中新增。

n_features_in_int

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)  

有关更详细的使用示例,请参见混合类型的列转换器

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

使用 X 拟合所有转换器。

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

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

y形状为 (n_samples,…) 的 array-like,默认为 None

监督学习的目标。

**params字典,默认为 None

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

只有在启用元数据路由时才能传递此参数,您可以使用 sklearn.set_config(enable_metadata_routing=True) 启用它。

1.4 版本新增。

返回:
selfColumnTransformer

此估计器。

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

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

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

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

y形状为 (n_samples,) 的 array-like,默认为 None

监督学习的目标。

**params字典,默认为 None

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

只有在启用元数据路由时才能传递此参数,您可以使用 sklearn.set_config(enable_metadata_routing=True) 启用它。

1.4 版本新增。

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

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

get_feature_names_out(input_features=None)[source]#

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

参数:
input_featuresstr 的 array-like 或 None,默认为 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 中包含的估计器。

参数:
deep布尔值,默认为 True

如果为 True,将返回此估计器以及其中包含的作为估计器的子对象的参数。

返回:
params字典

参数名称与其值的映射。

property named_transformers_#

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

只读属性,用于通过给定名称访问任何转换器。键是转换器名称,值是已拟合的转换器对象。

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

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

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

参数:
transform{"default", "pandas", "polars"},默认为 None

配置 transformfit_transform 的输出。

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

  • "pandas":DataFrame 输出

  • "polars":Polars 输出

  • None:转换配置保持不变

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

返回:
self估计器实例

估计器实例。

set_params(**kwargs)[source]#

设置此估计器的参数。

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

参数:
**kwargs字典

估计器参数。

返回:
selfColumnTransformer

此估计器。

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

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

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

要按子集转换的数据。

**params字典,默认为 None

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

只有在启用元数据路由时才能传递此参数,您可以使用 sklearn.set_config(enable_metadata_routing=True) 启用它。

1.4 版本新增。

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

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