gpt4 book ai didi

python - 数据不平衡的过度训练

转载 作者:行者123 更新时间:2023-11-30 09:51:24 25 4
gpt4 key购买 nike

我正在尝试对一些不平衡数据(~20:1 比率)执行二元分类,并且获得了几乎完美的交叉验证准确性,但对于训练/测试中未使用的数据,预测率却很糟糕。反面例子有几千个,正面例子有几百个。该数据已标准化,并使用 SMOTE 来平衡类别分布。

使用 RandomForests 分类器,KFold 交叉验证几乎是完美的,但召回率/准确率值在 0.1-0.3 之间。我尝试过不同的平衡方法、PCA(大约有80个原始特征)、多个分类器、CV网格优化,甚至在8倍训练后组合树,但这些都没有显着改善结果。

与新数据相比,训练的效果让我有点惊讶。这有可能是因为训练过度造成的吗?我希望树木的组合能够帮助缓解这种情况,但事实并非如此。这些数据可能很难用可用的功能进行分类,但我是否遗漏了一些明显的东西?

最佳答案

解决办法其实很简单。对于这种不平衡的分类,您需要对您的分类进行加权,以便您的模型学习如何平等地对真假进行分类,而不必丢弃大量数据!

尝试像这样的简单示例:

def calculate_class_weights(train_classifications):

one_count = 0
zero_count = 0
one_weight = 0

for i in train_classifications:
if i == 1:
one_count += 1.0
if i == 0:
zero_count += 1.0

if one_count > zero_count:
one_weight = one_count / zero_count

if one_count < zero_count:
one_weight = zero_count / one_count

return one_weight

这将给出正分类与负分类相比的相对“权重”。然后您可以像这样调用您的模型:

classifier = svm.SVC(probability=True, class_weight={1: one_weight})
classifier.fit(training_set, train_classifiers)

所以这里负数的权重是1,正数的权重是之前计算的值。例如,如果正数是负数的两倍,则可能是 0.5。

祝你好运!

关于python - 数据不平衡的过度训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com