模型的保存

没有深层次去看源码理解,只是会使用,大概有三种吧


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参数的描述如下:

  1. compress: integer for 0 to 9optional  
  2.         Optional compression level for the data. 0 is no compression.  
  3.         Higher means more compression, but also slower read and  
  4.         write times. Using value of 3 is often good compromise.  
  5.         See the notes for more details.  
     #save model
      joblib.dump(clf,'../../data/model/randomforest.pkl',compress=3
     #load model to clf 
     clf joblib.load('../../data/model/randomforest.pkl' 

http://blog.csdn.net/Dream_angel_Z/article/details/47175373


在做模型训练的时候,尤其是在训练集上做交叉验证,通常想要将模型保存下来,然后放到独立的测试集上测试,下面介绍的是Python中训练模型的保存和再使用。

scikit-learn已经有了模型持久化的操作,导入joblib即可

from sklearn.externals import joblib
 
 
  • 1

模型保存

>>> os.chdir("workspace/model_save")
>>> from sklearn import svm
>>> X = [[0, 0], [1, 1]]
>>> y = [0, 1]
>>> clf = svm.SVC()
>>> clf.fit(X, y)  
>>> clf.fit(train_X,train_y)
>>> joblib.dump(clf, "train_model.m")
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

通过joblib的dump可以将模型保存到本地,clf是训练的分类器

模型从本地调回

>>> clf = joblib.load("train_model.m")
 
 
  • 1

通过joblib的load方法,加载保存的模型。

然后就可以在测试集上测试了

clf.predit(test_X) #此处test_X为特征集

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

一、使用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)

import pickle
s=pickle.dumps(clf)
f=open('svm.txt','w')
f.write(s)
f.close()
f2=open('svm.txt','r')
s2=f2.read()
clf2=pickle.loads(s2)
clf2.score(X,y)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值