簡體   English   中英

制作 Keras model 時將數據拆分為訓練、測試和評估

[英]Splitting data to training, testing and valuation when making Keras model

在制作和評估 Keras 機器學習模型時,我對拆分數據集有點困惑。 假設我有 1000 行的數據集。

features = df.iloc[:,:-1]
results = df.iloc[:,-1]

現在我想將這些數據分成訓練和測試(33% 的數據用於測試,67% 用於訓練):

x_train, X_test, y_train, y_test = train_test_split(features, results, test_size=0.33)

我在互聯網上讀到將數據擬合到 model 應該如下所示:

history = model.fit(features, results, validation_split = 0.2, epochs = 10, batch_size=50)

因此,我將完整的數據(特征和結果)擬合到我的 model 中,並從該數據中使用 20% 的數據進行驗證: validation_split = 0.2 所以基本上,我的 model 將使用 80% 的數據進行訓練,並在 20% 的數據上進行測試。

因此,當我需要評估 model 時,就會出現混亂:

score = model.evaluate(x_test, y_test, batch_size=50)

這個對嗎? 我的意思是,我為什么要把數據分成訓練和測試,x_train 和 y_train go 在哪里?

您能否向我解釋一下創建 model 的正確步驟順序是什么?

通常,在訓練時( model. fit ),您有兩組:一組用於訓練集,另一組用於驗證/調整/開發集。 使用訓練集,您訓練 model,使用驗證集,您需要找到最佳的超參數集。 完成后,您可以使用看不見的數據集測試 model - 與訓練驗證集不同,該數據集完全隱藏在 model 之外。


現在,當你使用

X_train, X_test, y_train, y_test = train_test_split(features, results, test_size=0.33)

這樣,您將featuresresults分成33%的數據用於測試67%用於訓練 現在,你可以做兩件事

  1. 使用( X_testy_test作為model.fit(...)中的驗證集。或者,
  2. model. predict(...) model. predict(...)

因此,如果您選擇這些測試集作為驗證集(編號 1 ),您將執行以下操作:

model.fit(x=X_train, y=y_trian, 
         validation_data = (X_test, y_test), ...)

在訓練日志中,您將獲得驗證結果以及訓練分數。 如果您稍后計算model.evaluate(X_test, y_test)驗證結果應該相同。


現在,如果您選擇這些測試集作為最終預測或最終評估集(編號 2 ),那么您需要重新制作驗證集或使用validation_split參數,如下所示:

model.fit(x=X_train, y=y_trian, 
         validation_split = 0.2, ...)

Keras API 將采用.2 % 的訓練數據( X_trainy_train )並將其用於驗證。 最后,對於您的 model 的最終評估,您可以執行以下操作:

y_pred = model.predict(x_test, batch_size=50)

現在,您可以將y_testy_pred與一些相關指標進行比較。

通常,您希望在 fit 方法中使用已拆分為 arguments 的 X_train、y_train 數據。 所以它看起來像:

history = model.fit(X_train, y_train, batch_size=50)

雖然在將數據放入 fit 方法之前不拆分數據並添加 validation_split arguments 也可以,但請注意參考 keras 文檔,validation_data 和 validation_split ZDBC11CAA5BDA99F77E6FB4DABD882E7 以確保按預期拆分它們。

這里有一個相關的問題: https://datascience.stackexchange.com/questions/38955/how-does-the-validation-split-parameter-of-keras-fit-function-work

Keras 文檔: https://keras.rstudio.com/reference/fit.ZFC35FDC70D5FC69D269883A8EZC

我在互聯網上讀到將數據擬合到 model 應該如下所示:

這意味着您需要擬合特征和標簽。 您已經將它們拆分為x_trainy_train 所以你的合身應該是這樣的:

history = model.fit(x_train, y_train, validation_split = 0.2, epochs = 10, batch_size=50)

因此,當我需要評估 model 時,就會出現混亂:

score = model.evaluate(x_test, y_test, batch_size=50) --> 這是正確的嗎?

沒錯,您通過使用測試功能和相應的標簽來評估 model。 此外,如果您只想獲得例如預測標簽,您可以使用:

y_hat = model.predict(X_test)

然后您可以將y_haty_test進行比較,即得到一個混淆矩陣等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM