机器学习训练和测试数据拆分方法
Posted
技术标签:
【中文标题】机器学习训练和测试数据拆分方法【英文标题】:Machine Learning Training & Test data split method 【发布时间】:2016-12-03 01:32:19 【问题描述】:我正在运行一个随机森林分类模型,最初将数据分为训练 (80%) 和测试 (20%)。然而,预测有太多的误报,我认为这是因为训练数据中有太多的噪音,所以我决定用不同的方法拆分数据,这就是我的做法。
由于我认为高 False Positive 是由于训练数据中的噪声,我使训练数据具有相同数量的目标变量。例如,如果我有 10,000 行的数据并且目标变量是 8,000 (0) 和 2,000 (1),我的训练数据总共是 4,000 行,包括 2,000 (0) 和 2,000 (1),这样训练数据现在有更多信号。
当我尝试这种新的拆分方法时,它通过将 Recall Positive 从 14% 增加到 70% 来更好地预测。
如果我在这里做错了什么,我很想听听您的反馈。我担心我的训练数据是否有偏差。
【问题讨论】:
【参考方案1】:当训练集中每个类的数据点数量不相等时,基线(随机预测)会发生变化。
对于嘈杂的数据,我认为您的意思是第 1 类的训练点数比其他类多。这并不是真正的噪音。这实际上是偏见。
例如:您在训练集中有 10000 个数据点,第 1 类有 8000 个数据点,第 0 类有 2000 个。我可以一直预测第 0 类并且已经获得 80% 的准确率。这会导致偏差,0-1 分类的基线不会是 50%。
要消除这种偏差,您可以像以前一样有意地平衡训练集,也可以通过赋予与训练集中点数成反比的权重来更改误差函数。
【讨论】:
非常感谢您的及时回复。所以我实现的方法(让训练数据有 50% 的 0 类和 50% 的 1 类)是正确的使用方法吗? 是的!但这取决于您对误报或误报的重视程度。例如:让 1 类是患者患有癌症,0 类不是癌症。与误报相比,你会更厌恶误报。在这种情况下,您将对预测的不同类别赋予不同的重要性。但是如果你想给 0 和 1 赋予相同的权重,那么它是正确的。 PS:如果您认为正确/满意,请接受答案 癌症示例正是我想要减少假阴性的情况!那么我应该给 1 类比 0 类更多的权重,而不是让训练数据有 50% 的 1 类和 50% 的 0 类吗? 是的,在这种情况下,我希望给假阴性更多的错误权重,并保持训练数据无偏(50-50)。因为使其不偏不倚(不是 50-50)与赋予不同的权重相同。 “一个类的更多 % 大致相当于该类的更多权重” 我不确定我是否同意(80-20)平衡数据有偏差,如果我们同意偏差是“是这个估计器的预期值和被估计参数的真实值之间的差异。 " (维基)。如果分布良好,测试数据可能与训练数据具有相同的分布。并且估计器的真实值没有理由是(50-50),所以训练数据也没有。考虑癌症:如果你的训练集是地球上所有的人——除了一些是测试的——你不希望一半的测试数据有癌症,所以训练分布也没有【参考方案2】:其实你做的是对的,这个过程类似于“分层抽样”。 在您的第一个模型中,准确性非常低,该模型在特征和正类目标之间没有足够的相关性(1)。此外,它的模型可能对负类有些过度拟合。这被称为“高偏差 - 高方差"的情况。
“分层抽样”不过是当您从大量人群中提取样本数据时,您要确保所有类别的比例大致相等,以使模型的训练假设更加准确和可靠。
在第二种情况下,模型能够将特征与目标之间的关系关联起来,并且可以很好地区分正负类特征。 消除噪声是数据准备的一部分,显然应该在将数据放入模型之前完成。
【讨论】:
以上是关于机器学习训练和测试数据拆分方法的主要内容,如果未能解决你的问题,请参考以下文章