gpt4 book ai didi

python - 在 scikit-learn GridSearchCV 中仅计算一次中间结果

转载 作者:行者123 更新时间:2023-11-30 09:52:46 26 4
gpt4 key购买 nike

我有一个这样的估算器:

    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 折交叉验证是这样的:

for all possible params combination:
for every fold split
compute score(mini_train, mini_test)
compute average score
pick best combination

问题是,对于给定的参数组合,我只想计算一次 self.tmpVar (计算可能很慢),并将其用于共享的所有折叠分割相同的参数组合。

这在 scikit-learn 中可行吗?或者有解决方法吗?

最佳答案

只需将此变量存储为类的静态属性,或存储在任何其他全局名称范围中。

from sklearn.base import BaseEstimator, TransformerMixin
import numpy as np

class customEstimator(BaseEstimator, TransformerMixin):

tmpVar = None

def __init__(self, estimator_var):
self.estimator_var = estimator_var
def transform(self, X):
if customEstimator.tmpVar is None:
customEstimator.tmpVar = np.random.randn(estimator_var, estimator_var)
return np.hstack((customEstimator.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 存储在映射(字典)中,并以这些名称作为键。您甚至可以通过以下行之一自动生成名称:

from sklearn.base import BaseEstimator, TransformerMixin
import numpy as np

class customEstimator(BaseEstimator, TransformerMixin):

tmpVars = {}
estimators = 0

def __init__(self, estimator_var, name=None):
if name is None:
customEstimator.estimators = customEstimator.estimators + 1
name = 'Estimator %d' % customEstimator.estimators
self.name = name
self.estimator_var = estimator_var
def transform(self, X):
if self.name not in customEstimator.tmpVar:
customEstimator.tmpVar[self.name] = np.random.randn(estimator_var, estimator_var)
return np.hstack((customEstimator.tmpVar[self.name], 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, 'name': self.name}

这样,如果您创建 customEstimator 的新实例,它将获得一个新名称,但如果它是由 scikit-learn 克隆的,它们将共享相同的名称(因此 - 数据)。

关于python - 在 scikit-learn GridSearchCV 中仅计算一次中间结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41860674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com