关于 scikit-learn-best-practices
为使用 scikit-learn 构建和评估机器学习工作流的开发者提供实践指南,涵盖可复现的数据准备、流水线、模型选择、评估与持久化。
主要功能
- 01可复现的数据拆分
- 02预处理与建模流水线
- 03交叉验证策略
- 04超参数搜索指导
- 05模型评估与持久化
适用场景
- 01在避免数据泄漏的前提下准备数据
- 02比较候选模型
- 03调整模型参数
- 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