Наивный байесовский классификатор для прогнозирования рабочей нагрузки

#machine-learning #classification

#машинное обучение #классификация

Вопрос:

Я хочу использовать наивный байесовский классификатор для прогнозирования рабочей нагрузки устройства (например, сетевой карты). У меня есть ряд наблюдений, которые представляют время между поступлениями запросов. Ряд данных представлен в виде 0,1,1,1,0,0,1, … где 1 представляет время между поступлениями, которое больше времени безубыточности, а 0 представляет время между поступлениями, которое короче времени безубыточности. Я хочу предсказать, что следующее время между прибытием будет коротким или длинным (короче времени безубыточности или дольше). Поэтому у меня есть два класса, то есть short и long. Я изучил теорию наивного байесовского классификатора, но у меня есть путаница в его реализации в MATLAB или C . Я не знаю, с какого количества функций / данных мне следует начинать процесс обучения и как мне рассчитать максимальную вероятность для прогнозируемого класса. Любая помощь в этом отношении будет высоко оценена.

Комментарии:

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

2. Допустим, у меня есть тысяча раз между прибытиями (как упоминалось выше). Поскольку у меня есть только одна функция (время между прибытиями) и два класса, то есть короткий и длинный, я делаю это следующим образом: сначала я нахожу априорные вероятности двух классов из обучающей выборки. Затем я нахожу условные вероятности входных объектов для каждого назначения класса. Теперь, если я применю байесовское правило для вычисления апостериорного максимума для двух классов, даст ли оно мне вероятности двух классов (коротких и длинных) для следующего периода между прибытиями?

Ответ №1:

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

            Xn=0   Xn=1
X(n-1)=0     3     2
X(n-1)=1     1     5
 

Записано в вероятности:

            Xn=0   Xn=1
X(n-1)=0    0.6    0.4
X(n-1)=1    0.17   0.83
 

И вы можете использовать его как функцию: вы просматриваете все обучающие серии и отмечаете частоту переходов из 0->0, 0->1, 1->0 и 1->1. Для классификации вы смотрите на последнее состояние строки вашего запроса и смотрите вероятность того, что следующее состояние будет равно 0 или, соответственно, 1, в матрице перехода. И на основе этого вы выбираете более вероятное состояние.

Даже если этот подход кажется простым, он обычно работает очень хорошо.

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

                      Xn=0   Xn=1
X(n-2)=0, X(n-1)=0     1     2
X(n-2)=0, X(n-1)=1     0     2
X(n-2)=1, X(n-1)=0     1     0
X(n-2)=1, X(n-1)=1     1     3
 

И вы даже можете расширить его до последних трех цифр и так далее.

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

 p(next is 0)=p1(next is 0)*p2(next is 0)*p3(next is 0)*...*pn(next is 0)
 

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

 p(next is 1)=p1(next is 1)*p2(next is 1)*p3(next is 1)*...*pn(next is 1)
 

и выберите более вероятное состояние. Конечно, вам не нужно вычислять p(next равно 1) как

 p(next is 0) p(next is 1)=1
 

Просто для иллюстрации того, насколько эффективен этот подход, сыграйте в «Камень-ножницы-бумага» против компьютера в New York Times и нажмите «Посмотреть, что думает компьютер», чтобы увидеть Марковскую модель в действии.