【问题标题】:ML Pipeline OneHotEncoder is not fitML Pipeline OneHotEncoder 不适合
【发布时间】:2020-03-04 06:06:12
【问题描述】:

我是数据科学的新手,我能够构建模型并将管道与 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.

【问题讨论】:

    标签: python function machine-learning error-handling data-science


    【解决方案1】:

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

    【讨论】:

    • 没错,我在pickle文件之前在管道中添加了OneHotEncoder()。你能评论一下codereview.stackexchange.com/questions/238345/…
    • 我也是这么想的!我应该如何调整我的代码以确保在 OneHotEncoder 之后训练模型,但 def predict 调用函数在 OHE 之前?你能请教吗? @Piyush Sharma
    • 您可以在调用 clf.fit() 时使用 clf.steps() 检查步骤执行顺序,将第一步的输出传递到第二步。
    • 您直接使用 clf.fit() 但这不起作用,因为第一步有 OneHotEncoder 并且需要在拟合之前转换数据检查另一个答案我已经相应地更新了它。
    【解决方案2】:

    TL;DR

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

    加长版

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 2016-03-14
      • 1970-01-01
      • 2021-11-04
      • 2017-08-12
      • 2020-10-06
      • 2021-03-22
      • 2022-10-23
      • 2023-01-24
      相关资源
      最近更新 更多