在制作和评估 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)
所以我将完整的数据(特征和结果)拟合到我的模型中,并且我使用该数据的 20% 的数据进行验证:validation_split = 0.2
。
所以基本上,我的模型将使用 80% 的数据进行训练,并使用 20% 的数据进行测试。
所以当我需要评估模型时,困惑就开始了:
score = model.evaluate(x_test, y_test, batch_size=50)
这是正确的吗? 我的意思是,我为什么要把数据分成训练和测试,x_train 和 y_train 去哪里?
能否请您向我解释一下创建模型的正确步骤顺序是什么?
最佳答案
一般来说,在训练时间(model.fit
),你有两套:一套用于training set,另一套用于validation/tuning/开发集。使用训练集,您可以训练模型,使用验证集,您需要找到最佳的超参数集。完成后,您可以使用未见过的数据集测试您的模型 - 与训练或验证集不同的是,该集完全隐藏在模型之外。 p>
现在,当你使用
X_train, X_test, y_train, y_test = train_test_split(features, results, test_size=0.33)
由此,您将特征
和结果
分成33%
的数据用于<strong>测试,67%
用于训练。现在,您可以做两件事
- 使用 (
X_test
和y_test
作为model.fit(...)
中的验证集。或者, - 将它们用于
模型中的最终预测。预测(...)
因此,如果您选择这些测试集作为验证集 (number 1),您将执行以下操作:
model.fit(x=X_train, y=y_trian,
validation_data = (X_test, y_test), ...)
在训练日志中,您将获得验证结果以及训练分数。如果您稍后计算 model.evaluate(X_test, y_test)
,验证结果应该相同。
现在,如果您选择那些测试集作为最终预测或最终评估集(number 2),那么您需要进行验证 新设置或使用 validation_split
参数如下:
model.fit(x=X_train, y=y_trian,
validation_split = 0.2, ...)
Keras
API 将采用 .2
百分比的训练数据(X_train
和 y_train
)和用它来验证。最后,对于模型的最终评估,您可以执行以下操作:
y_pred = model.predict(x_test, batch_size=50)
现在,您可以将 y_test
和 y_pred
与一些相关指标进行比较。
关于python - 制作 Keras 模型时将数据拆分为训练、测试和评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67161924/