sklearn
估计器实现的方法使您可以轻松保存估计器的相关训练属性。一些估计器__getstate__
自己实现方法,但是其他估计器,例如GMM
仅使用基本实现,该实现只是将对象保存在内部字典中:
def __getstate__(self):
try:
state = super(BaseEstimator, self).__getstate__()
except AttributeError:
state = self.__dict__.copy()
if type(self).__module__.startswith('sklearn.'):
return dict(state.items(), _sklearn_version=__version__)
else:
return state
将模型保存到光盘的推荐方法是使用以下pickle
模块:
from sklearn import datasets
from sklearn.svm import SVC
iris = datasets.load_iris()
X = iris.data[:100, :2]
y = iris.target[:100]
model = SVC()
model.fit(X,y)
import pickle
with open('mymodel','wb') as f:
pickle.dump(model,f)
但是,您应该保存其他数据,以便将来可以重新训练模型,或遭受可怕的后果(例如被锁定在旧版本的sklearn中)。
从文档中:
为了用将来的scikit-learn版本重建类似的模型,应该在腌制的模型中保存其他元数据:
训练数据,例如对不变快照的引用
用于生成模型的python源代码
scikit-learn的版本及其依赖项
在训练数据上获得的交叉验证分数
对于依赖于tree.pyx
用Cython(例如IsolationForest
)编写的模块的Ensemble估计器而言,尤其如此,因为它会创建与实现的耦合,这不能保证sklearn版本之间的稳定性。在过去,它已经看到了不兼容的变化。
如果您的模型变得非常大并且加载变得很麻烦,那么您还可以使用更高效的joblib
。从文档中:
在scikit的特定情况下,使用joblib替换pickle
(joblib.dump
&joblib.load
)可能会更有趣,这对于内部装有大型numpy数组的对象更有效,就像装配的scikit-learn估计量通常那样,但只能腌制到磁盘而不是字符串: