不平衡学习:实例硬度阈值方法中的阈值是如何计算的?
imbalanced-learn: how is the threshold calculated in the instance hardness threshold method?
我正在查看来自不平衡学习的 InstanceHardnessThreshold 转换器的源代码,此处:https://github.com/scikit-learn-contrib/imbalanced-learn/blob/12b2e0d/imblearn/under_sampling/_prototype_selection/_instance_hardness_threshold.py#L167
我想知道阈值是如何计算出来的,原理是什么?
在与 imbalanced-learn 包的维护者讨论后,这是我学到的:
阈值确定如下:
threshold = np.percentile(
probabilities[y == target_class],
(1.0 - (n_samples / target_stats[target_class])) * 100.0,
)
其中 n_samples 是最终数据集中所需的来自大多数 class 的样本数,target_stats[target_class] 是大多数 target_class] 的总数 class 存在于原始数据集中。
我们需要找到一个概率阈值,使得高于该阈值的样本数与 sampling_strategy
中请求的样本数一致。默认情况下,它将是少数样本的数量class,除非用户另有声明。
实例硬度是观察结果未被 class 化的概率。也就是说,它是class.
的1-概率
这个想法是估计器给出的概率与样本属于 class 的确定性有关。因此,0.0 的百分位数意味着我们 select 所有样本,而 1.0 的百分位数意味着我们将 select 单个样本(具有最大概率的样本)。因此,阈值对应于 select N 个最确定的样本属于 class C,正如每个估计器所见。 N 由 sampling_strategy 参数定义(例如,预期的平衡比率)。
此方法可能 return 比用户请求的观测值更多。文档中提到了这一点。
我正在查看来自不平衡学习的 InstanceHardnessThreshold 转换器的源代码,此处:https://github.com/scikit-learn-contrib/imbalanced-learn/blob/12b2e0d/imblearn/under_sampling/_prototype_selection/_instance_hardness_threshold.py#L167
我想知道阈值是如何计算出来的,原理是什么?
在与 imbalanced-learn 包的维护者讨论后,这是我学到的:
阈值确定如下:
threshold = np.percentile(
probabilities[y == target_class],
(1.0 - (n_samples / target_stats[target_class])) * 100.0,
)
其中 n_samples 是最终数据集中所需的来自大多数 class 的样本数,target_stats[target_class] 是大多数 target_class] 的总数 class 存在于原始数据集中。
我们需要找到一个概率阈值,使得高于该阈值的样本数与 sampling_strategy
中请求的样本数一致。默认情况下,它将是少数样本的数量class,除非用户另有声明。
实例硬度是观察结果未被 class 化的概率。也就是说,它是class.
的1-概率这个想法是估计器给出的概率与样本属于 class 的确定性有关。因此,0.0 的百分位数意味着我们 select 所有样本,而 1.0 的百分位数意味着我们将 select 单个样本(具有最大概率的样本)。因此,阈值对应于 select N 个最确定的样本属于 class C,正如每个估计器所见。 N 由 sampling_strategy 参数定义(例如,预期的平衡比率)。
此方法可能 return 比用户请求的观测值更多。文档中提到了这一点。