У меня возникли проблемы с пониманием того, как на самом деле работает GridsearchCV в сочетании с самоопределенным преобразованием.
Чего я хочу достичь: я хочу реализовать Transformer / Estimator, который позволяет переключаться между некоторымиметоды, зависящие от параметра, потому что я хочу включить эти различные методы в gridsearch.
Пример: у меня есть самоопределяемый Transformer, называемый Scaler (), который выбирает MinMaxScaler или StandardScaler.(просто для простоты)
class Scaling():
def __init__(self, **params):
self.method=None
self.params = {}
print("INITIATING CLASS")
def fit(self, X, y=None):
return self
def transform(self, X):
print("TRANSFORMING", X)
if self.method == "minMax":
self.scaler =
MinMaxScaler(feature_range=self.params["feature_range"])
elif self.method == "std":
self.scaler = StandardScaler()
return self.scaler.fit_transform(X)
def get_params(self, **params):
return {**StandardScaler().get_params(), **MinMaxScaler().get_params(),
**{"method":""} }
def set_params(self, **params):
print("SETTING PARAMETER")
self.method = params["method"]
self.params = params
Это мой пример данных:
data = np.array([1,2,3,4,5,6,7,8,9,10]).reshape(-1,1)
y = [2,3,4,5,6,7,8,9,10,11]
Моя линия:
p = Pipeline([('scaler', Scaling()),
('model', LinearRegression())])
Моя подсетка и сетка
hyperparams = {
'scaler__feature_range' : [(0,1), (-100,10)],
'scaler__method':["minMax"]
}
clf = GridSearchCV(p,hyperparams, cv=2)
clf.fit(data, y)
Это на самом деле работает, но я действительно запутался в печати журналов:
INITIATING CLASS
INITIATING CLASS
INITIATING CLASS
SETTING PARAMETER
TRANSFORMING [[ 6][ 7][ 8][ 9][10]]
TRANSFORMING [[1][2][3][4][5]]
TRANSFORMING [[ 6][ 7][ 8][ 9][10]]
INITIATING CLASS
SETTING PARAMETER
TRANSFORMING [[1][2][3][4][5]]
TRANSFORMING [[ 6][ 7][ 8][ 9][10]]
TRANSFORMING [[1][2][3][4][5]]
INITIATING CLASS
SETTING PARAMETER
TRANSFORMING [[ 6][ 7][ 8][ 9][10]]
TRANSFORMING [[1][2][3][4][5]]
TRANSFORMING [[ 6][ 7][ 8][ 9][10]]
INITIATING CLASS
SETTING PARAMETER
TRANSFORMING [[1][2][3][4][5]]
TRANSFORMING [[ 6][ 7][ 8][ 9][10]]
TRANSFORMING [[1][2][3][4][5]]
INITIATING CLASS
SETTING PARAMETER
TRANSFORMING [[ 1][ 2 [ 3][ 4][ 5][ 6][ 7][ 8][ 9][10]]
Я установил cv = 2.Я бы ожидал, что это так.
- Создание всех трансформаторов
- установка параметров в соответствии с Gridsearch
- прохождение сгиба поезда через трубопровод
- прохождение теста-сверните по трубопроводу
- repeat Так, я бы ожидал 8 вызовов метода трансформатора, потому что нам нужен один для поезда и один для контрольной складки.Из-за cv = 2 мы делаем это 2 раза, и поскольку мы определяем два различных значения для feature_range внутри сетки параметров, мы должны умножить его на 2, следовательно, 8. Что не так?
Но почемумного ли звонков в моем классе Scaling?Как объяснить этот порядок журналов?Почему преобразуется полная последовательность в конце?