Наивный байесовский классификатор для прогнозирования нагрузки - PullRequest
1 голос
/ 01 ноября 2011

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

1 Ответ

2 голосов
/ 29 августа 2012

Вы можете начать с Марковская модель . В модели Маркова вы предполагаете, что вероятность каждого состояния определяется только предыдущим состоянием. Например, в серии, подобной 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 (далее 1) как

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

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

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