Python scikit学习:无法克隆对象。。。因为构造函数似乎没有设置参数
我修改了scikit的类,学习使用softmax可视单元组。在这个过程中,我添加了一个额外的Numpy数组Python scikit学习:无法克隆对象。。。因为构造函数似乎没有设置参数,python,numpy,copy,scikit-learn,Python,Numpy,Copy,Scikit Learn,我修改了scikit的类,学习使用softmax可视单元组。在这个过程中,我添加了一个额外的Numpy数组visible\u config作为class属性,该属性在构造函数中初始化,如下所示: self.visible_config = np.cumsum(np.concatenate((np.asarray([0]), visible_config), axis=0)) 其中visible\u config是作为输入传递给构造
visible\u config
作为class属性,该属性在构造函数中初始化,如下所示:
self.visible_config = np.cumsum(np.concatenate((np.asarray([0]),
visible_config), axis=0))
其中visible\u config
是作为输入传递给构造函数的Numpy数组。当我直接使用fit()
函数训练模型时,代码运行没有错误。但是,当我使用GridSearchCV
结构时,我得到以下错误
Cannot clone object SoftmaxRBM(batch_size=100, learning_rate=0.01, n_components=100, n_iter=100,
random_state=0, verbose=True, visible_config=[ 0 21 42 63]), as the constructor does not seem to set parameter visible_config
这似乎是类实例与其创建的副本之间的相等性检查中的一个问题,因为
visible\u config
没有正确复制。我不知道如何解决这个问题。文档中说,sklearn.base.clone
使用了deepcopy()
,所以visible\u config
不也应该被复制吗?有人能解释一下我可以在这里尝试什么吗?谢谢 如果看不到您的代码,就很难准确判断出哪里出了问题,但您违反了scikit学习API的约定。估计器中的构造函数应该只为用户作为参数传递的值设置属性。所有计算都应在fit
中进行,如果fit
需要存储计算结果,则应在带有尾随下划线的属性中进行存储(
)。这种约定使得clone
和GridSearchCV
等元估计器能够工作
(*)如果您在主代码库中看到一个估计器违反此规则:这将是一个bug,欢迎使用补丁。您是对的。谢谢删除计算步骤并将预先计算的
可见配置
传递给构造函数修复了此问题。其他尝试此操作的人。。。确保没有在init中克隆模型。例如类NewAlgo(baseestimator,otherestimator):def uu init uu(sefl,model):self.model=clone(model)
我在xgboost和RandomizedSearchCV中遇到了这个问题,我的网格中有一个输入错误/不推荐的参数