邻域清理规则#
- class imblearn.under_sampling.NeighbourhoodCleaningRule(*, sampling_strategy='auto', edited_nearest_neighbours=None, n_neighbors=3, kind_sel='deprecated', threshold_cleaning=0.5, n_jobs=None)[source]#
基于邻域清理规则进行欠采样。
该类使用ENN和k-NN从数据集中移除噪声样本。
更多内容请参阅用户指南。
- Parameters:
- sampling_strategystr, list or callable
采样信息以对数据集进行采样。
当
str
时,指定重采样所针对的类别。请注意,每个类别的样本数量不会相等。可能的选择有:'majority'
: 仅对多数类进行重采样;'not minority'
: 对除少数类之外的所有类进行重采样;'not majority'
: 重新采样除多数类之外的所有类;'all'
: 对所有类别进行重采样;'auto'
: 等同于'not minority'
.当
list
时,列表包含重采样所针对的类。当可调用时,函数接受
y
并返回一个dict
。键对应于目标类别。值对应于每个类别所需的样本数量。
- edited_nearest_neighboursestimator object, default=None
EditedNearestNeighbours
(ENN) 对象用于清理数据集。如果None
,则会创建一个默认的 ENN,使用kind_sel="mode"
和n_neighbors=n_neighbors
。- n_neighborsint or estimator object, default=3
如果
int
,则考虑用于计算K近邻的邻域大小。如果是对象,则是一个继承自KNeighborsMixin
的估计器,用于查找最近邻。默认情况下,它将是一个3-NN。- kind_sel{“all”, “mode”}, default=’all’
用于在ENN采样中排除样本的策略。
如果
'all'
,所有邻居都必须与感兴趣的样本一致,才能不被排除。如果
'mode'
,将使用邻居的多数投票来排除样本。
策略
"all"
将比'mode'
更不保守。因此,当kind_sel="all"
时,通常会移除更多的样本。自版本0.12起已弃用:
kind_sel
在0.12版本中已弃用,并将在0.14版本中移除。 目前该参数无效,始终对应于"all"
策略。- threshold_cleaningfloat, default=0.5
在应用ENN后,用于决定是否考虑某个类进行清理的阈值。当满足以下条件时,一个类将在清理过程中被考虑:
Ci > C x T ,
其中Ci和C分别是类别和数据集中的样本数量,theta是阈值。
- n_jobsint, default=None
在交叉验证循环中使用的CPU核心数量。
None
表示1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。更多详情请参见 术语表。
- Attributes:
- sampling_strategy_dict
包含用于采样数据集信息的字典。键对应于从中采样的类标签,值是要采样的样本数量。
- edited_nearest_neighbours_estimator object
用于进行第一次重采样的编辑最近邻对象。
- nn_estimator object
从
n_neighbors
参数创建的已验证K近邻对象。- classes_to_clean_list
在第二个清理阶段,由
nn_
考虑进行欠采样的类别。- sample_indices_ndarray of shape (n_new_samples,)
所选样本的索引。
在版本0.4中添加。
- n_features_in_int
输入数据集中的特征数量。
在版本0.9中添加。
- feature_names_in_ndarray of shape (
n_features_in_
,) 在
fit
期间看到的特征名称。仅在X
具有全部为字符串的特征名称时定义。在版本0.10中添加。
另请参阅
EditedNearestNeighbours
通过编辑噪声样本来进行欠采样。
注释
参见原始论文:[1]。
支持多类重采样。当对一个类进行采样时,使用一对多方案,如[1]中提出的那样。
参考文献
示例
>>> from collections import Counter >>> from sklearn.datasets import make_classification >>> from imblearn.under_sampling import NeighbourhoodCleaningRule >>> 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('Original dataset shape %s' % Counter(y)) Original dataset shape Counter({1: 900, 0: 100}) >>> ncr = NeighbourhoodCleaningRule() >>> X_res, y_res = ncr.fit_resample(X, y) >>> print('Resampled dataset shape %s' % Counter(y_res)) Resampled dataset shape Counter({1: 888, 0: 100})
方法
fit
(X, y, **params)检查采样器的输入和统计信息。
fit_resample
(X, y, **params)重新采样数据集。
get_feature_names_out
([input_features])获取转换的输出特征名称。
获取此对象的元数据路由。
get_params
([deep])获取此估计器的参数。
set_params
(**params)设置此估计器的参数。
- fit(X, y, **params)[source]#
检查采样器的输入和统计信息。
在所有情况下,您都应该使用
fit_resample
。- Parameters:
- X{array-like, dataframe, sparse matrix} of shape (n_samples, n_features)
数据数组。
- yarray-like of shape (n_samples,)
目标数组。
- Returns:
- selfobject
返回实例本身。
- fit_resample(X, y, **params)[source]#
重新采样数据集。
- Parameters:
- X{array-like, dataframe, sparse matrix} of shape (n_samples, n_features)
包含需要采样的数据的矩阵。
- yarray-like of shape (n_samples,)
X中每个样本对应的标签。
- Returns:
- X_resampled{array-like, dataframe, sparse matrix} of shape (n_samples_new, n_features)
包含重采样数据的数组。
- y_resampledarray-like of shape (n_samples_new,)
X_resampled
对应的标签。
- get_feature_names_out(input_features=None)[source]#
获取转换的输出特征名称。
- Parameters:
- 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
是类似数组的,那么input_features
必须 与feature_names_in_
匹配,如果feature_names_in_
已定义。
- Returns:
- feature_names_outndarray of str objects
与输入特征相同。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查看用户指南了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
一个封装路由信息的
MetadataRequest
。