KMeansSMOTE#
- class imblearn.over_sampling.KMeansSMOTE(*, sampling_strategy='auto', random_state=None, k_neighbors=2, n_jobs=None, kmeans_estimator=None, cluster_balance_threshold='auto', density_exponent='auto')[source]#
在使用SMOTE进行过采样之前应用KMeans聚类。
这是[1]中描述的算法的实现。
更多内容请参阅用户指南。
在版本0.5中添加。
- 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
实例。
- k_neighborsint or object, default=2
用于定义样本邻域的最近邻,以生成合成样本。您可以传递:
一个
int
,对应于要使用的邻居数量。在这种情况下,将拟合一个~sklearn.neighbors.NearestNeighbors
实例。一个兼容的最近邻算法实例,应该实现
kneighbors
和kneighbors_graph
两种方法。例如,它可以对应于NearestNeighbors
,但也可以扩展到任何兼容的类。
- n_jobsint, default=None
在交叉验证循环中使用的CPU核心数量。
None
表示1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。更多详情请参见 术语表。- kmeans_estimatorint or object, default=None
一个KMeans实例或要使用的聚类数量。默认情况下,我们使用了
MiniBatchKMeans
,它通常在样本数量较大时表现更好。- cluster_balance_threshold“auto” or float, default=”auto”
集群被称为平衡的阈值,以及为SMOTE选择的类别的样本将被过采样的地方。如果设置为“auto”,这将由每个类别的比例决定,或者可以手动设置。
- density_exponent“auto” or float, default=”auto”
此指数用于确定集群的密度。将其设置为“auto”将使用基于特征长度的指数。
- Attributes:
- sampling_strategy_dict
包含用于采样数据集信息的字典。键对应于从中采样的类标签,值是要采样的样本数量。
- kmeans_estimator_estimator
在应用SMOTE之前使用的拟合聚类方法。
- nn_k_estimator
在SMOTE中使用的拟合k-NN估计器。
- cluster_balance_threshold_float
在
fit
期间用于调用平衡集群的阈值。- n_features_in_int
输入数据集中的特征数量。
在版本0.9中添加。
- feature_names_in_ndarray of shape (
n_features_in_
,) 在
fit
期间看到的特征名称。仅在X
具有全部为字符串的特征名称时定义。在版本0.10中添加。
另请参阅
参考文献
[1]Felix Last, Georgios Douzas, Fernando Bacao, “基于K-Means和SMOTE的不平衡学习过采样” https://arxiv.org/abs/1711.00837
示例
>>> import numpy as np >>> from imblearn.over_sampling import KMeansSMOTE >>> from sklearn.datasets import make_blobs >>> blobs = [100, 800, 100] >>> X, y = make_blobs(blobs, centers=[(-10, 0), (0,0), (10, 0)], random_state=0) >>> # Add a single 0 sample in the middle blob >>> X = np.concatenate([X, [[0, 0]]]) >>> y = np.append(y, 0) >>> # Make this a binary classification problem >>> y = y == 1 >>> sm = KMeansSMOTE( ... kmeans_estimator=MiniBatchKMeans(n_init=1, random_state=0), random_state=42 ... ) >>> X_res, y_res = sm.fit_resample(X, y) >>> # Find the number of new samples in the middle blob >>> n_res_in_middle = ((X_res[:, 0] > -5) & (X_res[:, 0] < 5)).sum() >>> print("Samples in the middle blob: %s" % n_res_in_middle) Samples in the middle blob: 801 >>> print("Middle blob unchanged: %s" % (n_res_in_middle == blobs[1] + 1)) Middle blob unchanged: True >>> print("More 0 samples: %s" % ((y_res == 0).sum() > (y == 0).sum())) More 0 samples: True
方法
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
。