Как работает sklearn GridsearchCV в сочетании с трубопроводом? - PullRequest
0 голосов
/ 21 марта 2019

У меня возникли проблемы с пониманием того, как на самом деле работает 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.Я бы ожидал, что это так.

  1. Создание всех трансформаторов
  2. установка параметров в соответствии с Gridsearch
  3. прохождение сгиба поезда через трубопровод
  4. прохождение теста-сверните по трубопроводу
  5. repeat Так, я бы ожидал 8 вызовов метода трансформатора, потому что нам нужен один для поезда и один для контрольной складки.Из-за cv = 2 мы делаем это 2 раза, и поскольку мы определяем два различных значения для feature_range внутри сетки параметров, мы должны умножить его на 2, следовательно, 8. Что не так?

Но почемумного ли звонков в моем классе Scaling?Как объяснить этот порядок журналов?Почему преобразуется полная последовательность в конце?

1 Ответ

1 голос
/ 21 марта 2019

Существует 4 группы из трех преобразований и окончательное одиночное преобразование.

В состав групп входят пропуск на поезд, тестовый пропуск и подсчет результатов обучения. Последнее можно устранить с помощью параметра return_train_score=False в конструкторе GridSearchCV().

Окончательное преобразование соответствует модели с наилучшими показателями во всем наборе данных. Его можно устранить с помощью опции refit=False для конструктора GridSearchCV().

Так что, как только вы создадите экземпляр своего объекта clf:

clf = GridSearchCV(p,hyperparams, cv=2, refit=False, return_train_score=False)

вы получите 8 преобразований, как вы и ожидали.

См. Комментарий на странице документа GridSearchCV:

return_train_score : логическое значение, необязательно Если False, атрибут cv_results_ не будет включать в себя результаты обучения. Текущее значение по умолчанию - «warn», которое ведет себя как True в дополнение к повышению предупреждение при поиске результата обучения. Что по умолчанию будет изменен на Ложь в 0.21. Вычисление результатов обучения используется для получить представление о том, как различные настройки параметров влияют на переоснащение / недостаточный баланс. Однако вычисление баллов по учебный набор может быть вычислительно дорогим и не строго требуется выбрать параметры, которые дают лучшее обобщение производительность.

...