我正在使用包含12个属性的数据集,包括时间戳和一个属性作为输出。它也有大约4000行。此外,记录中没有重复。我正在尝试训练一个随机森林来预测输出。为此,我创建了两个不同的数据集:
然后我从两个数据集中删除了timestamp属性,并使用其他11个属性进行训练和测试(我确信时间戳不应该是训练的一部分)。
结果:这两个数据集的结果完全不同。对于第一个AUC(曲线下面积)是85%-90%(我做了几次实验),第二个是45%-50%。
如果有人能帮助我知道,我很感激
PS:我已经从前80%的时间戳中测试了随机选择,并没有改善性能。
答案 0 :(得分:3)
首先,目前尚不清楚你是如何进行测试的。第二,无论哪种方式,你做错了测试。
结果:这两个数据集的结果完全不同。对于第一个AUC(曲线下面积)是85%-90%(我做了几次实验),第二个是45%-50%。
这是针对训练集还是测试集?如果测试集合,那意味着你的泛化能力差。
你做错了,因为你不允许调整你的模型,以便它在同一个测试集上表现良好,因为它可能会引导你进入一个能做到这一点的模型,但这种做法很糟糕。
你应该做以下两件事之一:
<强> 1。培训验证测试分组
保持60%的数据用于培训,20%用于验证,20%用于以随机方式进行测试。训练您的模型,以便使用您的训练集在验证集上表现良好。确保你不要过度训练:训练集上的表现应该接近验证集上的表现,如果距离很远,你就会过度训练你的训练集。 现阶段根本不要使用测试集。
一旦您满意,请在训练集+验证集上训练您选择的模型,并在您已经坚持的测试集上进行测试。你应该得到可接受的表现。根据您在此测试集上获得的结果,您不能进一步调整您的模型,如果您不满意,则必须从头开始。
<强> 2。使用cross validation
一种流行的形式是10倍交叉验证:将您的数据洗牌并将其分成10组相等或几乎相等的大小。对于10个小组中的每个小组,在另外9个小组上训练并对剩余的小组进行测试。在测试组中平均您的结果。
您可以对模型进行更改以提高平均分数,只需在每次更改后再次运行交叉验证(确保重新洗牌)。
我个人更喜欢交叉验证。
我猜测会发生什么,通过基于时间戳排序,你会使你的算法概括不好。也许您保留用于测试的20%会以某种方式显着不同,并且您的算法没有机会捕获这种差异?通常,您的数据应该随机排序,以避免此类问题。
当然,您可能还有一个错误的实施。
我建议你尝试交叉验证,看看你得到了什么结果。