没有深层次去看源码理解,只是会使用,大概有三种吧
1.joblib保存为.m文件,也可以保存为.pkl文件
2.pickle模块
这两种方法的区别:
1.pickle模块不能序列化lambda function.查看下面的链接可知pickle模块可序列那些类型 https://docs.python.org/3/library/pickle.html#what-can-be-pickled-and-unpickled
2. joblib更适合大数据量的模型,且只能往硬盘存储,不能往字符串存储3.
需要注意的是,这里执行joblib.dump()之后,有可能还会生成若干个以rf.model_XX.npy为命名格式的文件,这有可能是用于保存模型中的系数等的二进制文件。其具体生成的文件的个数还会随调用到的分类器的不同,以及分类器中迭代次数的参数的不同而变,有时候会生成几个,有时候会生成几百个。
设置dump中的compress参数,当设置参数时,模型持久化便会压缩成一个文件。源码中对compress参数的描述如下:
- compress:
integer for 0 to 9, optional -
Optional compression level for the data. 0 is no compression. -
Higher means more compression, but also slower read and -
write times. Using a value of 3 is often a good compromise. -
See the notes for more details.
http://blog.csdn.net/Dream_angel_Z/article/details/47175373
在做模型训练的时候,尤其是在训练集上做交叉验证,通常想要将模型保存下来,然后放到独立的测试集上测试,下面介绍的是Python中训练模型的保存和再使用。
scikit-learn已经有了模型持久化的操作,导入joblib即可
- 1
模型保存
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
通过joblib的dump可以将模型保存到本地,clf是训练的分类器
模型从本地调回
- 1
通过joblib的load方法,加载保存的模型。
然后就可以在测试集上测试了
1. pickle >>> from sklearn import svm >>> from sklearn import datasets >>> clf = svm.SVC() >>> iris = datasets.load_iris() >>> X, y = iris.data, iris.target >>> clf.fit(X, y) SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3, gamma=‘auto‘, kernel=‘rbf‘, max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False) >>> import pickle >>> s = pickle.dumps(clf) >>> clf2 = pickle.loads(s) >>> clf2.predict(X[0:1]) array([0]) >>> y[0] 0 2. joblib >>> from sklearn.externals import joblib >>> joblib.dump(clf, ‘filename.pkl‘) >>> clf = joblib.load(‘filename.pkl‘)
使用pickle模块或者sklearn内部的joblib