Прогноз: подключить таблицу корреляции (нейрон) к нейрону временных рядов в Keras/TF

Вопрос или проблема

Я добавляю больше деталей

У меня есть временной ряд данных о детях (1, 2, 3), который показывает, сколько проблем у них возникает каждую неделю (с недели 1 по неделю 80) и в каком органе (14 органов).

Существуют отдельные числовые таблицы корреляций без учета времени для детей/органов, показывающие количество клеток крови типа X на орган на ребенка -> Причины проблем.

Моя цель – предсказать, сколько проблем будет у НовогоРебенка (Ребенок4), в каком organ, по неделям.

Предсказать это: Неделя1: 1 проблема | Живот Неделя1: 1 проблема | Печень Неделя2: 1 проблема | Живот ..

TIME_SERIES_INPUT ——> LSTM (RNN?) ——-\
——————————————————————-> СЛИТЬ —>
AUXILIARY_INPUTS –> [сделать что-то] ———-/*

Как я могу смоделировать эту задачу с помощью Keras/TF? Чтобы быть более конкретным, сначала мне следует изменить набор данных, чтобы включить таблицы корреляций? Или я могу подключить модель к LSTM? Я видел несколько примеров на этом форуме, но они в основном касаются CNN, что не применимо к моему набору данных. P.S. я могу вставить весь набор данных, если это необходимо.

Спасибо

Набор данных выглядит следующим образом

Неделя Ребенок Возраст Орган Дата Проблема Найдена Тип Проблемы
2   Ребенок2   A0  Орган2  06/24/16    1   F
2   Ребенок3   A0  Орган11 05/01/17    1   F
2   Ребенок3   A0  Орган11 05/02/17    1   F
2   Ребенок3   A0  Орган13 05/03/17    1   F
2   Ребенок3   A0  Орган13 05/05/17    1   F
3   Ребенок2   A0  Орган12 06/29/16    1   F
3   Ребенок2   A0  Орган2  07/01/16    1   F
4   Ребенок3   A0  Орган13 05/18/17    1   F
4   Ребенок3   A0  Орган2  05/19/17    1   F

Таблица корреляции без учета времени выглядит следующим образом

Новые клетки крови типа X на орган на ребенка

Орган   Ребенок1   Ребенок2   Ребенок3   НовыйРебенок
Мочевой пузырь Орган1  288 247 97  253
Мозг   Орган2  2548    1972    992 251
Уши    Орган3  32  254 162 155
Глаза    Орган4  111 0   459 -89
Сердце   Орган5  42  1214    0   142
Почки  Орган6  4   188 186 -87
Почки Орган7  806 1764    796 153
Печень   Орган8  658 657 -20 0
Легкие    Орган9  0   484 0   0
Нос    Орган10 3328    9940    4435    3223
Поджелудочная железа    Орган11 11  389 207 194
Кожа    Орган12 664 766 164 -145
Живот Орган13 246 -71 0   -70
Язык  Орган14 1403    0   33  0

Если у вас просто есть обычная таблица корреляции (в чем я не уверен), вы можете сделать это так: для каждой строки вы можете добавить корреляцию органа в строке к другим органам. Так вы получите

Неделя Ребенок Возраст Орган Дата Проблема Найдена Тип Проблемы Орган1 Орган2 Орган3 ...
2   Ребенок2   A0  Орган2  06/24/16    1      F            0.5    0      0.3    ...  

Если у вас нет строки для нового ребенка, тогда вам следует отформатировать данные таким образом вместе с другими параметрами. Corr_Organ1 – это агрегат всех корреляций, которые приводят к сбою Органа1.

Ребенок  X-Type_cells Орган1 Organ1_time Орган2 Organ2_time Corr_Organ1 Corr_Organ2 ...
Ребенок1 1024         Да    06/24/16    Нет     nan         0.2         0           ...

Затем вы делаете итерации: сначала прогнозируете все с нулевыми корреляциями. Затем, когда вы рассчитываете первый прогноз и Орган 1 не удался, вы обновляете все остальные корреляции.

Начальные данные:

Ребенок  X-Type_cells Орган1 Organ1_time Орган2 Organ2_time Corr_Organ1 Corr_Organ2 ...
Ребенок1 1024         nan    nan         nan    nan         0           0           ...

После первой итерации:

Ребенок  X-Type_cells Орган1 Organ1_time Орган2 Organ2_time Corr_Organ1 Corr_Organ2 ...
Ребенок1 1024         да    xxx         нет     nan         0           0.8         ...

Затем вы снова прогнозируете на основе корреляций и получаете следующий результат:

Ребенок  X-Type_cells Орган1 Organ1_time Орган2 Organ2_time Corr_Organ1 Corr_Organ2 ...
Ребенок1 1024         да    xxx         да     nan         0.2         0.8         ...

Вы повторяете эти итерации, пока ничего не изменится.

Агрегация корреляций может быть простой суммой или чем-то более сложным.

Ответ или решение

Моделирование временного ряда с использованием Keras и TensorFlow для прогнозирования заболеваний у новорожденного

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

Шаг 1: Подготовка данных

  1. Форматирование временных рядов:
    Вам нужно преобразовать ваш набор данных о заболеваниях в формат, подходящий для LSTM. Это включает в себя создание трехмерного тензора, где первая размерность — это время (недели), вторая — это различные объекты (например, младенцы или органы), а третья — это признаки (например, количество заболеваний).

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

    (num_samples, num_timesteps, num_features)
  2. Включение корреляционных данных:
    Каждую запись временного ряда можно дополнить значениями из корреляционных таблиц, чтобы указать на связи между органами и типами клеток. Это можно сделать, добавляя соответствующие корреляционные коэффициенты для каждого органа:

    Орган1, Орган2, Орган3, ... (Корреляции)
  3. Объединение данных:
    Вам потребуется объединить временные данные и вспомогательные корреляционные входные данные. Для этого можно воспользоваться слоями Keras, такими как Concatenate.

Шаг 2: Создание модели

Вы можете создать модель, используя Keras следующим образом:

import numpy as np
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, LSTM, Dense, Concatenate

# Определение входных данных
time_series_input = Input(shape=(num_timesteps, num_features), name='time_series_input')
auxiliary_input = Input(shape=(num_auxiliary_features,), name='auxiliary_input')

# LSTM слой
lstm_out = LSTM(50, return_sequences=False)(time_series_input)

# Объединение выходов
merged = Concatenate()([lstm_out, auxiliary_input])

# Полносвязные слои для окончательной классификации
dense_out = Dense(64, activation='relu')(merged)
output = Dense(num_classes, activation='softmax')(dense_out)

# Создание модели
model = Model(inputs=[time_series_input, auxiliary_input], outputs=output)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# Обучение моделя
model.fit([X_time_series, X_auxiliary], y_labels, epochs=50, batch_size=32)

Шаг 3: Прогнозирование и итерационные обновления

Для прогнозирования заболеваний у новорождённых вы можете использовать итеративный подход, описанный вами. На первом этапе вы предсказываете заболевания с нулевыми корреляциями. После того как вы получите предсказания, вы должны обновить корреляционные коэффициенты и пересчитывать прогнозы.

  1. Первоначальный прогноз:
    Начните с прогнозирования заболеваний без учета корреляций.

  2. Обновление корреляционных данных:
    На основе полученных результатов обновите корреляционные коэффициенты. Это можно сделать по вашему предложенному алгоритму, добавляя новые связи по мере получения данных от модели.

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

Заключение

Использование LSTM вместе с корреляционными данными позволяет вам эффективно моделировать и прогнозировать количество вероятных заболеваний у новорождённых. Важно также экспериментировать с параметрами модели и методами предобработки данных, чтобы добиться наилучших результатов. В процессе реализации этой модели следите за метриками, такими как точность и потеря, чтобы убедиться в ее эффективности.

Оцените материал
Добавить комментарий

Капча загружается...