在 AI 工作流程中要避免的 7 个常见 Python 错误

干净的运行证明流程已执行。它没有说明管道学到了什么、从哪些行中学到了什么、处于什么状态,或者保存的结果是否可以在其他任何地方信任。

来源:KDnuggets

模型在验证中得分为 0.83,笔记本从上到下运行没有出现任何错误,部署三周后预测毫无用处。在这个故事的任何一点上都没有发生任何崩溃。这就是 AI 工作流程错误与普通 Python 错误的不同之处:API 乐意接受违反数据、状态、形状或工件契约的代码。然后惩罚会以可信的数字而不是回溯的形式出现。干净的运行证明流程已执行。它没有说明管道学到了什么、从哪些行中学到了什么、处于什么状态,或者保存的结果是否可以在其他任何地方信任。

下面的七个错误都共享这种沉默,并且每个错误都带有检查,在其开始的边界处捕获它。

1.数据分割前的拟合预处理

这是一个值得运行一次的演示。获取 100 个纯随机噪声样本,1,000 个特征宽,并通过抛硬币分配标签。现在向 SelectKBest 询问 20 个“最佳”特征,并交叉验证幸存者的分类器:

sel = SelectKBest(f_classif, k=20).fit(X, y) # 适合所有行

分数 = cross_val_score(model, sel.transform(X), y, cv=5)

对于没有任何可学习内容的数据,这对线仍然报告 0.83 的准确度。选择器看到了每一行,包括每次折叠之后视为看不见的行,因此来自保留数据的信息已经形成了正在评估的特征。在 scikit-learn 管道内移动选择,以便每次折叠都适合自己的变换,将相同的实验降低到 0.49,这是噪声的诚实答案。该规则将过去的特征选择概括为缩放、插补和降维。诊断是搜索而不是重新运行:找到工作流程中的每个 fit 和 fit_transform,然后命名当时可见的行。 scikit-learn 保留了这些陷阱的完整目录,其中泄漏位于顶部是有原因的。

2. 随机分割不独立的行6. 让广播隐藏错误的张量形状