路线图#

本文件旨在#

本文档列出了核心贡献者有兴趣在scikit-learn中开发的一般方向。在此列出一个项目的事实绝不是保证它会发生,因为资源是有限的。相反,这表明在这个问题上欢迎帮助。

目的声明:2018年Scikit-learn#

Scikit-learn问世十一年后,机器学习世界发生了很大变化。主要变化包括:

  • 计算工具:利用图形处理器、Scala/Spark等分布式编程框架。

  • 用于实验、处理和数据管理的高级Python库:Inspyter notebook、Cython、Pandas、Daska、Numba.

  • 机器学习研究重点的变化:具有深度学习、表示学习、强化学习、域转移等的人工智能应用(其中输入结构是关键)。

过去十年中一个更微妙的变化是,由于人们对ML兴趣的变化,机器学习领域的博士生更有可能为PyTorch、Daskk等做出贡献,而不是为Scikit-learn做出贡献,因此我们的贡献者库与十年前有很大不同。

Scikit-learn在实践中仍然非常受欢迎,用于尝试规范的机器学习技术,特别是在实验科学和数据科学中的应用。我们提供的很多东西现在都非常成熟。但维护它的成本可能很高,因此我们不能包括任意的新实现。然而,Scikit-learn对于定义API框架以开发核心库外部的可互操作机器学习组件也至关重要。

Thus our main goals in this era are to :

  • 继续在当前范围内维护高质量、文档齐全的规范工具集合,用于数据处理和机器学习(即矩形数据基本上不受列和行顺序变化;用简单的结构预测目标)

  • 提高用户开发和发布外部组件的易用性

  • 提高与现代数据科学工具(例如Pandas、Dask)和基础设施(例如分布式处理)的互操作性

许多更细粒度的目标可以在 API tag 在问题跟踪器上。

建筑/一般目标#

该列表的编号并不是为了指示优先顺序,而是为了更容易提及具体要点。请仅在底部添加新条目。请注意,划掉的条目已经完成,并且我们在处理这些问题时尝试保持文档最新。

  1. 改进了Pandas DataFrame的处理

    • 文档当前处理

  2. 改进分类特征的处理

    • 基于树的模型应该能够处理连续特征和分类特征 #29437 .

    • 处理分类和连续变量的混合物

  3. 改进了丢失数据的处理

    • 通过实施通用测试,确保元估计器对缺失数据宽容。

    • 截肢样本生成器,用于使数据集的部分丢失 #6284

  4. 更多说教文档

    • More and more options have been added to scikit-learn. As a result, the documentation is crowded which makes it hard for beginners to get the big picture. Some work could be done in prioritizing the information.

  5. 传递不是(X,y)的信息:特征属性

    • 按功能处理(例如“这是名义性/有序/英语文本吗?””)理想情况下,也不应该需要提供给估计器构造者,而是应该与X一起作为元数据提供。 #8480

  6. 传递不是(X,y)的信息:目标信息

    • 当数据拆分/采样时,我们在将完整的类集获取到所有组件时会遇到问题。 #6231 #8100

    • 我们无法处理分类目标和连续目标的混合。

  7. 让外部用户更容易编写Scikit-learn兼容的组件

    • 更加自给自足地运行scikit-learn-contrib或类似资源

  8. 支持恢复和样本减少

    • 允许对多数类进行二次抽样(在管道中?) #3855

  9. 更好的交互式开发界面

    • 通过改进估计器的HTML可视化 estimator_html_repr .

    • 包括更多绘图工具,而不仅仅是示例。

  10. 改进的模型诊断和基本推理工具

    • 致力于“功能重要性”的统一界面

    • 装配时处理验证集的更好方法

  11. 用于选择具有换能估计的超参数的更好工具

    • 网格搜索和交叉验证不适用于大多数聚类任务。基于稳定性的选择更有意义。

  12. 更好地支持手动和自动管道建设

    • 更简单的方式构建复杂的管道和有效的搜索空间 #7608 #5082 #8243

    • 为常见估计器提供搜索范围??

    • 参见 searchgrid

  13. 改进的试穿跟踪

    • 冗长不是很友好,应该使用标准的日志库 #6929 , #78

    • 回调或类似的系统将有助于记录和提前停止

  14. 分布式并行性

    • 接受符合的数据 __array_function__

  15. 更多非核心的前进之路

    • Dask支持简单的核外计算。虽然Dask模型可能无法适应所有的机器学习算法,但大多数机器学习都是在比ETL更小的数据上进行的,因此我们可以适应非常大的规模,同时只支持一小部分模式。

  16. Backwards-compatible de/serialization of some estimators

    • 目前序列化(使用pickle)跨越版本。虽然我们可能无法绕过pickle re安全性等的其他限制,但从1.0版本起提供跨版本安全性将是很好的。注:Gael和Olivier认为这可能会造成沉重的维护负担,我们应该管理权衡。以下一点提出了一种可能的替代方案。

  17. 用于模型生命周期管理的文档和工具

    • 记录模型部署和生命周期的良好实践:在部署模型之前:快照代码版本(numpy,scipy,scikit-learn,自定义代码库),训练脚本和关于如何检索历史训练数据的别名+快照小型验证集的副本+该验证集的预测快照(分类器的预测概率)。

    • 易于管理scikit-learn版本升级的文档和工具:

      • 尝试加载旧pickle,如果有效,使用验证集预测快照来检测序列化模型的行为仍然相同;

      • 如果jobib. put/ pickle. start不起作用,请使用版本化控制训练脚本+历史训练集来重新训练模型,并使用验证集预测快照来断言可以恢复之前的预测性能:如果不是这样,那么scikit-learn中可能存在一个需要报告的错误。

  18. scikit-learn中的所有内容可能都应该符合我们的API合同。我们仍在就其中一些相关问题做出决定。

    • Pipeline <pipeline.Pipeline>FeatureUnion 适当修改其输入参数。解决这个问题需要确保我们很好地掌握他们的用例,以确保所有当前功能都得到维护。 #8157 #7382

  19. (可选)改进scikit-learn常用测试套件,以确保(至少对于经常使用的)模型在跨版本(待讨论)中具有稳定的预测;

    • 扩展文档以提及如何在无Python环境中部署模型 ONNX .并使用上述最佳实践来评估验证集上scikit-learn和ONNX预测功能之间的预测一致性。

    • 记录检测已部署模型的时间分布漂移的良好实践,以及在新数据上重新训练而不会导致灾难性预测性能回归的良好实践。