Выберите случайный набор данных проверки - PullRequest
2 голосов
/ 06 марта 2019

Имеется массив данных, состоящий из данных, которые были сгенерированы за время симуляции. Исходя из этого, я использую тензорный поток и керас для обучения нейронной сети, и мой вопрос касается этой строки кода в моей модели:

model.fit(X1, Y1, epochs=1000, batch_size=100, verbose=1, shuffle=True, validation_split=0.2)

Прочитав в документации Keras, я обнаружил, что набор проверочных данных (в данном случае 20% исходных данных) разрезан с конца. Поскольку я генерирую данные за текущее время, я, очевидно, не хочу, чтобы последняя часть была обрезана, потому что она не будет репрезентативной для проверки. Я бы предпочел, чтобы данные проверки выбирались случайным образом из всего набора данных. Для этой цели я сейчас перетасовываю свой весь набор данных (входы и выходы для ANN в унисон) перед тренировкой, чтобы получить случайные данные проверки.

Мне кажется, что я не хочу портить компонент времени в моих данных, поэтому я ищу решение, чтобы просто выбрать набор проверки случайным образом без необходимости перетасовывать весь набор данных. Кроме того, я хотел бы знать, что вы, ребята, думаете о том, чтобы не тасовать непрерывные данные. Опять же, я не спрашиваю о характере разделения проверки, я просто хочу знать, как изменить способ выбора данных проверки.

1 Ответ

1 голос
/ 06 марта 2019

Как вы упомянули, Keras просто берет последние x выборок набора данных, поэтому, если вы хотите продолжать использовать его, вам нужно заранее перемешать ваш набор данных.

Или вы можете просто использовать метод sklearn train_test_split () :

x_train, x_valid, y_train, y_valid = sklearn.model_selection.train_test_split(x, y, test_size=0.2)

У этого метода есть аргумент с именем "shuffle", который определяет, следует ли перетасовывать данные до разделения (по умолчанию для него установлено значение True).

Однако , лучше разделить данные, используя аргумент "stratify", который обеспечит аналогичное распределение меток среди проверочных и обучающих наборов:

x_train, x_test, y_train, y_test = train_test_split(x, y,
                                                    test_size=0.2,
                                                    random_state=0,
                                                    stratify=y)
...