Scikitlearn Ошибка преобразования столбца: порядок столбцов должен быть одинаковым для подгонки и преобразования при использовании ключевого слова Остаток - PullRequest
0 голосов
/ 11 октября 2019

У меня есть простая модель с конвейером с использованием ColumnTransformer

. Я могу обучить модель и сохранить модель как рассол

Когда я загружаю рассол и прогнозирую в режиме реального времениданные, я получил следующую ошибку относительно ColumnTransformer

Порядок столбцов должен быть одинаковым для подгонки и для преобразования при использовании ключевого слова остатка

Учебные данные и данные, используемые для прогнозирования, имеют точно одинаковое числостолбца, например, 50. Я не уверен, как «порядок» столбца мог измениться.

Почему порядок столбца важен для columntransformer? Как это исправить? Есть ли способ обеспечить "упорядочение" после запуска преобразователя столбца?

Спасибо.

   pipeline = Pipeline([
        ('RepalceInf', ReplaceInf()),
        ('impute_30_100', ColumnTransformer(
            [
                ('oneStdNorm', OneStdImputer(), self.cont_feature_strategy_dict['FEATS_30_100']),
            ],
            remainder='passthrough'
        )),
        ('regress_impute', IterativeImputer(random_state=0, estimator=self.cont_estimator)),
        ('replace_outlier', OutlierReplacer(quantile_range=(1, 99))),
        ('scaler', StandardScaler(with_mean=True))
    ])



class OneStdImputer(TransformerMixin, BaseEstimator):
def __init__(self):
    """
    Impute the missing data with random value in the range of mean +/- one standard deviation
    This is a simplified implementation without sparse/dense fit and check.
    """
    self.mean = None
    self.std = None

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

def transform(self, X):
    # X_imp = X.fillna(np.random.randint()*2*self.std+self.mean-self.std)
    for col in X:
        self._fill_randnorm(X[col], col)
    return X

def _fill_randnorm(self, df, col):
    val = df.values
    mask = np.isnan(df)
    mu, sigma = self.mean[col], self.std[col]
    val[mask] = np.random.normal(mu, sigma, size=mask.sum())
    return df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...