✅ 今日目标
- 掌握如何将训练好的模型持久化保存到文件
- 熟悉两种主流保存方式:
joblib
和 pickle
- 加载模型并应用于新数据预测
- 实现完整的"训练 → 保存 → 加载 → 预测"流程
- 为后续部署做准备(如 Flask、FastAPI)
🧰 一、模型保存工具对比
工具 |
特点 |
推荐场景 |
pickle |
Python 原生序列化工具,支持任意对象 |
通用保存 |
joblib |
专为 NumPy / sklearn 设计,速度快 |
大模型保存 |
🧪 二、基本用法示例
✅ 使用 joblib
python
复制代码
from joblib import dump, load
# 保存模型
dump(model, 'model.joblib')
# 加载模型
model = load('model.joblib')
✅ 使用 pickle
python
复制代码
import pickle
# 保存
with open('model.pkl', 'wb') as f:
pickle.dump(model, f)
# 加载
with open('model.pkl', 'rb') as f:
model = pickle.load(f)
🧠 三、完整流程练习建议
- 使用 SVC 训练一个模型(可复用之前数据)
- 使用
joblib
保存模型
- 清空变量,重新加载模型
- 对测试集进行预测,验证效果是否一致
- 可封装为
model_utils.py
工具模块
🧾 今日总结
学会了什么 |
用来干嘛 |
joblib.dump/load() |
快速保存/加载模型 |
pickle.dump/load() |
更通用但稍慢 |
模型持久化流程 |
为部署和复用做准备 |
📁 练习脚本:save_load_model_demo.py
python
复制代码
# SVM 模型保存与加载演示(使用 joblib)
import numpy as np
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from joblib import dump, load
# 构造数据
np.random.seed(42)
size = 100
scores = np.random.randint(40, 100, size)
genders = np.random.choice([0, 1], size=size)
labels = (scores >= 60).astype(int)
X = np.column_stack(((scores - scores.mean()) / scores.std(), genders))
y = labels
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train, y_train)
# 保存模型
dump(model, 'svm_model.joblib')
print("模型已保存为 svm_model.joblib")
# 加载模型
loaded_model = load('svm_model.joblib')
print("模型已加载成功")
# 预测与评估
y_pred = loaded_model.predict(X_test)
print("测试集准确率:", accuracy_score(y_test, y_pred))
运行输出:
python
复制代码
模型已保存为 svm_model.joblib
模型已加载成功
测试集准确率: 1.0