训练好的模型可以进行存储,下次有测试数据就可以直接使用了
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)
#保存
#method 1:pickle
import pickle
with open('D:/python/workspace/clf.pickle','wb')as f: #python路径要用反斜杠
pickle.dump(clf,f) #将模型dump进f里面
这个时候在路径下面就会有一个.pickle的文件,存储的就是训练好的clf模型
提取模型的时候:
import pickle
from sklearn import datasets
iris = datasets.load_iris()
X,y = iris.data,iris.target
with open('D:/python/workspace/clf.pickle','rb') as f:
clf2 = pickle.load(f)#从f文件中提取出模型赋给clf2
print(clf2.predict(X))
输出预测值,说明原来的模型已经被提取出来了
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
joblib方法
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)
#保存
#method 2:joblib
from sklearn.externals import joblib #joblib是sklearn的一个外部模块
joblib.dump(clf,'D:/python/workspace/clf.pkl') #将clf存入.pkl的文件中
from sklearn.externals import joblib
from sklearn import datasets
iris = datasets.load_iris()
X,y = iris.data,iris.target
clf3 = joblib.load('D:/python/workspace/clf.pkl')
print(clf3.predict(X))
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]模型已提取并已经可以用于预测分类
在处理大量数据的时候joblib的窗户里速度会比pickle更加快一点
对于神经网络训练的模型
拿个例子说:
from keras.models import Sequential
from keras.layers.core import Dense, Activation
model = Sequential() #建立模型
model.add(Dense(input_dim = 6,output_dim = 12))
model.add(Activation('relu')) #用relu函数作为激活函数,能够大幅提供准确度
model.add(Dense(input_dim = 12,output_dim = 1))
model.compile(loss='mean_squared_error', optimizer='adam') #编译模型
model.fit(x_train, y_train, nb_epoch = 10000, batch_size = 16) #训练模型,学习一万次
这个例子训练的时候迭代了10000次,非常耗时,要存储起来,做预测的时候直接使用:
method1:储存训练参数weights
model.save_weights('1-net.model') #保存模型参数
调用的时候,由于只储存了参数,所以要将结构告诉给python:
model = Sequential() #建立模型
model.add(Dense(input_dim = 6,output_dim = 12))
model.add(Activation('relu')) #用relu函数作为激活函数,能够大幅提供准确度
model.add(Dense(input_dim = 12,output_dim = 1))
model.compile(loss='mean_squared_error', optimizer='adam') #编译模型
model.load_weights('1-net.model')
后面就可以直接用model.predict(x)
method2:储存全部整个模型
from keras.models import Sequential
from keras.layers.core import Dense, Activation
model = Sequential() #建立模型
model.add(Dense(input_dim = 6,output_dim = 12))
model.add(Activation('relu')) #用relu函数作为激活函数,能够大幅提供准确度
model.add(Dense(input_dim = 12,output_dim = 1))
model.compile(loss='mean_squared_error', optimizer='adam') #编译模型
model.fit(x_train, y_train, nb_epoch = 10000, batch_size = 16) #训练模型,学习一万次
model.save('my_net.model')
调用的时候
from keras.models import load_model
model = load_model('my_net.model')