开发者指南# 贡献 贡献方式 新贡献者 自动化贡献政策 提交错误报告或功能请求 如何撰写好的错误报告 贡献代码和文档 开发工作流 拉取请求清单 持续集成 (CI) 提交信息标记 解决锁文件中的冲突 停滞的拉取请求 停滞和无人认领的问题 标记为“需要分类”的问题 视频资源 文档 构建文档 GitHub Actions 上生成的文档 测试和提高测试覆盖率 监控性能 问题跟踪器标签 保持向后兼容性 弃用 更改参数的默认值 代码审查指南 阅读现有代码库 设置开发环境 Fork scikit-learn 仓库 设置你的 fork 的本地克隆 设置专用环境并安装依赖项 安装 scikit-learn 的可编辑版本 设置 pre-commit 为 scikit-learn 制作最小复现器 良好实践 提供一个带有最少注释的失败代码示例 将脚本精简到尽可能小的程度 除非绝对必要,否则不要报告你的数据 使用 markdown 格式 合成数据集 NumPy Pandas make_regression make_classification make_blobs 数据集加载工具 开发 scikit-learn 估计器 scikit-learn 对象的 API 不同的对象 估计器 实例化 拟合 估计属性 通用属性 自己实现估计器 get_params 和 set_params 克隆 估计器类型 估计器标签 set_output 的开发者 API check_is_fitted 的开发者 API HTML 表示的开发者 API 编码规范 输入验证 随机数 测试中的数值断言 开发者技巧与窍门 提高效率和保持理智的技巧 折叠和展开拉取请求中过时的差异 将拉取请求作为远程跟踪分支检出 在拉取请求中显示代码覆盖率 有用的 pytest 别名和标志 审阅标准回复 调试 CI 问题 使用锁文件获取接近 CI 的环境 使用 valgrind 调试 Cython 中的内存错误 在 x86_64 机器上为 ARM64 平台构建和测试 Meson 构建后端 开发者实用工具 验证工具 高效线性代数与数组操作 高效随机抽样 稀疏矩阵的高效例程 图例程 测试函数 多类和多标签实用函数 辅助函数 哈希函数 警告和异常 如何优化速度 Python、Cython 还是 C/C++? Python 代码分析 内存使用分析 使用 Cython 分析已编译的扩展 使用 yep 和 gperftools 使用调试器 gdb 使用 gprof 使用 valgrind / callgrind / kcachegrind kcachegrind 使用 joblib.Parallel 进行多核并行化 一个简单的算法技巧:热启动 Cython 最佳实践、约定和知识 scikit-learn 中使用 Cython 进行开发的技巧 简化开发的技巧 提高性能的技巧 使用 OpenMP 类型 杂项信息/故障排除 关于 OpenMP 的注意事项 关于 Conda 的注意事项 关于其他 Linux 发行版依赖项的注意事项 关于 Meson 的注意事项 Bug 分类和问题整理 处理问题以改进它们 处理拉取请求以协助审查 核心团队和贡献者体验团队成员的分类操作 分类问题的典型工作流 维护者信息 发布 参考步骤 更新作者列表 提高依赖项最低版本的指南 合并拉取请求 scikit-learn.org 网站 实验性功能 使用绘图 API 进行开发 绘图 API 概述 使用多轴绘图