【发布时间】:2019-12-04 13:25:57
【问题描述】:
我通过在机器学习和深度学习领域制作项目来训练自己。为此,我注册了 Kaggle 比赛,例如 Titanic Dataset。
当我们加载数据时,有两个数据集:train 和 test。现在我只对训练集进行分析,每次创建新特征或进行一些更改时,我都会通过执行相同的操作对两个数据集进行循环。
现在,我要估算缺失值,并执行一些预处理操作,因此,我将对数据使用一些聚合,对分类特征进行编码等。但我想知道我是否应该同时使用训练和测试集来计算平均值或标记特征或只是训练集。
因为据我所知,测试集应该衡量一个模型在它从未见过的数据上的表现,所以我认为直到现在我应该只使用训练集来做出决定。
但有时它可能是“错误的”,例如如何处理测试集可能具有训练集没有的新类别的事实?
问题
在深度学习或机器学习项目中填充缺失值并执行预处理操作时,最好同时使用训练集和测试集还是只使用训练集?
即使在 Kaggle 比赛中会更好,那么生产项目呢?或许我们应该考虑一下新数据有可能包含看不见的类别的情况?
【问题讨论】:
-
最好远离测试集,以匹配实时场景。你用的是什么插补技术?
-
一个例子:为了估算缺失的年龄值,我将计算年龄缺失的相关乘客组的平均值或中位数。该组取决于他购买的机票类别、名称等。所以对于测试集,我应该只使用训练数据来计算这个平均值?
-
@agupta 是对的——这是建模的一般黄金法则; Should Feature Selection be done before Train-Test Split or after? 中的两个答案(免责声明:我的),尽管与您的上下文不同(特征选择),但可能会有所帮助。
-
您在训练模型时从不接触测试数据。
标签: python pandas machine-learning scikit-learn deep-learning