我有下面的代码,我想在线性回归模型中使用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部分。它甚至使用了交叉验证吗?
我不确定为什么这样计算会比没有交叉验证产生更差的结果。
发布于 2018-03-05 11:11:57
不是的。CV仅用于检查模型在数据(或数据的不同部分)上的性能。
当您调用fit()时,它将适合当时提供的全部数据,而交叉验证仅使用部分数据(每次迭代保留1个折叠项)。因此,这种数据差异可能会导致估计器的性能更好或更差。
发布于 2018-10-04 21:08:14
model.fit没有任何划分数据的功能。它只处理成本函数最小化问题,并创建一个模型(即查找参数)。
此外,如果你认为你创建了一个循环,你在每次迭代中划分数据,并一次又一次地调用model.fit,你就得到了更通用的模型,那么这是不可能的,因为在线性回归模型对象上第二次调用fit时,它会忘记旧数据。
https://stackoverflow.com/questions/49098155
复制相似问题