【问题标题】:How to save sklearn model after fitting in for loop适合循环后如何保存sklearn模型
【发布时间】:2020-12-15 13:39:40
【问题描述】:

我正在使用管道在 for 循环中拟合两个 sklearn 模型,并尝试将它们分开命名并稍后使用此管道进行预测,

names = ["Linear", "Elastic"]
models = [LinearRegression(),ElasticNet()]
model_fit = [x + 'fit' for x in names]

for name, model, fits in zip(names, models, model_fit):
    steps = [('scaler', MinMaxScaler()),(name, model)]
    pipe = Pipeline(steps)
    fits = pipe.fit(x_train, y_train)

但我无法在不同的循环中预测它。

for i, model in enumerate(model_fit):
   predictions = model.predict(x_test)

收到以下错误

'str' object has no attribute 'predict'

如何以不同的名称拟合和检索这两个模型?

【问题讨论】:

  • names = ["Linear", "Elastic"]model_fit = [x + 'fit' for x in names],这两行导致 model_fit 是一个字符串列表。也许您想改用models 列表。
  • 你能用上面的例子解释一下吗
  • 你是说for i, model in enumerate(models):
  • 不,因为这不能照顾我的管道。我正在尝试给每个管道类型一个新名称
  • 如果我理解正确,model_fit 是管道的名称。名称无法预测,因为它不是模型。因此,您需要将拟合好的模型存储在另一个数组中,并在第二个循环中使用它们。

标签: python pandas scikit-learn


【解决方案1】:

您的 model_fit 变量是一个字符串数组,因此您不应在第二个 for 循环中使用它。您应该做的是将模型存储在另一个数组中并使用它。

names = ["Linear", "Elastic"]
models = [LinearRegression(),ElasticNet()]
model_fit = [x + 'fit' for x in names]
fitted_models = []

for name, model, fits in zip(names, models, model_fit):
    steps = [('scaler', MinMaxScaler()),(name, model)]
    pipe = Pipeline(steps)
    fits = pipe.fit(x_train, y_train)
    fitted_models.append(fits)

for i, model in enumerate(fitted_models):
   predictions = model.predict(x_test)

【讨论】:

  • 完美!谢谢,我错过了一些东西
猜你喜欢
  • 2019-07-19
  • 2020-05-03
  • 2018-09-16
  • 1970-01-01
  • 2021-04-26
  • 2018-12-25
  • 2019-08-04
  • 1970-01-01
  • 2018-11-08
相关资源
最近更新 更多