我是机器学习的初学者,并试图解决分类问题。我正在处理一个非常不平衡(顺序)的数据集(20k记录中只有2%的正数),我正在使用LSTM / GRU使用tensorflow在python中进行建模。
这就是我的意思: 加载数据。 将数据集拆分为3个数据集: A培训(70%) B验证(15%) C测试(15%); 对于每个数据集(A,B,C),对正类进行过采样,以便将正数百分比从2%增加到30%。这给了我3个更平衡的新数据集:A',B',C'
然后我使用GRU使用数据集A'训练我的模型。
我的目标:在我的测试集C上得到最高的F分数(有没有更好的指标?从我所看到的,F得分取决于数据分布,即数据的偏差。如果我的实际负数与正数比率增加然后精确度下降(由于假阴性增加)虽然召回或多或少保持不变;所以我的整体F得分下降了)
我的问题是:
我可以在训练时使用交叉熵作为我的成本函数吗? (我不会改变成本函数,因为我已经过度采样了我的积极因素,因此对假阳性更加敏感)
我必须使用哪个数据集进行验证? B或B'?我应该使用什么指标绘制验证学习曲线,以了解我的模型过度拟合的点? (目前我在A'(火车)和B'(验证)上使用准确度,看是否有任何过度拟合。但似乎B'上的准确性和B上的f得分并不相关。因为最终我想要在C上获得良好的f分,这意味着我需要在B上获得良好f分数的模型
提前感谢您的时间! 问候。
答案 0 :(得分:1)
(以下是一个长篇评论而不是一个完整的答案 - 我需要考虑一下。我希望我能在今晚/明天找到更新时间)
我们使用测试集来估计真实分数(误差/准确度/ F1分数/召回/精确度/ ......),因此如果我们在所有可能的样本上测试模型,我们将得到的分数(那将是是一个非常大量的样本;例如,如果您收到32x32 px灰度图像,它将是256 ^ 1024 \约10 ^ 2466)。
因此,您将C用于测试,而不是C'。
我们正在使用验证集来不在测试集上过度拟合。通常用于提前停止。如果得分是优化目标,则它应该是B(不是B')。如果分数不同,您可能想要考虑两者如何齐头并进(例如,当优化目标变得更好时,分数是否也变得更好?)。如果在许多情况下它们没有齐头并进,您应该调整优化目标。
你有F1分数,并且正在考虑使用交叉熵作为优化目标。交叉熵忽略了类,因此你平衡了类。
编辑:想一想,我会把B上的F1分作为停止标准。其他选择也可能是有效的,但这似乎最有意义,因为F1得分应该最大化
如果您选择A,您将遇到网络学习的问题,始终预测更常见的课程。因此你必须采取A'。