管道#
- class imblearn.pipeline.Pipeline(steps, *, transform_input=None, memory=None, verbose=False)[source]#
具有最终估计器的转换和重采样管道。
依次应用一系列转换、采样和最终估计器。 管道中的中间步骤必须是转换器或重采样器, 也就是说,它们必须实现fit、transform和sample方法。 采样器仅在fit期间应用。 最终估计器只需要实现fit。 管道中的转换器和采样器可以使用
memory参数进行缓存。管道的目的是将几个步骤组合在一起,这些步骤可以在设置不同参数的同时进行交叉验证。为此,它允许使用步骤的名称和参数名称(由“__”分隔)来设置各个步骤的参数,如下例所示。可以通过将参数名称设置为另一个估计器来完全替换步骤的估计器,或者通过将其设置为“passthrough”或
None来移除转换器。- Parameters:
- stepslist
(名称,转换)元组列表(实现fit/transform/fit_resample),它们按顺序链接,最后一个对象是一个估计器。
- transform_inputlist of str, default=None
在传递给使用它的步骤之前,应该由管道转换的metadata参数的名称。
这使得可以将一些输入参数(除了
X)通过管道的步骤进行转换,直到需要它们的步骤。需求是通过metadata routing定义的。例如,这可以用于通过管道传递验证集。只有在启用了元数据路由的情况下才能设置此选项,您可以使用
sklearn.set_config(enable_metadata_routing=True)来启用它。在版本1.6中添加。
- memoryInstance of joblib.Memory or str, default=None
用于缓存管道中已拟合的转换器。默认情况下,不执行缓存。如果给定一个字符串,则是缓存目录的路径。启用缓存会在拟合之前触发转换器的克隆。因此,无法直接检查提供给管道的转换器实例。使用属性
named_steps或steps来检查管道中的估计器。当拟合过程耗时较长时,缓存转换器是有利的。- verbosebool, default=False
如果为True,则在完成每个步骤时,将打印出拟合所花费的时间。
- Attributes:
named_stepsBunch按名称访问步骤。
classes_ndarray of shape (n_classes,)类别标签。
n_features_in_int在第一步
fit方法中看到的特征数量。feature_names_in_ndarray of shape (n_features_in_,)在第一步
fit方法中看到的特征名称。
另请参阅
make_pipeline用于创建管道的辅助函数。
注释
参见 管道嵌入采样器的使用
警告
imbalanced-learn管道的一个令人惊讶的行为是它打破了scikit-learn的约定,即人们期望estimmator.fit_transform(X, y)等同于estimator.fit(X, y).transform(X)。fit_resample的语义仅在拟合阶段应用。因此,当调用fit_transform时,重采样会发生,而在分别调用fit和transform时,重采样仅在fit阶段发生。实际上,fit_transform会导致数据集被重采样,而fit和transform则不会。示例
>>> from collections import Counter >>> from sklearn.datasets import make_classification >>> from sklearn.model_selection import train_test_split as tts >>> from sklearn.decomposition import PCA >>> from sklearn.neighbors import KNeighborsClassifier as KNN >>> from sklearn.metrics import classification_report >>> from imblearn.over_sampling import SMOTE >>> from imblearn.pipeline import Pipeline >>> X, y = make_classification(n_classes=2, class_sep=2, ... weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0, ... n_features=20, n_clusters_per_class=1, n_samples=1000, random_state=10) >>> print(f'Original dataset shape {Counter(y)}') Original dataset shape Counter({1: 900, 0: 100}) >>> pca = PCA() >>> smt = SMOTE(random_state=42) >>> knn = KNN() >>> pipeline = Pipeline([('smt', smt), ('pca', pca), ('knn', knn)]) >>> X_train, X_test, y_train, y_test = tts(X, y, random_state=42) >>> pipeline.fit(X_train, y_train) Pipeline(...) >>> y_hat = pipeline.predict(X_test) >>> print(classification_report(y_test, y_hat)) precision recall f1-score support 0 0.87 1.00 0.93 26 1 1.00 0.98 0.99 224 accuracy 0.98 250 macro avg 0.93 0.99 0.96 250 weighted avg 0.99 0.98 0.98 250
方法
decision_function(X, **params)转换数据,并使用最终估计器应用
decision_function。fit(X[, y])拟合模型。
fit_predict(X[, y])在转换后应用管道中最后一步的
fit_predict。fit_resample(X[, y])使用最终估计器拟合模型并进行采样。
fit_transform(X[, y])拟合模型并使用最终估计器进行转换。
get_feature_names_out([input_features])获取转换的输出特征名称。
获取此对象的元数据路由。
get_params([deep])获取此估计器的参数。
inverse_transform(Xt, **params)按相反顺序对每个步骤应用
inverse_transform。predict(X, **params)转换数据,并使用最终的估计器应用
predict。predict_log_proba(X, **params)转换数据,并使用最终估计器应用
predict_log_proba。predict_proba(X, **params)转换数据,并使用最终估计器应用
predict_proba。score(X[, y, sample_weight])转换数据,并使用最终的估计器应用
score。转换数据,并使用最终估计器应用
score_samples。set_output(*[, transform])当调用
"transform"和"fit_transform"时,设置输出容器。set_params(**kwargs)设置此估计器的参数。
set_score_request(*[, sample_weight])传递给
score方法的请求元数据。transform(X, **params)转换数据,并使用最终的估计器应用
transform。- property classes_#
类别标签。仅当最后一步是分类器时存在。
- decision_function(X, **params)[source]#
转换数据,并使用最终估计器应用
decision_function。调用管道中每个转换器的
transform方法。转换后的数据最终传递给调用decision_function方法的最终估计器。仅当最终估计器实现了decision_function时有效。- Parameters:
- Xiterable
用于预测的数据。必须满足管道第一步的输入要求。
- **paramsdict of string -> object
步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本1.4中新增:仅在
enable_metadata_routing=True时可用。更多详情请参阅元数据路由用户指南。
- Returns:
- y_scorendarray of shape (n_samples, n_classes)
在最终估计器上调用
decision_function的结果。
- property feature_names_in_#
在第一步
fit方法中看到的特征名称。
- fit(X, y=None, **params)[source]#
拟合模型。
依次拟合所有的变换/采样器并对数据进行变换/采样,然后使用最终的估计器拟合变换/采样后的数据。
- Parameters:
- Xiterable
训练数据。必须满足管道第一步的输入要求。
- yiterable, default=None
训练目标。必须满足管道所有步骤的标签要求。
- **paramsdict of str -> object
如果
enable_metadata_routing=False(默认):传递给每个步骤的
fit方法的参数,其中每个参数名称都带有前缀,使得步骤s的参数p的键为s__p。如果
enable_metadata_routing=True:步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本1.4中更改:如果请求,并且通过
set_config设置了enable_metadata_routing=True,参数现在也会传递给中间步骤的transform方法。有关更多详细信息,请参阅 Metadata Routing User Guide。
- Returns:
- selfPipeline
这个估计器。
- fit_predict(X, y=None, **params)[source]#
在转换后应用管道中最后一步的
fit_predict。将管道的fit_transforms应用于数据,然后应用管道中最终估计器的fit_predict方法。仅当最终估计器实现了fit_predict时有效。
- Parameters:
- Xiterable
训练数据。必须满足管道第一步的输入要求。
- yiterable, default=None
训练目标。必须满足管道所有步骤的标签要求。
- **paramsdict of str -> object
如果
enable_metadata_routing=False(默认):在管道中所有转换结束时调用的
predict的参数。如果
enable_metadata_routing=True:步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本0.20中添加。
在版本1.4中更改:如果请求,并且如果
enable_metadata_routing=True,参数现在也会传递给中间步骤的transform方法。有关更多详细信息,请参阅 Metadata Routing User Guide。
请注意,虽然这可以用于从一些模型中返回不确定性,这些模型具有
return_std或return_cov,但由管道中的转换生成的不确定性不会传播到最终的估计器。
- Returns:
- y_predndarray of shape (n_samples,)
预测的目标。
- fit_resample(X, y=None, **params)[source]#
使用最终估计器拟合模型并进行采样。
依次拟合所有的转换器/采样器并转换/采样数据,然后在转换后的数据上使用最终估计器进行fit_resample。
- Parameters:
- Xiterable
训练数据。必须满足管道第一步的输入要求。
- yiterable, default=None
训练目标。必须满足管道所有步骤的标签要求。
- **paramsdict of str -> object
如果
enable_metadata_routing=False(默认):传递给每个步骤的
fit方法的参数,其中每个参数名称都带有前缀,使得步骤s的参数p的键为s__p。如果
enable_metadata_routing=True:步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本1.4中更改:如果请求并且如果
enable_metadata_routing=True,参数现在也会传递给中间步骤的transform方法。有关更多详细信息,请参阅 Metadata Routing User Guide。
- Returns:
- Xtarray-like of shape (n_samples, n_transformed_features)
转换后的样本。
- ytarray-like of shape (n_samples, n_transformed_features)
转换后的目标。
- fit_transform(X, y=None, **params)[source]#
拟合模型并使用最终估计器进行转换。
依次拟合所有的转换器/采样器并转换/采样数据,然后在转换后的数据上使用最终估计器进行拟合转换。
- Parameters:
- Xiterable
训练数据。必须满足管道第一步的输入要求。
- yiterable, default=None
训练目标。必须满足管道所有步骤的标签要求。
- **paramsdict of str -> object
如果
enable_metadata_routing=False(默认):传递给每个步骤的
fit方法的参数,其中每个参数名称都带有前缀,使得步骤s的参数p的键为s__p。如果
enable_metadata_routing=True:步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本1.4中更改:如果请求,并且如果
enable_metadata_routing=True,参数现在也会传递给中间步骤的transform方法。有关更多详细信息,请参阅 Metadata Routing User Guide。
- Returns:
- Xtarray-like of shape (n_samples, n_transformed_features)
转换后的样本。
- get_feature_names_out(input_features=None)[source]#
获取转换的输出特征名称。
使用管道转换输入特征。
- Parameters:
- input_featuresarray-like of str or None, default=None
输入特征。
- Returns:
- feature_names_outndarray of str objects
转换后的特征名称。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查看用户指南了解路由机制的工作原理。
- Returns:
- routingMetadataRouter
一个封装了路由信息的
MetadataRouter。
- get_params(deep=True)[source]#
获取此估计器的参数。
返回构造函数中给定的参数以及包含在
Pipeline的steps中的估计器。- Parameters:
- deepbool, default=True
如果为True,将返回此估计器及其包含的子对象的参数。
- Returns:
- paramsmapping of string to any
参数名称映射到它们的值。
- inverse_transform(Xt, **params)[source]#
按相反顺序对每个步骤应用
inverse_transform。管道中的所有估计器都必须支持
inverse_transform。- Parameters:
- Xtarray-like of shape (n_samples, n_transformed_features)
数据样本,其中
n_samples是样本数量,n_features是特征数量。必须满足 管道最后一步的inverse_transform方法的输入要求。- **paramsdict of str -> object
步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本1.4中新增:仅在
enable_metadata_routing=True时可用。更多详情请参阅元数据路由用户指南。
- Returns:
- Xtndarray of shape (n_samples, n_features)
逆变换后的数据,即原始特征空间中的数据。
- property n_features_in_#
在第一步
fit方法中看到的特征数量。
- property named_steps#
按名称访问步骤。
只读属性,用于通过给定名称访问任何步骤。 键是步骤名称,值是步骤对象。
- predict(X, **params)[source]#
转换数据,并使用最终的估计器应用
predict。调用管道中每个转换器的
transform方法。转换后的数据最终传递给调用predict方法的最终估计器。仅当最终估计器实现了predict方法时有效。- Parameters:
- Xiterable
用于预测的数据。必须满足管道第一步的输入要求。
- **paramsdict of str -> object
如果
enable_metadata_routing=False(默认):在管道中所有转换结束时调用的
predict的参数。如果
enable_metadata_routing=True:步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本0.20中添加。
在版本1.4中更改:如果请求,并且通过
set_config设置了enable_metadata_routing=True,参数现在也会传递给中间步骤的transform方法。有关更多详细信息,请参阅 Metadata Routing User Guide。
请注意,虽然这可以用于从一些模型中返回不确定性,这些模型具有
return_std或return_cov,但由管道中的转换生成的不确定性不会传播到最终的估计器。
- Returns:
- y_predndarray
在最终估计器上调用
predict的结果。
- predict_log_proba(X, **params)[source]#
转换数据,并使用最终估计器应用
predict_log_proba。调用管道中每个转换器的
transform方法。转换后的数据最终传递给调用predict_log_proba方法的最终估计器。仅当最终估计器实现了predict_log_proba方法时有效。- Parameters:
- Xiterable
用于预测的数据。必须满足管道第一步的输入要求。
- **paramsdict of str -> object
如果
enable_metadata_routing=False(默认):在管道中所有转换结束时调用的
predict_log_proba的参数。如果
enable_metadata_routing=True:步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本0.20中添加。
在版本1.4中更改:如果请求,并且如果
enable_metadata_routing=True,参数现在也会传递给中间步骤的transform方法。有关更多详细信息,请参阅 Metadata Routing User Guide。
- Returns:
- y_log_probandarray of shape (n_samples, n_classes)
调用最终估计器上的
predict_log_proba的结果。
- predict_proba(X, **params)[source]#
转换数据,并使用最终估计器应用
predict_proba。调用管道中每个转换器的
transform方法。转换后的数据最终传递给调用predict_proba方法的最终估计器。仅当最终估计器实现了predict_proba方法时有效。- Parameters:
- Xiterable
用于预测的数据。必须满足管道第一步的输入要求。
- **paramsdict of str -> object
如果
enable_metadata_routing=False(默认):在管道中所有转换结束时调用的
predict_proba的参数。如果
enable_metadata_routing=True:步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本0.20中添加。
在版本1.4中更改:如果请求,并且如果
enable_metadata_routing=True,参数现在也会传递给中间步骤的transform方法。有关更多详细信息,请参阅 Metadata Routing User Guide。
- Returns:
- y_probandarray of shape (n_samples, n_classes)
在最终估计器上调用
predict_proba的结果。
- score(X, y=None, sample_weight=None, **params)[source]#
转换数据,并使用最终的估计器应用
score。调用管道中每个转换器的
transform方法。转换后的数据最终传递给调用score方法的最终估计器。仅当最终估计器实现了score方法时有效。- Parameters:
- Xiterable
用于预测的数据。必须满足管道第一步的输入要求。
- yiterable, default=None
用于评分的目标。必须满足管道所有步骤的标签要求。
- sample_weightarray-like, default=None
如果不是None,这个参数将作为
sample_weight关键字参数传递给最终估计器的score方法。- **paramsdict of str -> object
步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本1.4中新增:仅在
enable_metadata_routing=True时可用。更多详情请参阅元数据路由用户指南。
- Returns:
- scorefloat
调用最终估计器上的
score的结果。
- score_samples(X)[source]#
转换数据,并使用最终估计器应用
score_samples。调用管道中每个转换器的
transform。转换后的数据最终传递给调用score_samples方法的最终估计器。仅当最终估计器实现了score_samples时有效。- Parameters:
- Xiterable
用于预测的数据。必须满足管道第一步的输入要求。
- Returns:
- y_scorendarray of shape (n_samples,)
在最终估计器上调用
score_samples的结果。
- set_output(*, transform=None)[source]#
当调用
"transform"和"fit_transform"时,设置输出容器。调用
set_output将设置steps中所有估计器的输出。- Parameters:
- transform{“default”, “pandas”, “polars”}, default=None
配置
transform和fit_transform的输出。"default": 转换器的默认输出格式"pandas": DataFrame 输出"polars": Polars 输出None: 转换配置未更改
在版本1.4中添加:
"polars"选项已添加。
- Returns:
- selfestimator instance
估计器实例。
- set_params(**kwargs)[source]#
设置此估计器的参数。
可以使用
get_params()列出有效的参数键。请注意,您可以直接设置包含在steps中的估计器的参数。- Parameters:
- **kwargsdict
此估计器的参数或包含在
steps中的估计器的参数。步骤的参数可以通过其名称和参数名称用'__'分隔来设置。
- Returns:
- selfobject
Pipeline 类实例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') Pipeline[source]#
传递给
score方法的请求元数据。请注意,此方法仅在
enable_metadata_routing=True时相关(参见sklearn.set_config)。 请参阅 用户指南 了解路由机制的工作原理。每个参数的选项是:
True: 请求元数据,并在提供时传递给score。如果未提供元数据,则忽略该请求。False: 不请求元数据,元估计器不会将其传递给score。None: 不请求元数据,如果用户提供了元数据,元估计器将引发错误。str: 元数据应该使用这个给定的别名传递给元估计器,而不是原始名称。
默认情况下(
sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不更改其他参数。在版本1.3中添加。
注意
此方法仅在此估计器用作元估计器的子估计器时相关,例如在
Pipeline内部使用。否则它没有效果。- Parameters:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
score中sample_weight参数的元数据路由。
- Returns:
- selfobject
更新后的对象。
- transform(X, **params)[source]#
转换数据,并使用最终的估计器应用
transform。调用管道中每个转换器的
transform方法。转换后的数据最终传递给调用transform方法的最终估计器。仅当最终估计器实现了transform方法时有效。这也适用于最终估计器为
None的情况,在这种情况下,所有先前的转换都会被应用。- Parameters:
- Xiterable
要转换的数据。必须满足管道第一步的输入要求。
- **paramsdict of str -> object
步骤请求和接受的参数。每个步骤必须请求某些元数据,以便将这些参数转发给它们。
在版本1.4中新增:仅在
enable_metadata_routing=True时可用。更多详情请参阅元数据路由用户指南。
- Returns:
- Xtndarray of shape (n_samples, n_transformed_features)
转换后的数据。