Python 中的 Imbalanced Learn 模块2025年7月22日 | 阅读 7 分钟 Imbalanced-Learn 是一个 Python 库,用于解决不平衡数据集问题,在这种情况下,一个类别的样本数量比其他类别多。这种不平衡可能导致模型偏向于多数类。顾名思义,Imbalanced-Learn 提供了不同的重采样方法,通过改变类别的分布来平衡它们,最终为少数类创建更好的模型。 要使用 Imbalanced-Learn,您需要以下依赖项:
如果您想安装 Imbalanced-Learn 库,只需在您的终端或命令提示符中输入以下命令: 重采样通常分两个主要步骤进行: 1. 估计器估计器提供了与 scikit-learn 中相同的拟合过程。它接受输入特征以及作为二维数组的目标标签。 2. 重采样器数据集的 `fit_resample` 方法通过重采样来平衡类别。它会输出重采样后的数据和目标。 为了平衡不平衡的数据集,Imbalanced-Learn 库提供了丰富的过采样算法和欠采样算法集合。 为了说明这些方法,我们使用 scikit-learn 的 `make_classification` 工具,该工具创建一个用于分类试验的合成数据集。此函数返回: X:一个形状为 (n_samples, n_features) 的矩阵,表示输入特征 Y:一个一维数组,包含表示目标类别的整数标签 输出 X sample: [[-0.8667404 -0.09254569 0.02427936 ... -0.12587831 -0.39857298 0.5019842 ] [ 0.34796387 -0.51092589 1.43366293 ... 0.58988027 -0.04835788 0.51447794] [ 0.88932669 0.11002514 -1.37438928 ... -0.4582427 -0.37853782 -0.72833769] [ 0.2398515 -0.38722776 -0.59773954 ... -0.25997423 1.33692592 -0.20868468] [-0.52764142 0.57473316 -1.22828951 ... 0.12705142 -0.74451789 -0.07787666]] y sample: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] 下面给出了一些说明性程序示例,解释了如何为不平衡数据集使用过采样和欠采样技术: 1. 过采样a) RandomOverSampler(随机过采样器)这是最简单的方法之一,通过随机生成少数类样本来尝试使样本集平衡。它是合成的,因为它重复使用相同的样本而不是创建新的样本。 语法 示例 输出 x_over: [[ 1.17749045e+00 6.26404546e-01 ... -3.19087196e-01] [-2.01496222e-01 -6.81009092e-01 ... -1.39502889e+00] ... [ 5.32934415e-01 -1.17791234e+00 ... -9.74920415e-01]] y_over: [0 0 0 ... 1 1 1] b) SMOTE、ADASYN一些最先进的过采样示例是 SMOTE(合成少数类过采样技术)和 ADASYN(自适应合成采样),它们用于平衡数据中的类别。 这两种技术都生成人工生成的少数类样本,而不是复制现有的样本。然而,
语法 示例 输出 x_smote: [[-1.3989929 -0.45298168 0.96305785 ... 0.18181244 -0.0248006 -0.25275535] [-1.05980083 0.64076958 -0.61351159 ... -0.05089601 -0.44530834 0.27322539] ... [synthetic data rows generated by SMOTE]] y_smote: [0 0 0 0 ... 1 1 1 1] 2. 欠采样1. Edited Nearest Neighbours (ENN)(编辑近邻)在这种欠采样方法中,将删除与最近邻不相同的多数类样本。也就是说,如果一个样本有另一个类别的邻居,则认为它是有噪声的(或边界上的),因此将其丢弃。这有助于清理决策边界并改进分类。 它尤其有助于缓解类别重叠以及不平衡数据集中的噪声。 语法 示例 输出 x_en: [[ 1.31395281 -0.16820672 -0.13666473 ... -0.57537888 -0.5153734 0.22953497] [ 0.82367683 0.84296339 1.45223073 ... 0.12793759 1.02967546 -0.1493886 ] ... [ 0.28372653 0.2411147 -0.35436444 ... 0.67943522 -0.29359349 0.15384294]] y_en: [0 0 0 ... 1 1 1] 2. RandomUnderSampler(随机欠采样器)RandomUnderSampler 是一种简单的欠采样方法,它随机采样多数类数据点,以达到少数类所需的数据点数量。这可以带或不带替换地进行,通过减少多数类记录来平衡数据集。 它简单快捷,但可以提供有用的见解,因此建议在您拥有大量多数类的情况下使用它。 语法 示例 输出 x_under: [[ 0.87993245 0.38517394 -0.78879377 ... -1.34029777 -0.31722729 0.11353794] [-0.75037842 0.27083596 0.14842717 ... -0.38324252 -1.09426893 -1.25185343] ... [synthetic or real feature values for 200 samples]] y_under: [0 0 0 ... 1 1 1] 不平衡数据集的处理技术不平衡数据集的方法可分为三大类:重采样、集成和成本敏感学习。
Imbalanced-Learn 中的重要函数Imbalanced-learn 库通过过采样、欠采样、集成算法和评估指标提供了丰富的工具集,用于处理不平衡数据。以下是一些关键函数及其目的: 过采样技术1. imblearn.over_sampling.RandomOverSampler 随机复制少数类样本以平衡数据集。 2. imblearn.over_sampling.SMOTE 应用合成少数类过采样技术(SMOTE)通过插值少数类来生成通用的合成少数类样本。 3. imblearn.over_sampling.BorderlineSMOTE 一种 SMOTE 类型,专注于在错误分类最可能发生的数据类别边界处创建合成样本。 4. imblearn.over_sampling.SVMSMOTE SMOTE 的一种变体,其中利用支持向量机来确定重要样本以创建合成数据。 5. imblearn.over_sampling.ADASYN 使用自适应合成采样方法,根据局部密度低且难以学习的区域生成额外的合成样本。 欠采样技术1. imblearn.under_sampling.RandomUnderSampler 从多数类中随机选择样本以平衡类别分布。 2. imblearn.under_sampling.ClusterCentroids 对多数类进行聚合,只保留中心点,从而有效地缩短样本数量。 3. imblearn.under_sampling.TomekLinks 识别并删除 Tomek 链接(即属于不同类别的最近邻样本),以清理决策边界。 4. imblearn.under_sampling.NearMiss 通过各种基于距离的方法,选择最接近少数类的多数类样本。 5. imblearn.under_sampling.CondensedNearestNeighbour 通过消除冗余样本来保留多数类中最具信息量的样本。 结论Python 中的 Imbalanced-Learn 库提供了大量可用于有效管理现实生活中频繁出现的不平衡数据集的附加组件。其强大的过采样策略工具集,如 SMOTE、ADASYN、RandomOverSampler,以及许多其他欠采样技术,如 Edited Nearest Neighbours 和 RandomUnderSampler,有助于创建公正和精确的机器学习模型。 还提供了更灵活的集成方法,如集成学习(EasyEnsemble、RUSBoost)和成本敏感学习(加权 SVM、逻辑回归)算法。所有这些技术都提高了模型在预测少数类方面的性能。Imbalanced-Learn 易于集成到 scikit-learn 管道中,对于任何处理类别比例不平衡的分类任务的数据科学家来说,都是一个必备库。 下一主题使用机器学习检测白内障 |
我们请求您订阅我们的新闻通讯以获取最新更新。