Можно ли использовать StratifiedKFold от sklearn в нескольких входных нейронных сетях? - PullRequest
0 голосов
/ 25 октября 2018

У меня есть набор данных, который можно передать во множественную входную нейронную сеть в форме питона словарь или список :

Пример:

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

Теперь я хотел бы использовать К-кратную перекрестную проверку для оценки производительности моей модели.Как вы думаете, я могу использовать StratifiedKFold из 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)

В противном случае, что будет лучшим способом?

1 Ответ

0 голосов
/ 25 октября 2018

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 здесь (даже X1 для слоя 1, преобразованного в фрейм данных или синтетический X).Затем вы берете свои

train_index

и

test_index

и фильтруете все свои входные данные.

Опять же, skf () зависит только от вашего Y.Таким образом, цель состоит в том, чтобы передать правильный Y и получить индексы.

Другой способ: объединить все ваши входы в выходы в одном кадре данных и сохранить имена столбцов для каждого слоя.В этом случае у вас есть один «большой» X. Сначала разделите его на train_index и test_index, а затем разделите на X1, X2 и X3, используя имена столбцов, которые вы сохранили выше.

...