管道#
- 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_steps
Bunch
按名称访问步骤。
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)
转换后的数据。