我想在人工神经网络(Python Keras)中进行交叉验证。我对训练和测试数据的Matthews相关系数(MCC)(或准确度)测量感兴趣。目前,我的代码使用StratifiedKFold:
kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=seed)
for train, test in kfold.split(X, Y):
model = Sequential()
model.add(Dense(n, input_dim=dim, init='uniform', activation='sigmoid'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
model.compile(loss='mse', optimizer='adam', metrics=['matthews_correlation'])
asd = model.fit(X[train], Y[train], validation_data=(X[test], Y[test]), nb_epoch=epoch, batch_size=10)
不是我将X [train]和Y [train]填充到Keras的validation_data函数中。这给出了训练集约为0.7的MCC和测试集的<0.10。
或者,我分析了一个测试数据集,其中包含sklearn的train_test_split函数(测试大小为20%,相当于上面交叉验证中的20%折叠率):
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=seed)
asd = model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=epoch, batch_size=10)
这再次给了我一个约0.7的训练MCC,但在测试中也是0.7左右。我原本以为它们与上面非常相似。
这两个代码片段是否真的试图找到相同的?对于相同的训练集,它们如何如此大不相同?
注意:第一个示例中的MCC似乎卡住了,根本没有改变,而在第二个例子中它会波动。