Как загрузить большой CSV в модель Keras? - PullRequest
0 голосов
/ 09 апреля 2019

Мне нужно конвертировать большой CSV в один горячий код np.ndarray для модели Keras.

For ex: csv data = 

  F1  F2  F3  
1.'M' 'N' 'I' 
2.'-' 'M' 'K'

Each Column's Possible Values
F1: ['-', 'M', 'N']
F2: ['-', 'A', 'B', 'M', 'N']
F3: ['-', 'I', 'J', 'K']

Expected Value(One hot encode in np.array)
   F1       F2                F3  
1. 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0
2. 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1

Я могу прочитать CSV, а затем анализировать строку за строкой. Но это медленно, и у меня очень большой файл. Есть ли способ использовать «pd.dataframe.apply» для преобразования в один горячий код?

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Dummies .... LOL, у панды есть функция get_dummies для таких же пустышек, как я. Вот видео https://www.youtube.com/watch?v=0s_1IsROgDc


После того, как я реализовал get_dummies, ошибка в размере броска моего модуля. Я обнаружил, что, поскольку я использую .fit_generator (), затем загружаю часть данных, затем get_dummies. Он вернет несоответствующие размеры, если партия не имеет всех возможных значений.

Решение: из sklearn.preprocessing import OneHotEncoder

Урок, если у вас большой набор данных, больше работы для вас.

0 голосов
/ 09 апреля 2019

Чтобы сгенерировать данные для проверки моего метода, я сгенерировал файл, используя указанный вами формат 60000000 строк (или каждую комбинацию вышеупомянутого, которая в 60 раз превышает 1000000). Поскольку ваши данные для каждой строки могут быть только одним из 60 вариантов, вместо сохранения данных (так как порядок не имеет значения), сохранение числа каждого появления каждой строки происходит намного быстрее, поскольку вместо преобразования 60000000 строк вы конвертируйте 60 в одну горячую кодировку. Примечание: файл данных оказался 480 МБ. Следующий код считывает данные в словарь:

def foo():
    data = {}
    with open('data.csv') as f:
        for line in f:
            try:
                data[line] += 1
            except KeyError as e:
                data[line] = 1

С print(timeit(__main__, number=10)) я достиг времени 125.45043465401977.

С этого момента вы можете преобразовать каждую строку строки в одну горячую кодировку и добавить n копий для обучения. Это также должно упростить обучение вашей модели, поскольку Keras может использовать объект-генератор python для обучения. Это означает, что ни в коем случае не все данные хранятся в памяти, что позволяет проводить обучение для наборов данных, размер которых превышает объем ОЗУ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...