【问题标题】:Using cross_val_predict for predictions使用 cross_val_predict 进行预测
【发布时间】:2018-10-04 21:08:14
【问题描述】:

我有以下代码,我想将k-fold cross validation 用于线性回归模型:

kf = KFold(n_splits=100)
predi = cross_val_predict(model, train[columns], train[target], cv = kf)
predi = pandas.Series(predi)

model.fit(data[columns], data[target])
pred_test = model.predict(test[columns])
print(mean_squared_error(pred_test, test[target]))

但是,我不确定代码是否符合我的要求。具体来说,我不确定model.fit 部分。它甚至使用交叉验证吗?

我不确定这样计算会产生比没有交叉验证更糟糕的结果的原因。

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    没有。 CV 仅用于检查模型在数据(或数据的不同部分)上的性能

    当您调用fit() 时,它将适合当时提供的全部数据,而交叉验证仅使用部分数据(在每次迭代中保留 1 倍)。因此,这种数据差异可能会导致估算器的表现更好或更差。

    【讨论】:

    • @Quasar 正确的表达式是您在代码中所做的。该模型应该适合整个数据。现在为什么它会给出不好的结果是由你来检查的。也许交叉验证折叠中的数据是不平衡的,并且可能会给你带来很好的结果。可能实际数据不平衡,这不在 cv 折叠中。
    • 这是否意味着 cross_val_predict 将其发现存储在模型中,并且在我将数据拟合到第 4 行时使用这些发现?
    • @Quasar No. 交叉验证适合您。模型不会使用它。 Cv 是为您分析不同数据对您的模型的影响。检查和更改模型的参数或修改数据,以便它可以处理这些数据,然后拟合整个数据。
    【解决方案2】:

    model.fit 没有任何功能来划分数据。它仅适用于成本函数最小化问题并创建模型(意味着查找参数)。

    此外,如果您认为您创建了一个循环,并且在每次迭代中划分数据并一次又一次调用 model.fit,您将获得更通用的模型,那么这是不可能的,因为在线性回归模型对象上第二次调用 fit ,它会忘记旧数据。

    【讨论】:

      猜你喜欢
      • 2019-06-16
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 2017-05-24
      • 2018-09-24
      • 2019-05-06
      • 2016-12-08
      相关资源
      最近更新 更多