在进行任何探索性数据分析之前,还是将所有探索完全基于训练数据进行分析,最好将您的数据分为训练集和测试集?
我正在做我的第一个完整的机器学习项目(类(class)顶点项目的推荐系统),并且正在寻找操作顺序的说明。我的粗略概述是导入和清理,进行探索性分析,训练我的模型,然后在测试集上进行评估。
我现在正在进行探索性数据分析-最初没有什么特别的,仅从变量分布开始。但是我不确定:在探索性分析之前或之后,我应该将数据分为训练集和测试集吗?
我不想通过检查测试集来潜在地污染算法训练。但是,我也不想错过视觉趋势,因为视觉趋势可能反射(reflect)了我的不良人眼在过滤后可能看不到的真实信号,因此可能会错过在设计算法时研究重要且相关方向的信息。
我检查了其他线程,例如this,但发现的线程似乎在询问更多有关正则化或原始数据实际操作的问题。我发现的答案很复杂,但优先考虑的是拆分。但是,我不打算在拆分数据之前对数据进行任何实际的操作(除了检查分布并可能进行某些因子转换外)。
您在自己的工作中做什么工作,为什么呢?
感谢您帮助新程序员!
艾米
最佳答案
为了回答这个问题,我们应该提醒自己为什么在机器学习中,我们将数据分为训练集,验证集和测试集(另请参见this question)。
训练集用于模型开发。 我们经常仔细地研究这些数据,以获取有关特征工程和机器学习模型的一般结构的想法。然后,我们使用训练数据集训练模型。
通常,我们的目标是生成不仅在训练数据上而且在以前看不见的数据上都能表现良好的模型。 因此,我们要避免使用那些模型来捕获当前可用数据的特殊性,而不是捕获将来会看到的数据的一般结构(“过度拟合”)。为此,我们通过评估在不同数据集(验证数据)上的性能来评估所训练模型的质量,然后选择在验证数据上表现最佳的模型。
在训练了我们的最终模型之后,我们经常希望对其性能进行无偏估计。 因为我们已经在模型开发过程中使用了验证数据(我们选择了在验证数据上表现最佳的模型),所以我们无法确定我们的模型在看不见的数据上同样能表现良好。因此,为了评估模型质量,我们将使用新的一组数据(测试数据)来测试性能。
该讨论为您的问题提供了答案:我们不应将测试(或验证)数据集用于探索性数据分析。 因为,如果这样做,我们将冒着使模型过度适应所拥有数据的特殊性的风险,例如,通过适用于测试数据的工程特征。同时,我们将失去对模型性能进行无偏估计的能力。
关于r - 机器学习项目: split training/test sets before or after exploratory data analysis?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54282411/