开发者指南# 贡献 贡献方式 自动化贡献政策 提交错误报告或功能请求 如何提交一份好的错误报告 贡献代码 视频资源 如何贡献 拉取请求清单 持续集成 (CI) 提交消息标记 解决锁定文件中的冲突 停滞的拉取请求 停滞和无人认领的问题 新贡献者问题 文档 构建文档 GitHub Actions 上的生成文档 测试和改进测试覆盖率 监控性能 问题追踪器标签 维护向后兼容性 弃用 更改参数的默认值 代码审查指南 阅读现有代码库 为 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 类型 安装 scikit-learn 开发版本 安装每夜构建版本 从源代码构建 从标签构建特定版本 特定平台说明 Windows macOS 来自 conda-forge 的 macOS 编译器 来自 Homebrew 的 macOS 编译器 Linux 来自系统的 Linux 编译器 来自 conda-forge 的 Linux 编译器 FreeBSD Bug 分类和问题管理 处理问题以改进它们 处理 PR 以协助审查 核心和贡献者体验团队成员的分类操作 问题分类的典型工作流程 维护者信息 发布 参考步骤 更新作者列表 提高我们依赖项最低版本的指南 合并拉取请求 scikit-learn.org 网站 实验性功能 使用绘图 API 进行开发 绘图 API 概览 使用多个轴进行绘图