在制作Keras模型时将数据拆分为训练、测试和验证集

我在制作和评估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)

我在网上读到,数据拟合到模型中应该这样做:

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

所以我将全部数据(features和results)拟合到我的模型中,并从这些数据中使用20%的数据进行验证:validation_split = 0.2。因此,我的模型将使用80%的数据进行训练,并在20%的数据上进行测试。

所以,当我需要评估模型时,困惑就开始了:

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

这是正确的吗?我是说,为什么我要将数据拆分为训练和测试集,x_train和y_train去哪儿了?

你能解释一下创建模型的正确步骤顺序吗?


回答:

一般来说,在训练时间(model.fit),你有两个数据集:一个是用于训练的数据集,另一个是用于验证/调优/开发的数据集。使用训练集来训练模型,使用验证集来找到最佳的超参数设置。当你完成这些后,你可以用未见过的数据集来测试你的模型 – 这是一个完全对模型隐藏的数据集,与训练验证集不同。


现在,当你使用

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

通过这样做,你将featuresresults拆分为33%的数据用于测试67%用于训练。现在,你可以做两件事

  1. model.fit(...)中使用X_testy_test作为验证集。或者,
  2. 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将从训练数据(X_trainy_train)中取.2的百分比,并将其用于验证。最后,对于模型的最终评估,你可以按以下方式操作:

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

现在,你可以使用一些相关指标来比较y_testy_pred

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注