ML Pipeline OneHotEncoder не подходит - PullRequest
1 голос
/ 04 марта 2020

Я новичок в науке о данных, и я могу построить модель и поставить конвейер вместе с одним hotencoder. Однако, когда я вызываю функцию, которую я строю, она выдает ошибку. Пожалуйста, смотрите ниже и, пожалуйста, совет. Заранее спасибо!

clf = Pipeline(steps=[('ohe', OneHotEncoder()),
                  ('rfc', RandomForestClassifier(n_estimators=1000,criterion="entropy",max_features=None))])  
pickle.dump(clf,open('model.pkl','wb'))

# load model
model = pickle.load(open('model.pkl','rb'))

def predict(A,B,C,D,E,F,G):

    result = model.predict(x)

    # send back to browser
    output = {'results': int(result[0])}


    # return data
    return jsonify(results=output)

для вызова функции:

predict('A','B','C','D','E','F','G')

Ошибка:

NotFittedError: This OneHotEncoder instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Используйте это для преобразования ваших данных перед подачей в них RandomForestClassifier:

def trainPipeline(pipeline, X, y):
    X_transformed = X
    for name, step in pipeline.steps[:-1]:
        X_transformed = step.fit_transform(X_transformed, y)
    pipeline.steps[-1][1].fit(X_transformed, y)

Примечание. Это будет работать только в том случае, если ваш конвейер состоит из двух шагов, и первый из них - OneHotEncoder ().

0 голосов
/ 04 марта 2020

TL; DR

  • Используя библиотеку scikit-learn, вам необходимо установить оценщик, прежде чем использовать его для прогнозирования.
  • Вы проходите переменная x, которая не определена в вашем коде.
  • Вы никогда не используете аргументы, переданные predict.
  • Если вы пытаетесь загрузить предварительно обученную модель, Вы не должны перезаписывать его необработанным объектом Pipeline, который вы создаете.

Длинная версия

В зависимости от того, что вы подразумеваете под "построением модели", это сомнительно, действительно ли вы сделали это здесь.

В науке о данных первое, что вы должны сделать, это понять, какую проблему вы пытаетесь решить. После этого вам нужно собрать набор данных, проанализировать его и решить, может ли он разумно ответить на вашу проблему. Наконец, вы можете построить модель и использовать свой набор данных для обучения этой модели (т.е. настроить параметры модели), и только после этого вы сможете делать любые прогнозы.

Я бы порекомендовал вам Прежде чем пытаться делать это на практике, изучите и попытайтесь понять некоторые из основополагающих теорий машинного обучения и то, что на самом деле означает создание модели.

...