在进行任何探索性数据分析之前,还是将所有数据完全基于训练数据进行探索,是最好将您的数据分为训练集和测试集?
我正在做我的第一个完整的机器学习项目(课程顶点项目的推荐系统),并且正在寻找操作顺序的说明。我的粗略概述是导入和清理,进行探索性分析,训练我的模型,然后在测试集上进行评估。
我现在正在进行探索性数据分析-最初没有什么特别的,只是从变量分布开始。但是我不确定:在进行探索性分析之前还是之后,我应该将数据分为训练集和测试集吗?
我不想通过检查测试集来潜在地污染算法训练。但是,我也不想错过视觉趋势,因为视觉趋势可能反映了我的不良人眼在过滤后可能看不到的真实信号,因此潜在地错过了在设计算法时研究重要且相关的方向的问题。
我检查了其他线程,例如this,但发现的线程似乎在询问更多有关正则化或原始数据实际操作的问题。我发现的答案很复杂,但优先考虑的是拆分。但是,我不打算在拆分数据之前对数据进行任何实际的操作(除了检查分布并可能进行某些因子转换外)。
您在自己的工作中做什么,为什么?
感谢帮助新程序员!
艾米
答案 0 :(得分:1)
要回答这个问题,我们应该提醒自己为什么在机器学习中,我们将数据分为训练集,验证集和测试集(另请参见this question)。
训练集用于模型开发。我们经常仔细地探索这些数据,以获取有关特征工程和机器学习模型的一般结构的想法。然后,我们使用训练数据集训练模型。
通常,我们的目标是生成不仅在训练数据上而且还将在以前看不见的数据上都表现良好的模型。因此,我们要避免捕获数据特殊性的模型我们现在有可用的数据,而不是将来会看到的数据的一般结构(“ 过度拟合”)。为此,我们通过评估不同数据集验证数据的性能来评估所训练模型的质量,然后选择对验证数据表现最佳的模型。
对最终模型进行了训练,我们经常希望对其性能进行无偏估计。由于我们已经在模型开发过程中使用了验证数据(我们选择了效果最好的模型在验证数据上),我们无法确定我们的模型能否在看不见的数据上同样出色地运行。因此,为了评估模型的质量,我们使用新的数据测试数据来测试性能。
此讨论给出了您的问题的答案:我们不应该将测试(或验证)数据集用于探索性数据分析。因为如果这样做,则存在模型过度拟合的风险。我们拥有的数据的特殊性,例如通过对测试数据有效的工程特征。同时,我们将失去对模型性能进行无偏估计的能力。
答案 1 :(得分:1)
我会反过来解决这个问题;使用测试集是否不好?
建模的目的是建立一个方差低(偏差小)的模型:这就是为什么测试集会保留大量数据以评估与新数据一起表现(即其变化)。如果在建模过程中使用测试集,那么您将无济于事,并且数据过拟合。
EDA的目的是了解您正在使用的数据。特征的分布,它们之间的关系,它们的动力学等等。如果将测试集保留在数据中,是否存在“过度拟合”您对数据的理解的风险?如果是这种情况,您会观察到说您的数据中有70%的某些属性对于剩余的30%(测试集)而言无效...知道拆分是随机的,这是不可能的,或者您已经非常不幸的。
答案 2 :(得分:0)
根据我在机器学习管道中的理解,应该在将数据分为训练和测试之前进行探索性数据分析。
这是我的原因:
完成上述操作后,我们就可以将数据集分为训练和测试。因为在训练和测试中这些功能都必须相似。