Python scikit-learn:无法克隆对象……因为构造函数似乎没有设置参数

我修改了BernoulliRBM类scikit-learn以使用softmax可见单位组.在这个过程中,我添加了一个额外的Numpy数组visible_config作为类属性,它在构造函数中初始化,如下所示:

self.visible_config = np.cumsum(np.concatenate((np.asarray([0]),
                                visible_config), axis=0))

其中visible_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

这似乎是类的实例与由sklearn.base.clone创建的副本之间的相等性检查中的问题,因为visible_config未正确复制.我不知道如何解决这个问题.它在文档中说sklearn.base.clone使用了deepcopy(),所以不应该复制visible_config吗?有人可以解释一下我可以尝试一下吗?谢谢!

最佳答案
如果没有看到您的代码,很难确切地说出错误,但是您违反了scikit-learn API约定.估算器中的构造函数应仅将属性设置为用户作为参数传递的值.所有计算都应该在fit中进行,如果fit需要存储计算结果,则应该在具有尾部下划线(_)的属性中进行计算.这个约定使得像GridSearchCV这样的克隆和元估计工作起作用.

(*)如果您在主代码库中看到违反此规则的估算器:这将是一个错误,并且欢迎修补程序.

转载注明原文:Python scikit-learn:无法克隆对象……因为构造函数似乎没有设置参数 - 代码日志