亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我們每次都需要重新創建模型?

為什么我們每次都需要重新創建模型?

holdtom 2023-07-27 16:02:26
這里我有一段Python代碼,取自SoloLearn,scores = []kf = KFold(n_splits=5, shuffle=True)for train_index, test_index in kf.split(X):   X_train, X_test = X[train_index], X[test_index]   y_train, y_test = y[train_index], y[test_index]   model = LogisticRegression()   model.fit(X_train, y_train)   scores.append(model.score(X_test, y_test))print(scores)print(np.mean(scores))那么我的問題是,我需要在每次拆分中創建一個新模型嗎?為什么我們不在 for 之前創建一個 LogisticRegression 呢?我會把它放在前面以節省計算時間,但既然它是以這種方式呈現的,我認為這是有原因的。
查看完整描述

3 回答

?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

好問題!答案是......您不必每次都創建模型。你的直覺是正確的。請隨意移至model = LogisticRegression()循環外部的頂部,然后重新運行以確認。

model.fit(X_train, y_train)無論哪種方式,每次循環后存在的模型對象都是相同的。


查看完整回答
反對 回復 2023-07-27
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

簡短的回答是肯定的。

原因是因為這是k折交叉驗證

簡而言之,這意味著您正在訓練k多個模型,評估每個模型的結果并一起求平均值。

我們在沒有單獨的訓練測試數據集的情況下這樣做。交叉驗證將訓練數據分割成k子組,每個子組都包含自己的測試/訓練分割(我們稱之為折疊)。然后,我們在第一折疊的訓練數據上訓練模型并在測試數據上進行測試。對每個折疊使用新模型重復所有折疊,現在我們對完整數據集有了正確的預測。

查看完整回答
反對 回復 2023-07-27
?
墨色風雨

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

? ? ? ? ...


查看完整回答
反對 回復 2023-07-27
  • 3 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號