下采样方法
ClusterCentroids
https://imbalanced-learn.org/stable/references/generated/imblearn.under_sampling.ClusterCentroids.html
ClusterCentroids是一种基于聚类方法的欠采样算法,通过生成聚类中心来进行欠采样。
ClusterCentroids算法通过使用K均值算法,将大多数类别的样本聚类为一组,并用聚类中心替代该组的样本。该算法通过将K均值算法拟合到大多数类别并使用N个聚类中心的坐标作为新的大多数类别样本来保留N个大多数类别的样本。
EditedNearestNeighbours
https://imbalanced-learn.org/stable/references/generated/imblearn.under_sampling.EditedNearestNeighbours.html
EditedNearestNeighbours(ENN)是一种基于欠采样的方法,用于处理类别不平衡问题。它通过删除靠近决策边界的样本来清理数据库。
ENN算法的原理如下:
- 对于欲进行欠采样的类别中的每个样本,计算其最近邻样本。
- 如果最近邻样本与当前样本的类别不一致,则将当前样本从数据集中删除。
通过这个过程,ENN算法可以对数据集进行编辑,删除那些与其邻近样本不“足够”一致的样本。该算法通过考虑样本周围的邻近样本来判断样本是否应该被保留。在选择标准方面,ENN提供了两种可选的策略:
- 多数类选择(kind_sel='mode'):只有当所有最近邻样本都属于与当前样本相同的类别时,当前样本才会被保留。
- 全部选择(kind_sel='all'):只要最近邻样本中有一个与当前样本的类别不一致,当前样本就会被删除。
CondensedNearestNeighbour
https://imbalanced-learn.org/stable/references/generated/imblearn.under_sampling.CondensedNearestNeighbour.html
CondensedNearestNeighbour(CNN)是一种基于欠采样的方法,用于处理类别不平衡问题。它使用最近邻规则来迭代地决定是否删除样本。
算法的原理如下:
- 将所有少数类样本放入集合C。
- 从目标类别(欲进行欠采样的类别)中添加一个样本到集合C,并将该类别的所有其他样本放入集合S。
- 逐个样本地遍历集合C,并使用最近邻规则对每个样本进行分类。
- 如果样本被错误分类,将其添加到集合C中;否则不进行任何操作。
- 在集合C上重复上述步骤,直到没有样本需要添加为止。
CondensedNearestNeighbour算法可以生成一个具有较少样本数量的新样本集,其中包含了原始数据集中的少数类样本和一些被错误分类的样本。这个新样本集可以用于解决类别不平衡问题,使得少数类样本在整体数据集中的比例更加平衡。
AllKNN
https://imbalanced-learn.org/stable/references/generated/imblearn.under_sampling.AllKNN.html
AllKNN算法会多次应用ENN(Edited Nearest Neighbours)算法,并在每次迭代时改变最近邻的数量。
与之前的RepeatedEditedNearestNeighbours算法不同,AllKNN算法会在每次迭代中增加内部最近邻算法的最近邻数量。
通过这个过程,AllKNN算法可以多次应用ENN算法,并逐步增加最近邻的数量。这样可以更加彻底地清除位于类别边界附近的噪声样本。
InstanceHardnessThreshold
https://imbalanced-learn.org/stable/references/generated/imblearn.under_sampling.InstanceHardnessThreshold.html
InstanceHardnessThreshold算法的原理是,首先使用一个分类器对数据进行训练,然后根据样本的预测概率移除概率较低的样本。
在该算法中,我们首先使用一个分类器对数据进行训练,训练过程中分类器会生成每个样本属于各个类别的概率预测。然后根据预测概率,移除概率较低的样本。
在使用InstanceHardnessThreshold算法时,我们需要设置两个重要的参数。第一个是estimator,它可以接受任何具有predict_proba方法的scikit-learn分类器。分类器的训练使用交叉验证来进行,可以通过参数cv设置交叉验证的折数。
NearMiss
https://imbalanced-learn.org/stable/references/generated/imblearn.under_sampling.NearMiss.html
在使用NearMiss算法时,我们可以通过设置version参数来选择不同的启发式规则。例如,设置version=1表示使用第一种启发式规则。
NearMiss算法的启发式规则是基于最近邻算法的。因此,我们可以通过参数n_neighbors和n_neighbors_ver3来设置最近邻的数量。其中,n_neighbors参数用于计算样本与邻居之间的平均距离,而n_neighbors_ver3参数用于对感兴趣的样本进行预选择。
NeighbourhoodCleaningRule
https://imbalanced-learn.org/stable/references/generated/imblearn.under_sampling.NeighbourhoodCleaningRule.html
NeighbourhoodCleaningRule算法主要用于数据清理而不是数据压缩。它使用了EditedNearestNeighbours算法和k-NN算法来移除数据集中的噪声样本。
在NeighbourhoodCleaningRule算法中,首先使用EditedNearestNeighbours算法生成一个样本集合,该样本集合包含了应该被移除的样本。然后,使用3最近邻分类器对数据集进行分类,并将分类器输出的样本集合与前面生成的样本集合取并集,得到最终需要被移除的样本集合。
OneSidedSelection
https://imbalanced-learn.org/stable/references/generated/imblearn.under_sampling.OneSidedSelection.html
OneSidedSelection算法使用TomekLinks方法来移除噪声样本。此外,该算法对所有样本应用了1最近邻规则,将被错误分类的样本添加到集合中。
上采样方法
SMOTE
https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.SMOTE.html
SMOTE(Synthetic Minority Over-sampling Technique)是一种常用的过采样方法,用于解决类别不平衡问题。它通过生成合成样本来增加少数类样本的数量,以平衡不同类别之间的数据分布。
SMOTE的原理基于对少数类样本的插值。具体而言,它首先随机选择一个少数类样本作为起始点,然后从该样本的近邻中随机选择一个样本作为参考点。然后,SMOTE通过在这两个样本之间的线段上生成新的合成样本来增加数据集的样本数量。
SMOTENC
https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.SMOTENC.html
SMOTE-NC(SMOTE for Nominal and Continuous features)是一种用于处理同时包含数值和分类特征的数据集的过采样方法。它是对传统的SMOTE算法的扩展,能够处理同时存在数值和分类特征的情况,但不适用于仅包含分类特征的数据集。
SMOTE-NC的原理与SMOTE类似,但在生成合成样本时有所不同。它的生成过程如下:
- 对于选定的起始点和参考点,计算它们之间的差距,得到一个向量。
- 将连续特征(数值特征)的差距乘以一个随机数,得到新样本的位置。这一步与传统的SMOTE相同。
- 对于分类特征,随机选择起始点或参考点的特征值作为新合成样本的特征值。
- 对于连续特征和分类特征,分别使用插值和随机选择的方式来生成新样本的特征值。
通过这种方式,SMOTE-NC能够处理同时包含数值和分类特征的数据集,并生成新的合成样本来增加少数类样本的数量。这样可以在平衡数据集的同时保持数值和分类特征的一致性。
SMOTEN
https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.SMOTEN.html
SMOTEN(Synthetic Minority Over-sampling Technique for Nominal)是一种专门针对分类特征的过采样方法,用于解决类别不平衡问题。它是对SMOTE算法的扩展,适用于仅包含分类特征的数据集。
SMOTEN的原理与SMOTE类似,但在生成合成样本时有所不同。它的生成过程如下:
- 对于选定的起始点和参考点,计算它们之间的差距,得到一个向量。
- 对于每个分类特征,统计起始点和参考点之间相应特征的唯一值(类别)的频率。
- 根据特征的频率,确定新样本的位置。具体而言,对于每个分类特征,随机选择一个起始点或参考点的类别,并在该类别中随机选择一个值作为新合成样本的特征值。
- 对于连续特征,采用传统的SMOTE方式,通过在差距向量上乘以一个随机数,确定新样本的位置,并使用插值来生成新样本的特征值。
ADASYN
https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.ADASYN.html
ADASYN(Adaptive Synthetic)是一种基于自适应合成的过采样算法。它与SMOTE方法相似,但根据类别的局部分布估计生成不同数量的样本。
ADASYN根据样本之间的差距,计算每个样本的密度因子。密度因子表示该样本周围少数类样本的密度。较低的密度因子表示该样本所属的区域缺乏少数类样本,而较高的密度因子表示该样本周围有更多的少数类样本。
BorderlineSMOTE
https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.BorderlineSMOTE.html
BorderlineSMOTE(边界SMOTE)是一种过采样算法,是对原始SMOTE算法的改进和扩展。它能够检测并利用边界样本生成新的合成样本,以解决类别不平衡问题。
BorderlineSMOTE在SMOTE算法的基础上进行了改进,通过识别边界样本来更有针对性地生成新的合成样本。边界样本是指那些位于多数类样本和少数类样本之间的样本,它们往往是难以分类的样本。通过识别并处理这些边界样本,BorderlineSMOTE能够提高分类器对难以分类样本的识别能力。
KMeansSMOTE
https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.KMeansSMOTE.html
KMeansSMOTE的关键在于使用KMeans聚类将数据样本划分为不同的簇,并通过识别边界样本来有针对性地进行合成样本的生成。这种方法可以提高合成样本的多样性和真实性,因为它仅在边界样本周围进行过采样,而不是在整个少数类样本集上进行。
SVMSMOTE
https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.SVMSMOTE.html
SVMSMOTE是一种基于SMOTE算法的变体,其特点是利用支持向量机(SVM)算法来检测用于生成新的合成样本的样本。通过将数据集中的少数类样本划分为支持向量和非支持向量,SVMSMOTE能够更准确地选择样本进行合成。对于每个少数类支持向量,它选择其最近邻中的一个作为参考点,并通过计算其与参考点之间的差距来生成新的合成样本。