我有一个数据集,可以以python字典或列表的形式传递给多输入神经网络。
示例
#dict
{'input1': X1, 'input2': X2, 'input3': X3}, {'output': Y}
#list
[ X1, X2, X3], y现在,我想使用K折叠交叉验证来估计我的模型的性能。您认为我可以像在这个单输入示例中那样使用来自sklearn的sklearn吗?
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)否则,最好的办法是什么?
发布于 2018-10-25 17:21:34
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数组(甚至第1层的X1转换为数据格式或合成X)。然后你拿着你的
train_index和
test_index过滤你所有的输入。
同样,skf()只依赖于您的Y。因此,我们的目标是通过适当的Y和得到指数。
其他方法:将所有您输入的输出合并到一个数据帧中,并为每个层保留列名。在本例中,您有一个“大”X。首先将其拆分为train_index和test_index,然后使用前面保存的列名将其拆分为X1、X2和X3。
https://stackoverflow.com/questions/52978434
复制相似问题