3 回答
TA贡献1863条经验 获得超2个赞
好问题!答案是......您不必每次都创建模型。你的直觉是正确的。请随意移至model = LogisticRegression()
循环外部的顶部,然后重新运行以确认。
model.fit(X_train, y_train)
无论哪种方式,每次循环后存在的模型对象都是相同的。
TA贡献1865条经验 获得超7个赞
简短的回答是肯定的。
原因是因为这是k折交叉验证
简而言之,这意味着您正在训练k
多个模型,评估每个模型的结果并一起求平均值。
我们在没有单独的训练和测试数据集的情况下这样做。交叉验证将训练数据分割成k
子组,每个子组都包含自己的测试/训练分割(我们称之为折叠)。然后,我们在第一折叠的训练数据上训练模型并在测试数据上进行测试。对每个折叠使用新模型重复所有折叠,现在我们对完整数据集有了正确的预测。
TA贡献1853条经验 获得超6个赞
KFold
用于交叉验证,这意味着训练模型并评估它。
这样做时,您显然需要两个数据集:训练数据集和评估数据集。
使用时KFold
,您将训练集分割为折叠数(示例中为 5)并运行五个模型,每次使用五分之一作为验证集,将数据集的其余部分作为训练集。
现在,为了回答这个问题:您每次都需要一个新模型,因为您有五个模型,因为第五次每次都有不同的训练集以及不同的验证集。您必须创建一个新模型,scikit learn
因为当您运行模型时model.fit()
,模型是在特定数据集上进行训练的,因此您不能将其用于另一个训练数据集。
如果您只想创建一次,您可以制作副本,例如:
model = LogisticRegression(**params)
def parse_kfold(model)
kf = KFold(n_splits=5, shuffle=True)
for train_index, test_index in kf.split(X):
model_fold = model
...
添加回答
举报