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
? ? ? ? ...
添加回答
舉報