WedX - журнал о программировании и компьютерных науках

Моя цель - предсказать следующие 3 события каждого id_num на основе их предыдущих событий.

Я новичок в науке о данных и работаю над моделью, похожей на пример данных, показанный ниже. Однако в исходных данных много id_num и Events. Моя цель - предсказать следующие 3 события каждого id_num на основе их предыдущего Events.

Пожалуйста, помогите мне решить эту проблему или относительно метода, который будет использоваться для решения с использованием программирования R.

пример данных

Моя цель


Ответы:


1

Самый простой прогноз — предположить, что последовательность букв будет повторяться для каждого id_num. Я надеюсь, что это соответствует тому, что ОП понимает под предсказанием.

Код

library(data.table)
DT[, .(Events = append(Events, head(rep(Events, 3L), 3L))), by = id_num]

создает

    id_num Events
 1:      1      A
 2:      1      B
 3:      1      C
 4:      1      D
 5:      1      E
 6:      1      A
 7:      1      B
 8:      1      C
 9:      2      B
10:      2      E
11:      2      B
12:      2      E
13:      2      B
14:      3      E
15:      3      A
16:      3      E
17:      3      A
18:      3      E
19:      3      A
20:      3      E
21:      4      C
22:      4      C
23:      4      C
24:      4      C
25:      5      F
26:      5      G
27:      5      F
28:      5      G
29:      5      F
    id_num Events

data.table используется здесь из-за простой в использовании функции группировки и потому, что я знаком с ней.

Объяснение

Для каждого id_num существующая последовательность букв реплицируется 3 раза с использованием rep(), чтобы обеспечить достаточное количество значений для заполнения как минимум 3 следующих значений. Но только первые 3 значения берутся с использованием head(). Эти 3 значения добавляются к существующей последовательности для каждого id_num

Немного тюнинга

Возможны две оптимизации:

  1. Если последовательность значений намного длиннее, чем количество значений для прогнозирования n_pred, простое повторение длинной последовательности n_pred раз будет пустой тратой времени.
  2. Вызова append() можно избежать, если существующая последовательность будет повторяться еще раз.

Итак, оптимизированный код выглядит так:

n_pred <- 3L
DT[, .(Events = head(rep(Events, 1L + ceiling(n_pred / .N)), .N + n_pred)), by = id_num]

Обратите внимание, что .N — это специальный символ в синтаксисе data.table, содержащий числовые строки в группе. head() теперь возвращает исходную последовательность плюс предсказанные значения.

Данные

DT <- data.table(
  id_num = c(rep(1L, 5L), 2L, 2L, rep(3L, 4L), 4L, 5L, 5L),
  Events = c(LETTERS[1:5], "B", "E", rep(c("E", "A"), 2L), "C", "F", "G")
)
DT
    id_num Events
 1:      1      A
 2:      1      B
 3:      1      C
 4:      1      D
 5:      1      E
 6:      2      B
 7:      2      E
 8:      3      E
 9:      3      A
10:      3      E
11:      3      A
12:      4      C
13:      5      F
14:      5      G
22.07.2017
  • Да, я понял. Но данные, с которыми я работаю, содержат много событий (около 3000 событий) и около 6000 id_num. Есть ли какой-нибудь общий способ сделать это? 22.07.2017
  • Это должно работать для произвольного количества событий и id_nums. Единственная жестко запрограммированная переменная — это количество прогнозируемых значений, которое можно легко изменить. 22.07.2017
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

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

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]