mcpField
S
scikit-learn-best-practices

scikit-learn-best-practices

github.com/mindrally数据与数据库287892 次安装3 周前更新
代码仓库

关于 scikit-learn-best-practices

为使用 scikit-learn 构建和评估机器学习工作流的开发者提供实践指南,涵盖可复现的数据准备、流水线、模型选择、评估与持久化。

主要功能

  1. 01可复现的数据拆分
  2. 02预处理与建模流水线
  3. 03交叉验证策略
  4. 04超参数搜索指导
  5. 05模型评估与持久化

适用场景

  1. 01在避免数据泄漏的前提下准备数据
  2. 02比较候选模型
  3. 03调整模型参数
  4. 04保存可部署的模型流水线

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mindrally/skills --skill scikit-learn-best-practices

安装后在 Claude Code 中输入/scikit-learn-best-practices确认已加载。

详细介绍

Scikit-learn 最佳实践

Scikit-learn 开发指南,重点介绍机器学习工作流、模型开发、评估和最佳实践。

代码风格与结构

  • 编写简洁、专业的回答,并提供准确的 Python 示例
  • 优先保证机器学习工作流的可复现性
  • 在数据流水线中使用函数式编程
  • 为自定义估算器使用面向对象编程
  • 优先使用向量化操作,而非显式循环
  • 遵循 PEP 8 风格指南

机器学习工作流

数据准备
  • 始终在任何预处理之前拆分数据:训练集/验证集/测试集
  • 使用带有 random_state 的 train_test_split(),以确保可复现性
  • 对类别不平衡的分类任务进行分层拆分:stratify=y
  • 在最终评估之前,始终将测试集完全隔离
特征工程
  • 根据需要为基于距离的算法缩放特征
  • 对正态分布的特征使用 StandardScaler
  • 对有界特征使用 MinMaxScaler
  • 对含有离群值的数据使用 RobustScaler
  • 对类别变量进行编码:OneHotEncoder、OrdinalEncoder、LabelEncoder
  • 处理缺失值:SimpleImputer、KNNImputer
流水线
  • 始终使用 Pipeline 串联预处理与建模步骤
  • 仅在训练数据上拟合转换器,防止数据泄漏
  • 让代码更简洁、更具可复现性
  • 便于部署和序列化
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('classifier', RandomForestClassifier(random_state=42))
])
列转换器
  • 使用 ColumnTransformer 为不同类型的特征执行不同的预处理
  • 在单个流水线中组合数值特征和类别特征的预处理

模型选择与调优

交叉验证
  • 使用交叉验证,获得可靠的性能估计
  • 使用 cross_val_score() 进行快速评估
  • 使用 cross_validate() 评估多个指标
  • 选择合适的交叉验证策略:
    • 回归任务使用 KFold
    • 分类任务使用 StratifiedKFold
    • 时间序列数据使用 TimeSeriesSplit
    • 分组数据使用 GroupKFold
超参数调优
  • 使用 GridSearchCV 进行穷举搜索
  • 对于大型参数空间,使用 RandomizedSearchCV
  • 始终在训练数据/验证数据上进行调优,切勿使用测试数据
  • 设置 n_jobs=-1 进行并行处理

模型评估

分类指标
  • 根据问题选择合适的指标:
    • 类别均衡时使用 accuracy_score
    • 类别不平衡时使用 precision_score、recall_score、f1_score
    • 使用 roc_auc_score 衡量排序能力
  • 使用 classification_report() 全面查看评估结果
  • 使用 confusion_matrix() 分析错误
回归指标
  • 一般用途使用 mean_squared_error(MSE)
  • 注重可解释性时使用 mean_absolute_error(MAE)
  • 使用 r2_score 衡量解释方差
评估最佳实践
  • 报告置信区间,而不只是点估计
  • 使用多个指标了解模型表现
  • 与有意义的基线进行比较
  • 仅在最后使用保留的测试集评估一次

处理不平衡数据

  • 使用分层拆分和交叉验证
  • 考虑使用类别权重:class_weight='balanced'
  • 使用合适的指标(F1、AUC-PR,而非准确率)
  • 根据业务需求调整决策阈值

特征选择

  • 使用 SelectKBest 和统计检验
  • 使用 RFE(递归特征消除)
  • 使用基于模型的特征选择:SelectFromModel
  • 检查基于树的模型提供的特征重要性

模型持久化

  • 使用 joblib 保存和加载模型
  • 保存完整的流水线,而不只是模型
  • 对模型制品进行版本控制
  • 记录模型元数据

性能优化

  • 在可用时使用 n_jobs=-1 进行并行处理
  • 考虑使用 warm_start=True 进行迭代训练
  • 对高维稀疏数据使用稀疏矩阵
  • 对大型数据,考虑使用 partial_fit() 进行增量学习

关键约定

  • 从子模块导入:from sklearn.ensemble import RandomForestClassifier
  • 设置 random_state 以确保可复现性
  • 使用管道来防止数据泄漏
  • 记录模型选择和超参数

评论

支持 Markdown