Python 制作Keras模型时,将数据拆分为培训、测试和评估

Python 制作Keras模型时,将数据拆分为培训、测试和评估,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,在制作和评估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) 我在互联网上读到,将数据拟合到模型中应该是这样的:

在制作和评估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)
history = model.fit(x_train, y_train, 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_训练和y_训练去哪里


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

通常,你会想使用你的X\u序列,y\u序列数据,这些数据在fit方法中被分割为参数。所以它看起来像:

历史记录=型号。fitX\U系列,y\U系列,批量大小=50

虽然在将数据放入fit方法并添加validation_split参数之前不拆分数据也可以,但请小心参考关于validation_数据和validation_split参数的keras文档,以确保按预期拆分它们

这里有一个相关的问题:

Keras文件:

通常,您希望使用fit方法中分割为参数的X\u序列、y\u序列数据。所以它看起来像:

历史记录=型号。fitX\U系列,y\U系列,批量大小=50

虽然在将数据放入fit方法并添加validation_split参数之前不拆分数据也可以,但请小心参考关于validation_数据和validation_split参数的keras文档,以确保按预期拆分它们

这里有一个相关的问题:

Keras文件:

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

history = model.fit(features, results, validation_split = 0.2, epochs = 10, batch_size=50)
history = model.fit(x_train, y_train, validation_split = 0.2, epochs = 10, batch_size=50)
这意味着您需要调整功能和标签。你已经把他们分为x_火车和y_火车了。所以你的身材应该是这样的:

history = model.fit(features, results, validation_split = 0.2, epochs = 10, batch_size=50)
history = model.fit(x_train, y_train, validation_split = 0.2, epochs = 10, batch_size=50)
因此,当我需要评估模型时,就会出现混乱:

score = model.evaluate(x_test, y_test, batch_size=50)
分数=model.evaluatex\u测试,y\u测试,批量大小=50->是否正确

没错,您可以使用测试功能和相应的标签来评估模型。此外,如果只想获取例如预测标签,可以使用:

y_hat = model.predict(X_test)
然后你可以将y_hat与y_test进行比较,即得到混淆矩阵等

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

history = model.fit(features, results, validation_split = 0.2, epochs = 10, batch_size=50)
history = model.fit(x_train, y_train, validation_split = 0.2, epochs = 10, batch_size=50)
这意味着您需要调整功能和标签。你已经把他们分为x_火车和y_火车了。所以你的身材应该是这样的:

history = model.fit(features, results, validation_split = 0.2, epochs = 10, batch_size=50)
history = model.fit(x_train, y_train, validation_split = 0.2, epochs = 10, batch_size=50)
因此,当我需要评估模型时,就会出现混乱:

score = model.evaluate(x_test, y_test, batch_size=50)
分数=model.evaluatex\u测试,y\u测试,批量大小=50->是否正确

没错,您可以使用测试功能和相应的标签来评估模型。此外,如果只想获取例如预测标签,可以使用:

y_hat = model.predict(X_test)

然后,您可以将y_hat与y_test进行比较,即在训练时间模型中获得混淆矩阵等。fit有两个集合:一个用于培训集合,另一个用于验证/调优/开发集合。使用训练集训练模型,使用验证集,需要找到最佳的超参数集。完成后,您可以使用看不见的数据集测试您的模型,该数据集与训练集或验证集不同,对模型完全隐藏

现在,当你使用

X_train, X_test, y_train, y_test = train_test_split(features, results, test_size=0.33)
这样,您可以将功能和结果分成33%的数据进行测试,67%的数据用于培训。现在,你可以做两件事

使用X_测试和y_测试作为model.fit…中的验证集。。。。或 在模型中使用它们进行最终预测。预测 因此,如果您选择这些测试集作为验证集编号1,您将执行以下操作:

model.fit(x=X_train, y=y_trian, 
         validation_data = (X_test, y_test), ...)
model.fit(x=X_train, y=y_trian, 
         validation_split = 0.2, ...)
y_pred = model.predict(x_test, batch_size=50)
在培训日志中,您将获得验证结果以及培训分数。如果以后计算model.evaluateX\u test,y\u test,验证结果应该相同

现在,如果选择这些测试集作为最终预测集或最终评估集编号2,则需要新建验证集或使用validation_split参数,如下所示:

model.fit(x=X_train, y=y_trian, 
         validation_data = (X_test, y_test), ...)
model.fit(x=X_train, y=y_trian, 
         validation_split = 0.2, ...)
y_pred = model.predict(x_test, batch_size=50)
Keras API将采用0.2%的训练数据X_序列和y_序列,并将其用于验证。最后,对于模型的最终评估,您可以执行以下操作:

model.fit(x=X_train, y=y_trian, 
         validation_data = (X_test, y_test), ...)
model.fit(x=X_train, y=y_trian, 
         validation_split = 0.2, ...)
y_pred = model.predict(x_test, batch_size=50)

现在,您可以使用一些相关指标与y_test和y_pred进行比较。

通常,在训练时间模型中。fit有两个集合:一个用于培训集合,另一个用于验证/调优/开发集合。使用训练集训练模型,使用验证集训练模型 需要找到最佳的超参数集。完成后,您可以使用看不见的数据集测试您的模型,该数据集与训练集或验证集不同,对模型完全隐藏

现在,当你使用

X_train, X_test, y_train, y_test = train_test_split(features, results, test_size=0.33)
这样,您可以将功能和结果分成33%的数据进行测试,67%的数据用于培训。现在,你可以做两件事

使用X_测试和y_测试作为model.fit…中的验证集。。。。或 在模型中使用它们进行最终预测。预测 因此,如果您选择这些测试集作为验证集编号1,您将执行以下操作:

model.fit(x=X_train, y=y_trian, 
         validation_data = (X_test, y_test), ...)
model.fit(x=X_train, y=y_trian, 
         validation_split = 0.2, ...)
y_pred = model.predict(x_test, batch_size=50)
在培训日志中,您将获得验证结果以及培训分数。如果以后计算model.evaluateX\u test,y\u test,验证结果应该相同

现在,如果选择这些测试集作为最终预测集或最终评估集编号2,则需要新建验证集或使用validation_split参数,如下所示:

model.fit(x=X_train, y=y_trian, 
         validation_data = (X_test, y_test), ...)
model.fit(x=X_train, y=y_trian, 
         validation_split = 0.2, ...)
y_pred = model.predict(x_test, batch_size=50)
Keras API将采用0.2%的训练数据X_序列和y_序列,并将其用于验证。最后,对于模型的最终评估,您可以执行以下操作:

model.fit(x=X_train, y=y_trian, 
         validation_data = (X_test, y_test), ...)
model.fit(x=X_train, y=y_trian, 
         validation_split = 0.2, ...)
y_pred = model.predict(x_test, batch_size=50)

现在,您可以用一些相关指标与y_test和y_pred进行比较。

但我的模型在哪里。那么,评估?这是为了什么?如果选择数字1,并且在model.fit中将x_test和y_test设置为验证集,则不需要使用mdoel.evaluate。因为你可以从培训日志中获得分数损失或acc。但是如果你选择第2项,我们在mdoel.fit中不使用x_测试和y_测试,那么你可以进行model.evaluate x_测试、y_测试和model.predictx_测试,如上所示。仅供参考,但我的模型在哪里?然后评估?这是为了什么?如果选择数字1,并且在model.fit中将x_test和y_test设置为验证集,则不需要使用mdoel.evaluate。因为您可以从培训日志中获得分数损失或acc。但是如果您选择第2项,即我们在mdoel.fit中不使用x_测试和y_测试,那么您可以进行model.evaluate x_测试、y_测试以及model.predictx_测试,如上所示。仅供参考,