是否可以在多输入神经网络中使用来自 sklearn 的 StratifiedKFold?



我有一个数据集,可以以python字典列表的形式传递给多输入神经网络:

示例

#dict
{'input1': X1, 'input2': X2, 'input3': X3}, {'output': Y}
#list
[ X1, X2, X3], y

现在,我想使用K 折叠交叉验证来估计模型的性能。您认为我可以像这个单输入示例中那样使用sklearn中的StratifiedKFold吗?

for train, test in kfold.split(X, Y):
# create model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X[train], Y[train], epochs=150, batch_size=10, verbose=0)
# evaluate the model
scores = model.evaluate(X[test], Y[test], verbose=0)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
cvscores.append(scores[1] * 100)

否则,最好的方法是什么?

skf.split(( 返回索引,它只依赖于 Y:

for train_index, test_index in skf.split(X, y):
...    print("TRAIN:", train_index, "TEST:", test_index)
...    X_train, X_test = X[train_index], X[test_index]
...    y_train, y_test = y[train_index], y[test_index]

因此,您可以在此处传递任何 X 数组(甚至是转换为数据帧或合成 X 的第 1 层的 X1(。然后你拿你的

train_index

test_index

并过滤所有输入。

同样,skf(( 仅取决于您的 Y。因此,目标是传递适当的 Y 并获取索引。

其他方法:将输出中的所有输入合并到一个数据帧中,并保留每个层的列名。在这种情况下,你有一个"大"X.首先将其拆分为train_index和test_index,然后使用上面保存的列名拆分为X1,X2和X3。

相关内容

  • 没有找到相关文章

最新更新