#statistics #machine-learning #classification #bayesian
#Статистика #машинное обучение #классификация #байесовский
Вопрос:
Я пытаюсь предсказать время промежуточного поступления входящих сетевых пакетов. Я измеряю время промежуточного поступления сетевых пакетов и представляю эти данные в виде двоичных функций: xi = 0,1,1,1,0, … где xi = 0, если время промежуточного поступления меньше, чем время безубыточности, и 1 в противном случае. Данные должны быть сопоставлены с двумя возможными классами C = {0,1}, где C = 0 представляет собой короткое время между поступлениями, а 1 представляет собой длительное время между поступлениями. Поскольку я хочу реализовать классификатор в онлайн-объекте, где, как только я наблюдаю вектор объектов, xi = 0,1,1,0 …, я вычисляю класс карты. Поскольку у меня нет предварительной оценки условных и предшествующих вероятностей, я инициализирую их следующим образом:
p(x=0|c=0)=p(x=1|c=0)=p(x=0|c=1)=p(x=1|c=1)=0.5
p(c=0)=p(c=1)=0.5
Для каждого вектора признаков (x1 = m1, x2 = m2, …, xn = mn) при выводе класса C я обновляю условные и предшествующие вероятности следующим образом:
p(xi=mi|y=c)=a (1-a)*p(p(xi=mi|c)
p(y=c)=b (1-b)*p(y=c)
Проблема в том, что я всегда получаю предвзятый прогноз. Поскольку количество длительных периодов между прибытиями сравнительно меньше, чем у коротких, последующий показатель у коротких всегда остается выше, чем у длинных. Есть ли какой-либо способ улучшить это? или я делаю что-то не так? Мы будем признательны за любую помощь.
Ответ №1:
Поскольку у вас длинный временной ряд, лучшим способом, вероятно, было бы принять во внимание больше, чем одно предыдущее значение. стандартным способом сделать это было бы использовать временное окно, т. Е. разбить длинный вектор Xi на перекрывающиеся фрагменты постоянной длины, причем последнее значение обрабатывается как класс, и использовать их в качестве набора последовательности. Это также можно было бы сделать с потоковыми данными онлайн, постепенно обновляя модель NB новыми данными по мере их поступления.
Обратите внимание, что при использовании этого метода другие алгоритмы регрессии могут оказаться лучшим выбором, чем NB.
Weka (версии 3.7.3 и выше) имеет очень хороший специализированный инструмент, поддерживающий анализ временных рядов. кроме того, MOA также основан на Weka и поддерживает моделирование потоковых данных.
РЕДАКТИРОВАТЬ: также может быть хорошей идеей перейти от двоичных объектов к реальным значениям (возможно, нормализованным) и применить пороговую постклассификацию. Это может дать больше информации для регрессионной модели (NB или другой), обеспечивая лучшую точность.
Комментарии:
1. Не могли бы вы, пожалуйста, дать мне несколько советов о реальных значениях, а не об использовании двоичных функций. Как мне использовать реальные значения для классификации? Согласно вашему предложению о разделении данных, если я беру n объектов в момент времени k , я должен использовать k-n объектов для прогнозирования. Тогда, когда поступают новые данные, я должен от k-n 1 до k 1 функций. Верно?
2. что касается использования реальных значений, я предлагаю использовать фактические измерения в качестве точек данных. это возможно, если вы используете инструменты регрессии, а не дискретную классификацию. Например, допустим, ваши измерения составляют 4,9,5,7,11,5 мс. вместо определения, например, 6 мс в качестве границы и преобразования ряда в 0,1,0,1,1,0 — используйте исходные реальные значения для обучения и прогнозирования. что касается разделения, ссылаясь на тот же пример, его можно разделить, например, на: 4,9,5 -> 7; 9,5,7 -> 11; 5,7,11 -> 5 ( формат — x1,x2 ..xk -> ожидаемое предсказание)
3. Спасибо за ваш совет. Если я использую реальные значения, нужно ли мне поддерживать среднее значение и стандартное отклонение (во время онлайн-обучения)?
4. Интуитивно я бы сказал, что если вы используете онлайн-обучение, вы ожидаете, что система со временем изменится. в таком случае я бы не предлагал ограничивать данные вокруг фиксированных точек.