Scikit-Learn Pipeline: размер прогнозов на тестовом наборе равен размеру обучающего набора - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь получить прогнозы тестового набора данных.Я использую Sklearn Pipeline с MLPRegressor.Тем не менее, я просто получаю размер прогноза из набора поездов, хотя я использую 'test.csv'.

Где я могу изменить, чтобы получить прогнозы с длиной, равной тестовым данным?

train_pipeline.py

# Read training data
data = pd.read_csv(data_path, sep=';', low_memory=False, parse_dates=parse_dates)

# Fill all None records
data[config.TARGET] = data[config.TARGET].fillna(0)
# 
data[config.TARGET] = data[config.TARGET].apply(lambda x: split_join_string(x) if (type(x) == str and len(x.split('.')) > 0) else x)

# Divide train and test
X_train, X_test, y_train, y_test = train_test_split(
    data[config.FEATURES],
    data[config.TARGET],
    test_size=0.1,
    random_state=0)  # we are setting the seed here

# Transform the target
y_train = y_train.apply(lambda x: np.log(float(x)) if x != 0 else 0)
y_test = y_test.apply(lambda x: np.log(float(x)) if x != 0 else 0)

data_test = pd.concat([X_test, y_test], axis=1)
# Save the dataset to a '.csv' file without index
data_test.to_csv(data_path_test, sep=';', index=False)

pipeline.order_pipe.fit(X_train[config.FEATURES],
                        y_train)

save_pipeline(pipeline_to_persist=pipeline.order_pipe)

pregnet.py

def make_prediction(*, input_data) -> dict:
    """Make a prediction using the saved model pipeline."""

    data = pd.DataFrame(input_data)
    validated_data = validate_inputs(input_data=data)

    prediction = _order_pipe.predict(validated_data[config.FEATURES])
    output = np.exp(prediction)

    #score = _order_pipe.score(validated_data[config.FEATURES], validated_data[config.TARGET])
    results = {'predictions': output, 'version': _version}

    _logger.info(f'Making predictions with model version:  {_version}'
            f'\nInputs:  {validated_data}'
            f'\nPredictions: {results}')

    return results

Я ожидаю, что прогнозы будут иметь размер test.csv, но фактические прогнозы имеют размер'train.csv.Нужно ли подгонять или преобразовывать набор тестовых данных в 'order_pipe', чтобы делать прогнозы нужного размера?

1 Ответ

0 голосов
/ 26 сентября 2019

Я решил эту проблему, удалив препроцессор, который вылетал размером X_test.Из-за этого X_test заменяли на X_train, и я не мог делать прогнозы в правильной форме.

Кроме того, был еще один препроцессор (создававший фиктивные объекты с использованием pd.get_dummies ()), который вставлял новыестолбцы и принесли больше проблем во время прогнозов X_test.Я также заменил этот препроцессор, кодируя категориальные функции, используя groupby() и map().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...