在Keras与sklearn交叉验证

时间:2016-10-26 13:05:41

标签: python neural-network keras

我想在人工神经网络(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似乎卡住了,根本没有改变,而在第二个例子中它会波动。

0 个答案:

没有答案