Какой алгоритм ML следует использовать для прогнозирования списка событий? - PullRequest
0 голосов
/ 19 февраля 2020

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

Я пытаюсь предсказать список событий на основе категориальных признаков с числовыми метками. Например:

x1 x2 x3 x4 x5 y1 
1   1  3  4  5  Injury
2   2  2  1  3  Flood
3   1  2  3  2  Injury
3   2  1  1  1  Fire
1   1  1  1  1  Protest

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

Результат ожидания будет следующим:

1. Injury
2. Fire
3. Flood

1 Ответ

1 голос
/ 19 февраля 2020

Я предполагаю, что у вас есть вход фиксированного размера, пять категориальных переменных.

Первое предложение - попытаться использовать векторы внедрения вместо простых целых чисел для кодирования категориальных значений. Самый простой способ - использовать встраивание слоев и позволить сети создавать вложения для you .

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

  • Травма

  • Потоп

  • Пожар

  • Протест

Чем ваш выход будет иметь 4 единицы. Если вам нужен список, вы можете попробовать подход с пороговым значением, поэтому, если активация объекта, прошедшая через пороговое значение, рассматривается как часть возможного списка диагностики.

О техническом аспекте вы не упоминаете о своем прошлом. Поэтому я рекомендую использовать некоторую стандартную библиотеку ML тензор потока, pytorch ... Относительно прост в настройке и проведении экспериментов.

Редактировать

Сеть может выглядеть так:

model = Sequential()
model.add(Dense(units, activation="relu", input_shape=appropriate_shape))
model.add(Dense(output_units, activation="softmax"))
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=['acc']))

Если вы построите сеть таким образом (см. Softmax на выходном уровне и категориальный_кросцентропия как потери), сеть будет производить вероятности как выходные данные. После обучения, если вы используете модель как:

results = model.predict(input_data)

Результатами будет список списков вероятностей (один список для каждой входной выборки). Если вы подсчитаете сумму одного такого списка, вы получите 1.

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