Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何克隆scikit学习估计器,包括其数据?_Python_Python 3.x_Scikit Learn - Fatal编程技术网

Python 如何克隆scikit学习估计器,包括其数据?

Python 如何克隆scikit学习估计器,包括其数据?,python,python-3.x,scikit-learn,Python,Python 3.x,Scikit Learn,我试图对朴素贝叶斯估计量执行部分拟合,但在部分拟合之前保留估计量的副本。sklearn.base.clone只克隆估计器参数,而不是它的数据,因此在这种情况下不有用。对克隆执行部分拟合仅使用在部分拟合期间添加的数据,因为克隆实际上是空的 from sklearn.naive_bayes import MultinomialNB model = MultinomialNB() fit_model = model.fit(np.array(X),np.array(y)) fit_model2 =

我试图对朴素贝叶斯估计量执行部分拟合,但在部分拟合之前保留估计量的副本。sklearn.base.clone只克隆估计器参数,而不是它的数据,因此在这种情况下不有用。对克隆执行部分拟合仅使用在部分拟合期间添加的数据,因为克隆实际上是空的

from sklearn.naive_bayes import MultinomialNB

model = MultinomialNB()
fit_model = model.fit(np.array(X),np.array(y))
fit_model2 = model.partial_fit = (np.array(Z),np.array(w)),np.unique(y))
在上面的示例中,fit_model和fit_model2将是相同的,因为它们都指向相同的对象。我想保留原稿不变。我的解决方法是对原始对象进行pickle处理,并将其加载到新对象中,以便对其执行部分拟合。像这样:

model = MultinomialNB()
fit_model = model.fit(np.array(X),np.array(y))

import pickle
with open('saved_model', 'wb') as f:
    pickle.dump([model], f)

with open('saved_model', 'rb') as f:
    [model2] = pickle.load(f) 

fit_model2 = model2.partial_fit(np.array(Z),np.array(w)),np.unique(y))
此外,我每次都可以完全用新数据重新安装,但由于我需要执行数千次,所以我正在尝试找到更有效的方法

  • model.fit()
    返回模型本身(相同的对象)。因此,您不必将其分配给其他变量,因为它只是一个别名

  • 您可以使用
    deepcopy
    以与加载pickle对象类似的方式复制对象

  • 所以,如果你做了如下事情:

    from copy import deepcopy
    
    model = MultinomialNB()
    model.fit(np.array(X), np.array(y))
    
    model2 = deepcopy(model)
    
    model2.partial_fit(np.array(Z),np.array(w)), np.unique(y))
    # ...
    
    model2
    将是一个不同的对象,带有复制的
    model
    参数,包括“训练过的”参数

    from copy import deepcopy
    
    model = MultinomialNB()
    model.fit(np.array(X), np.array(y))
    
    model2 = deepcopy(model)
    
    weight_vector_model = array(model.coef_[0])
    weight_vector_model2 = array(model2.coef_[0])
    
    model2.partial_fit(np.array(Z),np.array(w)), np.unique(y))
    
    weight_vector_model = array(model.coef_[0])
    weight_vector_model2 = array(model2.coef_[0])
    

    model和model2现在是完全不同的对象。model2上的部分_fit()对model2没有影响。两个权重向量在deepcopy后相同,但在model2上的部分拟合()后不同

    我尝试了deepcopy,但删除变量时内存泄漏。我在文档中发现,建议改用克隆


    您是否尝试过
    copy
    deepcopy
    ?谢谢,我会在model2之后尝试。partial_fit(),model也会反映更新。使用deepcopy而不是复制注意,在文档中,它声明
    sklearn.base.clone
    不复制数据,因此生成不适合的模型。
    from sklearn.base import clone
    model2 = clone(model)