тасование после разделения данных или до этого? - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу перетасовать свой набор данных, я видел в github в этом коде , случайное перемешивание происходит после разделения данных, мой вопрос в том, какова разница между перемешиванием после разделения, когда мы не перемешиваем его ???какой из них правильный??Я думаю, что это должно быть до разделения.

    if split == 'train':
        images = train_images[:50000]
        labels = train_labels[:50000]
    elif split == 'val':
        images = train_images[50000:60000]
        labels = train_labels[50000:60000]
    elif split == 'test':
        images = test_images
        labels = test_labels

    if randomize:
        rng_state = np.random.get_state()
        np.random.shuffle(images)
        np.random.set_state(rng_state)
        np.random.shuffle(labels)

или

    if randomize:
        rng_state = np.random.get_state()
        np.random.shuffle(images)
        np.random.set_state(rng_state)
        np.random.shuffle(labels)

    if split == 'train':
        images = train_images[:50000]
        labels = train_labels[:50000]
    elif split == 'val':
        images = train_images[50000:60000]
        labels = train_labels[50000:60000]
    elif split == 'test':
        images = test_images
        labels = test_labels

1 Ответ

2 голосов
/ 25 сентября 2019

Имеет смысл перетасовать набор данных только до разделения

Если вы перетасуете набор данных после разделения, перемешивание не повлияет на производительность, вы меняете только порядок экземпляров

В основном, если вы тасуете перед разделением, вы получаете разные наборы для ваших тренировочных / проверочных / тестовых наборов

Если вы тасуете после разделения, у вас всегда есть одинаковые наборы.


Пример:

1) перемешивание перед разделением

my_set = ["A", "B", "C", "D", "E", "F", "G"]
shuffle(my_set)
# ["B", "A", "D", "E", "C", "G", "F"]
train = my_set[:3] # ["B", "A", "D"]
val = my_set[3:5] # ["E", "C"]
test = my_set[5:-1] # ["G", "F"]

2) перемешивание после разбиения

my_set = ["A", "B", "C", "D", "E", "F", "G"]
train = my_set[:3] # ["A", "B", "C"]
val = my_set[3:5] # ["D", "E"]
test = my_set[5:-1] # ["F", "G"]
new_train = shuffle(train, inplace=False)
new_val = shuffle(val, inplace=False)
new_test = shuffle(test, inplace=False)
set(new_train) == set(train) #True
set(new_val) == set(val) #True
set(new_test) == set(test) #True

ПРИМЕЧАНИЕ: При обучении установленный порядок может влиять на производительность, например, когда вы используете алгоритмы, в которых вы используете пакеты и производные подходы

...