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