如何保存scikit-learn分类器对象?如何在循环中内存存储多模型?
嘿,我来帮你搞定这两个关于scikit-learn模型存储的问题:
1. 如何保存scikit-learn分类器对象?
在scikit-learn里,最常用的两种持久化方法是pickle和joblib:
- pickle:是Python标准库自带的序列化工具,适配大多数常规场景,你的代码里已经在用到它了。
- joblib:是scikit-learn官方推荐的工具,对于包含大量numpy数组的模型(比如随机森林、SVM这类),它的序列化效率更高,占用磁盘空间也更小。
给你补充两种方法的完整示例:
使用pickle
import pickle from sklearn.linear_model import LogisticRegression # 训练模型 model = LogisticRegression() model.fit(X_train, Y_train) # 保存到磁盘 filename = 'finalized_model.sav' pickle.dump(model, open(filename, 'wb')) # 后续加载模型使用 loaded_model = pickle.load(open(filename, 'rb')) result = loaded_model.predict(X_test)
使用joblib
import joblib from sklearn.linear_model import LogisticRegression # 训练模型 model = LogisticRegression() model.fit(X_train, Y_train) # 保存到磁盘 filename = 'finalized_model.joblib' joblib.dump(model, filename) # 后续加载模型使用 loaded_model = joblib.load(filename) result = loaded_model.predict(X_test)
2. 在内存中保存多个scikit-learn模型
完全可以用字典或者列表实现内存中的模型存储,不用落地到磁盘,两种方式各有优势:
- 列表:适合按顺序存储模型,如果你只需要按顺序调用或者遍历所有模型,用列表会很顺手。
- 字典:适合给每个模型加个标识(比如模型名称),后续可以通过key快速定位到目标模型,可读性更强。
用列表保存的示例
from sklearn.linear_model import LogisticRegression from sklearn.neighbors import KNeighborsRegressor # 初始化空列表存模型 trained_models = [] # 训练并保存LogisticRegression lr_model = LogisticRegression() lr_model.fit(X_train, Y_train) trained_models.append(lr_model) # 训练并保存KNeighborsRegressor knn_model = KNeighborsRegressor() knn_model.fit(X_train, Y_train) trained_models.append(knn_model) # 后续调用:按索引取模型 result_lr = trained_models[0].predict(X_test) result_knn = trained_models[1].predict(X_test)
用字典保存的示例
from sklearn.linear_model import LogisticRegression from sklearn.neighbors import KNeighborsRegressor # 初始化空字典存模型 trained_models = {} # 训练并保存LogisticRegression,用模型名做key lr_model = LogisticRegression() lr_model.fit(X_train, Y_train) trained_models['logistic_regression'] = lr_model # 训练并保存KNeighborsRegressor,同样用名称做key knn_model = KNeighborsRegressor() knn_model.fit(X_train, Y_train) trained_models['kneighbors_regressor'] = knn_model # 后续调用:通过key直接取对应模型 result_lr = trained_models['logistic_regression'].predict(X_test) result_knn = trained_models['kneighbors_regressor'].predict(X_test)
这样不管用列表还是字典,都能把训练好的模型存在内存里,随时调用,不用每次都重新训练或者从磁盘加载~
内容的提问来源于stack exchange,提问作者user43348044
相关产品推荐
相关产品推荐

