#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 и нажмите «Посмотреть, что думает компьютер», чтобы увидеть Марковскую модель в действии.