Обучите мультиклассовую классификационную модель keras со многими CSV-файлами, по одной целевой категории на файл - PullRequest
0 голосов
/ 29 марта 2020

Я хочу использовать интерфейс для API набора данных (т. Е. Посмотрите здесь: tfdatasets ) для обучения простого мультиклассовая классификационная модель. Проблема в том, что данные обучения поступают из многих -файлов, каждый файл содержит только данные для одной целевой категории. Когда я использую только некоторые наблюдения и включаю все данные в один в памяти, нет никаких препятствий, потому что я могу просто преобразовать целевую переменную (которая является строкой), используя keras::to_categorical():

train_labels <- train_data %>%
  select(label) %>%
  mutate(label = factor(label)) %>%
  mutate(label_int = as.numeric(label) - 1)
train_labels_tensor <- keras::to_categorical(train_labels$label_int)

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

/training/label_1.csv
/training/label_2.csv
/training/label_3.csv
...
/training/label_50.csv

, каждый файл содержит тысячи строк. Каждый файл имеет одинаковые переменные, первая - это символьное значение (целевая метка), остальные - числовые характеристики. Я хочу передавать данные в пакетном режиме на модель.

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

Вторым шагом было бы убедиться, что функции одинаковы между файлами. В данный момент я делаю это перед этапом обучения, т. Е. Читаю в каждом файле, выполняю все необходимые этапы подготовки данных и заполняю недостающие функции прогнозирования, чтобы у каждого файла были одинаковые столбцы, затем снова сохранял файл на диск. , Но позже было бы здорово сделать это напрямую с помощью API набора данных. Например:

label_1.csv has columns:
y | x_1 | x_2 | x_3

label_2.csv has columns:
y | x_1 | x_3 | x_4
...
label_50.csv has columns:
y | x_36 | x_37 | x_38

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

      [,1] [,2] [,3] [...] [,50]
[1,]    1    0    0   ...    0
[2,]    1    0    0   ...    0
[3,]    1    0    0   ...    0

, а переменные объекта расширены и предварительно обработаны до (например, label_1.csv):

      [,x_1] [,x_2] [,x_3] [,x_4] [...] [,x_36] [,x_37] [,x_38]
[1,]    .3    .67    -.97    0      0    ...       0       0
[2,]   -.1   -.43     .74    0      0    ...       0       0
[3,]    .25   .12    -.27    0      0    ...       0       0

Здесь каждый отсутствующий элемент в одном файле должен быть добавлен и заполнен нулями, которые представляют отсутствующие значения для этой одной метки класс.

Есть предложения? Большое спасибо!

...