🎯 学习目标

  • 理解模型持久化的重要性
  • 掌握joblib和pickle的使用方法
  • 了解模型版本管理最佳实践
  • 学会保存和加载完整Pipeline
模型保存概念图

为什么需要模型持久化

训练好的模型需要保存以便后续使用。模型持久化将训练好的模型保存到磁盘, 避免重复训练,便于部署和分享。

💾 常用保存方法

joblib(推荐)

  • sklearn官方推荐
  • 对大型NumPy数组效率高
  • 支持压缩
  • 适合保存sklearn模型

pickle

  • Python标准库
  • 通用序列化工具
  • 兼容性好
  • 适合一般Python对象

💻 使用joblib保存模型

import joblib from sklearn.ensemble import RandomForestClassifier # 训练模型 model = RandomForestClassifier(n_estimators=100) model.fit(X_train, y_train) # 保存模型 joblib.dump(model, 'model.joblib') # 保存为压缩文件 joblib.dump(model, 'model_compressed.joblib', compress=3) # 加载模型 loaded_model = joblib.load('model.joblib') # 使用加载的模型 predictions = loaded_model.predict(X_test)

📦 保存完整Pipeline

from sklearn.pipeline import Pipeline import joblib # 创建并训练Pipeline pipeline = Pipeline([ ('scaler', StandardScaler()), ('classifier', RandomForestClassifier()) ]) pipeline.fit(X_train, y_train) # 保存完整Pipeline joblib.dump(pipeline, 'pipeline.joblib') # 加载并直接使用 loaded_pipeline = joblib.load('pipeline.joblib') predictions = loaded_pipeline.predict(X_new)

📊 模型元数据管理

import json from datetime import datetime # 创建模型元数据 metadata = { 'model_name': 'random_forest_classifier', 'version': '1.0.0', 'created_at': datetime.now().isoformat(), 'sklearn_version': sklearn.__version__, 'features': feature_names, 'metrics': { 'accuracy': 0.95, 'f1_score': 0.93 }, 'parameters': model.get_params() } # 保存元数据 with open('model_metadata.json', 'w') as f: json.dump(metadata, f, indent=2)

⚠️ 安全注意事项

⚠️
安全警告

pickle和joblib文件可能包含恶意代码。仅加载可信来源的模型文件,不要加载来历不明的模型。

模型持久化
图:模型持久化确保训练成果可复用

📝 本节小结

  • • 模型持久化保存训练结果,避免重复训练
  • • joblib是sklearn推荐的保存方法
  • • 保存完整Pipeline确保预处理一致性
  • • 应保存模型元数据便于版本管理
  • • 注意安全性,只加载可信模型文件