python怎么实现opencv3 svm训练模型保存和加载?

Python013

python怎么实现opencv3 svm训练模型保存和加载?,第1张

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

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

from sklearn.externals import joblib

模型保存

>>>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")

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

模型从本地调回

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

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

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

clf.predit(test_X,test_y)

Python使用对象模型来存储数据。构造任何类型的值都是一个对象。尽管Python通常被当成一种“面向对象的编程语言”,但你完全能够写出不使用任何类和实例的实用脚本。不过Python的对象语法和架构鼓励我们使用这些特性,下面让我们仔细研究一下Python对象。所有的Python对像都拥有三个特性:身份,类型和值。

身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址。你极少会用到这个值,也不用太关心它究竟是什么。

类型对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。你可以用内建函数type0查看Python对象的类型。因为在Python中类型也是对象(还记得我们提到Python是面向对象的这句话吗?),所以type0返回的是对象而不是简单的字符串。

值:对象表示的数据项。

上面三个特性在对象创建的时候就被赋值,除了值之外,其他两个特性都是只读的。对于新式类型和类,对象的类型也是可以改变的,不过并不推荐初学者这样做。如果对象支持更新操作,那么它的值就可以改变,否则它的值也是只读的。对象的值是否可以更改被称为对象的可改变性(mutability),我们会在后面的4.7小节中讨论这个问题。只要一个对象还没有被销毁,这些特性就一直存在。Python有一系列的基本(内建)数据类型,必要时也可以创建自定义类型来满足你对应用程序的需求。绝大多数应用程序通常使用标准类型,对特定的数据存储则通过创建和实例化类来实现。

如果是序列化格式的话 ,可以使用 sklearn.externals  的 joblib

from sklearn.externals import joblib

#保存训练好的模型 fitted_model

joblib.dump(fitted_model,'./model_name.stp')  # 保存在当前路径下,取名为 model_name.stp

# 装载之前保存的路径文件

load_model = joblib.load('./model_name.stp') # 这里 load_model 和 fitted_model是同一个model