随机过采样器#
- class imblearn.over_sampling.RandomOverSampler(*, sampling_strategy='auto', random_state=None, shrinkage=None)[source]#
用于执行随机过采样的类。
通过对少数类进行随机采样并替换来进行过采样的对象。可以通过平滑的方式生成引导样本。
更多内容请参阅用户指南。
- Parameters:
- sampling_strategyfloat, str, dict or callable, default=’auto’
用于重新采样数据集的采样信息。
当
float时,它对应于重采样后少数类样本数量与多数类样本数量的期望比率。因此,比率表示为\(\alpha_{os} = N_{rm} / N_{M}\),其中\(N_{rm}\)是重采样后少数类样本的数量,\(N_{M}\)是多数类样本的数量。警告
float仅适用于二分类。对于多类分类会引发错误。当
str时,指定重采样所针对的类别。不同类别中的样本数量将被均衡化。可能的选择有:'minority': 仅对少数类进行重采样;'not minority': 对除少数类之外的所有类进行重采样;'not majority': 重新采样除多数类之外的所有类;'all': 对所有类别进行重采样;'auto': 等同于'not majority'.当
dict时,键对应于目标类别。值对应于每个目标类别所需的样本数量。当可调用时,函数接受
y并返回一个dict。键对应于目标类别。值对应于每个类别所需的样本数量。
- random_stateint, RandomState instance, default=None
控制算法的随机化。
如果是整数,
random_state是随机数生成器使用的种子;如果
RandomState实例,random_state 是随机数生成器;如果
None,随机数生成器是np.random使用的RandomState实例。
- shrinkagefloat or dict, default=None
控制应用于协方差矩阵的收缩参数,当生成平滑引导时。选项有:
如果
None,将生成一个正常的引导程序而不进行扰动。 它等同于shrinkage=0;如果给定了一个
float,收缩因子将用于所有类别以生成平滑的bootstrap;如果给定了一个
dict,则每个类的收缩因子将特定。键对应于目标类,值是收缩因子。
收缩参数的值需要大于或等于0。
在版本0.8中添加。
- Attributes:
- sampling_strategy_dict
包含用于采样数据集信息的字典。键对应于从中采样的类标签,值是要采样的样本数量。
- sample_indices_ndarray of shape (n_new_samples,)
所选样本的索引。
在版本0.4中添加。
- shrinkage_dict or None
用于生成平滑引导样本的每类收缩因子。当
shrinkage=None时,将生成正常的引导样本。在版本0.8中添加。
- n_features_in_int
输入数据集中的特征数量。
在版本0.9中添加。
- feature_names_in_ndarray of shape (
n_features_in_,) 在
fit期间看到的特征名称。仅在X具有全部为字符串的特征名称时定义。在版本0.10中添加。
另请参阅
BorderlineSMOTE使用borderline-SMOTE变体进行过采样。
SMOTE使用SMOTE进行过采样。
SMOTENC使用SMOTE对连续和分类特征进行过采样。
SMOTEN使用专门针对分类特征的SMOTE变体进行过采样。
SVMSMOTE使用SVM-SMOTE变体进行过采样。
ADASYN使用ADASYN进行过采样。
KMeansSMOTE在应用SMOTE进行过采样之前,先进行聚类过采样。
注释
支持通过独立采样每个类别来进行多类别重采样。 支持包含字符串和数值数据的对象数组作为异构数据。
在生成平滑的bootstrap时,此方法也被称为随机过采样示例(ROSE)[1]。
警告
由于平滑自举是通过向抽取的样本添加小扰动生成的,因此在使用稀疏矩阵时,此方法不适用。
参考文献
[1]G Menardi, N. Torelli, “使用不平衡数据进行分类规则的训练和评估,” 数据挖掘与知识发现, 28(1), 第92-122页, 2014年。
示例
>>> from collections import Counter >>> from sklearn.datasets import make_classification >>> from imblearn.over_sampling import RandomOverSampler >>> 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}) >>> ros = RandomOverSampler(random_state=42) >>> X_res, y_res = ros.fit_resample(X, y) >>> print('Resampled dataset shape %s' % Counter(y_res)) Resampled dataset shape Counter({0: 900, 1: 900})
方法
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。