python - 使用 joblib 的 sklearn 转储模型,转储多个文件。哪个是正确的模型?

标签 python machine-learning scikit-learn joblib

我做了一个示例程序来使用 sklearn 训练 SVM。这是代码

from sklearn import svm
from sklearn import datasets
from sklearn.externals import joblib

clf = svm.SVC()
iris = datasets.load_iris()
X, y = iris.data, iris.target
clf.fit(X, y)

print(clf.predict(X))
joblib.dump(clf, 'clf.pkl') 

当我转储模型文件时,我得到了这个数量的文件。 :

['clf.pkl'、'clf.pkl_01.npy'、'clf.pkl_02.npy'、'clf.pkl_03.npy'、'clf.pkl_04.npy'、'clf.pkl_05。 npy', 'clf.pkl_06.npy', 'clf.pkl_07.npy', 'clf.pkl_08.npy', 'clf.pkl_09.npy', 'clf.pkl_10.npy', 'clf.pkl_11.npy' ]

如果我做错了什么,我会很困惑。或者这是正常的?什么是 *.npy 文件。为什么有 11 个?

最佳答案

要将所有内容保存到 1 个文件中,您应该将压缩设置为 True 或任何数字(例如 1)。

但是你应该知道,np 数组的分离表示对于 joblib 转储/加载的主要功能是必要的,由于这种分离表示,joblib 可以比 Pickle 更快地加载和保存 np 数组的对象,并且与 Pickle 相比,joblib 可以正确地使用 memmap numpy 数组保存和加载对象。如果你想对整个对象进行一个文件序列化(并且不想保存 memmap np 数组) - 我认为使用 Pickle 会更好,AFAIK 在这种情况下 joblib 转储/加载功能将以与泡菜。

import numpy as np
from scikit-learn.externals import joblib

vector = np.arange(0, 10**7)

%timeit joblib.dump(vector, 'vector.pkl')
# 1 loops, best of 3: 818 ms per loop
# file size ~ 80 MB
%timeit vector_load = joblib.load('vector.pkl')
# 10 loops, best of 3: 47.6 ms per loop

# Compressed
%timeit joblib.dump(vector, 'vector.pkl', compress=1)
# 1 loops, best of 3: 1.58 s per loop
# file size ~ 15.1 MB
%timeit vector_load = joblib.load('vector.pkl')
# 1 loops, best of 3: 442 ms per loop

# Pickle
%%timeit
with open('vector.pkl', 'wb') as f:
    pickle.dump(vector, f)
# 1 loops, best of 3: 927 ms per loop
%%timeit                                    
with open('vector.pkl', 'rb') as f:
    vector_load = pickle.load(f)
# 10 loops, best of 3: 94.1 ms per loop

关于python - 使用 joblib 的 sklearn 转储模型,转储多个文件。哪个是正确的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33497314/

相关文章:

python - 将特征名称更新为 scikit TFIdfVectorizer

python - 无法在 Scikit Learn 中将 class_weight 分配给 RandomForestClassifier

python - 检查列表项整数是否是 Python 中另一个列表中每两个项目整数之间的数字?

machine-learning - 大丰杂货数据集下载链接

python - 当将 python 脚本作为 cron 选项卡运行时,如何启用本地模块?

machine-learning - 二元掩模分类的最佳输出激活函数

python - scikit-learn,将特征添加到向量化的文档集

scikit-learn - 如何修复Python中的 'name ' cross_validation'未定义'错误

python - 每次都下载visual studio code python语言服务器?

python - 根据最大计数复制 Dataframe 中的数据