Пользовательский Transformer в конвейере SKlearn не получает n_samples в методе transform () - PullRequest
0 голосов
/ 01 мая 2019

Для этого нестандартного трансформатора:

class Processor(TransformerMixin):
index = None

def __init__(self, index):
    self.index = index

def fit(self, X, y=None):
    return self

def transform(self, X):
    print(X)
    print('___')
    return X[0][self.index]

и этот конвейер:

    GridSearchCV(
        Pipeline([
            ('extractor', Processor(index=0)),
            ('selector', SelectKBest(score_func=f_classif)),
            ('clf', None)
        ]),
        cv=KFold(n_splits=2, random_state=0),
        return_train_score=False,
        scoring=['explained_variance', 'neg_mean_absolute_error', 'neg_mean_squared_error', 'neg_median_absolute_error','r2'],
        refit='r2',
        param_grid=[{
            # 'selector__k': ['all'],
            'clf__normalize': [True, False],
            'clf__fit_intercept': [True, False],
            'clf': [LinearRegression()]
        }],
        n_jobs=-1
    )

вывод на печать выглядит так:

[[17.05214286  0.69666262]]
___

, хотя мои тренировочные функции выглядят так:

[[17.05214286  0.69666262]
 [88.36863636  0.69692261]]

Может кто-нибудь сказать мне, почему мой пользовательский преобразователь не получает матрицу длины n_samples ??

...