繁体   English   中英

ML 管道 OneHotEncoder 不适合

[英]ML Pipeline OneHotEncoder is not fit

我是数据科学的新手,我能够构建一个模型并将管道与 onehotencoder 一起放置。 但是,当我调用我构建的函数时,它会出错。 请看下文并请指教。 提前致谢!

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.

在将数据提供给 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() 时才有效。

TL; 博士

  • 使用 scikit-learn 库,您需要先拟合一个估计器,然后再使用它进行预测。
  • 您正在传递一个未在您的代码中定义的变量x
  • 您从不使用任何传递给predict的参数。
  • 如果您尝试加载预训练模型,则不应通过实例化的未拟合 Pipeline 对象覆盖它。

长版

根据您所说的“构建模型”的含义,您是否真的在这里完成了这一点值得怀疑。

在数据科学中,您应该做的第一件事是了解您要解决的问题。 之后,您需要收集一个数据集,对其进行分析并确定它是否可以合理地回答您的问题。 最后,您可以构建一个模型并使用您的数据集来训练该模型(即调整模型的参数),只有在此之后您才能进行任何类型的预测。

我建议您在尝试实践之前深入研究并尝试理解机器学习的一些基本理论,以及构建模型的实际含义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM