ValueError в Sklearn

Я собрал следующую функцию, которая читает csv, обучает модель и предсказывает данные запроса.

У меня есть следующая ValueError: порядок столбцов должен быть одинаковым для соответствия и для преобразования при использовании ключевого слова Остаток

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

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-51-280f8d45f523> in <module>
----> 1 safety_project_full(request)

<ipython-input-50-a9c672da1a70> in safety_project_full(request)
     74 
     75     df_resp = pd.DataFrame(data=request_data)
---> 76     response = rf.predict(df_resp)
     77 
     78     output = {"Safety Rating": response[0]}

~/.local/lib/python3.5/site-packages/sklearn/utils/metaestimators.py in <lambda>(*args, **kwargs)
    114 
    115         # lambda, but not partial, allows help() to work with update_wrapper
--> 116         out = lambda *args, **kwargs: self.fn(obj, *args, **kwargs)
    117         # update the docstring of the returned function
    118         update_wrapper(out, self.fn)

~/.local/lib/python3.5/site-packages/sklearn/pipeline.py in predict(self, X, **predict_params)
    417         Xt = X
    418         for _, name, transform in self._iter(with_final=False):
--> 419             Xt = transform.transform(Xt)
    420         return self.steps[-1][-1].predict(Xt, **predict_params)
    421 

~/.local/lib/python3.5/site-packages/sklearn/compose/_column_transformer.py in transform(self, X)
    581             if (n_cols_transform >= n_cols_fit and
    582                     any(X.columns[:n_cols_fit] != self._df_columns)):
--> 583                 raise ValueError('Column ordering must be equal for fit '
    584                                  'and for transform when using the '
    585                                  'remainder keyword')

ValueError: Column ordering must be equal for fit and for transform when using the remainder keyword

Функция:

    def safety_project_full(request):

    df = pd.read_cdv('a.csv')

    # Define the Features and Target Columns
    features_col = df.drop("y", 1)
    target_col = df["y"]

    # Split the data for training and testing purposes
    X_train, X_test, y_train, y_test = train_test_split(features_col, target_col, test_size=0.1)

    # Data Transformed
    numeric_features = df.select_dtypes(include=['int64', 'float64']).columns
    categorical_features = df.select_dtypes(include=['object']).drop(['y'], axis=1).columns

    numeric_transformer = Pipeline(steps=[
        ('imputer', SimpleImputer(strategy='median')),
        ('scaler', StandardScaler())])

    categorical_transformer = Pipeline(steps=[
        ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
        ('onehot', OneHotEncoder(handle_unknown='ignore'))])

    preprocessor = ColumnTransformer(
        transformers=[
            ('num', numeric_transformer, numeric_features),
            ('cat', categorical_transformer, categorical_features)])

    #Putting data transformation and the model in a pipeline
    rf = Pipeline(steps=[('preprocessor', preprocessor),
                         ('classifier', RandomForestClassifier(
                                            n_estimators=500,
                                            criterion="gini",
                                            max_features="sqrt",
                                            min_samples_leaf=4))])

    rf.fit(X_train, y_train)

    request_data = {'A': [request.A],
                    'B': [request.B],
                    'C': [request.C],
                    'D': [request.D],
                    'E': [request.E],
                    'F': [request.F],
                    'G': [request.G],
                    'H': [request.H],
                    'I': [request.I],
                    'J': [request.J],
                    'K': [request.K],
                    'L': [request.L],
                    'M': [request.M],
                    'N': [request.N],
                    'O': [request.O]}

    df_resp = pd.DataFrame(data=request_data)
    response = rf.predict(df_resp)

    output = {"Safety Rating": response[0]}

    return output

person Cassie.L    schedule 02.04.2020    source источник


Ответы (1)


Проблема была решена путем добавления определенных столбцов, которые я использовал для обучения x в df_resp.

person Cassie.L    schedule 01.05.2020