如何划分训练和测试数据?

我目前正在使用神经网络训练数据,并使用fit函数进行训练。

history = model.fit(X, encoded_Y, batch_size=50, nb_epoch=500, validation_split=0.2, verbose=1)

我已经将validation_split设置为20%。我的理解是训练数据将占80%,测试数据将占20%。我对后端如何处理这些数据感到困惑。是不是像前80%的样本用于训练,而后20%的样本用于测试,还是从中间随机挑选样本?如果我想提供单独的训练和测试数据,我该如何使用model.fit()来实现?

此外,我的第二个担忧是如何检查数据是否很好地适应模型?我从结果中看到训练准确率大约为90%,而验证准确率大约为55%。这是否意味着这是过拟合还是欠拟合的情况?

我的最后一个问题是,evaluate函数返回什么?文档说它返回损失值,但我已经在每个epoch中通过fit()函数(在history中)获取了损失和准确率。evaluate返回的准确率和分数显示了什么?如果evaluate返回的准确率为90%,我可以说我的数据很好地适应了模型,而不管每个epoch的个体准确率和损失如何吗?

以下是我的代码:

import numpyimport pandasimport matplotlib.pyplot as pltfrom keras.models import Sequentialfrom keras.layers import Dense, Dropoutfrom keras.wrappers.scikit_learn import KerasClassifierfrom sklearn.model_selection import cross_val_scorefrom sklearn.preprocessing import LabelEncoderfrom sklearn.model_selection import StratifiedKFoldfrom sklearn.preprocessing import StandardScalerfrom sklearn.pipeline import Pipelinefrom keras.utils import np_utilsfrom sklearn.model_selection import KFoldfrom sklearn.metrics import confusion_matriximport itertoolsseed = 7numpy.random.seed(seed)dataframe = pandas.read_csv("INPUTFILE.csv", skiprows=range(0, 0))dataset = dataframe.valuesX = dataset[:,0:50].astype(float) # 列数-1Y = dataset[:,50]encoder = LabelEncoder()encoder.fit(Y)encoded_Y = encoder.transform(Y)encoded_Y = np_utils.to_categorical(encoded_Y)print("encoded_Y=", encoded_Y) # 基线模型def create_baseline():    # 创建模型    model = Sequential()    model.add(Dense(5, input_dim=5, kernel_initializer='normal', activation='relu'))    model.add(Dense(5, kernel_initializer='normal', activation='relu'))    #model.add(Dense(2, kernel_initializer='normal', activation='sigmoid'))    model.add(Dense(2, kernel_initializer='normal', activation='softmax'))    # 编译模型    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])  # 用于二分类        #model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])  # 用于多类别    return model    model=create_baseline();history=model.fit(X, encoded_Y, batch_size=50, nb_epoch=500, validation_split = 0.2, verbose=1)print(history.history.keys())# 列出history中的所有数据print(history.history.keys())# 总结准确率历史plt.plot(history.history['acc'])plt.plot(history.history['val_acc'])plt.title('模型准确率')plt.ylabel('准确率')plt.xlabel('epoch')plt.legend(['训练', '测试'], loc='upper left')plt.show()# 总结损失历史plt.plot(history.history['loss'])plt.plot(history.history['val_loss'])plt.title('模型损失')plt.ylabel('损失')plt.xlabel('epoch')plt.legend(['训练', '测试'], loc='upper left')plt.show()pre_cls=model.predict_classes(X)    cm1 = confusion_matrix(encoder.transform(Y),pre_cls)print('混淆矩阵 : \n')print(cm1)score, acc = model.evaluate(X,encoded_Y)print('测试分数:', score)print('测试准确率:', acc)

回答:

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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