开发者指南# 贡献指南 贡献方式 自动化贡献政策 提交错误报告或功能请求 如何提交一个好的错误报告 贡献代码 视频资源 如何贡献 拉取请求清单 持续集成(CI) 停滞的拉取请求 停滞和未认领的问题 新贡献者的问题 文档 构建文档 GitHub Actions生成的文档 测试和提高测试覆盖率 性能监控 问题跟踪标签 维护向后兼容性 弃用 更改参数的默认值 代码审查指南 阅读现有代码库 制作 scikit-learn 的最小复现示例 良好实践 提供一个失败的代码示例,并附上最少的注释 将你的脚本简化到最小程度 不要 报告你的数据,除非极其必要 使用 Markdown 格式 合成数据集 NumPy Pandas 数据集加载工具 开发 scikit-learn 估计器 scikit-learn 对象的 API 不同的对象 估计器 实例化 拟合 估计属性 可选参数 通用属性 自定义估计器 get_params 和 set_params 参数和初始化 克隆 管道兼容性 估计器类型 特定模型 估计器标签 HTML 表示的开发者 API 编码指南 输入验证 随机数 测试中的数值断言 开发者技巧与窍门 提高生产力和保持理智的技巧 在拉取请求中折叠和展开过时的差异 将拉取请求检出为远程跟踪分支 在拉取请求中显示代码覆盖率 有用的 pytest 别名和标志 评审的标准回复 使用 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 的开发版本 安装 nightly builds 从源代码构建 依赖项 运行时依赖项 构建依赖项 测试依赖项 从标签构建特定版本 特定平台的安装说明 Windows macOS 来自 conda-forge 的 macOS 编译器 macOS 来自 Homebrew 的编译器 Linux Linux 系统编译器 conda-forge 的 Linux 编译器 FreeBSD Bug 分类和问题管理 改进问题以提高解决的可能性 协助审查 PR 分类问题的典型工作流程 维护者/核心开发者信息 发布流程 发布前 准备发布PR 主要版本发布 次要版本发布(也称为错误修复发布) 发布制作 发布清单 合并拉取请求 scikit-learn.org 网站 实验性功能 使用 Plotting API 进行开发 Plotting API 概述 多轴绘图