我有这样一个估计器:
from sklearn.base import BaseEstimator, TransformerMixin
import numpy as np
class customEstimator(BaseEstimator, TransformerMixin):
def __init__(self, estimator_var):
self.estimator_var = estimator_var
def transform(self, X):
self.tmpVar = np.random.randn(estimator_var, estimator_var)
return np.hstack((self.tmpVar, X)) # this is just an example
def fit(self, X, y=None):
return self
def get_params(self, deep=False):
return {'estimator_var': self.estimator_var, 'tmpVar': tmpVar}
然后,我创建一个包含估计器的管道(以及其他人),并将其输入GridSearchCV进行k折交叉验证。k-fold交叉验证如下所示:
^{pr2}$问题是,对于给定的参数组合,我只想计算一次self.tmpVar
(这可能计算起来很慢),并将其用于共享相同参数组合的所有折叠拆分。在
在scikit learn中这是可能的吗,还是有一个解决办法?在
只需将此变量存储为类的静态属性,或任何其他全局名称范围。在
当然,这里的问题是,如果你用不同的数据多次重用你的估计器,有时你需要重置。然后,您只需为每个估计器指定一个名称,并将这些tmpvar存储在一个map(字典)中,并将这些名称作为键。您甚至可以通过以下行中的某些内容自动生成名称:
^{pr2}$这样,如果您创建一个customEstimator的新实例,它将获得一个新名称,但是如果它被scikit learn克隆,它们将共享相同的名称(因此是-data)。在
相关问题 更多 >
编程相关推荐