是否可以在多输入神经网络中使用来自 sklearn 的 StratifiedKFold?
Posted
技术标签:
【中文标题】是否可以在多输入神经网络中使用来自 sklearn 的 StratifiedKFold?【英文标题】:Is it possible to use StratifiedKFold from sklearn in multi input Neural Networks? 【发布时间】:2019-03-29 10:13:41 【问题描述】:我有一个数据集,可以以 python dictionary 或 list 的形式传递给多输入神经网络:
示例:
#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。但据我所知,最好将字典转换为 pandas 数据框。此外,sklearn 支持 KerasClassifier/KerasRegressor,因此您可以像这里一样重写您的代码:machinelearningmastery.com/… 是的,但它们不适用于多输入... 【参考方案1】: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。
【讨论】:
我今天早上做了同样的事情!无论如何,我会将其发布为解决方案,因为它应该如何工作!实际上我只通过了 Y:kfold = KFold(n_splits=5)
for train_indices, test_indices in kfold.split(Y): train_1, train_2, train_3, train_4 = data[0][train_indices], data[1][train_indices], data[2] [train_indices],数据[3][train_indices]`
很高兴听到,弗朗西斯科!谢谢!
@FrancescoPegoraro 仅在 Y 上拆分时,我可以在 StratifiedKFold 中使用 shuffel=True 吗?
@Daisy:我不明白为什么不...你试过了吗?
也许这是一个愚蠢的问题,但我认为它只会洗牌 Ys。以上是关于是否可以在多输入神经网络中使用来自 sklearn 的 StratifiedKFold?的主要内容,如果未能解决你的问题,请参考以下文章
来自 UIImage 的 MLMultiArray 用于 sklearn
Sklearn Linear SVM 无法在多标签分类中进行训练
是否可以使用不同的数据集作为 AdaBoostRegressor (sklearn) 中的预测输入?