详细内容或原文请订阅后点击阅览
我的模型在自己的测试中作弊
预处理管道让我的汽车价格模型在考试前查看测试集,并且 R 平方的 12 个点作弊到了“我的模型在自己的测试中作弊”一文,该文章首先出现在《走向数据科学》上。
来源:走向数据科学模型可以看到它尚不应该访问的信息,而隐藏的查看使其分数看起来比实际分数更好。 Kaufman、Rosset、Perlich 和 Stitelman 在 2012 年 ACM Transactions 上关于数据知识发现的论文“数据挖掘中的泄漏:制定、检测和避免”中清楚地描述了这一点。他们给出的一个例子是 INFORMS 2010 数据挖掘挑战赛。竞争对手应该仅使用训练集来预测股价走势,然后在单独的测试集上进行评分。一些竞争对手通过将模式与公共财务数据进行匹配,找出了测试集中隐藏的真实股票。这让他们能够提取测试集本应隐藏的信息,并且他们的分数看起来比模型实际应得的要好。
我自己的泄漏要小得多,而且更容易被忽视。它不涉及找出隐藏的股票身份。它来自于以错误的顺序运行两行普通的预处理代码。
我使用 scikit-learn 的 MLPRegressor 训练了一个小型神经网络,以根据二手车数据集预测汽车价格。该项目的第一个版本报告了很高的测试分数:R 平方为 0.887。当我确定了两行的顺序后,诚实的分数是0.767。该模型并没有变得更糟。我的第一次测量是安静地阅读部分答案。
看起来很可靠的数字
R 平方是模型预测数字的好坏的常见分数。它从 0 到 1。越高越好。 R 平方为 0.887 意味着该模型可以根据从未训练过的数据解释大约 89% 的汽车价格差异。
实验
目标是回归:预测价格(一个数字),而不是将汽车分类。我使用了多层感知器(MLP)。 MLP 是一种神经网络:一种由小型连接单元层组成的模型,其中每个单元组合其输入并将结果向前传递。这个有两个隐藏层,每个隐藏层有 64 个单元:
